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

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

Merge "Add action key test for Lxx theme"

parents 70ff0c21 c5dc7406
Loading
Loading
Loading
Loading
+27 −18
Original line number Diff line number Diff line
@@ -21,46 +21,43 @@ import android.os.Build;
import android.os.Build.VERSION_CODES;
import android.util.Log;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.R;

import java.util.Arrays;
import java.util.Comparator;

public final class KeyboardTheme {
public final class KeyboardTheme implements Comparable<KeyboardTheme> {
    private static final String TAG = KeyboardTheme.class.getSimpleName();

    static final String KLP_KEYBOARD_THEME_KEY = "pref_keyboard_layout_20110916";
    static final String LXX_KEYBOARD_THEME_KEY = "pref_keyboard_theme_20140509";

    static final int THEME_ID_ICS = 0;
    static final int THEME_ID_KLP = 2;
    static final int THEME_ID_LXX_DARK = 3;
    static final int DEFAULT_THEME_ID = THEME_ID_KLP;
    public static final int THEME_ID_ICS = 0;
    public static final int THEME_ID_KLP = 2;
    public static final int THEME_ID_LXX_DARK = 3;
    public static final int DEFAULT_THEME_ID = THEME_ID_KLP;

    private static final KeyboardTheme[] KEYBOARD_THEMES = {
        new KeyboardTheme(THEME_ID_ICS, R.style.KeyboardTheme_ICS,
                // This has never been selected because we support ICS or later.
                VERSION_CODES.BASE),
        new KeyboardTheme(THEME_ID_KLP, R.style.KeyboardTheme_KLP,
                // Default theme for ICS, JB, and KLP.
                VERSION_CODES.ICE_CREAM_SANDWICH),
        new KeyboardTheme(THEME_ID_LXX_DARK, R.style.KeyboardTheme_LXX_Dark,
                // Default theme for LXX.
                // TODO: Update this constant once the *next* version becomes available.
                VERSION_CODES.CUR_DEVELOPMENT),
    };

    static {
        // Sort {@link #KEYBOARD_THEME} by descending order of {@link #mMinApiVersion}.
        Arrays.sort(KEYBOARD_THEMES, new Comparator<KeyboardTheme>() {
            @Override
            public int compare(final KeyboardTheme lhs, final KeyboardTheme rhs) {
                if (lhs.mMinApiVersion > rhs.mMinApiVersion) return -1;
                if (lhs.mMinApiVersion < rhs.mMinApiVersion) return 1;
                return 0;
            }
        });
        Arrays.sort(KEYBOARD_THEMES);
    }

    public final int mThemeId;
    public final int mStyleId;
    final int mMinApiVersion;
    private final int mMinApiVersion;

    // Note: The themeId should be aligned with "themeId" attribute of Keyboard style
    // in values/themes-<style>.xml.
@@ -70,6 +67,13 @@ public final class KeyboardTheme {
        mMinApiVersion = minApiVersion;
    }

    @Override
    public int compareTo(final KeyboardTheme rhs) {
        if (mMinApiVersion > rhs.mMinApiVersion) return -1;
        if (mMinApiVersion < rhs.mMinApiVersion) return 1;
        return 0;
    }

