summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/policy/IKeyguardService.aidl6
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java4
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java14
-rw-r--r--services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java6
-rw-r--r--services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java9
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();