From aa448d02907b1441680aaa76040a91d40b20ac3d Mon Sep 17 00:00:00 2001 From: Andrew Zeng Date: Thu, 16 Mar 2017 17:25:07 -0700 Subject: [PATCH] DO NOT MERGE Notify keyguard of when power button is pressed. This is done on wear power button doesn't turn off the screen, when the device wakes from keyguard UI isn't visible yet, so it needs to react to power press in some way. Bug: 35147955 Change-Id: I22619ea446770d09b53370e9244215646b60a9db --- .../android/internal/policy/IKeyguardService.aidl | 6 ++++++ .../android/systemui/keyguard/KeyguardService.java | 6 ++++++ .../systemui/keyguard/KeyguardViewMediator.java | 4 ++++ .../android/server/policy/PhoneWindowManager.java | 14 +++++++++++--- .../policy/keyguard/KeyguardServiceDelegate.java | 6 ++++++ .../policy/keyguard/KeyguardServiceWrapper.java | 9 +++++++++ 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 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();