diff --git a/core/java/com/android/internal/policy/IKeyguardService.aidl b/core/java/com/android/internal/policy/IKeyguardService.aidl index e51ad3f737b8e..5531db8c21d1b 100644 --- a/core/java/com/android/internal/policy/IKeyguardService.aidl +++ b/core/java/com/android/internal/policy/IKeyguardService.aidl @@ -98,4 +98,10 @@ oneway interface IKeyguardService { * to start the keyguard dismiss sequence. */ void onActivityDrawn(); + + /** + * Notifies the Keyguard that the power key was pressed while locked and launched Home rather + * than putting the device to sleep or waking up. + */ + void onShortPowerPressedGoHome(); } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java index b393cf7eb9d5e..836e3bc8de5cb 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java @@ -202,6 +202,12 @@ public class KeyguardService extends Service { checkPermission(); mKeyguardViewMediator.onActivityDrawn(); } + + @Override + public void onShortPowerPressedGoHome() { + checkPermission(); + mKeyguardViewMediator.onShortPowerPressedGoHome(); + } }; } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 6103355a568e2..5238789d045d8 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -1943,6 +1943,10 @@ public class KeyguardViewMediator extends SystemUI { mHandler.sendEmptyMessage(ON_ACTIVITY_DRAWN); } + public void onShortPowerPressedGoHome() { + // do nothing + } + public ViewMediatorCallback getViewMediatorCallback() { return mViewMediatorCallback; } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 6ae7a589ab9e4..a8788d16296ef 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1301,20 +1301,28 @@ public class PhoneWindowManager implements WindowManagerPolicy { launchHomeFromHotKey(); break; case SHORT_PRESS_POWER_GO_HOME: - launchHomeFromHotKey(true /* awakenFromDreams */, false /*respectKeyguard*/); + shortPressPowerGoHome(); break; case SHORT_PRESS_POWER_CLOSE_IME_OR_GO_HOME: if (mWindowManagerFuncs.isInputMethodWindowVisible()) { mWindowManagerFuncs.hideCurrentInputMethod(); } else { - launchHomeFromHotKey(true /* awakenFromDreams */, - false /*respectKeyguard*/); + shortPressPowerGoHome(); } break; } } } + private void shortPressPowerGoHome() { + launchHomeFromHotKey(true /* awakenFromDreams */, false /*respectKeyguard*/); + if (isKeyguardShowingAndNotOccluded()) { + // Notify keyguard so it can do any special handling for the power button since the + // device will not power off and only launch home. + mKeyguardDelegate.onShortPowerPressedGoHome(); + } + } + private void powerMultiPressAction(long eventTime, boolean interactive, int behavior) { switch (behavior) { case MULTI_PRESS_POWER_NOTHING: diff --git a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java index 29a1f0710c34a..142095583c556 100644 --- a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java +++ b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java @@ -427,6 +427,12 @@ public class KeyguardServiceDelegate { } } + public void onShortPowerPressedGoHome() { + if (mKeyguardService != null) { + mKeyguardService.onShortPowerPressedGoHome(); + } + } + public void dump(String prefix, PrintWriter pw) { pw.println(prefix + TAG); prefix += " "; diff --git a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java index de906e67519e8..1fe7a3c435ef4 100644 --- a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java +++ b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java @@ -228,6 +228,15 @@ public class KeyguardServiceWrapper implements IKeyguardService { } } + @Override + public void onShortPowerPressedGoHome() { + try { + mService.onShortPowerPressedGoHome(); + } catch (RemoteException e) { + Slog.w(TAG , "Remote Exception", e); + } + } + @Override // Binder interface public IBinder asBinder() { return mService.asBinder();