diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index 299525207a601..b3647f7d3d8c7 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java @@ -136,12 +136,8 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { if (!mService.isControlEnabled()) { return; } - if (isActiveSource()) { - mService.sendCecCommand(HdmiCecMessageBuilder.buildInactiveSource( - mAddress, mService.getPhysicalAddress())); - } boolean wasActiveSource = isActiveSource(); - // Invalidate the internal active source record when goes to standby + // Invalidate the internal active source record when going to standby mService.setActiveSource(Constants.ADDR_INVALID, Constants.INVALID_PHYSICAL_ADDRESS, "HdmiCecLocalDevicePlayback#onStandby()"); boolean mTvSendStandbyOnSleep = mService.getHdmiCecConfig().getIntValue( @@ -167,6 +163,9 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { Constants.ADDR_BROADCAST)); break; case HdmiControlManager.POWER_CONTROL_MODE_NONE: + mService.sendCecCommand( + HdmiCecMessageBuilder.buildInactiveSource(mAddress, + mService.getPhysicalAddress())); break; } break; 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 1a6bad8b29cf5..6c56811568ca4 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -675,9 +675,12 @@ public class HdmiCecLocalDevicePlaybackTest { 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()).doesNotContain(inactiveSource); } @Test @@ -697,9 +700,12 @@ public class HdmiCecLocalDevicePlaybackTest { 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()).doesNotContain(inactiveSource); } @Test @@ -719,9 +725,12 @@ public class HdmiCecLocalDevicePlaybackTest { 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()).doesNotContain(inactiveSource); } @Test @@ -741,9 +750,12 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mAddress, ADDR_TV); HdmiCecMessage standbyMessageBroadcast = HdmiCecMessageBuilder.buildStandby( mHdmiCecLocalDevicePlayback.mAddress, ADDR_BROADCAST); + HdmiCecMessage inactiveSource = HdmiCecMessageBuilder.buildInactiveSource( + mPlaybackLogicalAddress, mPlaybackPhysicalAddress); assertThat(mNativeWrapper.getResultMessages()).contains(standbyMessageToTv); assertThat(mNativeWrapper.getResultMessages()).doesNotContain(standbyMessageBroadcast); + assertThat(mNativeWrapper.getResultMessages()).doesNotContain(inactiveSource); } @Test @@ -763,9 +775,12 @@ public class HdmiCecLocalDevicePlaybackTest { 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()).contains(standbyMessageBroadcast); + assertThat(mNativeWrapper.getResultMessages()).doesNotContain(inactiveSource); } @Test @@ -785,9 +800,12 @@ public class HdmiCecLocalDevicePlaybackTest { 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