diff options
| -rw-r--r-- | services/core/java/com/android/server/hdmi/RequestActiveSourceAction.java | 13 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java | 4 |
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); } } |