Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6bb3556f authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Use locale to look up KeyboardTextsTable

Change-Id: I1e05c7fdbb757efef0e9407dc25482ef1115e49a
parent 465a2ac5
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -41,8 +41,7 @@ public final class KeyboardTextsSet {
    private HashMap<String, String> mResourceNameToTextsMap = CollectionUtils.newHashMap();

    public void setLocale(final Locale locale, final Context context) {
        final String language = locale.getLanguage();
        mTextsTable = KeyboardTextsTable.getTextsTable(language);
        mTextsTable = KeyboardTextsTable.getTextsTable(locale);
        final Resources res = context.getResources();
        final int referenceId = context.getApplicationInfo().labelRes;
        final String resourcePackageName = res.getResourcePackageName(referenceId);
+196 −190

File changed.

Preview size limit exceeded, changes collapsed.

+28 −22
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.inputmethod.keyboard.internal;
import com.android.inputmethod.latin.utils.CollectionUtils;

import java.util.HashMap;
import java.util.Locale;

/**
 * !!!!! DO NOT EDIT THIS FILE !!!!!
@@ -44,19 +45,19 @@ import java.util.HashMap;
public final class KeyboardTextsTable {
    // Name to index map.
    private static final HashMap<String, Integer> sNameToIndexesMap = CollectionUtils.newHashMap();
    // Language to texts table map.
    private static final HashMap<String, String[]> sLanguageToTextsTableMap =
    // Locale to texts table map.
    private static final HashMap<String, String[]> sLocaleToTextsTableMap =
            CollectionUtils.newHashMap();
    // TODO: Remove this variable after debugging.
    // Texts table to language maps.
    private static final HashMap<String[], String> sTextsTableToLanguageMap =
    // Texts table to locale maps.
    private static final HashMap<String[], String> sTextsTableToLocaleMap =
            CollectionUtils.newHashMap();

    public static String getText(final String name, final String[] textsTable) {
        final Integer indexObj = sNameToIndexesMap.get(name);
        if (indexObj == null) {
            throw new RuntimeException("Unknown text name=" + name + " language="
                    + sTextsTableToLanguageMap.get(textsTable));
            throw new RuntimeException("Unknown text name=" + name + " locale="
                    + sTextsTableToLocaleMap.get(textsTable));
        }
        final int index = indexObj;
        final String text = (index < textsTable.length) ? textsTable[index] : null;
@@ -64,17 +65,24 @@ public final class KeyboardTextsTable {
            return text;
        }
        // Sanity check.
        if (index >= 0 && index < LANGUAGE_DEFAULT.length) {
            return LANGUAGE_DEFAULT[index];
        if (index >= 0 && index < TEXTS_DEFAULT.length) {
            return TEXTS_DEFAULT[index];
        }
        // Throw exception for debugging purpose.
        throw new RuntimeException("Illegal index=" + index + " for name=" + name
                + " language=" + sTextsTableToLanguageMap.get(textsTable));
                + " locale=" + sTextsTableToLocaleMap.get(textsTable));
    }

    public static String[] getTextsTable(final String language) {
        final String[] textsTable = sLanguageToTextsTableMap.get(language);
        return textsTable != null ? textsTable : LANGUAGE_DEFAULT;
    public static String[] getTextsTable(final Locale locale) {
        final String localeKey = locale.toString();
        if (sLocaleToTextsTableMap.containsKey(localeKey)) {
            return sLocaleToTextsTableMap.get(localeKey);
        }
        final String languageKey = locale.getLanguage();
        if (sLocaleToTextsTableMap.containsKey(languageKey)) {
            return sLocaleToTextsTableMap.get(languageKey);
        }
        return TEXTS_DEFAULT;
    }

    private static final String[] NAMES = {
@@ -85,16 +93,14 @@ public final class KeyboardTextsTable {
    private static final String EMPTY = "";

    /* Default texts */
    private static final String[] LANGUAGE_DEFAULT = {
    private static final String[] TEXTS_DEFAULT = {
        /* @DEFAULT_TEXTS@ */
    };

    /* @TEXTS@ */
    // TODO: Use the language + "_" + region representation for the locale string key.
    // Currently we are dropping the region from the key.
    private static final Object[] LANGUAGES_AND_TEXTS = {
    private static final Object[] LOCALES_AND_TEXTS = {
    // "locale", TEXT_ARRAY,  /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */
        /* @LANGUAGES_AND_TEXTS@ */
        /* @LOCALES_AND_TEXTS@ */
    };

    static {
@@ -102,11 +108,11 @@ public final class KeyboardTextsTable {
            sNameToIndexesMap.put(NAMES[index], index);
        }

        for (int i = 0; i < LANGUAGES_AND_TEXTS.length; i += 2) {
            final String language = (String)LANGUAGES_AND_TEXTS[i];
            final String[] textsTable = (String[])LANGUAGES_AND_TEXTS[i + 1];
            sLanguageToTextsTableMap.put(language, textsTable);
            sTextsTableToLanguageMap.put(textsTable, language);
        for (int i = 0; i < LOCALES_AND_TEXTS.length; i += 2) {
            final String locale = (String)LOCALES_AND_TEXTS[i];
            final String[] textsTable = (String[])LOCALES_AND_TEXTS[i + 1];
            sLocaleToTextsTableMap.put(locale, textsTable);
            sTextsTableToLocaleMap.put(textsTable, locale);
        }
    }
}
+11 −11
Original line number Diff line number Diff line
@@ -85,24 +85,24 @@ public final class JarUtils {
        });
    }

    // The language is taken from string resource jar entry name (values-<language>/)
    // or {@link LocaleUtils#DEFAULT_LANGUAGE_NAME} for the default string resource
    // The locale is taken from string resource jar entry name (values-<locale>/)
    // or {@link LocaleUtils#DEFAULT_LOCALE_KEY} for the default string resource
    // directory (values/).
    public static String getLanguageFromEntryName(final String jarEntryName) {
    public static String getLocaleFromEntryName(final String jarEntryName) {
        final String dirName = jarEntryName.substring(0, jarEntryName.lastIndexOf('/'));
        final int pos = dirName.lastIndexOf('/');
        final String parentName = (pos >= 0) ? dirName.substring(pos + 1) : dirName;
        final int languagePos = parentName.indexOf('-');
        if (languagePos < 0) {
        final int localePos = parentName.indexOf('-');
        if (localePos < 0) {
            // Default resource name.
            return LocaleUtils.DEFAULT_LANGUAGE_NAME;
            return LocaleUtils.DEFAULT_LOCALE_KEY;
        }
        final String language = parentName.substring(languagePos + 1);
        final int countryPos = language.indexOf("-r");
        if (countryPos < 0) {
            return language;
        final String locale = parentName.substring(localePos + 1);
        final int regionPos = locale.indexOf("-r");
        if (regionPos < 0) {
            return locale;
        }
        return language.replace("-r", "_");
        return locale.replace("-r", "_");
    }

    public static void close(final Closeable stream) {
+9 −8
Original line number Diff line number Diff line
@@ -26,9 +26,9 @@ import java.util.Locale;
 * for the make-keyboard-text tool.
 */
public final class LocaleUtils {
    public static final String DEFAULT_LANGUAGE_NAME = "DEFAULT";
    public static final String NO_LANGUAGE_CODE = "zz";
    public static final String NO_LANGUAGE_DISPLAY_NAME = "Alphabet";
    public static final String DEFAULT_LOCALE_KEY = "DEFAULT";
    public static final String NO_LANGUAGE_LOCALE_CODE = "zz";
    public static final String NO_LANGUAGE_LOCALE_DISPLAY_NAME = "Alphabet";

    private LocaleUtils() {
        // Intentional empty constructor for utility class.
@@ -48,7 +48,8 @@ public final class LocaleUtils {
            if (retval != null) {
                return retval;
            }
            String[] localeParams = localeStr.split("_", 3);
            final String[] localeParams = localeStr.split("_", 3);
            // TODO: Use JDK 7 Locale.Builder to handle a script name.
            if (localeParams.length == 1) {
                retval = new Locale(localeParams[0]);
            } else if (localeParams.length == 2) {
@@ -63,11 +64,11 @@ public final class LocaleUtils {
        }
    }

    public static String getLanguageDisplayName(final String language) {
        if (language.equals(NO_LANGUAGE_CODE)) {
            return NO_LANGUAGE_DISPLAY_NAME;
    public static String getLocaleDisplayName(final String localeString) {
        if (localeString.equals(NO_LANGUAGE_LOCALE_CODE)) {
            return NO_LANGUAGE_LOCALE_DISPLAY_NAME;
        }
        final Locale locale = constructLocaleFromString(language);
        final Locale locale = constructLocaleFromString(localeString);
        return locale.getDisplayName(Locale.ENGLISH);
    }
}
Loading