Merge "Avoid changing display power state on draw wake lock" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-03-12 17:58:55 +00:00
committed by Android (Google) Code Review
3 changed files with 35 additions and 1 deletions

View File

@@ -141,6 +141,14 @@ public abstract class PowerManagerInternal {
public abstract void setDozeOverrideFromDreamManager(
int screenState, int screenBrightness);
/**
* Used by sidekick manager to tell the power manager if it shouldn't change the display state
* when a draw wake lock is acquired. Some processes may grab such a wake lock to do some work
* in a powered-up state, but we shouldn't give up sidekick control over the display until this
* override is lifted.
*/
public abstract void setDrawWakeLockOverrideFromSidekick(boolean keepState);
public abstract PowerSaveState getLowPowerState(int serviceType);
public abstract void registerLowPowerModeObserver(LowPowerModeListener listener);

View File

@@ -315,4 +315,6 @@ message PowerServiceSettingsAndConfigurationDumpProto {
optional bool is_double_tap_wake_enabled = 37;
// True if we are currently in VR Mode.
optional bool is_vr_mode_enabled = 38;
// True if Sidekick is controlling the display and we shouldn't change its power mode.
optional bool draw_wake_lock_override_from_sidekick = 39;
}

View File

@@ -487,6 +487,9 @@ public final class PowerManagerService extends SystemService
// The screen brightness to use while dozing.
private int mDozeScreenBrightnessOverrideFromDreamManager = PowerManager.BRIGHTNESS_DEFAULT;
// Keep display state when dozing.
private boolean mDrawWakeLockOverrideFromSidekick;
// Time when we last logged a warning about calling userActivity() without permission.
private long mLastWarningAboutUserActivityPermission = Long.MIN_VALUE;
@@ -2423,7 +2426,8 @@ public final class PowerManagerService extends SystemService
if (mDisplayPowerRequest.policy == DisplayPowerRequest.POLICY_DOZE) {
mDisplayPowerRequest.dozeScreenState = mDozeScreenStateOverrideFromDreamManager;
if ((mWakeLockSummary & WAKE_LOCK_DRAW) != 0) {
if ((mWakeLockSummary & WAKE_LOCK_DRAW) != 0
&& !mDrawWakeLockOverrideFromSidekick) {
if (mDisplayPowerRequest.dozeScreenState == Display.STATE_DOZE_SUSPEND) {
mDisplayPowerRequest.dozeScreenState = Display.STATE_DOZE;
}
@@ -3176,6 +3180,16 @@ public final class PowerManagerService extends SystemService
}
}
private void setDrawWakeLockOverrideFromSidekickInternal(boolean keepState) {
synchronized (mLock) {
if (mDrawWakeLockOverrideFromSidekick != keepState) {
mDrawWakeLockOverrideFromSidekick = keepState;
mDirty |= DIRTY_SETTINGS;
updatePowerStateLocked();
}
}
}
@VisibleForTesting
void setVrModeEnabled(boolean enabled) {
mIsVrModeEnabled = enabled;
@@ -3381,6 +3395,7 @@ public final class PowerManagerService extends SystemService
+ mUserInactiveOverrideFromWindowManager);
pw.println(" mDozeScreenStateOverrideFromDreamManager="
+ mDozeScreenStateOverrideFromDreamManager);
pw.println(" mDrawWakeLockOverrideFromSidekick=" + mDrawWakeLockOverrideFromSidekick);
pw.println(" mDozeScreenBrightnessOverrideFromDreamManager="
+ mDozeScreenBrightnessOverrideFromDreamManager);
pw.println(" mScreenBrightnessSettingMinimum=" + mScreenBrightnessSettingMinimum);
@@ -3715,6 +3730,10 @@ public final class PowerManagerService extends SystemService
PowerServiceSettingsAndConfigurationDumpProto
.DOZE_SCREEN_STATE_OVERRIDE_FROM_DREAM_MANAGER,
mDozeScreenStateOverrideFromDreamManager);
proto.write(
PowerServiceSettingsAndConfigurationDumpProto
.DRAW_WAKE_LOCK_OVERRIDE_FROM_SIDEKICK,
mDrawWakeLockOverrideFromSidekick);
proto.write(
PowerServiceSettingsAndConfigurationDumpProto
.DOZED_SCREEN_BRIGHTNESS_OVERRIDE_FROM_DREAM_MANAGER,
@@ -4702,6 +4721,11 @@ public final class PowerManagerService extends SystemService
setUserActivityTimeoutOverrideFromWindowManagerInternal(timeoutMillis);
}
@Override
public void setDrawWakeLockOverrideFromSidekick(boolean keepState) {
setDrawWakeLockOverrideFromSidekickInternal(keepState);
}
@Override
public void setMaximumScreenOffTimeoutFromDeviceAdmin(@UserIdInt int userId, long timeMs) {
setMaximumScreenOffTimeoutFromDeviceAdminInternal(userId, timeMs);