Merge "Add pcqwerty layout test"
This commit is contained in:
commit
58b19655d8
3 changed files with 286 additions and 0 deletions
227
tests/src/com/android/inputmethod/keyboard/layout/PcQwerty.java
Normal file
227
tests/src/com/android/inputmethod/keyboard/layout/PcQwerty.java
Normal file
|
@ -0,0 +1,227 @@
|
||||||
|
/*
|
||||||
|
* 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.layout;
|
||||||
|
|
||||||
|
import com.android.inputmethod.keyboard.KeyboardId;
|
||||||
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
|
||||||
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The PC QWERTY alphabet keyboard.
|
||||||
|
*/
|
||||||
|
public final class PcQwerty extends LayoutBase {
|
||||||
|
private static final String LAYOUT_NAME = "pcqwerty";
|
||||||
|
|
||||||
|
public PcQwerty(final LayoutCustomizer customizer) {
|
||||||
|
super(customizer, Symbols.class, SymbolsShifted.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() { return LAYOUT_NAME; }
|
||||||
|
|
||||||
|
public static class PcQwertyCustomizer extends LayoutCustomizer {
|
||||||
|
public PcQwertyCustomizer(final Locale locale) { super(locale); }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey[] getLeftShiftKeys(final boolean isPhone) {
|
||||||
|
return joinKeys(SHIFT_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
|
||||||
|
return joinKeys(SHIFT_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||||
|
return joinKeys(SETTINGS_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
||||||
|
return isPhone ? joinKeys(key(ENTER_KEY, EMOJI_KEY)) : joinKeys(EMOJI_KEY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) {
|
||||||
|
final LayoutCustomizer customizer = getCustomizer();
|
||||||
|
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
|
||||||
|
customizer.setAccentedLetters(builder);
|
||||||
|
builder.replaceKeyOfLabel(ROW1_1, key("`", moreKey("~")))
|
||||||
|
.replaceKeyOfLabel(ROW2_11, key("[", moreKey("{")))
|
||||||
|
.replaceKeyOfLabel(ROW2_12, key("]", moreKey("}")))
|
||||||
|
.replaceKeyOfLabel(ROW2_13, key("\\", moreKey("|")))
|
||||||
|
.replaceKeyOfLabel(ROW3_10, key(";", moreKey(":")))
|
||||||
|
.replaceKeyOfLabel(ROW3_11, key("'", joinMoreKeys(additionalMoreKey("\""),
|
||||||
|
customizer.getDoubleQuoteMoreKeys(),
|
||||||
|
customizer.getSingleQuoteMoreKeys())))
|
||||||
|
.setAdditionalMoreKeysPositionOf("'", 4)
|
||||||
|
.replaceKeyOfLabel(ROW4_8, key(",", moreKey("<")))
|
||||||
|
.replaceKeyOfLabel(ROW4_9, key(".", moreKey(">")))
|
||||||
|
// U+00BF: "¿" INVERTED QUESTION MARK
|
||||||
|
.replaceKeyOfLabel(ROW4_10, key("/", joinMoreKeys("?", "\u00BF")));
|
||||||
|
if (isPhone) {
|
||||||
|
// U+221E: "∞" INFINITY
|
||||||
|
// U+2260: "≠" NOT EQUAL TO
|
||||||
|
// U+2248: "≈" ALMOST EQUAL TO
|
||||||
|
builder.replaceKeyOfLabel(ROW1_13, key("=",
|
||||||
|
joinMoreKeys("\u221E", "\u2260", "\u2248", "+")));
|
||||||
|
} else {
|
||||||
|
// U+221E: "∞" INFINITY
|
||||||
|
// U+2260: "≠" NOT EQUAL TO
|
||||||
|
// U+2248: "≈" ALMOST EQUAL TO
|
||||||
|
builder.replaceKeyOfLabel(ROW1_13, key("=",
|
||||||
|
joinMoreKeys("+", "\u221E", "\u2260", "\u2248")));
|
||||||
|
}
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone, final int elementId) {
|
||||||
|
final ExpectedKeyboardBuilder builder;
|
||||||
|
if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED
|
||||||
|
|| elementId == KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED) {
|
||||||
|
builder = new ExpectedKeyboardBuilder(getCommonAlphabetLayout(isPhone));
|
||||||
|
} else {
|
||||||
|
builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
|
||||||
|
final LayoutCustomizer customizer = getCustomizer();
|
||||||
|
customizer.setAccentedLetters(builder);
|
||||||
|
builder.setKeysOfRow(1,
|
||||||
|
"~",
|
||||||
|
// U+00A1: "¡" INVERTED EXCLAMATION MARK
|
||||||
|
key("!", moreKey("\u00A1")),
|
||||||
|
"@", "#",
|
||||||
|
customizer.getCurrencyKey(),
|
||||||
|
// U+2030: "‰" PER MILLE SIGN
|
||||||
|
key("%", moreKey("\u2030")),
|
||||||
|
"^", "&",
|
||||||
|
// U+2020: "†" DAGGER
|
||||||
|
// U+2021: "‡" DOUBLE DAGGER
|
||||||
|
// U+2605: "★" BLACK STAR
|
||||||
|
key("*", joinMoreKeys("\u2020", "\u2021", "\u2605")),
|
||||||
|
"(", ")", "_",
|
||||||
|
// U+00B1: "±" PLUS-MINUS SIGN
|
||||||
|
// U+00D7: "×" MULTIPLICATION SIGN
|
||||||
|
// U+00F7: "÷" DIVISION SIGN
|
||||||
|
// U+221A: "√" SQUARE ROOT
|
||||||
|
key("+", joinMoreKeys("\u00B1", "\u00D7", "\u00F7", "\u221A")))
|
||||||
|
.replaceKeyOfLabel(ROW2_11, key("{"))
|
||||||
|
.replaceKeyOfLabel(ROW2_12, key("}"))
|
||||||
|
.replaceKeyOfLabel(ROW2_13, key("|"))
|
||||||
|
.replaceKeyOfLabel(ROW3_10, key(":"))
|
||||||
|
.replaceKeyOfLabel(ROW3_11, key("\"", joinMoreKeys(
|
||||||
|
customizer.getDoubleQuoteMoreKeys(),
|
||||||
|
customizer.getSingleQuoteMoreKeys())))
|
||||||
|
// U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
||||||
|
// U+2264: "≤" LESS-THAN OR EQUAL TO
|
||||||
|
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||||||
|
.replaceKeyOfLabel(ROW4_8, key("<", joinMoreKeys("\u2039", "\u2264", "\u00AB")))
|
||||||
|
// U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
||||||
|
// U+2265: "≥" GREATER-THAN EQUAL TO
|
||||||
|
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||||||
|
.replaceKeyOfLabel(ROW4_9, key(">", joinMoreKeys("\u203A", "\u2265", "\u00BB")))
|
||||||
|
// U+00BF: "¿" INVERTED QUESTION MARK
|
||||||
|
.replaceKeyOfLabel(ROW4_10, key("?", moreKey("\u00BF")));
|
||||||
|
}
|
||||||
|
builder.toUpperCase(getLocale());
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper method to create alphabet layout by adding special function keys.
|
||||||
|
@Override
|
||||||
|
ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder,
|
||||||
|
final boolean isPhone) {
|
||||||
|
final LayoutCustomizer customizer = getCustomizer();
|
||||||
|
builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone));
|
||||||
|
builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone));
|
||||||
|
builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone));
|
||||||
|
if (isPhone) {
|
||||||
|
builder.addKeysOnTheRightOfRow(3, DELETE_KEY);
|
||||||
|
} else {
|
||||||
|
builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
|
||||||
|
.addKeysOnTheLeftOfRow(2, TAB_KEY)
|
||||||
|
.addKeysOnTheRightOfRow(3, ENTER_KEY);
|
||||||
|
}
|
||||||
|
builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone))
|
||||||
|
.addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone));
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey[][] getLayout(final boolean isPhone, final int elementId) {
|
||||||
|
if (elementId == KeyboardId.ELEMENT_SYMBOLS
|
||||||
|
|| elementId == KeyboardId.ELEMENT_SYMBOLS_SHIFTED) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return super.getLayout(isPhone, elementId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String ROW1_1 = "ROW1_1";
|
||||||
|
private static final String ROW1_13 = "ROW1_13";
|
||||||
|
private static final String ROW2_11 = "ROW2_11";
|
||||||
|
private static final String ROW2_12 = "ROW2_12";
|
||||||
|
private static final String ROW2_13 = "ROW2_13";
|
||||||
|
private static final String ROW3_10 = "ROW3_10";
|
||||||
|
private static final String ROW3_11 = "ROW3_11";
|
||||||
|
private static final String ROW4_8 = "ROW4_8";
|
||||||
|
private static final String ROW4_9 = "ROW4_9";
|
||||||
|
private static final String ROW4_10 = "ROW4_10";
|
||||||
|
|
||||||
|
private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
|
||||||
|
.setKeysOfRow(1,
|
||||||
|
ROW1_1,
|
||||||
|
// U+00A1: "¡" INVERTED EXCLAMATION MARK
|
||||||
|
// U+00B9: "¹" SUPERSCRIPT ONE
|
||||||
|
// U+00BD: "½" VULGAR FRACTION ONE HALF
|
||||||
|
// U+2153: "⅓" VULGAR FRACTION ONE THIRD
|
||||||
|
// U+00BC: "¼" VULGAR FRACTION ONE QUARTER
|
||||||
|
// U+215B: "⅛" VULGAR FRACTION ONE EIGHTH
|
||||||
|
key("1", joinMoreKeys(
|
||||||
|
"!", "\u00A1", "\u00B9", "\u00BD", "\u2153", "\u00BC", "\u215B")),
|
||||||
|
// U+00B2: "²" SUPERSCRIPT TWO
|
||||||
|
// U+2154: "⅔" VULGAR FRACTION TWO THIRDS
|
||||||
|
key("2", joinMoreKeys("@", "\u00B2", "\u2154")),
|
||||||
|
// U+00B3: "³" SUPERSCRIPT THREE
|
||||||
|
// U+00BE: "¾" VULGAR FRACTION THREE QUARTERS
|
||||||
|
// U+215C: "⅜" VULGAR FRACTION THREE EIGHTHS
|
||||||
|
key("3", joinMoreKeys("#", "\u00B3", "\u00BE", "\u215C")),
|
||||||
|
// U+2074: "⁴" SUPERSCRIPT FOUR
|
||||||
|
key("4", joinMoreKeys("$", "\u2074")),
|
||||||
|
// U+215D: "⅝" VULGAR FRACTION FIVE EIGHTHS
|
||||||
|
key("5", joinMoreKeys("%", "\u215D")),
|
||||||
|
key("6", moreKey("^")),
|
||||||
|
// U+215E: "⅞" VULGAR FRACTION SEVEN EIGHTHS
|
||||||
|
key("7", joinMoreKeys("&", "\u215E")),
|
||||||
|
key("8", moreKey("*")),
|
||||||
|
key("9", moreKey("(")),
|
||||||
|
// U+207F: "ⁿ" SUPERSCRIPT LATIN SMALL LETTER N
|
||||||
|
// U+2205: "∅" EMPTY SET
|
||||||
|
key("0", joinMoreKeys(")", "\u207F", "\u2205")),
|
||||||
|
// U+2013: "–" EN DASH
|
||||||
|
// U+2014: "—" EM DASH
|
||||||
|
// U+00B7: "·" MIDDLE DOT
|
||||||
|
key("-", joinMoreKeys("_", "\u2013", "\u2014", "\u00B7")),
|
||||||
|
ROW1_13)
|
||||||
|
.setKeysOfRow(2, "q", "w", "e", "r", "t", "y", "u", "i", "o", "p",
|
||||||
|
ROW2_11, ROW2_12, ROW2_13)
|
||||||
|
.setKeysOfRow(3, "a", "s", "d", "f", "g", "h", "j", "k", "l", ROW3_10, ROW3_11)
|
||||||
|
.setKeysOfRow(4, "z", "x", "c", "v", "b", "n", "m", ROW4_8, ROW4_9, ROW4_10)
|
||||||
|
.build();
|
||||||
|
}
|
|
@ -109,10 +109,14 @@ public abstract class AbstractLayoutBase {
|
||||||
// Icon ids.
|
// Icon ids.
|
||||||
private static final int ICON_DELETE = KeyboardIconsSet.getIconId(
|
private static final int ICON_DELETE = KeyboardIconsSet.getIconId(
|
||||||
KeyboardIconsSet.NAME_DELETE_KEY);
|
KeyboardIconsSet.NAME_DELETE_KEY);
|
||||||
|
private static final int ICON_TAB = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_TAB_KEY);
|
||||||
private static final int ICON_SHORTCUT = KeyboardIconsSet.getIconId(
|
private static final int ICON_SHORTCUT = KeyboardIconsSet.getIconId(
|
||||||
KeyboardIconsSet.NAME_SHORTCUT_KEY);
|
KeyboardIconsSet.NAME_SHORTCUT_KEY);
|
||||||
private static final int ICON_SETTINGS = KeyboardIconsSet.getIconId(
|
private static final int ICON_SETTINGS = KeyboardIconsSet.getIconId(
|
||||||
KeyboardIconsSet.NAME_SETTINGS_KEY);
|
KeyboardIconsSet.NAME_SETTINGS_KEY);
|
||||||
|
private static final int ICON_LANGUAGE_SWITCH = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_LANGUAGE_SWITCH_KEY);
|
||||||
private static final int ICON_ENTER = KeyboardIconsSet.getIconId(
|
private static final int ICON_ENTER = KeyboardIconsSet.getIconId(
|
||||||
KeyboardIconsSet.NAME_ENTER_KEY);
|
KeyboardIconsSet.NAME_ENTER_KEY);
|
||||||
private static final int ICON_EMOJI = KeyboardIconsSet.getIconId(
|
private static final int ICON_EMOJI = KeyboardIconsSet.getIconId(
|
||||||
|
@ -120,8 +124,11 @@ public abstract class AbstractLayoutBase {
|
||||||
|
|
||||||
// Functional keys.
|
// Functional keys.
|
||||||
public static final ExpectedKey DELETE_KEY = key(ICON_DELETE, Constants.CODE_DELETE);
|
public static final ExpectedKey DELETE_KEY = key(ICON_DELETE, Constants.CODE_DELETE);
|
||||||
|
public static final ExpectedKey TAB_KEY = key(ICON_TAB, Constants.CODE_TAB);
|
||||||
public static final ExpectedKey SHORTCUT_KEY = key(ICON_SHORTCUT, Constants.CODE_SHORTCUT);
|
public static final ExpectedKey SHORTCUT_KEY = key(ICON_SHORTCUT, Constants.CODE_SHORTCUT);
|
||||||
public static final ExpectedKey SETTINGS_KEY = key(ICON_SETTINGS, Constants.CODE_SETTINGS);
|
public static final ExpectedKey SETTINGS_KEY = key(ICON_SETTINGS, Constants.CODE_SETTINGS);
|
||||||
|
public static final ExpectedKey LANGUAGE_SWITCH_KEY = key(
|
||||||
|
ICON_LANGUAGE_SWITCH, Constants.CODE_LANGUAGE_SWITCH);
|
||||||
public static final ExpectedKey ENTER_KEY = key(ICON_ENTER, Constants.CODE_ENTER);
|
public static final ExpectedKey ENTER_KEY = key(ICON_ENTER, Constants.CODE_ENTER);
|
||||||
public static final ExpectedKey EMOJI_KEY = key(ICON_EMOJI, Constants.CODE_EMOJI);
|
public static final ExpectedKey EMOJI_KEY = key(ICON_EMOJI, Constants.CODE_EMOJI);
|
||||||
public static final ExpectedKey SPACE_KEY = key(
|
public static final ExpectedKey SPACE_KEY = key(
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* 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.layout.tests;
|
||||||
|
|
||||||
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
|
|
||||||
|
import com.android.inputmethod.keyboard.layout.LayoutBase;
|
||||||
|
import com.android.inputmethod.keyboard.layout.PcQwerty;
|
||||||
|
import com.android.inputmethod.keyboard.layout.PcQwerty.PcQwertyCustomizer;
|
||||||
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* zz: Alphabet/pcqwerty
|
||||||
|
*/
|
||||||
|
@SmallTest
|
||||||
|
public final class TestsNoLanguagePcQwerty extends LayoutTestsBase {
|
||||||
|
private static final Locale LOCALE = new Locale("zz");
|
||||||
|
private static final LayoutBase LAYOUT = new PcQwerty(new NoLanguagePcQwertyCustomizer(LOCALE));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
LayoutBase getLayout() { return LAYOUT; }
|
||||||
|
|
||||||
|
private static class NoLanguagePcQwertyCustomizer extends PcQwertyCustomizer {
|
||||||
|
private final NoLanguageCustomizer mNoLanguageCustomizer;
|
||||||
|
|
||||||
|
public NoLanguagePcQwertyCustomizer(final Locale locale) {
|
||||||
|
super(locale);
|
||||||
|
mNoLanguageCustomizer = new NoLanguageCustomizer(locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKeyboardBuilder setAccentedLetters(final ExpectedKeyboardBuilder builder) {
|
||||||
|
return mNoLanguageCustomizer.setAccentedLetters(builder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue