From b60d9eb8c1762c93f151d2bd2f7c792af6216c44 Mon Sep 17 00:00:00 2001 From: Nathalie Le Clair Date: Wed, 7 Apr 2021 14:10:04 +0200 Subject: [PATCH] Send if put to standby by connected device should only be suppressed if followed by a message. Since no is sent by the device if it was put to sleep by a connected device via CEC, should be sent. Test: atest Bug: 183603416 Change-Id: Ibb4393c82b5ba7da13983877e1f91172a19f9add Merged-In: Ibb4393c82b5ba7da13983877e1f91172a19f9add --- .../hdmi/HdmiCecLocalDevicePlayback.java | 7 +++++- .../hdmi/HdmiCecLocalDevicePlaybackTest.java | 25 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) 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(