Synchronize getCurrentInputMethodSubtype
Change-Id: I8bcedb39baba10e7035d5c1c11f41f74943874d1
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 84bc100..e14345b 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -1912,7 +1912,7 @@
// If there are no selected subtypes, tries finding the most applicable one according to the
// current system locale
- private int findApplicableSubtype(String id) {
+ private int findApplicableSubtypeLocked(String id) {
InputMethodInfo imi = mMethodMap.get(id);
if (imi == null) {
return NOT_A_SUBTYPE_ID;
@@ -1954,24 +1954,28 @@
* @return Return the current subtype of this input method.
*/
public InputMethodSubtype getCurrentInputMethodSubtype() {
- boolean subtypeIsSelected = false;
- try {
- subtypeIsSelected = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE) != NOT_A_SUBTYPE_ID;
- } catch (SettingNotFoundException e) {
- }
- if (!subtypeIsSelected || mCurrentSubtype == null) {
- String lastInputMethodId = Settings.Secure.getString(mContext
- .getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
- int subtypeId = getSelectedInputMethodSubtypeId(lastInputMethodId);
- if (subtypeId == NOT_A_SUBTYPE_ID) {
- subtypeId = findApplicableSubtype(lastInputMethodId);
+ synchronized (mMethodMap) {
+ boolean subtypeIsSelected = false;
+ try {
+ subtypeIsSelected = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE) != NOT_A_SUBTYPE_ID;
+ } catch (SettingNotFoundException e) {
}
- if (subtypeId != NOT_A_SUBTYPE_ID) {
- mCurrentSubtype = mMethodMap.get(lastInputMethodId).getSubtypes().get(subtypeId);
+ if (!subtypeIsSelected || mCurrentSubtype == null) {
+ String lastInputMethodId =
+ Settings.Secure.getString(mContext.getContentResolver(),
+ Settings.Secure.DEFAULT_INPUT_METHOD);
+ int subtypeId = getSelectedInputMethodSubtypeId(lastInputMethodId);
+ if (subtypeId == NOT_A_SUBTYPE_ID) {
+ subtypeId = findApplicableSubtypeLocked(lastInputMethodId);
+ }
+ if (subtypeId != NOT_A_SUBTYPE_ID) {
+ mCurrentSubtype =
+ mMethodMap.get(lastInputMethodId).getSubtypes().get(subtypeId);
+ }
}
+ return mCurrentSubtype;
}
- return mCurrentSubtype;
}
public boolean setCurrentInputMethodSubtype(InputMethodSubtype subtype) {