    @Override
    public boolean equals(final Object o) {
        if (o == this) return true;
@@ -81,7 +85,8 @@ public final class KeyboardTheme {
        return mThemeId;
    }

    private static KeyboardTheme searchKeyboardThemeById(final int themeId) {
    @UsedForTesting
    static KeyboardTheme searchKeyboardThemeById(final int themeId) {
        // TODO: This search algorithm isn't optimal if there are many themes.
        for (final KeyboardTheme theme : KEYBOARD_THEMES) {
            if (theme.mThemeId == themeId) {
@@ -100,6 +105,7 @@ public final class KeyboardTheme {
        return sdkVersion;
    }

    @UsedForTesting
    static KeyboardTheme getDefaultKeyboardTheme(final SharedPreferences prefs,
            final int sdkVersion) {
        final String klpThemeIdString = prefs.getString(KLP_KEYBOARD_THEME_KEY, null);
@@ -134,6 +140,7 @@ public final class KeyboardTheme {
        saveKeyboardThemeId(themeIdString, prefs, getSdkVersion());
    }

    @UsedForTesting
    static String getPreferenceKey(final int sdkVersion) {
        if (sdkVersion <= VERSION_CODES.KITKAT) {
            return KLP_KEYBOARD_THEME_KEY;
@@ -141,8 +148,9 @@ public final class KeyboardTheme {
        return LXX_KEYBOARD_THEME_KEY;
    }

    static void saveKeyboardThemeId(final String themeIdString, final SharedPreferences prefs,
            final int sdkVersion) {
    @UsedForTesting
    static void saveKeyboardThemeId(final String themeIdString,
            final SharedPreferences prefs, final int sdkVersion) {
        final String prefKey = getPreferenceKey(sdkVersion);
        prefs.edit().putString(prefKey, themeIdString).apply();
    }
@@ -151,6 +159,7 @@ public final class KeyboardTheme {
        return getKeyboardTheme(prefs, getSdkVersion());
    }

    @UsedForTesting
    static KeyboardTheme getKeyboardTheme(final SharedPreferences prefs, final int sdkVersion) {
        final String lxxThemeIdString = prefs.getString(LXX_KEYBOARD_THEME_KEY, null);
        if (lxxThemeIdString == null) {
+31 −7
Original line number Diff line number Diff line
@@ -29,9 +29,14 @@ import com.android.inputmethod.latin.utils.RunInLocale;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;

@MediumTest
public final class KeyboardLayoutSetActionLabelTests extends KeyboardLayoutSetTestsBase {
public class KeyboardLayoutSetActionLabelKlpTests extends KeyboardLayoutSetTestsBase {
    @Override
    protected int getKeyboardThemeForTests() {
        return KeyboardTheme.THEME_ID_KLP;
    }

    private static void doTestActionKey(final String tag, final KeyboardLayoutSet layoutSet,
            final int elementId, final String label, final int iconId) {
            final int elementId, final CharSequence label, final int iconId) {
        final Keyboard keyboard = layoutSet.getKeyboard(elementId);
        final Key enterKey = keyboard.getKey(Constants.CODE_ENTER);
        assertNotNull(tag + " enter key on " + keyboard.mId, enterKey);
@@ -39,7 +44,7 @@ public final class KeyboardLayoutSetActionLabelTests extends KeyboardLayoutSetTe
        assertEquals(tag + " enter icon " + enterKey, iconId, enterKey.getIconId());
    }

    private void doTestActionLabel(final String tag, final InputMethodSubtype subtype,
    protected void doTestActionLabel(final String tag, final InputMethodSubtype subtype,
            final int actionId, final int labelResId) {
        final EditorInfo editorInfo = new EditorInfo();
        editorInfo.imeOptions = actionId;
@@ -57,6 +62,11 @@ public final class KeyboardLayoutSetActionLabelTests extends KeyboardLayoutSetTe
        } else {
            label = job.runInLocale(res, SubtypeLocaleUtils.getSubtypeLocale(subtype));
        }
        doTestActionLabel(tag, subtype, editorInfo, label);
    }

    protected void doTestActionLabel(final String tag, final InputMethodSubtype subtype,
            final EditorInfo editorInfo, final CharSequence label) {
        // Test text layouts.
        editorInfo.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL;
        final KeyboardLayoutSet layoutSet = createKeyboardLayoutSet(subtype, editorInfo);
@@ -82,7 +92,7 @@ public final class KeyboardLayoutSetActionLabelTests extends KeyboardLayoutSetTe
                label, KeyboardIconsSet.ICON_UNDEFINED);
    }

    private void doTestActionKeyIcon(final String tag, final InputMethodSubtype subtype,
    protected void doTestActionKeyIcon(final String tag, final InputMethodSubtype subtype,
            final int actionId, final String iconName) {
        final int iconId = KeyboardIconsSet.getIconId(iconName);
        final EditorInfo editorInfo = new EditorInfo();
@@ -111,14 +121,16 @@ public final class KeyboardLayoutSetActionLabelTests extends KeyboardLayoutSetTe
        for (final InputMethodSubtype subtype : getAllSubtypesList()) {
            final String tag = "unspecifiled "
                    + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_UNSPECIFIED, "enter_key");
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_UNSPECIFIED,
                    KeyboardIconsSet.NAME_ENTER_KEY);
        }
    }

    public void testActionNone() {
        for (final InputMethodSubtype subtype : getAllSubtypesList()) {
            final String tag = "none " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_NONE, "enter_key");
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_NONE,
                    KeyboardIconsSet.NAME_ENTER_KEY);
        }
    }

@@ -132,7 +144,8 @@ public final class KeyboardLayoutSetActionLabelTests extends KeyboardLayoutSetTe
    public void testActionSearch() {
        for (final InputMethodSubtype subtype : getAllSubtypesList()) {
            final String tag = "search " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_SEARCH, "search_key");
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_SEARCH,
                    KeyboardIconsSet.NAME_SEARCH_KEY);
        }
    }

@@ -164,4 +177,15 @@ public final class KeyboardLayoutSetActionLabelTests extends KeyboardLayoutSetTe
                    tag, subtype, EditorInfo.IME_ACTION_PREVIOUS, R.string.label_previous_key);
        }
    }

    public void testActionCustom() {
        for (final InputMethodSubtype subtype : getAllSubtypesList()) {
            final String tag = "custom " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
            final CharSequence customLabel = "customLabel";
            final EditorInfo editorInfo = new EditorInfo();
            editorInfo.imeOptions = EditorInfo.IME_ACTION_UNSPECIFIED;
            editorInfo.actionLabel = customLabel;
            doTestActionLabel(tag, subtype, editorInfo, customLabel);
        }
    }
}
+97 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.inputmethod.keyboard;

import android.test.suitebuilder.annotation.MediumTest;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodSubtype;

import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;

@MediumTest
public class KeyboardLayoutSetActionLabelLxxTests extends KeyboardLayoutSetActionLabelKlpTests {
    @Override
    protected int getKeyboardThemeForTests() {
        return KeyboardTheme.THEME_ID_LXX_DARK;
    }

    @Override
    public void testActionUnspecified() {
        super.testActionUnspecified();
    }

    @Override
    public void testActionNone() {
        super.testActionNone();
    }

    @Override
    public void testActionGo() {
        for (final InputMethodSubtype subtype : getAllSubtypesList()) {
            final String tag = "go " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_GO,
                    KeyboardIconsSet.NAME_GO_KEY);
        }
    }

    @Override
    public void testActionSearch() {
        super.testActionSearch();
    }

    @Override
    public void testActionSend() {
        for (final InputMethodSubtype subtype : getAllSubtypesList()) {
            final String tag = "send " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_SEND,
                    KeyboardIconsSet.NAME_SEND_KEY);
        }
    }

    @Override
    public void testActionNext() {
        for (final InputMethodSubtype subtype : getAllSubtypesList()) {
            final String tag = "next " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_NEXT,
                    KeyboardIconsSet.NAME_NEXT_KEY);
        }
    }

    @Override
    public void testActionDone() {
        for (final InputMethodSubtype subtype : getAllSubtypesList()) {
            final String tag = "done " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_DONE,
                    KeyboardIconsSet.NAME_DONE_KEY);
        }
    }

