Fix the return value of switch to last ime.
Change-Id: I5fe8cc696433a7ee72973d16d8f121d3362ab0e0
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 21c1e81..0147b1a 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -1356,14 +1356,27 @@
public boolean switchToLastInputMethod(IBinder token) {
synchronized (mMethodMap) {
- Pair<String, String> lastIme = mSettings.getLastInputMethodAndSubtypeLocked();
- if (lastIme != null) {
- InputMethodInfo imi = mMethodMap.get(lastIme.first);
- if (imi != null) {
- setInputMethodWithSubtypeId(token, lastIme.first, getSubtypeIdFromHashCode(
- imi, Integer.valueOf(lastIme.second)));
- return true;
+ final Pair<String, String> lastIme = mSettings.getLastInputMethodAndSubtypeLocked();
+ if (lastIme == null) return false;
+ final InputMethodInfo lastImi = mMethodMap.get(lastIme.first);
+ if (lastImi == null) return false;
+
+ final boolean imiIdIsSame = lastImi.getId().equals(mCurMethodId);
+ final int lastSubtypeHash = Integer.valueOf(lastIme.second);
+ // If the last IME is the same as the current IME and the last subtype is not defined,
+ // there is no need to switch to the last IME.
+ if (imiIdIsSame && lastSubtypeHash == NOT_A_SUBTYPE_ID) return false;
+
+ int currentSubtypeHash = mCurrentSubtype == null ? NOT_A_SUBTYPE_ID
+ : mCurrentSubtype.hashCode();
+ if (!imiIdIsSame || lastSubtypeHash != currentSubtypeHash) {
+ if (DEBUG) {
+ Slog.d(TAG, "Switch to: " + lastImi.getId() + ", " + lastIme.second + ", from: "
+ + mCurMethodId + ", " + currentSubtypeHash);
}
+ setInputMethodWithSubtypeId(token, lastIme.first, getSubtypeIdFromHashCode(
+ lastImi, lastSubtypeHash));
+ return true;
}
return false;
}