2014-03-06 11:35:53 +00:00
|
|
|
|
/*
|
|
|
|
|
* 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;
|
|
|
|
|
|
2014-10-02 15:14:40 +00:00
|
|
|
|
import com.android.inputmethod.keyboard.layout.customizer.LayoutCustomizer;
|
2014-03-11 16:18:51 +00:00
|
|
|
|
import com.android.inputmethod.keyboard.layout.expected.AbstractLayoutBase;
|
2014-03-06 11:35:53 +00:00
|
|
|
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
|
|
|
|
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The symbols keyboard layout.
|
|
|
|
|
*/
|
2014-03-11 16:18:51 +00:00
|
|
|
|
public class Symbols extends AbstractLayoutBase {
|
|
|
|
|
private final LayoutCustomizer mCustomizer;
|
|
|
|
|
|
|
|
|
|
public Symbols(final LayoutCustomizer customizer) {
|
|
|
|
|
mCustomizer = customizer;
|
2014-03-06 11:35:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-03-11 16:18:51 +00:00
|
|
|
|
public ExpectedKey[][] getLayout(final boolean isPhone) {
|
2014-03-14 04:07:34 +00:00
|
|
|
|
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(SYMBOLS_COMMON);
|
|
|
|
|
final LayoutCustomizer customizer = mCustomizer;
|
|
|
|
|
builder.replaceKeyOfLabel(CURRENCY, customizer.getCurrencyKey());
|
|
|
|
|
builder.replaceKeyOfLabel(DOUBLE_QUOTE, key("\"", joinMoreKeys(
|
|
|
|
|
customizer.getDoubleQuoteMoreKeys(), customizer.getDoubleAngleQuoteKeys())));
|
|
|
|
|
builder.replaceKeyOfLabel(SINGLE_QUOTE, key("'", joinMoreKeys(
|
|
|
|
|
customizer.getSingleQuoteMoreKeys(), customizer.getSingleAngleQuoteKeys())));
|
|
|
|
|
if (isPhone) {
|
|
|
|
|
builder.addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
2014-10-02 15:14:40 +00:00
|
|
|
|
.addKeysOnTheRightOfRow(3, DELETE_KEY)
|
2014-03-14 04:07:34 +00:00
|
|
|
|
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
2014-08-23 10:08:40 +00:00
|
|
|
|
.addKeysOnTheRightOfRow(4, customizer.getEnterKey(isPhone));
|
2014-03-14 04:07:34 +00:00
|
|
|
|
} else {
|
|
|
|
|
// Tablet symbols keyboard has extra two keys at the left edge of the 3rd row.
|
2014-03-18 06:13:41 +00:00
|
|
|
|
builder.addKeysOnTheLeftOfRow(3, (Object[])joinKeys("\\", "="));
|
2014-10-02 15:14:40 +00:00
|
|
|
|
builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
|
2014-08-23 10:08:40 +00:00
|
|
|
|
.addKeysOnTheRightOfRow(2, customizer.getEnterKey(isPhone))
|
2014-03-14 04:07:34 +00:00
|
|
|
|
.addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
|
|
|
|
.addKeysOnTheRightOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
|
|
|
|
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
2014-08-23 10:08:40 +00:00
|
|
|
|
.addKeysOnTheRightOfRow(4, customizer.getEmojiKey(isPhone));
|
2014-03-14 04:07:34 +00:00
|
|
|
|
}
|
2014-03-11 08:28:19 +00:00
|
|
|
|
return builder.build();
|
2014-03-07 15:29:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Variations of the "currency" key on the 2nd row.
|
2014-03-11 16:18:51 +00:00
|
|
|
|
public static final String CURRENCY = "CURRENCY";
|
2014-03-07 15:29:20 +00:00
|
|
|
|
// U+00A2: "¢" CENT SIGN
|
|
|
|
|
// U+00A3: "£" POUND SIGN
|
|
|
|
|
// U+00A5: "¥" YEN SIGN
|
|
|
|
|
// U+20AC: "€" EURO SIGN
|
|
|
|
|
// U+20B1: "₱" PESO SIGN
|
|
|
|
|
public static final ExpectedKey DOLLAR_SIGN = key("$");
|
|
|
|
|
public static final ExpectedKey CENT_SIGN = key("\u00A2");
|
|
|
|
|
public static final ExpectedKey POUND_SIGN = key("\u00A3");
|
|
|
|
|
public static final ExpectedKey YEN_SIGN = key("\u00A5");
|
|
|
|
|
public static final ExpectedKey EURO_SIGN = key("\u20AC");
|
|
|
|
|
public static final ExpectedKey PESO_SIGN = key("\u20B1");
|
|
|
|
|
public static final ExpectedKey CURRENCY_DOLLAR = key("$",
|
|
|
|
|
CENT_SIGN, POUND_SIGN, EURO_SIGN, YEN_SIGN, PESO_SIGN);
|
|
|
|
|
public static final ExpectedKey CURRENCY_EURO = key("\u20AC",
|
|
|
|
|
CENT_SIGN, POUND_SIGN, DOLLAR_SIGN, YEN_SIGN, PESO_SIGN);
|
2014-03-15 07:25:15 +00:00
|
|
|
|
public static final ExpectedKey[] CURRENCY_GENERIC_MORE_KEYS = joinMoreKeys(
|
|
|
|
|
Symbols.DOLLAR_SIGN, Symbols.CENT_SIGN, Symbols.EURO_SIGN, Symbols.POUND_SIGN,
|
|
|
|
|
Symbols.YEN_SIGN, Symbols.PESO_SIGN);
|
2014-03-07 15:29:20 +00:00
|
|
|
|
|
|
|
|
|
// Variations of the "double quote" key's "more keys" on the 3rd row.
|
2014-03-11 16:18:51 +00:00
|
|
|
|
public static final String DOUBLE_QUOTE = "DOUBLE_QUOTE";
|
2014-03-07 15:29:20 +00:00
|
|
|
|
// U+201C: "“" LEFT DOUBLE QUOTATION MARK
|
|
|
|
|
// U+201D: "”" RIGHT DOUBLE QUOTATION MARK
|
|
|
|
|
// U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
|
2014-03-11 16:18:51 +00:00
|
|
|
|
private static final ExpectedKey DQUOTE_LEFT = key("\u201C");
|
|
|
|
|
private static final ExpectedKey DQUOTE_RIGHT = key("\u201D");
|
|
|
|
|
private static final ExpectedKey DQUOTE_LOW9 = key("\u201E");
|
2014-03-07 15:29:20 +00:00
|
|
|
|
public static ExpectedKey[] DOUBLE_QUOTES_9LR = { DQUOTE_LOW9, DQUOTE_LEFT, DQUOTE_RIGHT };
|
|
|
|
|
public static ExpectedKey[] DOUBLE_QUOTES_R9L = { DQUOTE_RIGHT, DQUOTE_LOW9, DQUOTE_LEFT };
|
|
|
|
|
public static ExpectedKey[] DOUBLE_QUOTES_L9R = { DQUOTE_LEFT, DQUOTE_LOW9, DQUOTE_RIGHT };
|
|
|
|
|
public static ExpectedKey[] DOUBLE_QUOTES_LR9 = { DQUOTE_LEFT, DQUOTE_RIGHT, DQUOTE_LOW9 };
|
|
|
|
|
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
|
|
|
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
|
|
|
private static final ExpectedKey DAQUOTE_LEFT = key("\u00AB");
|
|
|
|
|
private static final ExpectedKey DAQUOTE_RIGHT = key("\u00BB");
|
|
|
|
|
public static ExpectedKey[] DOUBLE_ANGLE_QUOTES_LR = { DAQUOTE_LEFT, DAQUOTE_RIGHT };
|
|
|
|
|
public static ExpectedKey[] DOUBLE_ANGLE_QUOTES_RL = { DAQUOTE_RIGHT, DAQUOTE_LEFT };
|
|
|
|
|
|
|
|
|
|
// Variations of the "single quote" key's "more keys" on the 3rd row.
|
2014-03-11 16:18:51 +00:00
|
|
|
|
public static final String SINGLE_QUOTE = "SINGLE_QUOTE";
|
2014-03-07 15:29:20 +00:00
|
|
|
|
// U+2018: "‘" LEFT SINGLE QUOTATION MARK
|
|
|
|
|
// U+2019: "’" RIGHT SINGLE QUOTATION MARK
|
|
|
|
|
// U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
|
2014-03-11 16:18:51 +00:00
|
|
|
|
private static final ExpectedKey SQUOTE_LEFT = key("\u2018");
|
|
|
|
|
private static final ExpectedKey SQUOTE_RIGHT = key("\u2019");
|
|
|
|
|
private static final ExpectedKey SQUOTE_LOW9 = key("\u201A");
|
2014-03-07 15:29:20 +00:00
|
|
|
|
public static ExpectedKey[] SINGLE_QUOTES_9LR = { SQUOTE_LOW9, SQUOTE_LEFT, SQUOTE_RIGHT };
|
|
|
|
|
public static ExpectedKey[] SINGLE_QUOTES_R9L = { SQUOTE_RIGHT, SQUOTE_LOW9, SQUOTE_LEFT };
|
|
|
|
|
public static ExpectedKey[] SINGLE_QUOTES_L9R = { SQUOTE_LEFT, SQUOTE_LOW9, SQUOTE_RIGHT };
|
|
|
|
|
public static ExpectedKey[] SINGLE_QUOTES_LR9 = { SQUOTE_LEFT, SQUOTE_RIGHT, SQUOTE_LOW9 };
|
|
|
|
|
// U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
|
|
|
// U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
|
|
|
private static final ExpectedKey SAQUOTE_LEFT = key("\u2039");
|
|
|
|
|
private static final ExpectedKey SAQUOTE_RIGHT = key("\u203A");
|
|
|
|
|
public static ExpectedKey[] SINGLE_ANGLE_QUOTES_LR = { SAQUOTE_LEFT, SAQUOTE_RIGHT };
|
|
|
|
|
public static ExpectedKey[] SINGLE_ANGLE_QUOTES_RL = { SAQUOTE_RIGHT, SAQUOTE_LEFT };
|
|
|
|
|
|
2014-03-06 11:35:53 +00:00
|
|
|
|
// Common symbols keyboard layout.
|
2014-03-14 09:37:40 +00:00
|
|
|
|
private static final ExpectedKey[][] SYMBOLS_COMMON = new ExpectedKeyboardBuilder()
|
2014-03-14 04:07:34 +00:00
|
|
|
|
.setKeysOfRow(1,
|
|
|
|
|
// 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("\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", moreKey("\u2074")),
|
|
|
|
|
// U+215D: "⅝" VULGAR FRACTION FIVE EIGHTHS
|
|
|
|
|
key("5", moreKey("\u215D")),
|
2014-03-18 06:13:41 +00:00
|
|
|
|
"6",
|
2014-03-14 04:07:34 +00:00
|
|
|
|
// U+215E: "⅞" VULGAR FRACTION SEVEN EIGHTHS
|
|
|
|
|
key("7", moreKey("\u215E")),
|
2014-03-18 06:13:41 +00:00
|
|
|
|
"8", "9",
|
2014-03-14 04:07:34 +00:00
|
|
|
|
// U+207F: "ⁿ" SUPERSCRIPT LATIN SMALL LETTER N
|
|
|
|
|
// U+2205: "∅" EMPTY SET
|
|
|
|
|
key("0", joinMoreKeys("\u207F", "\u2205")))
|
|
|
|
|
.setKeysOfRow(2,
|
|
|
|
|
key("@"), key("#"), key(CURRENCY),
|
|
|
|
|
// U+2030: "‰" PER MILLE SIGN
|
|
|
|
|
key("%", moreKey("\u2030")),
|
2014-03-18 06:13:41 +00:00
|
|
|
|
"&",
|
2014-03-14 04:07:34 +00:00
|
|
|
|
// U+2013: "–" EN DASH
|
|
|
|
|
// U+2014: "—" EM DASH
|
|
|
|
|
// U+00B7: "·" MIDDLE DOT
|
|
|
|
|
key("-", joinMoreKeys("_", "\u2013", "\u2014", "\u00B7")),
|
|
|
|
|
// U+00B1: "±" PLUS-MINUS SIGN
|
|
|
|
|
key("+", moreKey("\u00B1")),
|
|
|
|
|
key("(", joinMoreKeys("<", "{", "[")),
|
|
|
|
|
key(")", joinMoreKeys(">", "}", "]")))
|
|
|
|
|
.setKeysOfRow(3,
|
|
|
|
|
// U+2020: "†" DAGGER
|
|
|
|
|
// U+2021: "‡" DOUBLE DAGGER
|
|
|
|
|
// U+2605: "★" BLACK STAR
|
|
|
|
|
key("*", joinMoreKeys("\u2020", "\u2021", "\u2605")),
|
|
|
|
|
key(DOUBLE_QUOTE), key(SINGLE_QUOTE), key(":"), key(";"),
|
|
|
|
|
// U+00A1: "¡" INVERTED EXCLAMATION MARK
|
|
|
|
|
key("!", moreKey("\u00A1")),
|
|
|
|
|
// U+00BF: "¿" INVERTED QUESTION MARK
|
|
|
|
|
key("?", moreKey("\u00BF")))
|
|
|
|
|
.setKeysOfRow(4,
|
2014-10-02 15:14:40 +00:00
|
|
|
|
key(","), key("_"), SPACE_KEY, key("/"),
|
2014-03-14 04:07:34 +00:00
|
|
|
|
// U+2026: "…" HORIZONTAL ELLIPSIS
|
|
|
|
|
key(".", moreKey("\u2026")))
|
2014-03-06 11:35:53 +00:00
|
|
|
|
.build();
|
|
|
|
|
|
2014-03-11 16:18:51 +00:00
|
|
|
|
public static class RtlSymbols extends Symbols {
|
|
|
|
|
public RtlSymbols(final LayoutCustomizer customizer) {
|
|
|
|
|
super(customizer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
|
|
|
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
|
|
|
private static final ExpectedKey DAQUOTE_LEFT_RTL = key("\u00AB", "\u00BB");
|
|
|
|
|
private static final ExpectedKey DAQUOTE_RIGHT_RTL = key("\u00BB", "\u00AB");
|
|
|
|
|
public static ExpectedKey[] DOUBLE_ANGLE_QUOTES_LR_RTL = {
|
|
|
|
|
DAQUOTE_LEFT_RTL, DAQUOTE_RIGHT_RTL
|
|
|
|
|
};
|
|
|
|
|
// U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
|
|
|
// U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
|
|
|
private static final ExpectedKey SAQUOTE_LEFT_RTL = key("\u2039", "\u203A");
|
|
|
|
|
private static final ExpectedKey SAQUOTE_RIGHT_RTL = key("\u203A", "\u2039");
|
|
|
|
|
public static ExpectedKey[] SINGLE_ANGLE_QUOTES_LR_RTL = {
|
|
|
|
|
SAQUOTE_LEFT_RTL, SAQUOTE_RIGHT_RTL
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public ExpectedKey[][] getLayout(final boolean isPhone) {
|
|
|
|
|
return new ExpectedKeyboardBuilder(super.getLayout(isPhone))
|
|
|
|
|
.replaceKeyOfLabel("(", key("(", ")",
|
|
|
|
|
moreKey("<", ">"), moreKey("{", "}"), moreKey("[", "]")))
|
|
|
|
|
.replaceKeyOfLabel(")", key(")", "(",
|
|
|
|
|
moreKey(">", "<"), moreKey("}", "{"), moreKey("]", "[")))
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-03-06 11:35:53 +00:00
|
|
|
|
}
|