    @Override
    public void testActionPrevious() {
        for (final InputMethodSubtype subtype : getAllSubtypesList()) {
            final String tag = "previous " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
            doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_PREVIOUS,
                    KeyboardIconsSet.NAME_PREVIOUS_KEY);
        }
    }

    @Override
    public void testActionCustom() {
        super.testActionCustom();
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -29,6 +29,11 @@ public class KeyboardLayoutSetSubtypesCountTests extends KeyboardLayoutSetTestsB
    private static final int NUMBER_OF_ASCII_CAPABLE_SUBTYPES = 45;
    private static final int NUMBER_OF_PREDEFINED_ADDITIONAL_SUBTYPES = 2;

    @Override
    protected int getKeyboardThemeForTests() {
        return KeyboardTheme.THEME_ID_KLP;
    }

    private static String toString(final ArrayList<InputMethodSubtype> subtypeList) {
        final StringBuilder sb = new StringBuilder();
        for (int index = 0; index < subtypeList.size(); index++) {
+5 −6
Original line number Diff line number Diff line
@@ -18,9 +18,7 @@ package com.android.inputmethod.keyboard;

import android.content.Context;
import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.ContextThemeWrapper;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodInfo;
@@ -38,8 +36,7 @@ import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.ArrayList;
import java.util.Locale;

@SmallTest
public class KeyboardLayoutSetTestsBase extends AndroidTestCase {
public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase {
    // All input method subtypes of LatinIME.
    private final ArrayList<InputMethodSubtype> mAllSubtypesList = new ArrayList<>();
    private final ArrayList<InputMethodSubtype> mAsciiCapableSubtypesList = new ArrayList<>();
@@ -48,13 +45,15 @@ public class KeyboardLayoutSetTestsBase extends AndroidTestCase {
    private Context mThemeContext;
    private int mScreenMetrics;

    protected abstract int getKeyboardThemeForTests();

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mScreenMetrics = mContext.getResources().getInteger(R.integer.config_screen_metrics);

        final KeyboardTheme keyboardTheme = KeyboardTheme.getKeyboardTheme(
                PreferenceManager.getDefaultSharedPreferences(mContext));
        final KeyboardTheme keyboardTheme = KeyboardTheme.searchKeyboardThemeById(
                getKeyboardThemeForTests());
        mThemeContext = new ContextThemeWrapper(mContext, keyboardTheme.mStyleId);
        RichInputMethodManager.init(mThemeContext);
        final RichInputMethodManager richImm = RichInputMethodManager.getInstance();
Loading