Remove keyboard layout description on the spacebar

Bug: 8056376
Change-Id: I33f07e7a044c2b5fc20de40c7a9777dab493e41c
main
Tadashi G. Takaoka 2013-01-25 13:11:51 +09:00
parent f77e9d7e3a
commit 8630cd9d17
3 changed files with 137 additions and 92 deletions

View File

@ -1443,9 +1443,9 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
// 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)
// fr qwertz T Fr Français Français
// de qwerty T De Deutsch Deutsch
// en_US azerty T En English English (US)
// zz azerty T AZERTY AZERTY
// Get InputMethodSubtype's full display name in its locale.
@ -1453,8 +1453,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
if (SubtypeLocale.isNoLanguage(subtype)) {
return SubtypeLocale.getKeyboardLayoutSetDisplayName(subtype);
}
return SubtypeLocale.getSubtypeDisplayName(subtype);
return SubtypeLocale.getSubtypeLocaleDisplayName(subtype.getLocale());
}
// Get InputMethodSubtype's short display name in its locale.
@ -1472,6 +1471,6 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
return SubtypeLocale.getKeyboardLayoutSetDisplayName(subtype);
}
final Locale locale = SubtypeLocale.getSubtypeLocale(subtype);
return StringUtils.toTitleCase(locale.getDisplayLanguage(locale), locale);
return SubtypeLocale.getSubtypeLocaleDisplayName(locale.getLanguage());
}
}

View File

