Display custom input style name in system locale
Bug: 8032166 Change-Id: Ib9a6b63c4d540ce377892fb865e53abdd8adec16main
parent
9d514af466
commit
8203f7afe7
|
@ -120,18 +120,14 @@
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<!-- Subtype locale display name exceptions.
|
<!-- Subtype locale display name exceptions.
|
||||||
For each exception, there should be related string resource for display name that has
|
For each exception, there should be related string resources for display name that may have
|
||||||
explicit keyboard layout. The string resource name must be "subtype_with_layout_<locale>. -->
|
explicit keyboard layout. The string resource name must be "subtype_<locale>" or
|
||||||
|
"subtype_with_layout_<locale>. Please refer to strings.xml for these resources. -->
|
||||||
<string-array name="subtype_locale_exception_keys">
|
<string-array name="subtype_locale_exception_keys">
|
||||||
<item>en_US</item>
|
<item>en_US</item>
|
||||||
<item>en_GB</item>
|
<item>en_GB</item>
|
||||||
<item>es_US</item>
|
<item>es_US</item>
|
||||||
</string-array>
|
</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 -->
|
<!-- Generic subtype label -->
|
||||||
<string name="subtype_generic">%s</string>
|
<string name="subtype_generic">%s</string>
|
||||||
|
|
|
@ -319,12 +319,17 @@
|
||||||
<string name="subtype_en_GB">English (UK)</string>
|
<string name="subtype_en_GB">English (UK)</string>
|
||||||
<!-- Description for English (United States) keyboard subtype [CHAR LIMIT=25] -->
|
<!-- Description for English (United States) keyboard subtype [CHAR LIMIT=25] -->
|
||||||
<string name="subtype_en_US">English (US)</string>
|
<string name="subtype_en_US">English (US)</string>
|
||||||
|
<!-- Description for Spanish (United States) keyboard subtype [CHAR LIMIT=25] -->
|
||||||
|
<string name="subtype_es_US">Spanish (US)</string>
|
||||||
<!-- Description for English (United Kingdom) keyboard subtype with explicit keyboard layout [CHAR LIMIT=25]
|
<!-- Description for English (United Kingdom) keyboard subtype with explicit keyboard layout [CHAR LIMIT=25]
|
||||||
This should be identical to subtype_en_GB aside from the trailing (%s). -->
|
This should be identical to subtype_en_GB aside from the trailing (%s). -->
|
||||||
<string name="subtype_with_layout_en_GB">English (UK) (<xliff:g id="layout">%s</xliff:g>)</string>
|
<string name="subtype_with_layout_en_GB">English (UK) (<xliff:g id="layout">%s</xliff:g>)</string>
|
||||||
<!-- Description for English (United States) keyboard subtype with explicit keyboard layout [CHAR LIMIT=25]
|
<!-- Description for English (United States) keyboard subtype with explicit keyboard layout [CHAR LIMIT=25]
|
||||||
This should be identical to subtype_en_US aside from the trailing (%s). -->
|
This should be identical to subtype_en_US aside from the trailing (%s). -->
|
||||||
<string name="subtype_with_layout_en_US">English (US) (<xliff:g id="layout">%s</xliff:g>)</string>
|
<string name="subtype_with_layout_en_US">English (US) (<xliff:g id="layout">%s</xliff:g>)</string>
|
||||||
|
<!-- Description for Spanish (United States) keyboard subtype with explicit keyboard layout [CHAR LIMIT=25]
|
||||||
|
This should be identical to subtype_es_US aside from the trailing (%s). -->
|
||||||
|
<string name="subtype_with_layout_es_US">Spanish (US) (<xliff:g id="layout">%s</xliff:g>)</string>
|
||||||
<!-- TODO: Uncomment once we can handle IETF language tag with script name specified.
|
<!-- TODO: Uncomment once we can handle IETF language tag with script name specified.
|
||||||
Description for Serbian Cyrillic keyboard subtype [CHAR LIMIT=25]
|
Description for Serbian Cyrillic keyboard subtype [CHAR LIMIT=25]
|
||||||
<string name="subtype_serbian_cyrillic">Serbian (Cyrillic)</string>
|
<string name="subtype_serbian_cyrillic">Serbian (Cyrillic)</string>
|
||||||
|
|
|
@ -186,7 +186,7 @@
|
||||||
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection"
|
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_subtype_keyboard"
|
<subtype android:icon="@drawable/ic_subtype_keyboard"
|
||||||
android:label="@string/subtype_generic"
|
android:label="@string/subtype_es_US"
|
||||||
android:subtypeId="0x84d2efc6"
|
android:subtypeId="0x84d2efc6"
|
||||||
android:imeSubtypeLocale="es_US"
|
android:imeSubtypeLocale="es_US"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
|
|
|
@ -72,7 +72,8 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubtypeLocaleItem(final String localeString) {
|
public SubtypeLocaleItem(final String localeString) {
|
||||||
this(localeString, SubtypeLocale.getSubtypeLocaleDisplayName(localeString));
|
this(localeString,
|
||||||
|
SubtypeLocale.getSubtypeLocaleDisplayNameInSystemLocale(localeString));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -103,7 +104,7 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
|
||||||
if (DEBUG_SUBTYPE_ID) {
|
if (DEBUG_SUBTYPE_ID) {
|
||||||
android.util.Log.d(TAG, String.format("%-6s 0x%08x %11d %s",
|
android.util.Log.d(TAG, String.format("%-6s 0x%08x %11d %s",
|
||||||
subtype.getLocale(), subtype.hashCode(), subtype.hashCode(),
|
subtype.getLocale(), subtype.hashCode(), subtype.hashCode(),
|
||||||
SubtypeLocale.getSubtypeDisplayName(subtype)));
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(subtype)));
|
||||||
}
|
}
|
||||||
if (subtype.containsExtraValueKey(ASCII_CAPABLE)) {
|
if (subtype.containsExtraValueKey(ASCII_CAPABLE)) {
|
||||||
items.add(createItem(context, subtype.getLocale()));
|
items.add(createItem(context, subtype.getLocale()));
|
||||||
|
@ -205,7 +206,8 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
|
||||||
setDialogTitle(R.string.add_style);
|
setDialogTitle(R.string.add_style);
|
||||||
setKey(KEY_NEW_SUBTYPE);
|
setKey(KEY_NEW_SUBTYPE);
|
||||||
} else {
|
} else {
|
||||||
final String displayName = SubtypeLocale.getSubtypeDisplayName(subtype);
|
final String displayName =
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(subtype);
|
||||||
setTitle(displayName);
|
setTitle(displayName);
|
||||||
setDialogTitle(displayName);
|
setDialogTitle(displayName);
|
||||||
setKey(KEY_PREFIX + subtype.getLocale() + "_"
|
setKey(KEY_PREFIX + subtype.getLocale() + "_"
|
||||||
|
@ -497,7 +499,7 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
|
||||||
final Context context = getActivity();
|
final Context context = getActivity();
|
||||||
final Resources res = context.getResources();
|
final Resources res = context.getResources();
|
||||||
final String message = res.getString(R.string.custom_input_style_already_exists,
|
final String message = res.getString(R.string.custom_input_style_already_exists,
|
||||||
SubtypeLocale.getSubtypeDisplayName(subtype));
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(subtype));
|
||||||
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
|
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -237,7 +237,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment
|
||||||
final StringBuilder styles = new StringBuilder();
|
final StringBuilder styles = new StringBuilder();
|
||||||
for (final InputMethodSubtype subtype : subtypes) {
|
for (final InputMethodSubtype subtype : subtypes) {
|
||||||
if (styles.length() > 0) styles.append(", ");
|
if (styles.length() > 0) styles.append(", ");
|
||||||
styles.append(SubtypeLocale.getSubtypeDisplayName(subtype));
|
styles.append(SubtypeLocale.getSubtypeDisplayNameInSystemLocale(subtype));
|
||||||
}
|
}
|
||||||
customInputStyles.setSummary(styles);
|
customInputStyles.setSummary(styles);
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,20 +51,22 @@ public final class SubtypeLocale {
|
||||||
private static final HashMap<String, Integer> sKeyboardLayoutToNameIdsMap =
|
private static final HashMap<String, Integer> sKeyboardLayoutToNameIdsMap =
|
||||||
CollectionUtils.newHashMap();
|
CollectionUtils.newHashMap();
|
||||||
// Exceptional locale to subtype name resource id map.
|
// Exceptional locale to subtype name resource id map.
|
||||||
|
private static final HashMap<String, Integer> sExceptionalLocaleToNameIdsMap =
|
||||||
|
CollectionUtils.newHashMap();
|
||||||
|
// Exceptional locale to subtype name with layout resource id map.
|
||||||
private static final HashMap<String, Integer> sExceptionalLocaleToWithLayoutNameIdsMap =
|
private static final HashMap<String, Integer> sExceptionalLocaleToWithLayoutNameIdsMap =
|
||||||
CollectionUtils.newHashMap();
|
CollectionUtils.newHashMap();
|
||||||
|
private static final String SUBTYPE_NAME_RESOURCE_PREFIX =
|
||||||
|
"string/subtype_";
|
||||||
private static final String SUBTYPE_NAME_RESOURCE_GENERIC_PREFIX =
|
private static final String SUBTYPE_NAME_RESOURCE_GENERIC_PREFIX =
|
||||||
"string/subtype_generic_";
|
"string/subtype_generic_";
|
||||||
private static final String SUBTYPE_NAME_RESOURCE_WITH_LAYOUT_PREFIX =
|
private static final String SUBTYPE_NAME_RESOURCE_WITH_LAYOUT_PREFIX =
|
||||||
"string/subtype_with_layout_";
|
"string/subtype_with_layout_";
|
||||||
private static final String SUBTYPE_NAME_RESOURCE_NO_LANGUAGE_PREFIX =
|
private static final String SUBTYPE_NAME_RESOURCE_NO_LANGUAGE_PREFIX =
|
||||||
"string/subtype_no_language_";
|
"string/subtype_no_language_";
|
||||||
// Exceptional locales to display name map.
|
|
||||||
private static final HashMap<String, String> sExceptionalDisplayNamesMap =
|
|
||||||
CollectionUtils.newHashMap();
|
|
||||||
// Keyboard layout set name for the subtypes that don't have a keyboardLayoutSet extra value.
|
// Keyboard layout set name for the subtypes that don't have a keyboardLayoutSet extra value.
|
||||||
// This is for compatibility to keep the same subtype ids as pre-JellyBean.
|
// This is for compatibility to keep the same subtype ids as pre-JellyBean.
|
||||||
private static final HashMap<String,String> sLocaleAndExtraValueToKeyboardLayoutSetMap =
|
private static final HashMap<String, String> sLocaleAndExtraValueToKeyboardLayoutSetMap =
|
||||||
CollectionUtils.newHashMap();
|
CollectionUtils.newHashMap();
|
||||||
|
|
||||||
private SubtypeLocale() {
|
private SubtypeLocale() {
|
||||||
|
@ -98,14 +100,16 @@ public final class SubtypeLocale {
|
||||||
|
|
||||||
final String[] exceptionalLocales = res.getStringArray(
|
final String[] exceptionalLocales = res.getStringArray(
|
||||||
R.array.subtype_locale_exception_keys);
|
R.array.subtype_locale_exception_keys);
|
||||||
final String[] exceptionalDisplayNames = res.getStringArray(
|
|
||||||
R.array.subtype_locale_exception_values);
|
|
||||||
for (int i = 0; i < exceptionalLocales.length; i++) {
|
for (int i = 0; i < exceptionalLocales.length; i++) {
|
||||||
final String localeString = exceptionalLocales[i];
|
final String localeString = exceptionalLocales[i];
|
||||||
sExceptionalDisplayNamesMap.put(localeString, exceptionalDisplayNames[i]);
|
final String resourceName = SUBTYPE_NAME_RESOURCE_PREFIX + localeString;
|
||||||
final String resourceName = SUBTYPE_NAME_RESOURCE_WITH_LAYOUT_PREFIX + localeString;
|
|
||||||
final int resId = res.getIdentifier(resourceName, null, RESOURCE_PACKAGE_NAME);
|
final int resId = res.getIdentifier(resourceName, null, RESOURCE_PACKAGE_NAME);
|
||||||
sExceptionalLocaleToWithLayoutNameIdsMap.put(localeString, resId);
|
sExceptionalLocaleToNameIdsMap.put(localeString, resId);
|
||||||
|
final String resourceNameWithLayout =
|
||||||
|
SUBTYPE_NAME_RESOURCE_WITH_LAYOUT_PREFIX + localeString;
|
||||||
|
final int resIdWithLayout = res.getIdentifier(
|
||||||
|
resourceNameWithLayout, null, RESOURCE_PACKAGE_NAME);
|
||||||
|
sExceptionalLocaleToWithLayoutNameIdsMap.put(localeString, resIdWithLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
final String[] keyboardLayoutSetMap = res.getStringArray(
|
final String[] keyboardLayoutSetMap = res.getStringArray(
|
||||||
|
@ -124,7 +128,7 @@ public final class SubtypeLocale {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isExceptionalLocale(final String localeString) {
|
public static boolean isExceptionalLocale(final String localeString) {
|
||||||
return sExceptionalLocaleToWithLayoutNameIdsMap.containsKey(localeString);
|
return sExceptionalLocaleToNameIdsMap.containsKey(localeString);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String getNoLanguageLayoutKey(final String keyboardLayoutName) {
|
private static final String getNoLanguageLayoutKey(final String keyboardLayoutName) {
|
||||||
|
@ -143,13 +147,33 @@ public final class SubtypeLocale {
|
||||||
return nameId == null ? UNKNOWN_KEYBOARD_LAYOUT : nameId;
|
return nameId == null ? UNKNOWN_KEYBOARD_LAYOUT : nameId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getSubtypeLocaleDisplayNameInSystemLocale(final String localeString) {
|
||||||
|
final Locale displayLocale = sResources.getConfiguration().locale;
|
||||||
|
return getSubtypeLocaleDisplayNameInternal(localeString, displayLocale);
|
||||||
|
}
|
||||||
|
|
||||||
public static String getSubtypeLocaleDisplayName(final String localeString) {
|
public static String getSubtypeLocaleDisplayName(final String localeString) {
|
||||||
final String exceptionalValue = sExceptionalDisplayNamesMap.get(localeString);
|
final Locale displayLocale = LocaleUtils.constructLocaleFromString(localeString);
|
||||||
if (exceptionalValue != null) {
|
return getSubtypeLocaleDisplayNameInternal(localeString, displayLocale);
|
||||||
return exceptionalValue;
|
}
|
||||||
}
|
|
||||||
|
private static String getSubtypeLocaleDisplayNameInternal(final String localeString,
|
||||||
|
final Locale displayLocale) {
|
||||||
final Locale locale = LocaleUtils.constructLocaleFromString(localeString);
|
final Locale locale = LocaleUtils.constructLocaleFromString(localeString);
|
||||||
return StringUtils.toTitleCase(locale.getDisplayName(locale), locale);
|
final Integer exceptionalNameResId = sExceptionalLocaleToNameIdsMap.get(localeString);
|
||||||
|
final String displayName;
|
||||||
|
if (exceptionalNameResId != null) {
|
||||||
|
final RunInLocale<String> getExceptionalName = new RunInLocale<String>() {
|
||||||
|
@Override
|
||||||
|
protected String job(final Resources res) {
|
||||||
|
return res.getString(exceptionalNameResId);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
displayName = getExceptionalName.runInLocale(sResources, displayLocale);
|
||||||
|
} else {
|
||||||
|
displayName = locale.getDisplayName(displayLocale);
|
||||||
|
}
|
||||||
|
return StringUtils.toTitleCase(displayName, displayLocale);
|
||||||
}
|
}
|
||||||
|
|
||||||
// InputMethodSubtype's display name in its locale.
|
// InputMethodSubtype's display name in its locale.
|
||||||
|
@ -165,24 +189,36 @@ public final class SubtypeLocale {
|
||||||
// zz qwerty F No language (QWERTY) in system locale
|
// zz qwerty F No language (QWERTY) in system locale
|
||||||
// fr qwertz T Français (QWERTZ)
|
// fr qwertz T Français (QWERTZ)
|
||||||
// de qwerty T Deutsch (QWERTY)
|
// de qwerty T Deutsch (QWERTY)
|
||||||
// en_US azerty T English (US) (AZERTY)
|
// en_US azerty T English (US) (AZERTY) exception
|
||||||
// zz azerty T No language (AZERTY) in system locale
|
// zz azerty T No language (AZERTY) in system locale
|
||||||
|
|
||||||
private static String getReplacementString(final InputMethodSubtype subtype) {
|
private static String getReplacementString(final InputMethodSubtype subtype,
|
||||||
|
final Locale displayLocale) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN
|
||||||
&& subtype.containsExtraValueKey(UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME)) {
|
&& subtype.containsExtraValueKey(UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME)) {
|
||||||
return subtype.getExtraValueOf(UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME);
|
return subtype.getExtraValueOf(UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME);
|
||||||
} else {
|
} else {
|
||||||
return getSubtypeLocaleDisplayName(subtype.getLocale());
|
return getSubtypeLocaleDisplayNameInternal(subtype.getLocale(), displayLocale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getSubtypeDisplayNameInSystemLocale(final InputMethodSubtype subtype) {
|
||||||
|
final Locale subtypeLocale = sResources.getConfiguration().locale;
|
||||||
|
return getSubtypeDisplayNameInternal(subtype, subtypeLocale);
|
||||||
|
}
|
||||||
|
|
||||||
public static String getSubtypeDisplayName(final InputMethodSubtype subtype) {
|
public static String getSubtypeDisplayName(final InputMethodSubtype subtype) {
|
||||||
final String replacementString = getReplacementString(subtype);
|
final Locale subtypeLocale = LocaleUtils.constructLocaleFromString(subtype.getLocale());
|
||||||
|
return getSubtypeDisplayNameInternal(subtype, subtypeLocale);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getSubtypeDisplayNameInternal(final InputMethodSubtype subtype,
|
||||||
|
final Locale displayLocale) {
|
||||||
|
final String replacementString = getReplacementString(subtype, displayLocale);
|
||||||
final int nameResId = subtype.getNameResId();
|
final int nameResId = subtype.getNameResId();
|
||||||
final RunInLocale<String> getSubtypeName = new RunInLocale<String>() {
|
final RunInLocale<String> getSubtypeName = new RunInLocale<String>() {
|
||||||
@Override
|
@Override
|
||||||
protected String job(Resources res) {
|
protected String job(final Resources res) {
|
||||||
try {
|
try {
|
||||||
return res.getString(nameResId, replacementString);
|
return res.getString(nameResId, replacementString);
|
||||||
} catch (Resources.NotFoundException e) {
|
} catch (Resources.NotFoundException e) {
|
||||||
|
@ -197,8 +233,9 @@ public final class SubtypeLocale {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
final Locale locale = isNoLanguage(subtype)
|
final Locale locale = isNoLanguage(subtype)
|
||||||
? sResources.getConfiguration().locale : getSubtypeLocale(subtype);
|
? sResources.getConfiguration().locale : displayLocale;
|
||||||
return getSubtypeName.runInLocale(sResources, locale);
|
return StringUtils.toTitleCase(
|
||||||
|
getSubtypeName.runInLocale(sResources, locale), locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isNoLanguage(final InputMethodSubtype subtype) {
|
public static boolean isNoLanguage(final InputMethodSubtype subtype) {
|
||||||
|
|
|
@ -42,8 +42,10 @@ public class SubtypeLocaleTests extends AndroidTestCase {
|
||||||
InputMethodSubtype ZZ;
|
InputMethodSubtype ZZ;
|
||||||
InputMethodSubtype DE_QWERTY;
|
InputMethodSubtype DE_QWERTY;
|
||||||
InputMethodSubtype FR_QWERTZ;
|
InputMethodSubtype FR_QWERTZ;
|
||||||
InputMethodSubtype US_AZERTY;
|
InputMethodSubtype EN_US_AZERTY;
|
||||||
InputMethodSubtype ZZ_AZERTY;
|
InputMethodSubtype EN_UK_DVORAK;
|
||||||
|
InputMethodSubtype ES_US_COLEMAK;
|
||||||
|
InputMethodSubtype ZZ_PC;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
|
@ -72,10 +74,14 @@ public class SubtypeLocaleTests extends AndroidTestCase {
|
||||||
Locale.GERMAN.toString(), "qwerty", null);
|
Locale.GERMAN.toString(), "qwerty", null);
|
||||||
FR_QWERTZ = AdditionalSubtype.createAdditionalSubtype(
|
FR_QWERTZ = AdditionalSubtype.createAdditionalSubtype(
|
||||||
Locale.FRENCH.toString(), "qwertz", null);
|
Locale.FRENCH.toString(), "qwertz", null);
|
||||||
US_AZERTY = AdditionalSubtype.createAdditionalSubtype(
|
EN_US_AZERTY = AdditionalSubtype.createAdditionalSubtype(
|
||||||
Locale.US.toString(), "azerty", null);
|
Locale.US.toString(), "azerty", null);
|
||||||
ZZ_AZERTY = AdditionalSubtype.createAdditionalSubtype(
|
EN_UK_DVORAK = AdditionalSubtype.createAdditionalSubtype(
|
||||||
SubtypeLocale.NO_LANGUAGE, "azerty", null);
|
Locale.UK.toString(), "dvorak", null);
|
||||||
|
ES_US_COLEMAK = AdditionalSubtype.createAdditionalSubtype(
|
||||||
|
"es_US", "colemak", null);
|
||||||
|
ZZ_PC = AdditionalSubtype.createAdditionalSubtype(
|
||||||
|
SubtypeLocale.NO_LANGUAGE, "pcqwerty", null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,8 +112,10 @@ public class SubtypeLocaleTests extends AndroidTestCase {
|
||||||
// zz qwerty F No language (QWERTY) in system locale
|
// zz qwerty F No language (QWERTY) in system locale
|
||||||
// fr qwertz T Français (QWERTZ)
|
// fr qwertz T Français (QWERTZ)
|
||||||
// de qwerty T Deutsch (QWERTY)
|
// de qwerty T Deutsch (QWERTY)
|
||||||
// en_US azerty T English (US) (AZERTY)
|
// en_US azerty T English (US) (AZERTY) exception
|
||||||
// zz azerty T No language (AZERTY) in system locale
|
// en_UK dvorak T English (UK) (Dvorak) exception
|
||||||
|
// es_US colemak T Español (EE.UU.) (Colemak) exception
|
||||||
|
// zz pc T No language (PC) in system locale
|
||||||
|
|
||||||
public void testPredefinedSubtypesInEnglish() {
|
public void testPredefinedSubtypesInEnglish() {
|
||||||
assertEquals("en_US", "qwerty", SubtypeLocale.getKeyboardLayoutSetName(EN_US));
|
assertEquals("en_US", "qwerty", SubtypeLocale.getKeyboardLayoutSetName(EN_US));
|
||||||
|
@ -150,9 +158,13 @@ public class SubtypeLocaleTests extends AndroidTestCase {
|
||||||
assertEquals("de qwerty", "Deutsch (QWERTY)",
|
assertEquals("de qwerty", "Deutsch (QWERTY)",
|
||||||
SubtypeLocale.getSubtypeDisplayName(DE_QWERTY));
|
SubtypeLocale.getSubtypeDisplayName(DE_QWERTY));
|
||||||
assertEquals("en_US azerty", "English (US) (AZERTY)",
|
assertEquals("en_US azerty", "English (US) (AZERTY)",
|
||||||
SubtypeLocale.getSubtypeDisplayName(US_AZERTY));
|
SubtypeLocale.getSubtypeDisplayName(EN_US_AZERTY));
|
||||||
assertEquals("zz azerty", "No language (AZERTY)",
|
assertEquals("en_UK dvorak", "English (UK) (Dvorak)",
|
||||||
SubtypeLocale.getSubtypeDisplayName(ZZ_AZERTY));
|
SubtypeLocale.getSubtypeDisplayName(EN_UK_DVORAK));
|
||||||
|
assertEquals("es_US colemak","Español (EE.UU.) (Colemak)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayName(ES_US_COLEMAK));
|
||||||
|
assertEquals("zz pc", "No language (PC)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayName(ZZ_PC));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -192,9 +204,149 @@ public class SubtypeLocaleTests extends AndroidTestCase {
|
||||||
assertEquals("de qwerty", "Deutsch (QWERTY)",
|
assertEquals("de qwerty", "Deutsch (QWERTY)",
|
||||||
SubtypeLocale.getSubtypeDisplayName(DE_QWERTY));
|
SubtypeLocale.getSubtypeDisplayName(DE_QWERTY));
|
||||||
assertEquals("en_US azerty", "English (US) (AZERTY)",
|
assertEquals("en_US azerty", "English (US) (AZERTY)",
|
||||||
SubtypeLocale.getSubtypeDisplayName(US_AZERTY));
|
SubtypeLocale.getSubtypeDisplayName(EN_US_AZERTY));
|
||||||
assertEquals("zz azerty", "Aucune langue (AZERTY)",
|
assertEquals("en_UK dvorak", "English (UK) (Dvorak)",
|
||||||
SubtypeLocale.getSubtypeDisplayName(ZZ_AZERTY));
|
SubtypeLocale.getSubtypeDisplayName(EN_UK_DVORAK));
|
||||||
|
assertEquals("es_US colemak","Español (EE.UU.) (Colemak)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayName(ES_US_COLEMAK));
|
||||||
|
assertEquals("zz azerty", "Aucune langue (PC)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayName(ZZ_PC));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
tests.runInLocale(mRes, Locale.FRENCH);
|
||||||
|
}
|
||||||
|
|
||||||
|
// InputMethodSubtype's display name in system locale (en_US).
|
||||||
|
// isAdditionalSubtype (T=true, F=false)
|
||||||
|
// locale layout | display name
|
||||||
|
// ------ ------- - ----------------------
|
||||||
|
// en_US qwerty F English (US) exception
|
||||||
|
// en_GB qwerty F English (UK) exception
|
||||||
|
// es_US spanish F Spanish (US) exception
|
||||||
|
// fr azerty F French
|
||||||
|
// fr_CA qwerty F French (Canada)
|
||||||
|
// de qwertz F German
|
||||||
|
// zz qwerty F No language (QWERTY)
|
||||||
|
// fr qwertz T French (QWERTZ)
|
||||||
|
// de qwerty T German (QWERTY)
|
||||||
|
// en_US azerty T English (US) (AZERTY) exception
|
||||||
|
// en_UK dvorak T English (UK) (Dvorak) exception
|
||||||
|
// es_US colemak T Spanish (US) (Colemak) exception
|
||||||
|
// zz pc T No language (PC)
|
||||||
|
|
||||||
|
public void testPredefinedSubtypesInEnglishSystemLocale() {
|
||||||
|
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));
|
||||||
|
assertEquals("zz ", "qwerty", SubtypeLocale.getKeyboardLayoutSetName(ZZ));
|
||||||
|
|
||||||
|
final RunInLocale<Void> tests = new RunInLocale<Void>() {
|
||||||
|
@Override
|
||||||
|
protected Void job(Resources res) {
|
||||||
|
assertEquals("en_US", "English (US)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(EN_US));
|
||||||
|
assertEquals("en_GB", "English (UK)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(EN_GB));
|
||||||
|
assertEquals("es_US", "Spanish (US)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(ES_US));
|
||||||
|
assertEquals("fr ", "French",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(FR));
|
||||||
|
assertEquals("fr_CA", "French (Canada)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(FR_CA));
|
||||||
|
assertEquals("de ", "German",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(DE));
|
||||||
|
assertEquals("zz ", "No language (QWERTY)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(ZZ));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
tests.runInLocale(mRes, Locale.ENGLISH);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAdditionalSubtypesInEnglishSystemLocale() {
|
||||||
|
final RunInLocale<Void> tests = new RunInLocale<Void>() {
|
||||||
|
@Override
|
||||||
|
protected Void job(Resources res) {
|
||||||
|
assertEquals("fr qwertz", "French (QWERTZ)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(FR_QWERTZ));
|
||||||
|
assertEquals("de qwerty", "German (QWERTY)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(DE_QWERTY));
|
||||||
|
assertEquals("en_US azerty", "English (US) (AZERTY)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(EN_US_AZERTY));
|
||||||
|
assertEquals("en_UK dvorak", "English (UK) (Dvorak)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(EN_UK_DVORAK));
|
||||||
|
assertEquals("es_US colemak","Spanish (US) (Colemak)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(ES_US_COLEMAK));
|
||||||
|
assertEquals("zz azerty", "No language (PC)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(ZZ_PC));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
tests.runInLocale(mRes, Locale.ENGLISH);
|
||||||
|
}
|
||||||
|
|
||||||
|
// InputMethodSubtype's display name in system locale (fr).
|
||||||
|
// isAdditionalSubtype (T=true, F=false)
|
||||||
|
// locale layout | display name
|
||||||
|
// ------ ------- - ----------------------
|
||||||
|
// en_US qwerty F Anglais (États-Unis) exception
|
||||||
|
// en_GB qwerty F Anglais (Royaume-Uni) exception
|
||||||
|
// es_US spanish F Espagnol (États-Unis) exception
|
||||||
|
// fr azerty F Français
|
||||||
|
// fr_CA qwerty F Français (Canada)
|
||||||
|
// de qwertz F Allemand
|
||||||
|
// zz qwerty F Pas de langue (QWERTY)
|
||||||
|
// fr qwertz T Français (QWERTZ)
|
||||||
|
// de qwerty T Allemand (QWERTY)
|
||||||
|
// en_US azerty T Anglais (États-Unis) (AZERTY) exception
|
||||||
|
// en_UK dvorak T Anglais (Royaume-Uni) (Dvorak) exception
|
||||||
|
// es_US colemak T Espagnol (États-Unis) (Colemak) exception
|
||||||
|
// zz pc T Aucune langue (PC)
|
||||||
|
|
||||||
|
public void testPredefinedSubtypesInFrenchSystemLocale() {
|
||||||
|
final RunInLocale<Void> tests = new RunInLocale<Void>() {
|
||||||
|
@Override
|
||||||
|
protected Void job(Resources res) {
|
||||||
|
assertEquals("en_US", "Anglais (États-Unis)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(EN_US));
|
||||||
|
assertEquals("en_GB", "Anglais (Royaume-Uni)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(EN_GB));
|
||||||
|
assertEquals("es_US", "Espagnol (États-Unis)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(ES_US));
|
||||||
|
assertEquals("fr ", "Français",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(FR));
|
||||||
|
assertEquals("fr_CA", "Français (Canada)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(FR_CA));
|
||||||
|
assertEquals("de ", "Allemand",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(DE));
|
||||||
|
assertEquals("zz ", "Pas de langue (QWERTY)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(ZZ));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
tests.runInLocale(mRes, Locale.FRENCH);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAdditionalSubtypesInFrenchSystemLocale() {
|
||||||
|
final RunInLocale<Void> tests = new RunInLocale<Void>() {
|
||||||
|
@Override
|
||||||
|
protected Void job(Resources res) {
|
||||||
|
assertEquals("fr qwertz", "Français (QWERTZ)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(FR_QWERTZ));
|
||||||
|
assertEquals("de qwerty", "Allemand (QWERTY)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(DE_QWERTY));
|
||||||
|
assertEquals("en_US azerty", "Anglais (États-Unis) (AZERTY)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(EN_US_AZERTY));
|
||||||
|
assertEquals("en_UK dvorak", "Anglais (Royaume-Uni) (Dvorak)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(EN_UK_DVORAK));
|
||||||
|
assertEquals("es_US colemak","Espagnol (États-Unis) (Colemak)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(ES_US_COLEMAK));
|
||||||
|
assertEquals("zz azerty", "Aucune langue (PC)",
|
||||||
|
SubtypeLocale.getSubtypeDisplayNameInSystemLocale(ZZ_PC));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue