diff options
author | Narayan Kamath <narayan@google.com> | 2014-05-21 12:07:35 +0100 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2014-05-21 12:07:35 +0100 |
commit | d862ebb6036a769cb3be371b396e9e33f89ee365 (patch) | |
tree | ebe36d1f47fc0c58ee0dfa295bb776ea3faad1c0 | |
parent | 9853e2a8b37c80a11427f48b3b4976408f615e57 (diff) | |
parent | fcc4fed3c16a57ef713a96b7298ed43aaeef2df4 (diff) | |
download | frameworks_base-d862ebb6036a769cb3be371b396e9e33f89ee365.zip frameworks_base-d862ebb6036a769cb3be371b396e9e33f89ee365.tar.gz frameworks_base-d862ebb6036a769cb3be371b396e9e33f89ee365.tar.bz2 |
resolved conflicts for merge of fcc4fed3 to master
Change-Id: Icebca982b01debd67a1470c02651ef8936f6e5b0
7 files changed, 80 insertions, 16 deletions
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index 6c7b08d..61194e9 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -38,7 +38,7 @@ interface IPowerManager void userActivity(long time, int event, int flags); void wakeUp(long time); - void goToSleep(long time, int reason); + void goToSleep(long time, int reason, int flags); void nap(long time); boolean isInteractive(); diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 5b2c8db..d5177e8 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -321,6 +321,12 @@ public final class PowerManager { */ public static final String REBOOT_RECOVERY = "recovery"; + /** + * Go to sleep flag: Skip dozing state and directly go to full sleep. + * @hide + */ + public static final int GO_TO_SLEEP_FLAG_NO_DOZE = 1 << 0; + final Context mContext; final IPowerManager mService; final Handler mHandler; @@ -500,8 +506,15 @@ public final class PowerManager { * @see #wakeUp */ public void goToSleep(long time) { + goToSleep(time, GO_TO_SLEEP_REASON_USER, 0); + } + + /** + * @hide + */ + public void goToSleep(long time, int reason, int flags) { try { - mService.goToSleep(time, GO_TO_SLEEP_REASON_USER); + mService.goToSleep(time, reason, flags); } catch (RemoteException e) { } } diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index c3efb69..5375c14 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -498,6 +498,14 @@ --> <integer name="config_longPressOnPowerBehavior">1</integer> + <!-- Control the behavior when the user short presses the power button. + 0 - Nothing + 1 - Go to sleep (doze) + 2 - Really go to sleep (don't doze) + 3 - Really go to sleep and go home (don't doze) + --> + <integer name="config_shortPressOnPowerBehavior">1</integer> + <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] --> <string name="widget_default_package_name"></string> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index a4e80bc1..d7a5573 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -305,6 +305,7 @@ <java-symbol type="integer" name="config_ntpRetry" /> <java-symbol type="integer" name="config_ntpThreshold" /> <java-symbol type="integer" name="config_ntpTimeout" /> + <java-symbol type="integer" name="config_shortPressOnPowerBehavior" /> <java-symbol type="integer" name="config_toastDefaultGravity" /> <java-symbol type="integer" name="config_wifi_framework_scan_interval" /> <java-symbol type="integer" name="config_wifi_supplicant_scan_interval" /> diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index d0305e0..99dd2f4 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -141,6 +141,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Whether to use the new Session APIs static final boolean USE_SESSIONS = true; + static final int SHORT_PRESS_POWER_NOTHING = 0; + static final int SHORT_PRESS_POWER_GO_TO_SLEEP = 1; + static final int SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP = 2; + static final int SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP_AND_GO_HOME = 3; + static final int LONG_PRESS_POWER_NOTHING = 0; static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1; static final int LONG_PRESS_POWER_SHUT_OFF = 2; @@ -298,6 +303,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { int mLidKeyboardAccessibility; int mLidNavigationAccessibility; boolean mLidControlsSleep; + int mShortPressOnPowerBehavior = -1; int mLongPressOnPowerBehavior = -1; boolean mScreenOnEarly = false; boolean mScreenOnFully = false; @@ -715,6 +721,33 @@ public class PhoneWindowManager implements WindowManagerPolicy { mHandler.removeCallbacks(mScreenshotRunnable); } + private void powerShortPress(long eventTime) { + if (mShortPressOnPowerBehavior < 0) { + mShortPressOnPowerBehavior = mContext.getResources().getInteger( + com.android.internal.R.integer.config_shortPressOnPowerBehavior); + } + + switch (mShortPressOnPowerBehavior) { + case SHORT_PRESS_POWER_NOTHING: + break; + case SHORT_PRESS_POWER_GO_TO_SLEEP: + mPowerManager.goToSleep(eventTime, + PowerManager.GO_TO_SLEEP_REASON_USER, 0); + break; + case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP: + mPowerManager.goToSleep(eventTime, + PowerManager.GO_TO_SLEEP_REASON_USER, + PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); + break; + case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP_AND_GO_HOME: + mPowerManager.goToSleep(eventTime, + PowerManager.GO_TO_SLEEP_REASON_USER, + PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); + launchHomeFromHotKey(); + break; + } + } + private final Runnable mPowerLongPress = new Runnable() { @Override public void run() { @@ -4038,7 +4071,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mPowerKeyTriggered = false; cancelPendingScreenshotChordAction(); if (interceptPowerKeyUp(canceled || mPendingPowerKeyUpCanceled)) { - mPowerManager.goToSleep(event.getEventTime()); + powerShortPress(event.getEventTime()); isWakeKey = false; } mPendingPowerKeyUpCanceled = false; @@ -4930,7 +4963,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { private void applyLidSwitchState() { if (mLidState == LID_CLOSED && mLidControlsSleep) { - mPowerManager.goToSleep(SystemClock.uptimeMillis()); + mPowerManager.goToSleep(SystemClock.uptimeMillis(), + PowerManager.GO_TO_SLEEP_REASON_USER, + PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); } } @@ -5409,9 +5444,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { pw.print(mLidKeyboardAccessibility); pw.print(" mLidNavigationAccessibility="); pw.print(mLidNavigationAccessibility); pw.print(" mLidControlsSleep="); pw.println(mLidControlsSleep); - pw.print(prefix); pw.print("mLongPressOnPowerBehavior="); - pw.print(mLongPressOnPowerBehavior); - pw.print(" mHasSoftInput="); pw.println(mHasSoftInput); + pw.print(prefix); + pw.print("mShortPressOnPowerBehavior="); pw.print(mShortPressOnPowerBehavior); + pw.print(" mLongPressOnPowerBehavior="); pw.println(mLongPressOnPowerBehavior); + pw.print(prefix); pw.print("mHasSoftInput="); pw.println(mHasSoftInput); pw.print(prefix); pw.print("mScreenOnEarly="); pw.print(mScreenOnEarly); pw.print(" mScreenOnFully="); pw.print(mScreenOnFully); pw.print(" mOrientationSensorEnabled="); pw.println(mOrientationSensorEnabled); diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 716ee27..aca17bf 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -949,9 +949,9 @@ public final class PowerManagerService extends com.android.server.SystemService return true; } - private void goToSleepInternal(long eventTime, int reason) { + private void goToSleepInternal(long eventTime, int reason, int flags) { synchronized (mLock) { - if (goToSleepNoUpdateLocked(eventTime, reason)) { + if (goToSleepNoUpdateLocked(eventTime, reason, flags)) { updatePowerStateLocked(); } } @@ -960,9 +960,10 @@ public final class PowerManagerService extends com.android.server.SystemService // This method is called goToSleep for historical reasons but we actually start // dozing before really going to sleep. @SuppressWarnings("deprecation") - private boolean goToSleepNoUpdateLocked(long eventTime, int reason) { + private boolean goToSleepNoUpdateLocked(long eventTime, int reason, int flags) { if (DEBUG_SPEW) { - Slog.d(TAG, "goToSleepNoUpdateLocked: eventTime=" + eventTime + ", reason=" + reason); + Slog.d(TAG, "goToSleepNoUpdateLocked: eventTime=" + eventTime + + ", reason=" + reason + ", flags=" + flags); } if (eventTime < mLastWakeTime @@ -1005,6 +1006,11 @@ public final class PowerManagerService extends com.android.server.SystemService } } EventLog.writeEvent(EventLogTags.POWER_SLEEP_REQUESTED, numWakeLocksCleared); + + // Skip dozing if requested. + if ((flags & PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE) != 0) { + reallyGoToSleepNoUpdateLocked(eventTime); + } return true; } @@ -1408,7 +1414,7 @@ public final class PowerManagerService extends com.android.server.SystemService changed = napNoUpdateLocked(time); } else { changed = goToSleepNoUpdateLocked(time, - PowerManager.GO_TO_SLEEP_REASON_TIMEOUT); + PowerManager.GO_TO_SLEEP_REASON_TIMEOUT, 0); } } } @@ -1555,7 +1561,7 @@ public final class PowerManagerService extends com.android.server.SystemService // Dream has ended or will be stopped. Update the power state. if (isItBedTimeYetLocked()) { goToSleepNoUpdateLocked(SystemClock.uptimeMillis(), - PowerManager.GO_TO_SLEEP_REASON_TIMEOUT); + PowerManager.GO_TO_SLEEP_REASON_TIMEOUT, 0); updatePowerStateLocked(); } else { wakeUpNoUpdateLocked(SystemClock.uptimeMillis()); @@ -2715,7 +2721,7 @@ public final class PowerManagerService extends com.android.server.SystemService } @Override // Binder call - public void goToSleep(long eventTime, int reason) { + public void goToSleep(long eventTime, int reason, int flags) { if (eventTime > SystemClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } @@ -2725,7 +2731,7 @@ public final class PowerManagerService extends com.android.server.SystemService final long ident = Binder.clearCallingIdentity(); try { - goToSleepInternal(eventTime, reason); + goToSleepInternal(eventTime, reason, flags); } finally { Binder.restoreCallingIdentity(ident); } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 5d88a57..58fdcc1 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -2301,7 +2301,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { try { // Power off the display getIPowerManager().goToSleep(SystemClock.uptimeMillis(), - PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN); + PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN, 0); // Ensure the device is locked getWindowManager().lockNow(null); } catch (RemoteException e) { |