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

Commit 27b42ced authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Fix "no language" subtype name (DO NOT MERGE)

* Move SubtypeLocale.get{Full,Middle,Short}DisplayName() to
  LatinLeyboardView and add unit tests (SpacebarTextTests).
* Add SubtypeLocale.getSubtypeDisplayName()

This is a cherry-pick of I57420c6a from Master.

Bug: 6393865
Change-Id: I68748189c17c73984ac4ae05a5a40fb54bf46453
parent 49caddbd
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -166,7 +166,9 @@
        <item>PC</item>
    </string-array>
    <!-- Description for generic subtype that has predefined layout.
         The string resource name must be "subtype_generic_<layout name>". -->
         The string resource name must be "subtype_generic_<layout name>".
         The string resource with "No language" also must be added to strings.xml and the resource
         name must be "subtype_no_language_<layout name>" -->
    <string name="subtype_generic_qwerty">%s (QWERTY)</string>
    <string name="subtype_generic_qwertz">%s (QWERTZ)</string>
    <string name="subtype_generic_azerty">%s (AZERTY)</string>
+10 −0
Original line number Diff line number Diff line
@@ -256,6 +256,16 @@
    <string name="subtype_no_language">No language</string>
    <!-- Description for language agnostic QWERTY keyboard subtype [CHAR LIMIT=22] -->
    <string name="subtype_no_language_qwerty">No language (QWERTY)</string>
    <!-- Description for language agnostic QWERTZ keyboard subtype [CHAR LIMIT=22] -->
    <string name="subtype_no_language_qwertz">No language (QWERTZ)</string>
    <!-- Description for language agnostic AZERTY keyboard subtype [CHAR LIMIT=22] -->
    <string name="subtype_no_language_azerty">No language (AZERTY)</string>
    <!-- Description for language agnostic Dvorak keyboard subtype [CHAR LIMIT=22] -->
    <string name="subtype_no_language_dvorak">No language (Dvorak)</string>
    <!-- Description for language agnostic Colemak keyboard subtype [CHAR LIMIT=22] -->
    <string name="subtype_no_language_colemak">No language (Colemak)</string>
    <!-- Description for language agnostic PC QWERTY keyboard subtype [CHAR LIMIT=22] -->
    <string name="subtype_no_language_pcqwerty">No language (PC)</string>

    <!-- Title of the preference settings for custom input styles (language and keyboard layout pairs) [CHAR LIMIT=22]-->
    <string name="custom_input_styles_title">Custom input styles</string>
+48 −3
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.animation.AnimatorInflater;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -48,11 +49,13 @@ import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.ResearchLogger;
import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
import com.android.inputmethod.latin.StringUtils;
import com.android.inputmethod.latin.SubtypeLocale;
import com.android.inputmethod.latin.Utils;
import com.android.inputmethod.latin.Utils.UsabilityStudyLogUtils;
import com.android.inputmethod.latin.define.ProductionFlag;

import java.util.Locale;
import java.util.WeakHashMap;

