diff options
| author | Tadashi G. Takaoka <takaoka@google.com> | 2012-04-03 01:53:05 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-04-03 01:53:05 -0700 |
| commit | d2c5533fd9dba55df8b2726b449232338dcaf93f (patch) | |
| tree | 274890f722c82658677a693bcbb71bd94312270c /java/src/com/android/inputmethod/keyboard/KeyboardSet.java | |
| parent | 56dda78d529478b939ffc8ca5d7e8f6998d79af9 (diff) | |
| parent | 16c6f355700ee5cdaa029f4a25b8b3d40718e6ab (diff) | |
Merge "Add RunInLocale class to guard locale switching"
Diffstat (limited to 'java/src/com/android/inputmethod/keyboard/KeyboardSet.java')
| -rw-r--r-- | java/src/com/android/inputmethod/keyboard/KeyboardSet.java | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java index 62cb41b9e..263f17f74 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java @@ -31,7 +31,7 @@ import com.android.inputmethod.keyboard.KeyboardSet.Params.ElementParams; import com.android.inputmethod.latin.InputTypeUtils; import com.android.inputmethod.latin.LatinIME; import com.android.inputmethod.latin.LatinImeLogger; -import com.android.inputmethod.latin.LocaleUtils; +import com.android.inputmethod.latin.LocaleUtils.RunInLocale; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.StringUtils; import com.android.inputmethod.latin.XmlParseUtils; @@ -66,6 +66,7 @@ public class KeyboardSet { public static class KeyboardSetException extends RuntimeException { public final KeyboardId mKeyboardId; + public KeyboardSetException(Throwable cause, KeyboardId keyboardId) { super(cause); mKeyboardId = keyboardId; @@ -161,26 +162,29 @@ public class KeyboardSet { } } - private Keyboard getKeyboard(Context context, ElementParams elementParams, KeyboardId id) { - final Resources res = context.getResources(); + private Keyboard getKeyboard(Context context, ElementParams elementParams, + final KeyboardId id) { final SoftReference<Keyboard> ref = sKeyboardCache.get(id); Keyboard keyboard = (ref == null) ? null : ref.get(); if (keyboard == null) { - final Locale savedLocale = LocaleUtils.setSystemLocale(res, id.mLocale); - try { - final Keyboard.Builder<Keyboard.Params> builder = - new Keyboard.Builder<Keyboard.Params>(context, new Keyboard.Params()); - if (id.isAlphabetKeyboard()) { - builder.setAutoGenerate(sKeysCache); - } - builder.load(elementParams.mKeyboardXmlId, id); - builder.setTouchPositionCorrectionEnabled(mParams.mTouchPositionCorrectionEnabled); - builder.setProximityCharsCorrectionEnabled( - elementParams.mProximityCharsCorrectionEnabled); - keyboard = builder.build(); - } finally { - LocaleUtils.setSystemLocale(res, savedLocale); + final Keyboard.Builder<Keyboard.Params> builder = + new Keyboard.Builder<Keyboard.Params>(mContext, new Keyboard.Params()); + if (id.isAlphabetKeyboard()) { + builder.setAutoGenerate(sKeysCache); } + final int keyboardXmlId = elementParams.mKeyboardXmlId; + final RunInLocale<Void> job = new RunInLocale<Void>() { + @Override + protected Void job(Resources res) { + builder.load(keyboardXmlId, id); + return null; + } + }; + job.runInLocale(context.getResources(), id.mLocale); + builder.setTouchPositionCorrectionEnabled(mParams.mTouchPositionCorrectionEnabled); + builder.setProximityCharsCorrectionEnabled( + elementParams.mProximityCharsCorrectionEnabled); + keyboard = builder.build(); sKeyboardCache.put(id, new SoftReference<Keyboard>(keyboard)); if (DEBUG_CACHE) { @@ -271,16 +275,20 @@ public class KeyboardSet { if (mParams.mLocale == null) throw new RuntimeException("KeyboardSet subtype is not specified"); - final Locale savedLocale = LocaleUtils.setSystemLocale(mResources, mParams.mLocale); - try { - parseKeyboardSet(mResources, R.xml.keyboard_set); - } catch (Exception e) { - throw new RuntimeException(e.getMessage() + " in " - + mResources.getResourceName(R.xml.keyboard_set) - + " of locale " + mParams.mLocale); - } finally { - LocaleUtils.setSystemLocale(mResources, savedLocale); - } + final RunInLocale<Void> job = new RunInLocale<Void>() { + @Override + protected Void job(Resources res) { + try { + parseKeyboardSet(res, R.xml.keyboard_set); + } catch (Exception e) { + throw new RuntimeException(e.getMessage() + " in " + + res.getResourceName(R.xml.keyboard_set) + + " of locale " + mParams.mLocale); + } + return null; + } + }; + job.runInLocale(mResources, mParams.mLocale); return new KeyboardSet(mContext, mParams); } |
