Merge "Add action key test for Lxx theme"
This commit is contained in:
commit
b7206b6bca
6 changed files with 171 additions and 31 deletions
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* 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();
|
||||
}
|
||||
}
|
|
@ -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++) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -24,6 +24,7 @@ import com.android.inputmethod.keyboard.Keyboard;
|
|||
import com.android.inputmethod.keyboard.KeyboardId;
|
||||
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
|
||||
import com.android.inputmethod.keyboard.KeyboardLayoutSetTestsBase;
|
||||
import com.android.inputmethod.keyboard.KeyboardTheme;
|
||||
import com.android.inputmethod.keyboard.layout.LayoutBase;
|
||||
import com.android.inputmethod.keyboard.layout.expected.AbstractLayoutBase;
|
||||
import com.android.inputmethod.keyboard.layout.expected.ActualKeyboardBuilder;
|
||||
|
@ -57,6 +58,11 @@ abstract class LayoutTestsBase extends KeyboardLayoutSetTestsBase {
|
|||
true /* isLanguageSwitchKeyEnabled */);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getKeyboardThemeForTests() {
|
||||
return KeyboardTheme.THEME_ID_KLP;
|
||||
}
|
||||
|
||||
// Those helper methods have a lower case name to be readable when defining expected keyboard
|
||||
// layouts.
|
||||
|
||||
|
|
Loading…
Reference in a new issue