diff options
7 files changed, 61 insertions, 34 deletions
diff --git a/core/java/android/service/dreams/DreamManagerInternal.java b/core/java/android/service/dreams/DreamManagerInternal.java index dd5373ff8c38..82571db469be 100644 --- a/core/java/android/service/dreams/DreamManagerInternal.java +++ b/core/java/android/service/dreams/DreamManagerInternal.java @@ -80,10 +80,10 @@ public abstract class DreamManagerInternal { */ public interface DreamManagerStateListener { /** - * Called when keep dreaming when undocked has changed. + * Called when keep dreaming when plug has changed. * * @param keepDreaming True if the current dream should continue when undocking. */ - void onKeepDreamingWhenUndockedChanged(boolean keepDreaming); + void onKeepDreamingWhenUnpluggingChanged(boolean keepDreaming); } } diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 9f10ae6066f5..a951c0b48da3 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -534,8 +534,10 @@ <!-- If this is true, long press on power button will be available from the non-interactive state --> <bool name="config_supportLongPressPowerWhenNonInteractive">false</bool> - <!-- If this is true, then keep dreaming when undocking. --> - <bool name="config_keepDreamingWhenUndocking">false</bool> + <!-- If this is true, then keep dreaming when unplugging. + This config was formerly known as config_keepDreamingWhenUndocking. + It has been updated to affect other plug types. --> + <bool name="config_keepDreamingWhenUnplugging">false</bool> <!-- The timeout (in ms) to wait before attempting to reconnect to the dream overlay service if it becomes disconnected --> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index a823d1fd8ff4..cea603265930 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1944,7 +1944,7 @@ <java-symbol type="bool" name="config_allowTheaterModeWakeFromLidSwitch" /> <java-symbol type="bool" name="config_allowTheaterModeWakeFromDock" /> <java-symbol type="bool" name="config_allowTheaterModeWakeFromWindowLayout" /> - <java-symbol type="bool" name="config_keepDreamingWhenUndocking" /> + <java-symbol type="bool" name="config_keepDreamingWhenUnplugging" /> <java-symbol type="integer" name="config_keyguardDrawnTimeout" /> <java-symbol type="bool" name="config_goToSleepOnButtonPressTheaterMode" /> <java-symbol type="bool" name="config_supportLongPressPowerWhenNonInteractive" /> diff --git a/services/core/java/com/android/server/DockObserver.java b/services/core/java/com/android/server/DockObserver.java index 3487613d313c..5156c541011f 100644 --- a/services/core/java/com/android/server/DockObserver.java +++ b/services/core/java/com/android/server/DockObserver.java @@ -70,7 +70,7 @@ final class DockObserver extends SystemService { private boolean mUpdatesStopped; - private final boolean mKeepDreamingWhenUndocking; + private final boolean mKeepDreamingWhenUnplugging; private final boolean mAllowTheaterModeWakeFromDock; private final List<ExtconStateConfig> mExtconStateConfigs; @@ -167,8 +167,8 @@ final class DockObserver extends SystemService { mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); mAllowTheaterModeWakeFromDock = context.getResources().getBoolean( com.android.internal.R.bool.config_allowTheaterModeWakeFromDock); - mKeepDreamingWhenUndocking = context.getResources().getBoolean( - com.android.internal.R.bool.config_keepDreamingWhenUndocking); + mKeepDreamingWhenUnplugging = context.getResources().getBoolean( + com.android.internal.R.bool.config_keepDreamingWhenUnplugging); mDeviceProvisionedObserver = new DeviceProvisionedObserver(mHandler); mExtconStateConfigs = loadExtconStateConfigs(context); @@ -237,7 +237,7 @@ final class DockObserver extends SystemService { } private boolean allowWakeFromDock() { - if (mKeepDreamingWhenUndocking) { + if (mKeepDreamingWhenUnplugging) { return false; } return (mAllowTheaterModeWakeFromDock diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java index 7802b9d24de9..0e26d4661017 100644 --- a/services/core/java/com/android/server/dreams/DreamManagerService.java +++ b/services/core/java/com/android/server/dreams/DreamManagerService.java @@ -124,7 +124,7 @@ public final class DreamManagerService extends SystemService { private final boolean mDreamsEnabledByDefaultConfig; private final boolean mDreamsActivatedOnChargeByDefault; private final boolean mDreamsActivatedOnDockByDefault; - private final boolean mKeepDreamingWhenUndockedDefault; + private final boolean mKeepDreamingWhenUnpluggingDefault; private final CopyOnWriteArrayList<DreamManagerInternal.DreamManagerStateListener> mDreamManagerStateListeners = new CopyOnWriteArrayList<>(); @@ -236,8 +236,8 @@ public final class DreamManagerService extends SystemService { mDreamsActivatedOnDockByDefault = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault); mSettingsObserver = new SettingsObserver(mHandler); - mKeepDreamingWhenUndockedDefault = mContext.getResources().getBoolean( - com.android.internal.R.bool.config_keepDreamingWhenUndocking); + mKeepDreamingWhenUnpluggingDefault = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_keepDreamingWhenUnplugging); } @Override @@ -311,7 +311,7 @@ public final class DreamManagerService extends SystemService { pw.println("mIsDocked=" + mIsDocked); pw.println("mIsCharging=" + mIsCharging); pw.println("mWhenToDream=" + mWhenToDream); - pw.println("mKeepDreamingWhenUndockedDefault=" + mKeepDreamingWhenUndockedDefault); + pw.println("mKeepDreamingWhenUnpluggingDefault=" + mKeepDreamingWhenUnpluggingDefault); pw.println("getDozeComponent()=" + getDozeComponent()); pw.println(); @@ -340,11 +340,11 @@ public final class DreamManagerService extends SystemService { } } - private void reportKeepDreamingWhenUndockedChanged(boolean keepDreaming) { + private void reportKeepDreamingWhenUnpluggingChanged(boolean keepDreaming) { mHandler.post(() -> { for (DreamManagerInternal.DreamManagerStateListener listener : mDreamManagerStateListeners) { - listener.onKeepDreamingWhenUndockedChanged(keepDreaming); + listener.onKeepDreamingWhenUnpluggingChanged(keepDreaming); } }); } @@ -600,8 +600,7 @@ public final class DreamManagerService extends SystemService { } mSystemDreamComponent = componentName; - reportKeepDreamingWhenUndockedChanged(shouldKeepDreamingWhenUndocked()); - + reportKeepDreamingWhenUnpluggingChanged(shouldKeepDreamingWhenUnplugging()); // Switch dream if currently dreaming and not dozing. if (isDreamingInternal() && !isDozingInternal()) { startDreamInternal(false /*doze*/, (mSystemDreamComponent == null ? "clear" : "set") @@ -610,8 +609,8 @@ public final class DreamManagerService extends SystemService { } } - private boolean shouldKeepDreamingWhenUndocked() { - return mKeepDreamingWhenUndockedDefault && mSystemDreamComponent == null; + private boolean shouldKeepDreamingWhenUnplugging() { + return mKeepDreamingWhenUnpluggingDefault && mSystemDreamComponent == null; } private ComponentName getDefaultDreamComponentForUser(int userId) { @@ -1057,7 +1056,7 @@ public final class DreamManagerService extends SystemService { public void registerDreamManagerStateListener(DreamManagerStateListener listener) { mDreamManagerStateListeners.add(listener); // Initialize the listener's state. - listener.onKeepDreamingWhenUndockedChanged(shouldKeepDreamingWhenUndocked()); + listener.onKeepDreamingWhenUnpluggingChanged(shouldKeepDreamingWhenUnplugging()); } @Override diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 2e8a150f2b6d..e392c24026a7 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -667,15 +667,15 @@ public final class PowerManagerService extends SystemService // but the DreamService has not yet been told to start (it's an async process). private boolean mDozeStartInProgress; - // Whether to keep dreaming when the device is undocked. - private boolean mKeepDreamingWhenUndocked; + // Whether to keep dreaming when the device is unplugging. + private boolean mKeepDreamingWhenUnplugging; private final class DreamManagerStateListener implements DreamManagerInternal.DreamManagerStateListener { @Override - public void onKeepDreamingWhenUndockedChanged(boolean keepDreaming) { + public void onKeepDreamingWhenUnpluggingChanged(boolean keepDreaming) { synchronized (mLock) { - mKeepDreamingWhenUndocked = keepDreaming; + mKeepDreamingWhenUnplugging = keepDreaming; } } } @@ -2504,14 +2504,12 @@ public final class PowerManagerService extends SystemService return false; } - // Don't wake when undocking while dreaming if configured not to. - if (mKeepDreamingWhenUndocked + // Don't wake when unplugging while dreaming if configured not to. + if (mKeepDreamingWhenUnplugging && getGlobalWakefulnessLocked() == WAKEFULNESS_DREAMING - && wasPowered && !mIsPowered - && oldPlugType == BatteryManager.BATTERY_PLUGGED_DOCK) { + && wasPowered && !mIsPowered) { return false; } - // Don't wake when undocked from wireless charger. // See WirelessChargerDetector for justification. if (wasPowered && !mIsPowered @@ -4477,7 +4475,7 @@ public final class PowerManagerService extends SystemService + mWakeUpWhenPluggedOrUnpluggedInTheaterModeConfig); pw.println(" mTheaterModeEnabled=" + mTheaterModeEnabled); - pw.println(" mKeepDreamingWhenUndocked=" + mKeepDreamingWhenUndocked); + pw.println(" mKeepDreamingWhenUnplugging=" + mKeepDreamingWhenUnplugging); pw.println(" mSuspendWhenScreenOffDueToProximityConfig=" + mSuspendWhenScreenOffDueToProximityConfig); pw.println(" mDreamsSupportedConfig=" + mDreamsSupportedConfig); diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java index a0fb3deeb131..21a11bc0e49e 100644 --- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java @@ -763,7 +763,7 @@ public class PowerManagerServiceTest { ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class); verify(mDreamManagerInternalMock).registerDreamManagerStateListener( dreamManagerStateListener.capture()); - dreamManagerStateListener.getValue().onKeepDreamingWhenUndockedChanged(false); + dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false); when(mBatteryManagerInternalMock.getPlugType()) .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK); @@ -793,7 +793,7 @@ public class PowerManagerServiceTest { ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class); verify(mDreamManagerInternalMock).registerDreamManagerStateListener( dreamManagerStateListener.capture()); - dreamManagerStateListener.getValue().onKeepDreamingWhenUndockedChanged(true); + dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(true); when(mBatteryManagerInternalMock.getPlugType()) .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK); @@ -823,7 +823,7 @@ public class PowerManagerServiceTest { ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class); verify(mDreamManagerInternalMock).registerDreamManagerStateListener( dreamManagerStateListener.capture()); - dreamManagerStateListener.getValue().onKeepDreamingWhenUndockedChanged(true); + dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(true); when(mBatteryManagerInternalMock.getPlugType()) .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK); @@ -831,7 +831,7 @@ public class PowerManagerServiceTest { forceAwake(); // Needs to be awake first before it can dream. forceDream(); - dreamManagerStateListener.getValue().onKeepDreamingWhenUndockedChanged(false); + dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false); when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0); setPluggedIn(false); @@ -839,6 +839,34 @@ public class PowerManagerServiceTest { } @Test + public void testWakefulnessDream_shouldStopDreamingWhenUnplugging_whenDreamPrevents() { + // Make sure "unplug turns on screen" is configured to true. + when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen)) + .thenReturn(true); + + createService(); + startSystem(); + + ArgumentCaptor<DreamManagerInternal.DreamManagerStateListener> dreamManagerStateListener = + ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class); + verify(mDreamManagerInternalMock).registerDreamManagerStateListener( + dreamManagerStateListener.capture()); + + when(mBatteryManagerInternalMock.getPlugType()) + .thenReturn(BatteryManager.BATTERY_PLUGGED_AC); + setPluggedIn(true); + + forceAwake(); // Needs to be awake first before it can dream. + forceDream(); + dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false); + when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0); + setPluggedIn(false); + + assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); + } + + + @Test public void testWakefulnessDoze_goToSleep() { createService(); // Start with AWAKE state |