@ -140,26 +140,32 @@ public final class SubtypeLocale {
&& isExceptionalLocale(localeString)) {
return sExceptionalLocaleToWithLayoutNameIdsMap.get(localeString);
}
final String key = localeString.equals(NO_LANGUAGE)
final String key = NO_LANGUAGE.equals(localeString)
? getNoLanguageLayoutKey(keyboardLayoutName)
: keyboardLayoutName;
final Integer nameId = sKeyboardLayoutToNameIdsMap.get(key);
return nameId == null ? UNKNOWN_KEYBOARD_LAYOUT : nameId;
}
private static Locale getDisplayLocaleOfSubtypeLocale(final String localeString) {
if (NO_LANGUAGE.equals(localeString)) {
return sResources.getConfiguration().locale;
}
return LocaleUtils.constructLocaleFromString(localeString);
}
public static String getSubtypeLocaleDisplayNameInSystemLocale(final String localeString) {
final Locale displayLocale = sResources.getConfiguration().locale;
return getSubtypeLocaleDisplayNameInternal(localeString, displayLocale);
}
public static String getSubtypeLocaleDisplayName(final String localeString) {
final Locale displayLocale = LocaleUtils.constructLocaleFromString(localeString);
final Locale displayLocale = getDisplayLocaleOfSubtypeLocale(localeString);
return getSubtypeLocaleDisplayNameInternal(localeString, displayLocale);
}
private static String getSubtypeLocaleDisplayNameInternal(final String localeString,
final Locale displayLocale) {
final Locale locale = LocaleUtils.constructLocaleFromString(localeString);
final Integer exceptionalNameResId = sExceptionalLocaleToNameIdsMap.get(localeString);
final String displayName;
if (exceptionalNameResId != null) {
@ -170,7 +176,11 @@ public final class SubtypeLocale {
}
};
displayName = getExceptionalName.runInLocale(sResources, displayLocale);
} else if (NO_LANGUAGE.equals(localeString)) {
// No language subtype should be displayed in system locale.
return sResources.getString(R.string.subtype_no_language);
} else {
final Locale locale = LocaleUtils.constructLocaleFromString(localeString);
displayName = locale.getDisplayName(displayLocale);
}
return StringUtils.toTitleCase(displayName, displayLocale);
@ -203,13 +213,13 @@ public final class SubtypeLocale {
}
public static String getSubtypeDisplayNameInSystemLocale(final InputMethodSubtype subtype) {
final Locale subtypeLocale = sResources.getConfiguration().locale;
return getSubtypeDisplayNameInternal(subtype, subtypeLocale);
final Locale displayLocale = sResources.getConfiguration().locale;
return getSubtypeDisplayNameInternal(subtype, displayLocale);
}
public static String getSubtypeDisplayName(final InputMethodSubtype subtype) {
final Locale subtypeLocale = LocaleUtils.constructLocaleFromString(subtype.getLocale());
return getSubtypeDisplayNameInternal(subtype, subtypeLocale);
final Locale displayLocale = getDisplayLocaleOfSubtypeLocale(subtype.getLocale());
return getSubtypeDisplayNameInternal(subtype, displayLocale);
}
private static String getSubtypeDisplayNameInternal(final InputMethodSubtype subtype,
@ -225,6 +235,7 @@ public final class SubtypeLocale {
// TODO: Remove this catch when InputMethodManager.getCurrentInputMethodSubtype
// is fixed.
Log.w(TAG, "Unknown subtype: mode=" + subtype.getMode()
+ " nameResId=" + subtype.getNameResId()
+ " locale=" + subtype.getLocale()
+ " extra=" + subtype.getExtraValue()
+ "\n" + Utils.getStackTrace());
@ -232,15 +243,13 @@ public final class SubtypeLocale {
}
}
};
final Locale locale = isNoLanguage(subtype)
? sResources.getConfiguration().locale : displayLocale;
return StringUtils.toTitleCase(
getSubtypeName.runInLocale(sResources, locale), locale);
getSubtypeName.runInLocale(sResources, displayLocale), displayLocale);
}
public static boolean isNoLanguage(final InputMethodSubtype subtype) {
final String localeString = subtype.getLocale();
return localeString.equals(NO_LANGUAGE);
return NO_LANGUAGE.equals(localeString);
}
public static Locale getSubtypeLocale(final InputMethodSubtype subtype) {

View File

@ -17,6 +17,7 @@
package com.android.inputmethod.keyboard;
import android.content.Context;
import android.content.res.Resources;
import android.test.AndroidTestCase;
import android.view.inputmethod.InputMethodSubtype;
@ -25,6 +26,7 @@ import com.android.inputmethod.latin.CollectionUtils;
import com.android.inputmethod.latin.RichInputMethodManager;
import com.android.inputmethod.latin.StringUtils;
import com.android.inputmethod.latin.SubtypeLocale;
import com.android.inputmethod.latin.LocaleUtils.RunInLocale;
import java.util.ArrayList;
import java.util.Locale;
@ -34,6 +36,19 @@ public class SpacebarTextTests extends AndroidTestCase {
private final ArrayList<InputMethodSubtype> mSubtypesList = CollectionUtils.newArrayList();
private RichInputMethodManager mRichImm;
private Resources mRes;
InputMethodSubtype EN_US;
InputMethodSubtype EN_GB;
InputMethodSubtype ES_US;
InputMethodSubtype FR;
InputMethodSubtype FR_CA;
InputMethodSubtype DE;
InputMethodSubtype ZZ;
InputMethodSubtype DE_QWERTY;
InputMethodSubtype FR_QWERTZ;
InputMethodSubtype US_AZERTY;
InputMethodSubtype ZZ_AZERTY;
@Override
protected void setUp() throws Exception {
@ -41,7 +56,25 @@ public class SpacebarTextTests extends AndroidTestCase {
final Context context = getContext();
RichInputMethodManager.init(context);
mRichImm = RichInputMethodManager.getInstance();
mRes = context.getResources();
SubtypeLocale.init(context);
EN_US = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(Locale.US.toString(), "qwerty");
EN_GB = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(Locale.UK.toString(), "qwerty");
ES_US = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet("es_US", "spanish");
FR = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(Locale.FRENCH.toString(), "azerty");
FR_CA = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.CANADA_FRENCH.toString(), "qwerty");
DE = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(Locale.GERMAN.toString(), "qwertz");
ZZ = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(SubtypeLocale.NO_LANGUAGE, "qwerty");
DE_QWERTY = AdditionalSubtype.createAdditionalSubtype(
Locale.GERMAN.toString(), "qwerty", null);
FR_QWERTZ = AdditionalSubtype.createAdditionalSubtype(
Locale.FRENCH.toString(), "qwertz", null);
US_AZERTY = AdditionalSubtype.createAdditionalSubtype(
Locale.US.toString(), "azerty", null);
ZZ_AZERTY = AdditionalSubtype.createAdditionalSubtype(
SubtypeLocale.NO_LANGUAGE, "azerty", null);
}
public void testAllFullDisplayName() {
@ -90,47 +123,33 @@ public class SpacebarTextTests extends AndroidTestCase {
// 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
// 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)
// fr qwertz T Fr Français Français
// de qwerty T De Deutsch Deutsch
// en_US azerty T En English English (US)
// zz azerty T AZERTY AZERTY
public void testPredefinedSubtypes() {
final InputMethodSubtype EN_US = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.US.toString(), "qwerty");
final InputMethodSubtype EN_GB = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.UK.toString(), "qwerty");
final InputMethodSubtype FR = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.FRENCH.toString(), "azerty");
final InputMethodSubtype FR_CA = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.CANADA_FRENCH.toString(), "qwerty");
final InputMethodSubtype DE = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
Locale.GERMAN.toString(), "qwertz");
final InputMethodSubtype ZZ = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
SubtypeLocale.NO_LANGUAGE, "qwerty");
assertEquals("en_US", "English (US)",
MainKeyboardView.getFullDisplayName(EN_US));
assertEquals("en_GB", "English (UK)",
MainKeyboardView.getFullDisplayName(EN_GB));
assertEquals("fr ", "Français",
MainKeyboardView.getFullDisplayName(FR));
assertEquals("fr_CA", "Français (Canada)",
MainKeyboardView.getFullDisplayName(FR_CA));
assertEquals("de ", "Deutsch",
MainKeyboardView.getFullDisplayName(DE));
assertEquals("zz ", "QWERTY",
MainKeyboardView.getFullDisplayName(ZZ));
private final RunInLocale<Void> testsPredefinedSubtypes = new RunInLocale<Void>() {
@Override
protected Void job(Resources res) {
assertEquals("en_US", "English (US)", MainKeyboardView.getFullDisplayName(EN_US));
assertEquals("en_GB", "English (UK)", MainKeyboardView.getFullDisplayName(EN_GB));
assertEquals("es_US", "Español (EE.UU.)", MainKeyboardView.getFullDisplayName(ES_US));
assertEquals("fr ", "Français", MainKeyboardView.getFullDisplayName(FR));
assertEquals("fr_CA", "Français (Canada)", MainKeyboardView.getFullDisplayName(FR_CA));
assertEquals("de ", "Deutsch", MainKeyboardView.getFullDisplayName(DE));
assertEquals("zz ", "QWERTY", MainKeyboardView.getFullDisplayName(ZZ));
assertEquals("en_US", "English", MainKeyboardView.getMiddleDisplayName(EN_US));
assertEquals("en_GB", "English", MainKeyboardView.getMiddleDisplayName(EN_GB));
assertEquals("es_US", "Español", MainKeyboardView.getMiddleDisplayName(ES_US));
assertEquals("fr ", "Français", MainKeyboardView.getMiddleDisplayName(FR));
assertEquals("fr_CA", "Français", MainKeyboardView.getMiddleDisplayName(FR_CA));
assertEquals("de ", "Deutsch", MainKeyboardView.getMiddleDisplayName(DE));
@ -138,39 +157,57 @@ public class SpacebarTextTests extends AndroidTestCase {
assertEquals("en_US", "En", MainKeyboardView.getShortDisplayName(EN_US));
assertEquals("en_GB", "En", MainKeyboardView.getShortDisplayName(EN_GB));
assertEquals("es_US", "Es", MainKeyboardView.getShortDisplayName(ES_US));
assertEquals("fr ", "Fr", MainKeyboardView.getShortDisplayName(FR));
assertEquals("fr_CA", "Fr", MainKeyboardView.getShortDisplayName(FR_CA));
assertEquals("de ", "De", MainKeyboardView.getShortDisplayName(DE));
assertEquals("zz ", "", MainKeyboardView.getShortDisplayName(ZZ));
return null;
}
};
public void testAdditionalSubtype() {
final InputMethodSubtype DE_QWERTY = AdditionalSubtype.createAdditionalSubtype(
Locale.GERMAN.toString(), "qwerty", null);
final InputMethodSubtype FR_QWERTZ = AdditionalSubtype.createAdditionalSubtype(
Locale.FRENCH.toString(), "qwertz", null);
final InputMethodSubtype US_AZERTY = AdditionalSubtype.createAdditionalSubtype(
Locale.US.toString(), "azerty", null);
final InputMethodSubtype ZZ_AZERTY = AdditionalSubtype.createAdditionalSubtype(
SubtypeLocale.NO_LANGUAGE, "azerty", null);
assertEquals("fr qwertz", "Français (QWERTZ)",
private final RunInLocale<Void> testsAdditionalSubtypes = new RunInLocale<Void>() {
@Override
protected Void job(Resources res) {
assertEquals("fr qwertz", "Français",
MainKeyboardView.getFullDisplayName(FR_QWERTZ));
assertEquals("de qwerty", "Deutsch (QWERTY)",
assertEquals("de qwerty", "Deutsch",
MainKeyboardView.getFullDisplayName(DE_QWERTY));
assertEquals("en_US azerty", "English (US) (AZERTY)",
assertEquals("en_US azerty", "English (US)",
MainKeyboardView.getFullDisplayName(US_AZERTY));
assertEquals("zz azerty", "AZERTY",
MainKeyboardView.getFullDisplayName(ZZ_AZERTY));
assertEquals("fr qwertz", "Français", MainKeyboardView.getMiddleDisplayName(FR_QWERTZ));
assertEquals("de qwerty", "Deutsch", MainKeyboardView.getMiddleDisplayName(DE_QWERTY));
assertEquals("en_US azerty", "English", MainKeyboardView.getMiddleDisplayName(US_AZERTY));
assertEquals("zz azerty", "AZERTY", MainKeyboardView.getMiddleDisplayName(ZZ_AZERTY));
assertEquals("fr qwertz", "Français",
MainKeyboardView.getMiddleDisplayName(FR_QWERTZ));
assertEquals("de qwerty", "Deutsch",
MainKeyboardView.getMiddleDisplayName(DE_QWERTY));
assertEquals("en_US azerty", "English",
MainKeyboardView.getMiddleDisplayName(US_AZERTY));
assertEquals("zz azerty", "AZERTY",
MainKeyboardView.getMiddleDisplayName(ZZ_AZERTY));
assertEquals("fr qwertz", "Fr", MainKeyboardView.getShortDisplayName(FR_QWERTZ));
assertEquals("de qwerty", "De", MainKeyboardView.getShortDisplayName(DE_QWERTY));
assertEquals("en_US azerty", "En", MainKeyboardView.getShortDisplayName(US_AZERTY));
assertEquals("zz azerty", "", MainKeyboardView.getShortDisplayName(ZZ_AZERTY));
return null;
}
};
public void testPredefinedSubtypesInEnglish() {
testsPredefinedSubtypes.runInLocale(mRes, Locale.ENGLISH);
}
public void testAdditionalSubtypeInEnglish() {
testsAdditionalSubtypes.runInLocale(mRes, Locale.ENGLISH);
}
public void testPredefinedSubtypesInFrench() {
testsPredefinedSubtypes.runInLocale(mRes, Locale.FRENCH);
}
public void testAdditionalSubtypeInFrench() {
testsAdditionalSubtypes.runInLocale(mRes, Locale.FRENCH);
}
}