Loading core/java/android/os/PowerManager.java +3 −1 Original line number Diff line number Diff line Loading @@ -612,12 +612,14 @@ public final class PowerManager { * @hide */ public static class WakeData { public WakeData(long wakeTime, @WakeReason int wakeReason) { public WakeData(long wakeTime, @WakeReason int wakeReason, long sleepDuration) { this.wakeTime = wakeTime; this.wakeReason = wakeReason; this.sleepDuration = sleepDuration; } public long wakeTime; public @WakeReason int wakeReason; public long sleepDuration; } /** Loading core/java/android/view/WindowManagerPolicyConstants.java +9 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,15 @@ public interface WindowManagerPolicyConstants { */ String EXTRA_FROM_HOME_KEY = "android.intent.extra.FROM_HOME_KEY"; /** * Extra for the start reason of the HOME intent. * Will be {@link PowerManager#WAKE_REASON_WAKE_KEY} or * {@link PowerManager#WAKE_REASON_POWER_BUTTON} when intent was sent through * {@link PhoneWindowManager#shouldWakeUpWithHomeIntent}. * @hide */ String EXTRA_START_REASON = "android.intent.extra.EXTRA_START_REASON"; // TODO: move this to a more appropriate place. interface PointerEventListener { /** Loading core/res/res/values/config.xml +5 −0 Original line number Diff line number Diff line Loading @@ -993,6 +993,11 @@ <!-- Time to wait while a button is pressed before triggering a very long press. --> <integer name="config_veryLongPressTimeout">3500</integer> <!-- Time to wait before sending a HOME intent when waking up from power/home button. (0 - do not send HOME intent on wakeup) --> <integer name="config_wakeUpToLastStateTimeoutMillis">0</integer> <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] --> <string name="widget_default_package_name" translatable="false"></string> Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -438,6 +438,7 @@ <java-symbol type="integer" name="config_veryLongPressTimeout" /> <java-symbol type="integer" name="config_longPressOnBackBehavior" /> <java-symbol type="bool" name="config_allowStartActivityForLongPressOnPowerInSetup" /> <java-symbol type="integer" name="config_wakeUpToLastStateTimeoutMillis" /> <java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAdjust" /> <java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAbsolute" /> <java-symbol type="integer" name="config_max_pan_devices" /> Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +52 −9 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import static android.view.Display.STATE_OFF; import static android.view.KeyEvent.KEYCODE_BACK; import static android.view.KeyEvent.KEYCODE_DPAD_CENTER; import static android.view.KeyEvent.KEYCODE_DPAD_DOWN; import static android.view.KeyEvent.KEYCODE_HOME; import static android.view.KeyEvent.KEYCODE_POWER; import static android.view.KeyEvent.KEYCODE_UNKNOWN; import static android.view.KeyEvent.KEYCODE_VOLUME_DOWN; Loading Loading @@ -490,6 +491,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mWakeOnDpadKeyPress; boolean mWakeOnAssistKeyPress; boolean mWakeOnBackKeyPress; long mWakeUpToLastStateTimeout; private boolean mHandleVolumeKeysInWM; Loading Loading @@ -1846,6 +1848,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { mPerDisplayFocusEnabled = mContext.getResources().getBoolean( com.android.internal.R.bool.config_perDisplayFocusEnabled); mWakeUpToLastStateTimeout = mContext.getResources().getInteger( com.android.internal.R.integer.config_wakeUpToLastStateTimeoutMillis); readConfigurationDependentBehaviors(); mDisplayFoldController = DisplayFoldController.create(context, DEFAULT_DISPLAY); Loading Loading @@ -2600,7 +2605,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // can never break it, although if keyguard is on, we do let // it handle it, because that gives us the correct 5 second // timeout. if (keyCode == KeyEvent.KEYCODE_HOME) { if (keyCode == KEYCODE_HOME) { DisplayHomeButtonHandler handler = mDisplayHomeButtonHandlers.get(displayId); if (handler == null) { handler = new DisplayHomeButtonHandler(displayId); Loading Loading @@ -3556,8 +3561,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (isValidGlobalKey(keyCode) && mGlobalKeyManager.shouldHandleGlobalKey(keyCode, event)) { if (isWakeKey) { wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey, PowerManager.WAKE_REASON_WAKE_KEY, "android.policy:KEY"); wakeUpFromWakeKey(event); } return result; } Loading Loading @@ -3879,8 +3883,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } if (isWakeKey) { wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey, PowerManager.WAKE_REASON_WAKE_KEY, "android.policy:KEY"); wakeUpFromWakeKey(event); } if ((result & ACTION_PASS_TO_USER) != 0) { Loading Loading @@ -4319,9 +4322,39 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } private boolean shouldWakeUpWithHomeIntent() { if (mWakeUpToLastStateTimeout <= 0) { return false; } final long sleepDuration = mPowerManagerInternal.getLastWakeup().sleepDuration; if (DEBUG_WAKEUP) { Log.i(TAG, "shouldWakeUpWithHomeIntent: sleepDuration= " + sleepDuration + " mWakeUpToLastStateTimeout= " + mWakeUpToLastStateTimeout); } return sleepDuration > mWakeUpToLastStateTimeout; } private void wakeUpFromPowerKey(long eventTime) { wakeUp(eventTime, mAllowTheaterModeWakeFromPowerKey, PowerManager.WAKE_REASON_POWER_BUTTON, "android.policy:POWER"); if (wakeUp(eventTime, mAllowTheaterModeWakeFromPowerKey, PowerManager.WAKE_REASON_POWER_BUTTON, "android.policy:POWER")) { // Start HOME with "reason" extra if sleeping for more than mWakeUpToLastStateTimeout if (shouldWakeUpWithHomeIntent()) { startDockOrHome(DEFAULT_DISPLAY, /*fromHomeKey*/ false, /*wakenFromDreams*/ true, PowerManager.wakeReasonToString(PowerManager.WAKE_REASON_POWER_BUTTON)); } } } private void wakeUpFromWakeKey(KeyEvent event) { if (wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey, PowerManager.WAKE_REASON_WAKE_KEY, "android.policy:KEY")) { // Start HOME with "reason" extra if sleeping for more than mWakeUpToLastStateTimeout if (shouldWakeUpWithHomeIntent() && event.getKeyCode() == KEYCODE_HOME) { startDockOrHome(DEFAULT_DISPLAY, /*fromHomeKey*/ true, /*wakenFromDreams*/ true, PowerManager.wakeReasonToString(PowerManager.WAKE_REASON_WAKE_KEY)); } } } private boolean wakeUp(long wakeTime, boolean wakeInTheaterMode, @WakeReason int reason, Loading Loading @@ -5004,7 +5037,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { return null; } void startDockOrHome(int displayId, boolean fromHomeKey, boolean awakenFromDreams) { void startDockOrHome(int displayId, boolean fromHomeKey, boolean awakenFromDreams, String startReason) { try { ActivityManager.getService().stopAppSwitches(); } catch (RemoteException e) {} Loading Loading @@ -5032,11 +5066,20 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } if (DEBUG_WAKEUP) { Log.d(TAG, "startDockOrHome: startReason= " + startReason); } // Start home. mActivityTaskManagerInternal.startHomeOnDisplay(mCurrentUserId, "startDockOrHome", mActivityTaskManagerInternal.startHomeOnDisplay(mCurrentUserId, startReason, displayId, true /* allowInstrumenting */, fromHomeKey); } void startDockOrHome(int displayId, boolean fromHomeKey, boolean awakenFromDreams) { startDockOrHome(displayId, fromHomeKey, awakenFromDreams, /*startReason*/ "startDockOrHome"); } /** * goes to the home screen * @return whether it did anything Loading Loading
core/java/android/os/PowerManager.java +3 −1 Original line number Diff line number Diff line Loading @@ -612,12 +612,14 @@ public final class PowerManager { * @hide */ public static class WakeData { public WakeData(long wakeTime, @WakeReason int wakeReason) { public WakeData(long wakeTime, @WakeReason int wakeReason, long sleepDuration) { this.wakeTime = wakeTime; this.wakeReason = wakeReason; this.sleepDuration = sleepDuration; } public long wakeTime; public @WakeReason int wakeReason; public long sleepDuration; } /** Loading
core/java/android/view/WindowManagerPolicyConstants.java +9 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,15 @@ public interface WindowManagerPolicyConstants { */ String EXTRA_FROM_HOME_KEY = "android.intent.extra.FROM_HOME_KEY"; /** * Extra for the start reason of the HOME intent. * Will be {@link PowerManager#WAKE_REASON_WAKE_KEY} or * {@link PowerManager#WAKE_REASON_POWER_BUTTON} when intent was sent through * {@link PhoneWindowManager#shouldWakeUpWithHomeIntent}. * @hide */ String EXTRA_START_REASON = "android.intent.extra.EXTRA_START_REASON"; // TODO: move this to a more appropriate place. interface PointerEventListener { /** Loading
core/res/res/values/config.xml +5 −0 Original line number Diff line number Diff line Loading @@ -993,6 +993,11 @@ <!-- Time to wait while a button is pressed before triggering a very long press. --> <integer name="config_veryLongPressTimeout">3500</integer> <!-- Time to wait before sending a HOME intent when waking up from power/home button. (0 - do not send HOME intent on wakeup) --> <integer name="config_wakeUpToLastStateTimeoutMillis">0</integer> <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] --> <string name="widget_default_package_name" translatable="false"></string> Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -438,6 +438,7 @@ <java-symbol type="integer" name="config_veryLongPressTimeout" /> <java-symbol type="integer" name="config_longPressOnBackBehavior" /> <java-symbol type="bool" name="config_allowStartActivityForLongPressOnPowerInSetup" /> <java-symbol type="integer" name="config_wakeUpToLastStateTimeoutMillis" /> <java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAdjust" /> <java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAbsolute" /> <java-symbol type="integer" name="config_max_pan_devices" /> Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +52 −9 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import static android.view.Display.STATE_OFF; import static android.view.KeyEvent.KEYCODE_BACK; import static android.view.KeyEvent.KEYCODE_DPAD_CENTER; import static android.view.KeyEvent.KEYCODE_DPAD_DOWN; import static android.view.KeyEvent.KEYCODE_HOME; import static android.view.KeyEvent.KEYCODE_POWER; import static android.view.KeyEvent.KEYCODE_UNKNOWN; import static android.view.KeyEvent.KEYCODE_VOLUME_DOWN; Loading Loading @@ -490,6 +491,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mWakeOnDpadKeyPress; boolean mWakeOnAssistKeyPress; boolean mWakeOnBackKeyPress; long mWakeUpToLastStateTimeout; private boolean mHandleVolumeKeysInWM; Loading Loading @@ -1846,6 +1848,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { mPerDisplayFocusEnabled = mContext.getResources().getBoolean( com.android.internal.R.bool.config_perDisplayFocusEnabled); mWakeUpToLastStateTimeout = mContext.getResources().getInteger( com.android.internal.R.integer.config_wakeUpToLastStateTimeoutMillis); readConfigurationDependentBehaviors(); mDisplayFoldController = DisplayFoldController.create(context, DEFAULT_DISPLAY); Loading Loading @@ -2600,7 +2605,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // can never break it, although if keyguard is on, we do let // it handle it, because that gives us the correct 5 second // timeout. if (keyCode == KeyEvent.KEYCODE_HOME) { if (keyCode == KEYCODE_HOME) { DisplayHomeButtonHandler handler = mDisplayHomeButtonHandlers.get(displayId); if (handler == null) { handler = new DisplayHomeButtonHandler(displayId); Loading Loading @@ -3556,8 +3561,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (isValidGlobalKey(keyCode) && mGlobalKeyManager.shouldHandleGlobalKey(keyCode, event)) { if (isWakeKey) { wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey, PowerManager.WAKE_REASON_WAKE_KEY, "android.policy:KEY"); wakeUpFromWakeKey(event); } return result; } Loading Loading @@ -3879,8 +3883,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } if (isWakeKey) { wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey, PowerManager.WAKE_REASON_WAKE_KEY, "android.policy:KEY"); wakeUpFromWakeKey(event); } if ((result & ACTION_PASS_TO_USER) != 0) { Loading Loading @@ -4319,9 +4322,39 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } private boolean shouldWakeUpWithHomeIntent() { if (mWakeUpToLastStateTimeout <= 0) { return false; } final long sleepDuration = mPowerManagerInternal.getLastWakeup().sleepDuration; if (DEBUG_WAKEUP) { Log.i(TAG, "shouldWakeUpWithHomeIntent: sleepDuration= " + sleepDuration + " mWakeUpToLastStateTimeout= " + mWakeUpToLastStateTimeout); } return sleepDuration > mWakeUpToLastStateTimeout; } private void wakeUpFromPowerKey(long eventTime) { wakeUp(eventTime, mAllowTheaterModeWakeFromPowerKey, PowerManager.WAKE_REASON_POWER_BUTTON, "android.policy:POWER"); if (wakeUp(eventTime, mAllowTheaterModeWakeFromPowerKey, PowerManager.WAKE_REASON_POWER_BUTTON, "android.policy:POWER")) { // Start HOME with "reason" extra if sleeping for more than mWakeUpToLastStateTimeout if (shouldWakeUpWithHomeIntent()) { startDockOrHome(DEFAULT_DISPLAY, /*fromHomeKey*/ false, /*wakenFromDreams*/ true, PowerManager.wakeReasonToString(PowerManager.WAKE_REASON_POWER_BUTTON)); } } } private void wakeUpFromWakeKey(KeyEvent event) { if (wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey, PowerManager.WAKE_REASON_WAKE_KEY, "android.policy:KEY")) { // Start HOME with "reason" extra if sleeping for more than mWakeUpToLastStateTimeout if (shouldWakeUpWithHomeIntent() && event.getKeyCode() == KEYCODE_HOME) { startDockOrHome(DEFAULT_DISPLAY, /*fromHomeKey*/ true, /*wakenFromDreams*/ true, PowerManager.wakeReasonToString(PowerManager.WAKE_REASON_WAKE_KEY)); } } } private boolean wakeUp(long wakeTime, boolean wakeInTheaterMode, @WakeReason int reason, Loading Loading @@ -5004,7 +5037,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { return null; } void startDockOrHome(int displayId, boolean fromHomeKey, boolean awakenFromDreams) { void startDockOrHome(int displayId, boolean fromHomeKey, boolean awakenFromDreams, String startReason) { try { ActivityManager.getService().stopAppSwitches(); } catch (RemoteException e) {} Loading Loading @@ -5032,11 +5066,20 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } if (DEBUG_WAKEUP) { Log.d(TAG, "startDockOrHome: startReason= " + startReason); } // Start home. mActivityTaskManagerInternal.startHomeOnDisplay(mCurrentUserId, "startDockOrHome", mActivityTaskManagerInternal.startHomeOnDisplay(mCurrentUserId, startReason, displayId, true /* allowInstrumenting */, fromHomeKey); } void startDockOrHome(int displayId, boolean fromHomeKey, boolean awakenFromDreams) { startDockOrHome(displayId, fromHomeKey, awakenFromDreams, /*startReason*/ "startDockOrHome"); } /** * goes to the home screen * @return whether it did anything Loading