Keep Screen saver when unplugging the usb from device
Test: atest PowerManagerServiceTest Fixes: b/256059658 Change-Id: Ia69b777be7a262a54b31b53e47e19a07cf1addf7
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,13 +831,41 @@ 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);
|
||||
|
||||
assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
|
||||
}
|
||||
|
||||
@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();
|
||||
|
||||
Reference in New Issue
Block a user