Allow power button to close an input method
BUG: 33038203
Change-Id: I5c44dc49db6b960b4e3e42545bfbbab62f357f08
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 46a0194..c8e3b7d 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -483,6 +483,16 @@
*/
public void switchInputMethod(boolean forwardDirection);
+ /**
+ * Returns the visibility of the current input method window (false if there is none).
+ */
+ public boolean isInputMethodWindowVisible();
+
+ /**
+ * Hides the current input method, if visible.
+ */
+ public void hideCurrentInputMethod();
+
public void shutdown(boolean confirm);
public void reboot(boolean confirm);
public void rebootSafeMode(boolean confirm);
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index b2f6cd2..6ae7a58 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -189,6 +189,7 @@
static final int SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP = 2;
static final int SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP_AND_GO_HOME = 3;
static final int SHORT_PRESS_POWER_GO_HOME = 4;
+ static final int SHORT_PRESS_POWER_CLOSE_IME_OR_GO_HOME = 5;
static final int LONG_PRESS_POWER_NOTHING = 0;
static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
@@ -1302,6 +1303,14 @@
case SHORT_PRESS_POWER_GO_HOME:
launchHomeFromHotKey(true /* awakenFromDreams */, false /*respectKeyguard*/);
break;
+ case SHORT_PRESS_POWER_CLOSE_IME_OR_GO_HOME:
+ if (mWindowManagerFuncs.isInputMethodWindowVisible()) {
+ mWindowManagerFuncs.hideCurrentInputMethod();
+ } else {
+ launchHomeFromHotKey(true /* awakenFromDreams */,
+ false /*respectKeyguard*/);
+ }
+ break;
}
}
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 5dad9c4..0a713a3 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -5806,6 +5806,24 @@
}
}
+ // Called by window manager policy. Not exposed externally.
+ @Override
+ public boolean isInputMethodWindowVisible() {
+ synchronized (mWindowMap) {
+ return mInputMethodWindow != null && mInputMethodWindow.isVisibleLw();
+ }
+ }
+
+ // Called by window manager policy. Not exposed externally.
+ @Override
+ public void hideCurrentInputMethod() {
+ final InputMethodManagerInternal inputMethodManagerInternal =
+ LocalServices.getService(InputMethodManagerInternal.class);
+ if (inputMethodManagerInternal != null) {
+ inputMethodManagerInternal.hideCurrentInputMethod();
+ }
+ }
+
// Called by window manager policy. Not exposed externally.
@Override
public void lockDeviceNow() {