aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2010-10-08 22:17:16 +0900
committerTadashi G. Takaoka <takaoka@google.com>2010-10-09 02:39:39 +0900
commit7e1f5a2d5a96c74691b3b09fa986efb7161e5a12 (patch)
treefb6b91af889c669dabda15c6061e02e851dd4d8c /java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
parentcb0046288d58648dbc2a3100e4e8aa483a62a353 (diff)
downloadlatinime-7e1f5a2d5a96c74691b3b09fa986efb7161e5a12.tar.gz
latinime-7e1f5a2d5a96c74691b3b09fa986efb7161e5a12.tar.xz
latinime-7e1f5a2d5a96c74691b3b09fa986efb7161e5a12.zip
Make sure to set symbol keyboard shifted
To avoid a corner case of bug#3070963, in toggleShift() method of KeyboardSwitcher, the shifted symbol keyboard will be set if current keyboard is symbol keyboard or is not shifted symbol keyboard. This change also implements mini keyboard cache with WeakHashMap. Bug: 3070963 Change-Id: I868fc072e2f21bddded1622b800a53b9a6a43e91
Diffstat (limited to 'java/src/com/android/inputmethod/latin/KeyboardSwitcher.java')
-rw-r--r--java/src/com/android/inputmethod/latin/KeyboardSwitcher.java19
1 files changed, 13 insertions, 6 deletions
diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index ebf2f4e60..86dbf1f60 100644
--- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -23,9 +23,9 @@ import android.preference.PreferenceManager;
import android.view.InflateException;
import java.lang.ref.SoftReference;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Locale;
-import java.util.Map;
public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceChangeListener {
@@ -105,7 +105,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
private KeyboardId mSymbolsShiftedId;
private KeyboardId mCurrentId;
- private final Map<KeyboardId, SoftReference<LatinKeyboard>> mKeyboards;
+ private final HashMap<KeyboardId, SoftReference<LatinKeyboard>> mKeyboards;
private int mMode = MODE_NONE; /** One of the MODE_XXX values */
private int mImeOptions;
@@ -194,11 +194,17 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
public final boolean mEnableShiftLock;
public final boolean mHasVoice;
+ private final int mHashCode;
+
public KeyboardId(int xml, int mode, boolean enableShiftLock, boolean hasVoice) {
this.mXml = xml;
this.mKeyboardMode = mode;
this.mEnableShiftLock = enableShiftLock;
this.mHasVoice = hasVoice;
+
+ this.mHashCode = Arrays.hashCode(new Object[] {
+ xml, mode, enableShiftLock, hasVoice
+ });
}
public KeyboardId(int xml, boolean hasVoice) {
@@ -219,8 +225,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
@Override
public int hashCode() {
- return (mXml + 1) * (mKeyboardMode + 1) * (mEnableShiftLock ? 2 : 1)
- * (mHasVoice ? 4 : 8);
+ return mHashCode;
}
}
@@ -378,7 +383,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
}
public void toggleShift() {
- if (mCurrentId.equals(mSymbolsId)) {
+ if (isAlphabetMode())
+ return;
+ if (mCurrentId.equals(mSymbolsId) || !mCurrentId.equals(mSymbolsShiftedId)) {
LatinKeyboard symbolsShiftedKeyboard = getKeyboard(mSymbolsShiftedId);
mCurrentId = mSymbolsShiftedId;
mInputView.setKeyboard(symbolsShiftedKeyboard);
@@ -390,7 +397,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
symbolsShiftedKeyboard.setShiftLocked(true);
symbolsShiftedKeyboard.setImeOptions(mInputMethodService.getResources(),
mMode, mImeOptions);
- } else if (mCurrentId.equals(mSymbolsShiftedId)) {
+ } else {
LatinKeyboard symbolsKeyboard = getKeyboard(mSymbolsId);
mCurrentId = mSymbolsId;
mInputView.setKeyboard(symbolsKeyboard);