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

Commit 8afe2189 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Use locale to look up KeyboardTextsTable"

parents ee6392f5 6bb3556f
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