am 88c66cbb: Merge "Dream when user activity times out while docked if appropriate." into jb-mr1-dev

* commit '88c66cbb00a572ac8280f0e0ea38079d48ec59f3':
  Dream when user activity times out while docked if appropriate.
This commit is contained in:
Jeff Brown
2012-10-18 00:11:27 -07:00
committed by Android Git Automerger

View File

@@ -107,6 +107,8 @@ public final class PowerManagerService extends IPowerManager.Stub
private static final int DIRTY_PROXIMITY_POSITIVE = 1 << 9; private static final int DIRTY_PROXIMITY_POSITIVE = 1 << 9;
// Dirty bit: screen on blocker state became held or unheld // Dirty bit: screen on blocker state became held or unheld
private static final int DIRTY_SCREEN_ON_BLOCKER_RELEASED = 1 << 10; private static final int DIRTY_SCREEN_ON_BLOCKER_RELEASED = 1 << 10;
// Dirty bit: dock state changed
private static final int DIRTY_DOCK_STATE = 1 << 11;
// Wakefulness: The device is asleep and can only be awoken by a call to wakeUp(). // Wakefulness: The device is asleep and can only be awoken by a call to wakeUp().
// The screen should be off or in the process of being turned off by the display controller. // The screen should be off or in the process of being turned off by the display controller.
@@ -269,6 +271,9 @@ public final class PowerManagerService extends IPowerManager.Stub
// draining faster than it is charging and the user activity timeout has expired. // draining faster than it is charging and the user activity timeout has expired.
private int mBatteryLevelWhenDreamStarted; private int mBatteryLevelWhenDreamStarted;
// The current dock state.
private int mDockState = Intent.EXTRA_DOCK_STATE_UNDOCKED;
// True if the device should wake up when plugged or unplugged. // True if the device should wake up when plugged or unplugged.
private boolean mWakeUpWhenPluggedOrUnpluggedConfig; private boolean mWakeUpWhenPluggedOrUnpluggedConfig;
@@ -281,6 +286,9 @@ public final class PowerManagerService extends IPowerManager.Stub
// True if dreams should be activated on sleep. // True if dreams should be activated on sleep.
private boolean mDreamsActivateOnSleepSetting; private boolean mDreamsActivateOnSleepSetting;
// True if dreams should be activated on dock.
private boolean mDreamsActivateOnDockSetting;
// The screen off timeout setting value in milliseconds. // The screen off timeout setting value in milliseconds.
private int mScreenOffTimeoutSetting; private int mScreenOffTimeoutSetting;
@@ -440,6 +448,10 @@ public final class PowerManagerService extends IPowerManager.Stub
filter.addAction(Intent.ACTION_USER_SWITCHED); filter.addAction(Intent.ACTION_USER_SWITCHED);
mContext.registerReceiver(new UserSwitchedReceiver(), filter, null, mHandler); mContext.registerReceiver(new UserSwitchedReceiver(), filter, null, mHandler);
filter = new IntentFilter();
filter.addAction(Intent.ACTION_DOCK_EVENT);
mContext.registerReceiver(new DockReceiver(), filter, null, mHandler);
// Register for settings changes. // Register for settings changes.
final ContentResolver resolver = mContext.getContentResolver(); final ContentResolver resolver = mContext.getContentResolver();
resolver.registerContentObserver(Settings.Secure.getUriFor( resolver.registerContentObserver(Settings.Secure.getUriFor(
@@ -448,6 +460,9 @@ public final class PowerManagerService extends IPowerManager.Stub
resolver.registerContentObserver(Settings.Secure.getUriFor( resolver.registerContentObserver(Settings.Secure.getUriFor(
Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP), Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP),
false, mSettingsObserver, UserHandle.USER_ALL); false, mSettingsObserver, UserHandle.USER_ALL);
resolver.registerContentObserver(Settings.Secure.getUriFor(
Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK),
false, mSettingsObserver, UserHandle.USER_ALL);
resolver.registerContentObserver(Settings.System.getUriFor( resolver.registerContentObserver(Settings.System.getUriFor(
Settings.System.SCREEN_OFF_TIMEOUT), Settings.System.SCREEN_OFF_TIMEOUT),
false, mSettingsObserver, UserHandle.USER_ALL); false, mSettingsObserver, UserHandle.USER_ALL);
@@ -487,6 +502,9 @@ public final class PowerManagerService extends IPowerManager.Stub
mDreamsActivateOnSleepSetting = (Settings.Secure.getIntForUser(resolver, mDreamsActivateOnSleepSetting = (Settings.Secure.getIntForUser(resolver,
Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 0, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 0,
UserHandle.USER_CURRENT) != 0); UserHandle.USER_CURRENT) != 0);
mDreamsActivateOnDockSetting = (Settings.Secure.getIntForUser(resolver,
Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, 0,
UserHandle.USER_CURRENT) != 0);
mScreenOffTimeoutSetting = Settings.System.getIntForUser(resolver, mScreenOffTimeoutSetting = Settings.System.getIntForUser(resolver,
Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT, Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT,
UserHandle.USER_CURRENT); UserHandle.USER_CURRENT);
@@ -1339,13 +1357,14 @@ public final class PowerManagerService extends IPowerManager.Stub
private boolean updateWakefulnessLocked(int dirty) { private boolean updateWakefulnessLocked(int dirty) {
boolean changed = false; boolean changed = false;
if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY | DIRTY_BOOT_COMPLETED if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY | DIRTY_BOOT_COMPLETED
| DIRTY_WAKEFULNESS | DIRTY_STAY_ON | DIRTY_PROXIMITY_POSITIVE)) != 0) { | DIRTY_WAKEFULNESS | DIRTY_STAY_ON | DIRTY_PROXIMITY_POSITIVE
| DIRTY_DOCK_STATE)) != 0) {
if (mWakefulness == WAKEFULNESS_AWAKE && isItBedTimeYetLocked()) { if (mWakefulness == WAKEFULNESS_AWAKE && isItBedTimeYetLocked()) {
if (DEBUG_SPEW) { if (DEBUG_SPEW) {
Slog.d(TAG, "updateWakefulnessLocked: Bed time..."); Slog.d(TAG, "updateWakefulnessLocked: Bed time...");
} }
final long time = SystemClock.uptimeMillis(); final long time = SystemClock.uptimeMillis();
if (mDreamsActivateOnSleepSetting) { if (shouldNapAtBedTimeLocked()) {
changed = napNoUpdateLocked(time); changed = napNoUpdateLocked(time);
} else { } else {
changed = goToSleepNoUpdateLocked(time, changed = goToSleepNoUpdateLocked(time,
@@ -1356,6 +1375,16 @@ public final class PowerManagerService extends IPowerManager.Stub
return changed; return changed;
} }
/**
* Returns true if the device should automatically nap and start dreaming when the user
* activity timeout has expired and it's bedtime.
*/
private boolean shouldNapAtBedTimeLocked() {
return mDreamsActivateOnSleepSetting
|| (mDreamsActivateOnDockSetting
&& mDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED);
}
/** /**
* Returns true if the device should go to sleep now. * Returns true if the device should go to sleep now.
* Also used when exiting a dream to determine whether we should go back * Also used when exiting a dream to determine whether we should go back
@@ -2124,6 +2153,7 @@ public final class PowerManagerService extends IPowerManager.Stub
pw.println(" mPlugType=" + mPlugType); pw.println(" mPlugType=" + mPlugType);
pw.println(" mBatteryLevel=" + mBatteryLevel); pw.println(" mBatteryLevel=" + mBatteryLevel);
pw.println(" mBatteryLevelWhenDreamStarted=" + mBatteryLevelWhenDreamStarted); pw.println(" mBatteryLevelWhenDreamStarted=" + mBatteryLevelWhenDreamStarted);
pw.println(" mDockState=" + mDockState);
pw.println(" mStayOn=" + mStayOn); pw.println(" mStayOn=" + mStayOn);
pw.println(" mProximityPositive=" + mProximityPositive); pw.println(" mProximityPositive=" + mProximityPositive);
pw.println(" mBootCompleted=" + mBootCompleted); pw.println(" mBootCompleted=" + mBootCompleted);
@@ -2149,6 +2179,7 @@ public final class PowerManagerService extends IPowerManager.Stub
pw.println(" mDreamsSupportedConfig=" + mDreamsSupportedConfig); pw.println(" mDreamsSupportedConfig=" + mDreamsSupportedConfig);
pw.println(" mDreamsEnabledSetting=" + mDreamsEnabledSetting); pw.println(" mDreamsEnabledSetting=" + mDreamsEnabledSetting);
pw.println(" mDreamsActivateOnSleepSetting=" + mDreamsActivateOnSleepSetting); pw.println(" mDreamsActivateOnSleepSetting=" + mDreamsActivateOnSleepSetting);
pw.println(" mDreamsActivateOnDockSetting=" + mDreamsActivateOnDockSetting);
pw.println(" mScreenOffTimeoutSetting=" + mScreenOffTimeoutSetting); pw.println(" mScreenOffTimeoutSetting=" + mScreenOffTimeoutSetting);
pw.println(" mMaximumScreenOffTimeoutFromDeviceAdmin=" pw.println(" mMaximumScreenOffTimeoutFromDeviceAdmin="
+ mMaximumScreenOffTimeoutFromDeviceAdmin + " (enforced=" + mMaximumScreenOffTimeoutFromDeviceAdmin + " (enforced="
@@ -2267,6 +2298,21 @@ public final class PowerManagerService extends IPowerManager.Stub
} }
} }
private final class DockReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
synchronized (mLock) {
int dockState = intent.getIntExtra(Intent.EXTRA_DOCK_STATE,
Intent.EXTRA_DOCK_STATE_UNDOCKED);
if (mDockState != dockState) {
mDockState = dockState;
mDirty |= DIRTY_DOCK_STATE;
updatePowerStateLocked();
}
}
}
}
private final class SettingsObserver extends ContentObserver { private final class SettingsObserver extends ContentObserver {
public SettingsObserver(Handler handler) { public SettingsObserver(Handler handler) {
super(handler); super(handler);