From f3b6aab045c0e877eb64524a34f0a04047726776 Mon Sep 17 00:00:00 2001 From: Nathalie Le Clair Date: Tue, 4 May 2021 13:46:52 +0200 Subject: [PATCH] Exit dream mode on CEC wake message received Bug: 183945838 Test: atest Change-Id: I9eb97557296b2c6cb0529c8a1e28519fea942aa6 --- .../hdmi/HdmiCecLocalDevicePlayback.java | 12 ----------- .../server/hdmi/HdmiCecLocalDeviceSource.java | 2 +- .../server/hdmi/HdmiControlService.java | 1 + .../hdmi/HdmiCecLocalDevicePlaybackTest.java | 21 +++++++++++++++++++ 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index 10f6948f8782a..919d25cc5cf3e 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java @@ -258,18 +258,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { return super.handleUserControlPressed(message); } - @Override - protected void wakeUpIfActiveSource() { - if (!isActiveSource()) { - return; - } - // Wake up the device if the power is in standby mode, or its screen is off - - // which can happen if the device is holding a partial lock. - if (mService.isPowerStandbyOrTransient() || !mService.getPowerManager().isScreenOn()) { - mService.wakeUp(); - } - } - @ServiceThreadOnly @Constants.HandleMessageResult protected int handleSetMenuLanguage(HdmiCecMessage message) { diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java index 702f854048684..1c726e0a8fbdb 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java @@ -380,7 +380,7 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice { if (!isActiveSource()) { return; } - // Wake up the device + // Wake up the device. This will also exit dream mode. mService.wakeUp(); return; } diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 77de187e57cae..ae069ddf235ec 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -3030,6 +3030,7 @@ public class HdmiControlService extends SystemService { @ServiceThreadOnly @VisibleForTesting protected void onStandby(final int standbyAction) { + mWakeUpMessageReceived = false; assertRunOnServiceThread(); mPowerStatusController.setPowerStatus(HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY, false); 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..39a7f6da63f38 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -136,6 +136,11 @@ public class HdmiCecLocalDevicePlaybackTest { return false; } + @Override + boolean isPowerStandbyOrTransient() { + return false; + } + @Override protected PowerManager getPowerManager() { return new PowerManager(context, mIPowerManagerMock, @@ -1291,6 +1296,22 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue(); } + @Test + public void handleSetStreamPath_Dreaming() throws RemoteException { + when(mIPowerManagerMock.isInteractive()).thenReturn(true); + + mWokenUp = false; + + HdmiCecMessage message = + HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, + mPlaybackPhysicalAddress); + + assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)) + .isEqualTo(Constants.HANDLED); + mTestLooper.dispatchAll(); + assertThat(mWokenUp).isTrue(); + } + @Test public void handleSetStreamPath_otherDevice_None() { mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue(