From bb0c357daf134f466eff8649d138c51a3fb68881 Mon Sep 17 00:00:00 2001 From: Yan Han Date: Tue, 16 Feb 2021 18:30:11 +0100 Subject: [PATCH] Pause media session on TV power toggle Test: Manual; atest HdmiCecLocalDevicePlaybackTest Bug: 175095458 Change-Id: I157c1ddf145dc0e94a1076ea83248b8d61f14a73 --- .../server/hdmi/HdmiCecLocalDeviceSource.java | 8 ++++-- .../hdmi/HdmiCecLocalDevicePlaybackTest.java | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java index 04acd5187f777..2ed84811250e9 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java @@ -139,8 +139,12 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice { @ServiceThreadOnly void toggleAndFollowTvPower() { assertRunOnServiceThread(); - // Wake up Android framework to take over CEC control from the microprocessor. - mService.wakeUp(); + if (mService.getPowerManager().isInteractive()) { + mService.pauseActiveMediaSessions(); + } else { + // Wake up Android framework to take over CEC control from the microprocessor. + mService.wakeUp(); + } mService.queryDisplayStatus(new IHdmiControlCallback.Stub() { @Override public void onComplete(int status) { 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 9f0d9829df014..6d958534c5d70 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -23,6 +23,8 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.when; + import android.content.Context; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; @@ -33,6 +35,7 @@ import android.os.IPowerManager; import android.os.IThermalService; import android.os.Looper; import android.os.PowerManager; +import android.os.RemoteException; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; import android.sysprop.HdmiProperties; @@ -1549,6 +1552,31 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mStandby).isFalse(); } + @Test + public void toggleAndFollowTvPower_isInteractive() throws RemoteException { + when(mIPowerManagerMock.isInteractive()).thenReturn(true); + mActiveMediaSessionsPaused = false; + mWokenUp = false; + + mHdmiControlService.toggleAndFollowTvPower(); + + assertThat(mActiveMediaSessionsPaused).isTrue(); + assertThat(mWokenUp).isFalse(); + } + + @Test + public void toggleAndFollowTvPower_isNotInteractive() throws RemoteException { + when(mIPowerManagerMock.isInteractive()).thenReturn(false); + mActiveMediaSessionsPaused = false; + mWokenUp = false; + + mHdmiControlService.toggleAndFollowTvPower(); + + assertThat(mActiveMediaSessionsPaused).isFalse(); + assertThat(mWokenUp).isTrue(); + } + + @Test public void shouldHandleTvPowerKey_CecDisabled() { mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setIntValue(