SymbolsShifted.java revision a94c89e017dac92e2c23dcf05a8e6b4000d021d3
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.inputmethod.keyboard.layout;
18
19import com.android.inputmethod.keyboard.layout.LayoutBase.LayoutCustomizer;
20import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
21import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
22import com.android.inputmethod.keyboard.layout.expected.AbstractLayoutBase;
23
24/**
25 * The symbols shifted keyboard layout.
26 */
27public class SymbolsShifted extends AbstractLayoutBase {
28    private final LayoutCustomizer mCustomizer;
29
30    public SymbolsShifted(final LayoutCustomizer customizer) {
31        mCustomizer = customizer;
32    }
33
34    public ExpectedKey[][] getLayout(final boolean isPhone) {
35        final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(SYMBOLS_SHIFTED_COMMON);
36        final LayoutCustomizer customizer = mCustomizer;
37        builder.replaceKeyOfLabel(OTHER_CURRENCIES, (Object[])customizer.getOtherCurrencyKeys());
38        if (isPhone) {
39            builder.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey())
40                    .addKeysOnTheRightOfRow(3, DELETE_KEY)
41                    .addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
42                    .addKeysOnTheRightOfRow(4, key(ENTER_KEY, EMOJI_ACTION_KEY));
43        } else {
44            // Tablet symbols shifted keyboard has extra two keys at the right edge of the 3rd row.
45            // U+00BF: "¿" INVERTED QUESTION MARK
46            // U+00A1: "¡" INVERTED EXCLAMATION MARK
47            builder.addKeysOnTheRightOfRow(3, (Object[])joinKeys("\u00A1", "\u00BF"));
48            builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
49                    .addKeysOnTheRightOfRow(2, ENTER_KEY)
50                    .addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey())
51                    .addKeysOnTheRightOfRow(3, customizer.getBackToSymbolsKey())
52                    .addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
53                    .addKeysOnTheRightOfRow(4, EMOJI_NORMAL_KEY);
54        }
55        return builder.build();
56    }
57
58    // Variations of the "other currencies" keys on the 2rd row.
59    public static final String OTHER_CURRENCIES = "OTHER_CURRENCY";
60    public static final ExpectedKey[] CURRENCIES_OTHER_THAN_DOLLAR = {
61        Symbols.POUND_SIGN, Symbols.CENT_SIGN, Symbols.EURO_SIGN, Symbols.YEN_SIGN
62    };
63    public static final ExpectedKey[] CURRENCIES_OTHER_THAN_EURO = {
64        Symbols.POUND_SIGN, Symbols.YEN_SIGN, key(Symbols.DOLLAR_SIGN, Symbols.CENT_SIGN),
65        Symbols.CENT_SIGN
66    };
67    public static final ExpectedKey[] CURRENCIES_OTHER_GENERIC = {
68        Symbols.POUND_SIGN, Symbols.EURO_SIGN, key(Symbols.DOLLAR_SIGN, Symbols.CENT_SIGN),
69        Symbols.CENT_SIGN
70    };
71
72    // Common symbols shifted keyboard layout.
73    private static final ExpectedKey[][] SYMBOLS_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
74            .setKeysOfRow(1,
75                    // U+0060: "`" GRAVE ACCENT
76                    "~", "\u0060", "|",
77                    // U+2022: "•" BULLET
78                    // U+266A: "♪" EIGHTH NOTE
79                    // U+2665: "♥" BLACK HEART SUIT
80                    // U+2660: "♠" BLACK SPADE SUIT
81                    // U+2666: "♦" BLACK DIAMOND SUIT
82                    // U+2663: "♣" BLACK CLUB SUIT
83                    key("\u2022", joinMoreKeys("\u266A", "\u2665", "\u2660", "\u2666", "\u2663")),
84                    // U+221A: "√" SQUARE ROOT
85                    "\u221A",
86                    // U+03C0: "π" GREEK SMALL LETTER PI
87                    // U+03A0: "Π" GREEK CAPITAL LETTER PI
88                    key("\u03C0", moreKey("\u03A0")),
89                    // U+00F7: "÷" DIVISION SIGN
90                    // U+00D7: "×" MULTIPLICATION SIGN
91                    "\u00F7", "\u00D7",
92                    // U+00B6: "¶" PILCROW SIGN
93                    // U+00A7: "§" SECTION SIGN
94                    key("\u00B6", moreKey("\u00A7")),
95                    // U+2206: "∆" INCREMENT
96                    "\u2206")
97            .setKeysOfRow(2,
98                    OTHER_CURRENCIES,
99                    // U+2191: "↑" UPWARDS ARROW
100                    // U+2193: "↓" DOWNWARDS ARROW
101                    // U+2190: "←" LEFTWARDS ARROW
102                    // U+2192: "→" RIGHTWARDS ARROW
103                    key("^", joinMoreKeys("\u2191", "\u2193", "\u2190", "\u2192")),
104                    // U+00B0: "°" DEGREE SIGN
105                    // U+2032: "′" PRIME
106                    // U+2033: "″" DOUBLE PRIME
107                    key("\u00B0", joinMoreKeys("\u2032", "\u2033")),
108                    // U+2260: "≠" NOT EQUAL TO
109                    // U+2248: "≈" ALMOST EQUAL TO
110                    // U+221E: "∞" INFINITY
111                    key("=", joinMoreKeys("\u2260", "\u2248", "\u221E")),
112                    "{", "}")
113            .setKeysOfRow(3,
114                    // U+00A9: "©" COPYRIGHT SIGN
115                    // U+00AE: "®" REGISTERED SIGN
116                    // U+2122: "™" TRADE MARK SIGN
117                    // U+2105: "℅" CARE OF
118                    "\\", "\u00A9", "\u00AE", "\u2122", "\u2105", "[", "]")
119            .setKeysOfRow(4,
120                    ",",
121                    // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
122                    // U+2264: "≤" LESS-THAN OR EQUAL TO
123                    // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
124                    key("<", joinMoreKeys("\u2039", "\u2264", "\u00AB")),
125                    SPACE_KEY,
126                    // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
127                    // U+2265: "≥" GREATER-THAN EQUAL TO
128                    // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
129                    key(">", joinMoreKeys("\u203A", "\u2265", "\u00BB")),
130                    // U+2026: "…" HORIZONTAL ELLIPSIS
131                    key(".", moreKey("\u2026")))
132            .build();
133
134    public static class RtlSymbolsShifted extends SymbolsShifted {
135        public RtlSymbolsShifted(final LayoutCustomizer customizer) {
136            super(customizer);
137        }
138
139        @Override
140        public ExpectedKey[][] getLayout(final boolean isPhone) {
141            return new ExpectedKeyboardBuilder(super.getLayout(isPhone))
142                .replaceKeyOfLabel("{", key("{", "}"))
143                .replaceKeyOfLabel("}", key("}", "{"))
144                .replaceKeyOfLabel("[", key("[", "]"))
145                .replaceKeyOfLabel("]", key("]", "["))
146                // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
147                // U+2264: "≤" LESS-THAN OR EQUAL TO
148                // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
149                .replaceKeyOfLabel("<", key("<", ">",
150                        moreKey("\u2039", "\u203A"), moreKey("\u2264", "\u2265"),
151                        moreKey("\u00AB", "\u00BB")))
152                // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
153                // U+2265: "≥" GREATER-THAN EQUAL TO
154                // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
155                .replaceKeyOfLabel(">", key(">", "<",
156                        moreKey("\u203A", "\u2039"), moreKey("\u2265", "\u2264"),
157                        moreKey("\u00BB", "\u00AB")))
158                .build();
159        }
160    }
161}
162