/**
@@ -907,7 +910,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
        paint.setTextAlign(Align.CENTER);
        paint.setTypeface(Typeface.DEFAULT);
        // Estimate appropriate language name text size to fit in maxTextWidth.
        String language = SubtypeLocale.getFullDisplayName(subtype);
        String language = getFullDisplayName(subtype, getResources());
        int textWidth = getTextWidth(paint, language, origTextSize);
        // Assuming text width and text size are proportional to each other.
        float textSize = origTextSize * Math.min(width / textWidth, 1.0f);
@@ -919,7 +922,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke

        final boolean useShortName;
        if (useMiddleName) {
            language = SubtypeLocale.getMiddleDisplayName(subtype);
            language = getMiddleDisplayName(subtype);
            textWidth = getTextWidth(paint, language, origTextSize);
            textSize = origTextSize * Math.min(width / textWidth, 1.0f);
            useShortName = (textSize / origTextSize < MINIMUM_SCALE_OF_LANGUAGE_NAME)
@@ -929,7 +932,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
        }

        if (useShortName) {
            language = SubtypeLocale.getShortDisplayName(subtype);
            language = getShortDisplayName(subtype);
            textWidth = getTextWidth(paint, language, origTextSize);
            textSize = origTextSize * Math.min(width / textWidth, 1.0f);
        }
@@ -975,4 +978,46 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
            drawIcon(canvas, mSpaceIcon, x, y, iconWidth, iconHeight);
        }
    }

    // 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

    // Get InputMethodSubtype's full display name in its locale.
    static String getFullDisplayName(InputMethodSubtype subtype, Resources res) {
        if (SubtypeLocale.isNoLanguage(subtype)) {
            return SubtypeLocale.getKeyboardLayoutSetDisplayName(subtype);
        }

        return SubtypeLocale.getSubtypeDisplayName(subtype, res);
    }

    // Get InputMethodSubtype's short display name in its locale.
    static String getShortDisplayName(InputMethodSubtype subtype) {
        if (SubtypeLocale.isNoLanguage(subtype)) {
            return "";
        }
        final Locale locale = SubtypeLocale.getSubtypeLocale(subtype);
        return StringUtils.toTitleCase(locale.getLanguage(), locale);
    }

    // Get InputMethodSubtype's middle display name in its locale.
    static String getMiddleDisplayName(InputMethodSubtype subtype) {
        if (SubtypeLocale.isNoLanguage(subtype)) {
            return SubtypeLocale.getKeyboardLayoutSetDisplayName(subtype);
        }
        final Locale locale = SubtypeLocale.getSubtypeLocale(subtype);
        return StringUtils.toTitleCase(locale.getDisplayLanguage(locale), locale);
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -42,8 +42,7 @@ public class AdditionalSubtype {
        final String layoutExtraValue = KEYBOARD_LAYOUT_SET + "=" + keyboardLayoutSetName;
        final String filteredExtraValue = StringUtils.appendToCsvIfNotExists(
                IS_ADDITIONAL_SUBTYPE, extraValue);
        final int nameId = SubtypeLocale.getSubtypeNameIdFromKeyboardLayoutName(
                keyboardLayoutSetName);
        final int nameId = SubtypeLocale.getSubtypeNameId(localeString, keyboardLayoutSetName);
        return new InputMethodSubtype(nameId, R.drawable.ic_subtype_keyboard,
                localeString, KEYBOARD_MODE,
                layoutExtraValue + "," + filteredExtraValue, false, false);
+3 −8
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;

import java.util.Locale;
import java.util.TreeSet;

public class AdditionalSubtypeSettings extends PreferenceFragment {
@@ -61,7 +60,7 @@ public class AdditionalSubtypeSettings extends PreferenceFragment {
        }

        public SubtypeLocaleItem(String localeString) {
            this(localeString, getDisplayName(localeString));
            this(localeString, SubtypeLocale.getSubtypeLocaleDisplayName(localeString));
        }

        @Override
@@ -73,11 +72,6 @@ public class AdditionalSubtypeSettings extends PreferenceFragment {
        public int compareTo(SubtypeLocaleItem o) {
            return first.compareTo(o.first);
        }

        private static String getDisplayName(String localeString) {
            final Locale locale = LocaleUtils.constructLocaleFromString(localeString);
            return StringUtils.toTitleCase(locale.getDisplayName(locale), locale);
        }
    }

    static class SubtypeLocaleAdapter extends ArrayAdapter<SubtypeLocaleItem> {
@@ -185,7 +179,8 @@ public class AdditionalSubtypeSettings extends PreferenceFragment {
                setDialogTitle(R.string.add_style);
                setKey(KEY_NEW_SUBTYPE);
            } else {
                final String displayName = SubtypeLocale.getFullDisplayName(subtype);
                final String displayName = SubtypeLocale.getSubtypeDisplayName(
                        subtype, getContext().getResources());
                setTitle(displayName);
                setDialogTitle(displayName);
                setKey(KEY_PREFIX + subtype.getLocale() + "_"
Loading