From 3ef8b29fa03fe3ae1c57fd891a12afa46128fff8 Mon Sep 17 00:00:00 2001 From: satok Date: Tue, 23 Nov 2010 06:06:29 +0900 Subject: Synchronize getCurrentInputMethodSubtype Change-Id: I8bcedb39baba10e7035d5c1c11f41f74943874d1 --- .../android/server/InputMethodManagerService.java | 38 ++++++++++++---------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java index 84bc10079414..e14345b9ea7c 100644 --- a/services/java/com/android/server/InputMethodManagerService.java +++ b/services/java/com/android/server/InputMethodManagerService.java @@ -1912,7 +1912,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // 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 @@ public class InputMethodManagerService extends IInputMethodManager.Stub * @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); - } - if (subtypeId != NOT_A_SUBTYPE_ID) { - mCurrentSubtype = mMethodMap.get(lastInputMethodId).getSubtypes().get(subtypeId); + 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 (!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) { -- cgit v1.2.3-59-g8ed1b