diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index 97b64a5595674..dcd0eb862913a 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java @@ -143,7 +143,12 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { boolean mTvSendStandbyOnSleep = mService.getHdmiCecConfig().getIntValue( HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP) == HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED; - if (initiatedByCec || !mTvSendStandbyOnSleep || !wasActiveSource) { + if (!wasActiveSource) { + return; + } + if (initiatedByCec || !mTvSendStandbyOnSleep) { + mService.sendCecCommand(HdmiCecMessageBuilder.buildInactiveSource(mAddress, + mService.getPhysicalAddress())); return; } switch (standbyAction) { diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java index e28cd693720fc..9a1985e4175b0 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -831,6 +831,31 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSource); } + @Test + public void handleOnStandby_CecMessageReceived() { + mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue( + HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE, + HdmiControlManager.POWER_CONTROL_MODE_TV); + mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, + mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); + mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setIntValue( + HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP, + HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED); + mHdmiCecLocalDevicePlayback.onStandby(true, HdmiControlService.STANDBY_SCREEN_OFF); + mTestLooper.dispatchAll(); + + HdmiCecMessage standbyMessageToTv = HdmiCecMessageBuilder.buildStandby( + mHdmiCecLocalDevicePlayback.mAddress, ADDR_TV); + HdmiCecMessage standbyMessageBroadcast = HdmiCecMessageBuilder.buildStandby( + mHdmiCecLocalDevicePlayback.mAddress, ADDR_BROADCAST); + HdmiCecMessage inactiveSource = HdmiCecMessageBuilder.buildInactiveSource( + mPlaybackLogicalAddress, mPlaybackPhysicalAddress); + + assertThat(mNativeWrapper.getResultMessages()).doesNotContain(standbyMessageToTv); + assertThat(mNativeWrapper.getResultMessages()).doesNotContain(standbyMessageBroadcast); + assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSource); + } + @Test public void handleOnInitializeCecComplete_ByEnableCec() { mHdmiCecLocalDevicePlayback.onInitializeCecComplete(