diff options
6 files changed, 42 insertions, 3 deletions
diff --git a/core/java/com/android/internal/policy/IKeyguardService.aidl b/core/java/com/android/internal/policy/IKeyguardService.aidl index a019ea170484..3f35c91a44e6 100644 --- a/core/java/com/android/internal/policy/IKeyguardService.aidl +++ b/core/java/com/android/internal/policy/IKeyguardService.aidl @@ -93,4 +93,10 @@ oneway interface IKeyguardService { * @param fadeoutDuration the duration of the exit animation, in milliseconds */ void startKeyguardExitAnimation(long startTime, long fadeoutDuration); + + /** + * 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 3532f41ae676..2d5d1989432e 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java @@ -194,6 +194,12 @@ public class KeyguardService extends Service { mKeyguardViewMediator.startKeyguardExitAnimation(startTime, fadeoutDuration); Trace.endSection(); } + + @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 b977dd46d27e..f745956d74ca 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -2013,6 +2013,10 @@ public class KeyguardViewMediator extends SystemUI { Trace.endSection(); } + 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 e3bc91971b06..6d46fda27b48 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1418,7 +1418,7 @@ 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 (mDismissImeOnBackKeyPressed) { @@ -1430,8 +1430,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mInputMethodManagerInternal.hideCurrentInputMethod(); } } else { - launchHomeFromHotKey(true /* awakenFromDreams */, - false /*respectKeyguard*/); + shortPressPowerGoHome(); } break; } @@ -1439,6 +1438,15 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } + 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 da90e5adf4c4..0121ee19e090 100644 --- a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java +++ b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java @@ -372,6 +372,12 @@ public class KeyguardServiceDelegate { mKeyguardState.bootCompleted = true; } + 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 0b839b84e677..425be54911bf 100644 --- a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java +++ b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java @@ -218,6 +218,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(); |