diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index dcd0eb862913a..37ee76b7c6156 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java @@ -262,18 +262,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 5fbf8deafe1d6..524ad62823974 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, @@ -1334,6 +1339,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(