Merge "Keep Screen saver when unplugging the usb from device" into udc-dev

This commit is contained in:
Prince Donkor
2023-04-12 19:52:44 +00:00
committed by Android (Google) Code Review
7 changed files with 61 additions and 34 deletions

View File

@@ -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);
}
}

View File

@@ -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 -->

View File

@@ -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" />

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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();