diff options
author | satok <satok@google.com> | 2011-04-11 14:26:04 +0900 |
---|---|---|
committer | satok <satok@google.com> | 2011-04-15 13:49:33 +0900 |
commit | 68f1b78b7b9139a0e34285ff641a664e664a14b8 (patch) | |
tree | dbd50188b77a1dfab9310daad8550d553cf72204 | |
parent | c02c97ef7527e19dce067562692c89d27e7bad52 (diff) | |
download | frameworks_base-68f1b78b7b9139a0e34285ff641a664e664a14b8.zip frameworks_base-68f1b78b7b9139a0e34285ff641a664e664a14b8.tar.gz frameworks_base-68f1b78b7b9139a0e34285ff641a664e664a14b8.tar.bz2 |
Add an API to get the last used input method subtype
Bug: 4075039
- Voice input requires to know the last used input method subtype.
Change-Id: I603a4fb88a2af5195e52188adfa6585ad80304fa
-rw-r--r-- | api/current.txt | 1 | ||||
-rw-r--r-- | core/java/android/view/inputmethod/InputMethodManager.java | 11 | ||||
-rw-r--r-- | core/java/com/android/internal/view/IInputMethodManager.aidl | 1 | ||||
-rw-r--r-- | services/java/com/android/server/InputMethodManagerService.java | 18 |
4 files changed, 31 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt index 4d3f8c6..9d593d8 100644 --- a/api/current.txt +++ b/api/current.txt @@ -22579,6 +22579,7 @@ package android.view.inputmethod { method public java.util.List<android.view.inputmethod.InputMethodInfo> getEnabledInputMethodList(); method public java.util.List<android.view.inputmethod.InputMethodSubtype> getEnabledInputMethodSubtypeList(android.view.inputmethod.InputMethodInfo, boolean); method public java.util.List<android.view.inputmethod.InputMethodInfo> getInputMethodList(); + method public android.view.inputmethod.InputMethodSubtype getLastInputMethodSubtype(); method public java.util.Map<android.view.inputmethod.InputMethodInfo, java.util.List<android.view.inputmethod.InputMethodSubtype>> getShortcutInputMethodsAndSubtypes(); method public void hideSoftInputFromInputMethod(android.os.IBinder, int); method public boolean hideSoftInputFromWindow(android.os.IBinder, int); diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index a39c7c7..731c832 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -1504,6 +1504,17 @@ public final class InputMethodManager { } } + public InputMethodSubtype getLastInputMethodSubtype() { + synchronized (mH) { + try { + return mService.getLastInputMethodSubtype(); + } catch (RemoteException e) { + Log.w(TAG, "IME died: " + mCurId, e); + return null; + } + } + } + void doDump(FileDescriptor fd, PrintWriter fout, String[] args) { final Printer p = new PrintWriterPrinter(fout); p.println("Input method client state for " + this + ":"); diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl index 611d987..4ffa4e1 100644 --- a/core/java/com/android/internal/view/IInputMethodManager.aidl +++ b/core/java/com/android/internal/view/IInputMethodManager.aidl @@ -33,6 +33,7 @@ interface IInputMethodManager { List<InputMethodInfo> getEnabledInputMethodList(); List<InputMethodSubtype> getEnabledInputMethodSubtypeList(in InputMethodInfo imi, boolean allowsImplicitlySelectedSubtypes); + InputMethodSubtype getLastInputMethodSubtype(); // TODO: We should change the return type from List to List<Parcelable> // Currently there is a bug that aidl doesn't accept List<Parcelable> List getShortcutInputMethodsAndSubtypes(); diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java index 1455764..7028772 100644 --- a/services/java/com/android/server/InputMethodManagerService.java +++ b/services/java/com/android/server/InputMethodManagerService.java @@ -1399,6 +1399,24 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } } + public InputMethodSubtype getLastInputMethodSubtype() { + synchronized (mMethodMap) { + final Pair<String, String> lastIme = mSettings.getLastInputMethodAndSubtypeLocked(); + // TODO: Handle the case of the last IME with no subtypes + if (lastIme == null || TextUtils.isEmpty(lastIme.first) + || TextUtils.isEmpty(lastIme.second)) return null; + final InputMethodInfo lastImi = mMethodMap.get(lastIme.first); + if (lastImi == null) return null; + try { + final int lastSubtypeHash = Integer.valueOf(lastIme.second); + return lastImi.getSubtypeAt(getSubtypeIdFromHashCode( + lastImi, lastSubtypeHash)); + } catch (NumberFormatException e) { + return null; + } + } + } + private void setInputMethodWithSubtypeId(IBinder token, String id, int subtypeId) { synchronized (mMethodMap) { if (token == null) { |