aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/android/inputmethod/latin/KeyboardSwitcher.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/inputmethod/latin/KeyboardSwitcher.java')
-rw-r--r--src/com/android/inputmethod/latin/KeyboardSwitcher.java83
1 files changed, 41 insertions, 42 deletions
diff --git a/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index 45d0a1e12..ea473f223 100644
--- a/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -67,16 +67,12 @@ public class KeyboardSwitcher {
private KeyboardId mCurrentId;
private Map<KeyboardId, LatinKeyboard> mKeyboards;
- /**
- * Maps keyboard mode to the equivalent mode with voice.
- */
- private Map<Integer, Integer> mModeToVoice;
-
private int mMode; /** One of the MODE_XXX values */
private int mImeOptions;
private int mTextMode = MODE_TEXT_QWERTY;
private boolean mIsSymbols;
private boolean mHasVoice;
+ private boolean mVoiceOnPrimary;
private boolean mPreferSymbols;
private int mSymbolsModeState = SYMBOLS_MODE_STATE_NONE;
@@ -87,14 +83,8 @@ public class KeyboardSwitcher {
KeyboardSwitcher(Context context, InputMethodService ims) {
mContext = context;
mKeyboards = new HashMap<KeyboardId, LatinKeyboard>();
- mSymbolsId = new KeyboardId(R.xml.kbd_symbols);
- mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift);
- mModeToVoice = new HashMap<Integer, Integer>();
- mModeToVoice.put(R.id.mode_normal, R.id.mode_normal_voice);
- mModeToVoice.put(R.id.mode_url, R.id.mode_url_voice);
- mModeToVoice.put(R.id.mode_email, R.id.mode_email_voice);
- mModeToVoice.put(R.id.mode_im, R.id.mode_im_voice);
- mModeToVoice.put(R.id.mode_webentry, R.id.mode_webentry_voice);
+ mSymbolsId = new KeyboardId(R.xml.kbd_symbols, false);
+ mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift, false);
mInputMethodService = ims;
}
@@ -122,8 +112,9 @@ public class KeyboardSwitcher {
if (displayWidth == mLastDisplayWidth) return;
mLastDisplayWidth = displayWidth;
if (!forceCreate) mKeyboards.clear();
- mSymbolsId = new KeyboardId(R.xml.kbd_symbols);
- mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift);
+ mSymbolsId = new KeyboardId(R.xml.kbd_symbols, mHasVoice && !mVoiceOnPrimary);
+ mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift,
+ mHasVoice && !mVoiceOnPrimary);
}
/**
@@ -134,15 +125,17 @@ public class KeyboardSwitcher {
public int mXml;
public int mKeyboardMode; /** A KEYBOARDMODE_XXX value */
public boolean mEnableShiftLock;
+ public boolean mHasVoice;
- public KeyboardId(int xml, int mode, boolean enableShiftLock) {
+ public KeyboardId(int xml, int mode, boolean enableShiftLock, boolean hasVoice) {
this.mXml = xml;
this.mKeyboardMode = mode;
this.mEnableShiftLock = enableShiftLock;
+ this.mHasVoice = hasVoice;
}
- public KeyboardId(int xml) {
- this(xml, 0, false);
+ public KeyboardId(int xml, boolean hasVoice) {
+ this(xml, 0, false, hasVoice);
}
public boolean equals(Object other) {
@@ -152,16 +145,29 @@ public class KeyboardSwitcher {
public boolean equals(KeyboardId other) {
return other.mXml == this.mXml
&& other.mKeyboardMode == this.mKeyboardMode
- && other.mEnableShiftLock == this.mEnableShiftLock;
+ && other.mEnableShiftLock == this.mEnableShiftLock
+ && other.mHasVoice == this.mHasVoice;
}
public int hashCode() {
- return (mXml + 1) * (mKeyboardMode + 1) * (mEnableShiftLock ? 2 : 1);
+ return (mXml + 1) * (mKeyboardMode + 1) * (mEnableShiftLock ? 2 : 1)
+ * (mHasVoice ? 4 : 8);
}
}
- void setVoiceMode(boolean enableVoice) {
- setKeyboardMode(mMode, mImeOptions, enableVoice, mIsSymbols);
+ void setVoiceMode(boolean enableVoice, boolean voiceOnPrimary) {
+ if (enableVoice != mHasVoice || voiceOnPrimary != mVoiceOnPrimary) {
+ System.err.println("Clearing keyboards");
+ mKeyboards.clear();
+ }
+ mHasVoice = enableVoice;
+ mVoiceOnPrimary = voiceOnPrimary;
+ setKeyboardMode(mMode, mImeOptions, mHasVoice,
+ mIsSymbols);
+ }
+
+ boolean hasVoiceButton(boolean isSymbols) {
+ return mHasVoice && (isSymbols != mVoiceOnPrimary);
}
void setKeyboardMode(int mode, int imeOptions, boolean enableVoice) {
@@ -181,9 +187,6 @@ public class KeyboardSwitcher {
mInputView.setPreviewEnabled(true);
KeyboardId id = getKeyboardId(mode, imeOptions, isSymbols);
- if (enableVoice && mModeToVoice.containsKey(id.mKeyboardMode)) {
- id.mKeyboardMode = mModeToVoice.get(id.mKeyboardMode);
- }
LatinKeyboard keyboard = getKeyboard(id);
if (mode == MODE_PHONE) {
@@ -211,17 +214,12 @@ public class KeyboardSwitcher {
conf.locale = mInputLocale;
orig.updateConfiguration(conf, null);
LatinKeyboard keyboard = new LatinKeyboard(
- mContext, id.mXml, id.mKeyboardMode);
+ mContext, id.mXml, id.mKeyboardMode, id.mHasVoice);
if (id.mKeyboardMode == KEYBOARDMODE_NORMAL
|| id.mKeyboardMode == KEYBOARDMODE_URL
|| id.mKeyboardMode == KEYBOARDMODE_IM
|| id.mKeyboardMode == KEYBOARDMODE_EMAIL
|| id.mKeyboardMode == KEYBOARDMODE_WEB
- || id.mKeyboardMode == R.id.mode_normal_voice
- || id.mKeyboardMode == R.id.mode_url_voice
- || id.mKeyboardMode == R.id.mode_im_voice
- || id.mKeyboardMode == R.id.mode_email_voice
- || id.mKeyboardMode == R.id.mode_webentry_voice
) {
keyboard.setExtension(R.xml.kbd_extension);
}
@@ -238,31 +236,32 @@ public class KeyboardSwitcher {
}
private KeyboardId getKeyboardId(int mode, int imeOptions, boolean isSymbols) {
+ boolean hasVoice = hasVoiceButton(isSymbols);
if (isSymbols) {
return (mode == MODE_PHONE)
- ? new KeyboardId(R.xml.kbd_phone_symbols) : new KeyboardId(R.xml.kbd_symbols);
+ ? new KeyboardId(R.xml.kbd_phone_symbols, hasVoice)
+ : new KeyboardId(R.xml.kbd_symbols, hasVoice);
}
-
switch (mode) {
case MODE_TEXT:
if (mTextMode == MODE_TEXT_QWERTY) {
- return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_NORMAL, true);
+ return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_NORMAL, true, hasVoice);
} else if (mTextMode == MODE_TEXT_ALPHA) {
- return new KeyboardId(R.xml.kbd_alpha, KEYBOARDMODE_NORMAL, true);
+ return new KeyboardId(R.xml.kbd_alpha, KEYBOARDMODE_NORMAL, true, hasVoice);
}
break;
case MODE_SYMBOLS:
- return new KeyboardId(R.xml.kbd_symbols);
+ return new KeyboardId(R.xml.kbd_symbols, hasVoice);
case MODE_PHONE:
- return new KeyboardId(R.xml.kbd_phone);
+ return new KeyboardId(R.xml.kbd_phone, hasVoice);
case MODE_URL:
- return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_URL, true);
+ return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_URL, true, hasVoice);
case MODE_EMAIL:
- return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_EMAIL, true);
+ return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_EMAIL, true, hasVoice);
case MODE_IM:
- return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_IM, true);
+ return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_IM, true, hasVoice);
case MODE_WEB:
- return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_WEB, true);
+ return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_WEB, true, hasVoice);
}
return null;
}
@@ -295,7 +294,7 @@ public class KeyboardSwitcher {
boolean isAlphabetMode() {
int currentMode = mCurrentId.mKeyboardMode;
for (Integer mode : ALPHABET_MODES) {
- if (currentMode == mode || currentMode == mModeToVoice.get(mode)) {
+ if (currentMode == mode) {
return true;
}
}