aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2011-08-23 17:27:48 +0900
committerTadashi G. Takaoka <takaoka@google.com>2011-08-24 13:19:56 +0900
commitaf52c0ea04c6563feaa6ea7dbac5dd87c2a48cc6 (patch)
tree1b6853ae234ab4feb9ac4f57b7a716ed4b02809e /java
parentf77009ac3a7c9fa640f111423881f9e0e2401881 (diff)
downloadlatinime-af52c0ea04c6563feaa6ea7dbac5dd87c2a48cc6.tar.gz
latinime-af52c0ea04c6563feaa6ea7dbac5dd87c2a48cc6.tar.xz
latinime-af52c0ea04c6563feaa6ea7dbac5dd87c2a48cc6.zip
Implement "forceAscii" private IME option
This change also introduces "AsciiCapable" extra value for subtype that indicates the subtype can input any ASCII code point from its keyboard layout. Only if the input field has "forceAscii" private IME option and the current subtype doesn't have "AsciiCapable" extra value, the en_US keyboard layout will be used for the input field. Bug: 3384942 Change-Id: I25e2553e37ecb5002df1164e45f6273845fe463b
Diffstat (limited to 'java')
-rw-r--r--java/res/xml/method.xml22
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java15
-rw-r--r--java/src/com/android/inputmethod/keyboard/LatinKeyboard.java9
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java12
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeSwitcher.java5
5 files changed, 50 insertions, 13 deletions
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index 0bf560d5a..452294e04 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -31,13 +31,13 @@
android:label="@string/subtype_en_US"
android:imeSubtypeLocale="en_US"
android:imeSubtypeMode="keyboard"
- android:imeSubtypeExtraValue="TrySuppressingImeSwitcher"
+ android:imeSubtypeExtraValue="TrySuppressingImeSwitcher,AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_en_GB"
android:imeSubtypeLocale="en_GB"
android:imeSubtypeMode="keyboard"
- android:imeSubtypeExtraValue="TrySuppressingImeSwitcher"
+ android:imeSubtypeExtraValue="TrySuppressingImeSwitcher,AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
@@ -48,61 +48,73 @@
android:label="@string/subtype_generic"
android:imeSubtypeLocale="cs"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="da"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="de"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_de_qwerty"
android:imeSubtypeLocale="de_ZZ"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="es"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="fi"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="fr"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="fr_CA"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="fr_CH"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="hr"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="hu"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="it"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<!-- Java uses the deprecated "iw" code instead of the standard "he" code for Hebrew. -->
<subtype android:icon="@drawable/ic_subtype_keyboard"
@@ -114,21 +126,25 @@
android:label="@string/subtype_generic"
android:imeSubtypeLocale="nb"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="nl"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="pl"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="pt"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
@@ -144,10 +160,12 @@
android:label="@string/subtype_generic"
android:imeSubtypeLocale="sv"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:imeSubtypeLocale="tr"
android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable"
/>
</input-method>
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 8bf82807a..b1212f424 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -258,8 +258,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
final SoftReference<LatinKeyboard> ref = mKeyboardCache.get(id);
LatinKeyboard keyboard = (ref == null) ? null : ref.get();
if (keyboard == null) {
- final Locale savedLocale = Utils.setSystemLocale(
- mResources, mSubtypeSwitcher.getInputLocale());
+ final Locale savedLocale = Utils.setSystemLocale(mResources, id.mLocale);
try {
keyboard = new LatinKeyboard.Builder(mThemeContext).load(id).build();
} finally {
@@ -319,13 +318,19 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
final boolean hasSettingsKey = settingsKeyEnabled && !noSettingsKey;
final int f2KeyMode = getF2KeyMode(settingsKeyEnabled, noSettingsKey);
final boolean hasShortcutKey = voiceKeyEnabled && (isSymbols != voiceKeyOnMain);
+ final boolean forceAscii = Utils.inPrivateImeOptions(
+ mPackageName, LatinIME.IME_OPTION_FORCE_ASCII, editorInfo);
+ final boolean asciiCapable = mSubtypeSwitcher.currentSubtypeContainsExtraValueKey(
+ LatinIME.SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE);
+ final Locale locale = (forceAscii && !asciiCapable)
+ ? Locale.US : mSubtypeSwitcher.getInputLocale();
final Configuration conf = mResources.getConfiguration();
final DisplayMetrics dm = mResources.getDisplayMetrics();
return new KeyboardId(
- mResources.getResourceEntryName(xmlId), xmlId, mSubtypeSwitcher.getInputLocale(),
- conf.orientation, dm.widthPixels, mode, editorInfo,
- hasSettingsKey, f2KeyMode, noSettingsKey, voiceKeyEnabled, hasShortcutKey);
+ mResources.getResourceEntryName(xmlId), xmlId, locale, conf.orientation,
+ dm.widthPixels, mode, editorInfo, hasSettingsKey, f2KeyMode, noSettingsKey,
+ voiceKeyEnabled, hasShortcutKey);
}
public int getKeyboardMode() {
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
index 1b6f57b92..133a9bad2 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
@@ -141,7 +141,7 @@ public class LatinKeyboard extends Keyboard {
}
}
- public void setSpacebarTextFadeFactor(float fadeFactor, LatinKeyboardView view) {
+ public void setSpacebarTextFadeFactor(float fadeFactor, KeyboardView view) {
mSpacebarTextFadeFactor = fadeFactor;
updateSpacebarForLocale(false);
if (view != null)
@@ -154,7 +154,7 @@ public class LatinKeyboard extends Keyboard {
return newColor;
}
- public void updateShortcutKey(boolean available, LatinKeyboardView view) {
+ public void updateShortcutKey(boolean available, KeyboardView view) {
if (mShortcutKey == null)
return;
mShortcutKey.setEnabled(available);
@@ -193,9 +193,8 @@ public class LatinKeyboard extends Keyboard {
&& Utils.hasMultipleEnabledIMEsOrSubtypes(imm, true /* include aux subtypes */);
mSpaceKey.setNeedsSpecialPopupHint(shouldShowInputMethodPicker);
// If application locales are explicitly selected.
- if (mSubtypeSwitcher.needsToDisplayLanguage()) {
- mSpaceKey.setIcon(getSpaceDrawable(
- mSubtypeSwitcher.getInputLocale(), isAutoCorrection));
+ if (mSubtypeSwitcher.needsToDisplayLanguage(mId.mLocale)) {
+ mSpaceKey.setIcon(getSpaceDrawable(mId.mLocale, isAutoCorrection));
} else if (isAutoCorrection) {
mSpaceKey.setIcon(getSpaceDrawable(null, true));
} else {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 394414d03..552517bc8 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -106,6 +106,18 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
*/
public static final String IME_OPTION_NO_SETTINGS_KEY = "noSettingsKey";
+ /**
+ * The private IME option used to indicate that the given text field needs
+ * ASCII code points input.
+ */
+ public static final String IME_OPTION_FORCE_ASCII = "forceAscii";
+
+ /**
+ * The subtype extra value used to indicate that the subtype keyboard layout is capable for
+ * typing ASCII characters.
+ */
+ public static final String SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE = "AsciiCapable";
+
private static final int EXTENDED_TOUCHABLE_REGION_HEIGHT = 100;
// How many continuous deletes at which to start deleting at a higher speed.
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index 0a391a77e..4e6268c1c 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -415,7 +415,10 @@ public class SubtypeSwitcher {
return mEnabledKeyboardSubtypesOfCurrentInputMethod.size();
}
- public boolean needsToDisplayLanguage() {
+ public boolean needsToDisplayLanguage(Locale keyboardLocale) {
+ if (!keyboardLocale.equals(mInputLocale)) {
+ return false;
+ }
return mNeedsToDisplayLanguage;
}