Skip to content
Snippets Groups Projects
Commit 76d4ffee authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Add Spanish United States keyboard

The subtype locale name on the spacebar will be suppressed when only
one subtype is enabled and
 - Subtype locale is equal to the system locale.
or
 - Subtype language is equal to the system language but the subtype is
   implicitly enabled.

Thus the "es_ES" system locale chooses "es" subtype keyboard
implicitly but the keyboard doesn't have the subtype name on its
spacebar.

This change also removes Spanish Latin America keyboard.

Bug: 7531804
Change-Id: Ib929e8235d643c0ba039eb010e18ab721a734e15
parent 9904c9eb
No related branches found
No related tags found
No related merge requests found
......@@ -140,10 +140,12 @@
<string-array name="subtype_locale_exception_keys">
<item>en_US</item>
<item>en_GB</item>
<item>es_US</item>
</string-array>
<string-array name="subtype_locale_exception_values">
<item>English (US)</item>
<item>English (UK)</item>
<item>Español (EE.UU.)</item>
</string-array>
<!-- Generic subtype label -->
......
......@@ -36,7 +36,8 @@
en_GB: English Great Britain/qwerty
eo: Esperanto/spanish
es: Spanish/spanish
es_419: Spanish Latin America/qwerty
es_US: Spanish United States/spanish
(es_419: Spanish Latin America/qwerty)
et: Estonian/nordic
fa: Persian/arabic
fi: Finnish/nordic
......@@ -184,13 +185,22 @@
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:subtypeId="0x84d2efc6"
android:imeSubtypeLocale="es_US"
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=spanish,AsciiCapable"
/>
<!--
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:subtypeId="0x623f9286"
android:imeSubtypeLocale="es_419"
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable"
android:imeSubtypeExtraValue="KeyboardLayoutSet=spanish,AsciiCapable"
/>
-->
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
android:subtypeId="0xec2d3955"
......
......@@ -1029,18 +1029,19 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
// InputMethodSubtype's display name for spacebar text in its locale.
// isAdditionalSubtype (T=true, F=false)
// locale layout | Short Middle Full
// ------ ------ - ---- --------- ----------------------
// en_US qwerty F En English English (US) exception
// en_GB qwerty F En English English (UK) exception
// fr azerty F Fr Français Français
// fr_CA qwerty F Fr Français Français (Canada)
// de qwertz F De Deutsch Deutsch
// zz qwerty F QWERTY QWERTY
// fr qwertz T Fr Français Français (QWERTZ)
// de qwerty T De Deutsch Deutsch (QWERTY)
// en_US azerty T En English English (US) (AZERTY)
// zz azerty T AZERTY AZERTY
// locale layout | Short Middle Full
// ------ ------- - ---- --------- ----------------------
// en_US qwerty F En English English (US) exception
// en_GB qwerty F En English English (UK) exception
// es_US spanish F Es Español Español (EE.UU.) exception
// fr azerty F Fr Français Français
// fr_CA qwerty F Fr Français Français (Canada)
// de qwertz F De Deutsch Deutsch
// zz qwerty F QWERTY QWERTY
// fr qwertz T Fr Français Français (QWERTZ)
// de qwerty T De Deutsch Deutsch (QWERTY)
// en_US azerty T En English English (US) (AZERTY)
// zz azerty T AZERTY AZERTY
// Get InputMethodSubtype's full display name in its locale.
static String getFullDisplayName(final InputMethodSubtype subtype, final Resources res) {
......
......@@ -87,6 +87,9 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
}
static final class SubtypeLocaleAdapter extends ArrayAdapter<SubtypeLocaleItem> {
private static final String TAG = SubtypeLocaleAdapter.class.getSimpleName();
private static final boolean DEBUG_SUBTYPE_ID = false;
public SubtypeLocaleAdapter(final Context context) {
super(context, android.R.layout.simple_spinner_item);
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
......@@ -97,6 +100,11 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
final int count = imi.getSubtypeCount();
for (int i = 0; i < count; i++) {
final InputMethodSubtype subtype = imi.getSubtypeAt(i);
if (DEBUG_SUBTYPE_ID) {
android.util.Log.d(TAG, String.format("%-6s 0x%08x %11d %s",
subtype.getLocale(), subtype.hashCode(), subtype.hashCode(),
SubtypeLocale.getSubtypeDisplayName(subtype, context.getResources())));
}
if (subtype.containsExtraValueKey(ASCII_CAPABLE)) {
items.add(createItem(context, subtype.getLocale()));
}
......
......@@ -96,28 +96,42 @@ public final class RichInputMethodManager {
return mInputMethodInfoOfThisIme.getId();
}
public boolean checkIfSubtypeBelongsToThisImeAndEnabled(final InputMethodSubtype ims) {
return checkIfSubtypeBelongsToImeAndEnabled(mInputMethodInfoOfThisIme, ims);
public boolean checkIfSubtypeBelongsToThisImeAndEnabled(final InputMethodSubtype subtype) {
return checkIfSubtypeBelongsToImeAndEnabled(mInputMethodInfoOfThisIme, subtype);
}
public boolean checkIfSubtypeBelongsToThisImeAndImplicitlyEnabled(
final InputMethodSubtype subtype) {
final boolean subtypeEnabled = checkIfSubtypeBelongsToThisImeAndEnabled(subtype);
final boolean subtypeExplicitlyEnabled = checkIfSubtypeBelongsToList(
subtype, mImmWrapper.mImm.getEnabledInputMethodSubtypeList(
mInputMethodInfoOfThisIme, false /* allowsImplicitlySelectedSubtypes */));
return subtypeEnabled && !subtypeExplicitlyEnabled;
}
public boolean checkIfSubtypeBelongsToImeAndEnabled(final InputMethodInfo imi,
final InputMethodSubtype ims) {
final List<InputMethodSubtype> subtypes = mImmWrapper.mImm.getEnabledInputMethodSubtypeList(
imi, true /* allowsImplicitlySelectedSubtypes */);
for (final InputMethodSubtype subtype : subtypes) {
if (subtype.equals(ims)) {
final InputMethodSubtype subtype) {
return checkIfSubtypeBelongsToList(
subtype, mImmWrapper.mImm.getEnabledInputMethodSubtypeList(
imi, true /* allowsImplicitlySelectedSubtypes */));
}
private static boolean checkIfSubtypeBelongsToList(final InputMethodSubtype subtype,
final List<InputMethodSubtype> subtypes) {
for (final InputMethodSubtype ims : subtypes) {
if (ims.equals(subtype)) {
return true;
}
}
return false;
}
public boolean checkIfSubtypeBelongsToThisIme(final InputMethodSubtype ims) {
public boolean checkIfSubtypeBelongsToThisIme(final InputMethodSubtype subtype) {
final InputMethodInfo myImi = mInputMethodInfoOfThisIme;
final int count = myImi.getSubtypeCount();
for (int i = 0; i < count; i++) {
final InputMethodSubtype subtype = myImi.getSubtypeAt(i);
if (subtype.equals(ims)) {
final InputMethodSubtype ims = myImi.getSubtypeAt(i);
if (ims.equals(subtype)) {
return true;
}
}
......
......@@ -151,18 +151,19 @@ public final class SubtypeLocale {
// InputMethodSubtype's display name in its locale.
// isAdditionalSubtype (T=true, F=false)
// locale layout | display name
// ------ ------ - ----------------------
// en_US qwerty F English (US) exception
// en_GB qwerty F English (UK) exception
// fr azerty F Français
// fr_CA qwerty F Français (Canada)
// de qwertz F Deutsch
// zz qwerty F No language (QWERTY) in system locale
// fr qwertz T Français (QWERTZ)
// de qwerty T Deutsch (QWERTY)
// en_US azerty T English (US) (AZERTY)
// zz azerty T No language (AZERTY) in system locale
// locale layout | display name
// ------ ------- - ----------------------
// en_US qwerty F English (US) exception
// en_GB qwerty F English (UK) exception
// es_US spanish F Español (EE.UU.) exception
// fr azerty F Français
// fr_CA qwerty F Français (Canada)
// de qwertz F Deutsch
// zz qwerty F No language (QWERTY) in system locale
// fr qwertz T Français (QWERTZ)
// de qwerty T Deutsch (QWERTY)
// en_US azerty T English (US) (AZERTY)
// zz azerty T No language (AZERTY) in system locale
public static String getSubtypeDisplayName(final InputMethodSubtype subtype, Resources res) {
final String replacementString = (Build.VERSION.SDK_INT >= /* JELLY_BEAN */ 15
......
......@@ -193,8 +193,13 @@ public final class SubtypeSwitcher {
}
final Locale newLocale = SubtypeLocale.getSubtypeLocale(newSubtype);
final boolean sameLocale = mCurrentSystemLocale.equals(newLocale);
final boolean sameLanguage = mCurrentSystemLocale.getLanguage().equals(
newLocale.getLanguage());
final boolean implicitlyEnabled =
mRichImm.checkIfSubtypeBelongsToThisImeAndImplicitlyEnabled(newSubtype);
mNeedsToDisplayLanguage.updateIsSystemLanguageSameAsInputLanguage(
mCurrentSystemLocale.equals(newLocale));
sameLocale || (sameLanguage && implicitlyEnabled));
if (newSubtype.equals(mCurrentSubtype)) return;
......
......@@ -59,24 +59,27 @@ public class SubtypeLocaleTests extends AndroidTestCase {
// InputMethodSubtype's display name in its locale.
// isAdditionalSubtype (T=true, F=false)
// locale layout | display name
// ------ ------ - ----------------------
// en_US qwerty F English (US) exception
// en_GB qwerty F English (UK) exception
// fr azerty F Français
// fr_CA qwerty F Français (Canada)
// de qwertz F Deutsch
// zz qwerty F No language (QWERTY) in system locale
// fr qwertz T Français (QWERTZ)
// de qwerty T Deutsch (QWERTY)
// en_US azerty T English (US) (AZERTY)
// zz azerty T No language (AZERTY) in system locale
// locale layout | display name
// ------ ------- - ----------------------
// en_US qwerty F English (US) exception
// en_GB qwerty F English (UK) exception
// es_US spanish F Español (EE.UU.) exception
// fr azerty F Français
// fr_CA qwerty F Français (Canada)
// de qwertz F Deutsch
// zz qwerty F No language (QWERTY) in system locale
// fr qwertz T Français (QWERTZ)
// de qwerty T Deutsch (QWERTY)
// en_US azerty T English (US) (AZERTY)
// zz azerty T No language (AZERTY) in system locale
public void testPredefinedSubtypesInEnglish() {
final InputMethodSubtype EN_US = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.US.toString(), "qwerty");
final InputMethodSubtype EN_GB = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.UK.toString(), "qwerty");
final InputMethodSubtype ES_US = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
"es_US", "spanish");
final InputMethodSubtype FR = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.FRENCH.toString(), "azerty");
final InputMethodSubtype FR_CA = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
......@@ -88,6 +91,7 @@ public class SubtypeLocaleTests extends AndroidTestCase {
assertEquals("en_US", "qwerty", SubtypeLocale.getKeyboardLayoutSetName(EN_US));
assertEquals("en_GB", "qwerty", SubtypeLocale.getKeyboardLayoutSetName(EN_GB));
assertEquals("es_US", "spanish", SubtypeLocale.getKeyboardLayoutSetName(ES_US));
assertEquals("fr ", "azerty", SubtypeLocale.getKeyboardLayoutSetName(FR));
assertEquals("fr_CA", "qwerty", SubtypeLocale.getKeyboardLayoutSetName(FR_CA));
assertEquals("de ", "qwertz", SubtypeLocale.getKeyboardLayoutSetName(DE));
......@@ -100,6 +104,8 @@ public class SubtypeLocaleTests extends AndroidTestCase {
SubtypeLocale.getSubtypeDisplayName(EN_US, res));
assertEquals("en_GB", "English (UK)",
SubtypeLocale.getSubtypeDisplayName(EN_GB, res));
assertEquals("es_US", "Español (EE.UU.)",
SubtypeLocale.getSubtypeDisplayName(ES_US, res));
assertEquals("fr ", "Français",
SubtypeLocale.getSubtypeDisplayName(FR, res));
assertEquals("fr_CA", "Français (Canada)",
......@@ -146,6 +152,8 @@ public class SubtypeLocaleTests extends AndroidTestCase {
Locale.US.toString(), "qwerty");
final InputMethodSubtype EN_GB = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.UK.toString(), "qwerty");
final InputMethodSubtype ES_US = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
"es_US", "spanish");
final InputMethodSubtype FR = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.FRENCH.toString(), "azerty");
final InputMethodSubtype FR_CA = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
......@@ -162,6 +170,8 @@ public class SubtypeLocaleTests extends AndroidTestCase {
SubtypeLocale.getSubtypeDisplayName(EN_US, res));
assertEquals("en_GB", "English (UK)",
SubtypeLocale.getSubtypeDisplayName(EN_GB, res));
assertEquals("es_US", "Español (EE.UU.)",
SubtypeLocale.getSubtypeDisplayName(ES_US, res));
assertEquals("fr ", "Français",
SubtypeLocale.getSubtypeDisplayName(FR, res));
assertEquals("fr_CA", "Français (Canada)",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment