diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index 10f6948f8782a..97b64a5595674 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 08d8f12decd71..a5a9d82496fb8 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -699,9 +699,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 @@ -721,9 +724,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 @@ -743,9 +749,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 @@ -765,9 +774,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 @@ -787,9 +799,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 @@ -809,9 +824,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