summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/hdmi/RequestActiveSourceAction.java13
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java4
2 files changed, 16 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/hdmi/RequestActiveSourceAction.java b/services/core/java/com/android/server/hdmi/RequestActiveSourceAction.java
index 017c86d4b363..d2504164a6df 100644
--- a/services/core/java/com/android/server/hdmi/RequestActiveSourceAction.java
+++ b/services/core/java/com/android/server/hdmi/RequestActiveSourceAction.java
@@ -29,6 +29,12 @@ public class RequestActiveSourceAction extends HdmiCecFeatureAction {
// State to wait for the <Active Source> message.
private static final int STATE_WAIT_FOR_ACTIVE_SOURCE = 1;
+ // Number of retries <Request Active Source> is sent if no device answers this message.
+ private static final int MAX_SEND_RETRY_COUNT = 1;
+
+ private int mSendRetryCount = 0;
+
+
RequestActiveSourceAction(HdmiCecLocalDevice source, IHdmiControlCallback callback) {
super(source, callback);
}
@@ -60,7 +66,12 @@ public class RequestActiveSourceAction extends HdmiCecFeatureAction {
return;
}
if (mState == STATE_WAIT_FOR_ACTIVE_SOURCE) {
- finishWithCallback(HdmiControlManager.RESULT_TIMEOUT);
+ if (mSendRetryCount++ < MAX_SEND_RETRY_COUNT) {
+ sendCommand(HdmiCecMessageBuilder.buildRequestActiveSource(getSourceAddress()));
+ addTimer(mState, HdmiConfig.TIMEOUT_MS);
+ } else {
+ finishWithCallback(HdmiControlManager.RESULT_TIMEOUT);
+ }
}
}
}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
index 9e5bea7d135b..818d69112ed7 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
@@ -1720,7 +1720,11 @@ public class HdmiCecLocalDeviceTvTest {
mNativeWrapper.clearResultMessages();
mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS);
mTestLooper.dispatchAll();
+ assertThat(mNativeWrapper.getResultMessages()).doesNotContain(activeSourceFromTv);
+ // Skip the retry.
+ mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS);
+ mTestLooper.dispatchAll();
assertThat(mNativeWrapper.getResultMessages()).contains(activeSourceFromTv);
}
}