Lao.java revision 6d44cb512239a11572ec18b850d609bacc3267be
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.KeyboardId;
20import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
21import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
22import com.android.inputmethod.latin.Constants;
23
24import java.util.Locale;
25
26/**
27 * The Khmer alphabet keyboard.
28 */
29public final class Lao extends LayoutBase {
30    private static final String LAYOUT_NAME = "lao";
31
32    public Lao(final LayoutCustomizer customizer) {
33        super(customizer, Symbols.class, SymbolsShifted.class);
34    }
35
36    @Override
37    public String getName() { return LAYOUT_NAME; }
38
39    public static class LaoCustomizer extends LayoutCustomizer {
40        public LaoCustomizer(final Locale locale) { super(locale); }
41
42        @Override
43        public ExpectedKey getAlphabetKey() { return LAO_ALPHABET_KEY; }
44
45        @Override
46        public ExpectedKey getCurrencyKey() { return CURRENCY_KIP; }
47
48        @Override
49        public ExpectedKey[] getOtherCurrencyKeys() {
50            return SymbolsShifted.CURRENCIES_OTHER_GENERIC;
51        }
52
53        @Override
54        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) { return EMPTY_KEYS; }
55
56        // U+0E81: "ກ" LAO LETTER KO
57        // U+0E82: "ຂ" LAO LETTER KHO SUNG
58        // U+0E84: "ຄ" LAO LETTER KHO TAM
59        private static final ExpectedKey LAO_ALPHABET_KEY = key(
60                "\u0E81\u0E82\u0E84", Constants.CODE_SWITCH_ALPHA_SYMBOL);
61
62        // U+20AD: "₭" KIP SIGN
63        private static final ExpectedKey CURRENCY_KIP = key("\u20AD",
64                Symbols.CURRENCY_GENERIC_MORE_KEYS);
65    }
66
67    @Override
68    ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) {
69        if (isPhone) {
70            return ALPHABET_COMMON;
71        }
72        final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
73        builder.addKeysOnTheRightOfRow(4, (Object[])EXCLAMATION_AND_QUESTION_MARKS);
74        return builder.build();
75    }
76
77    @Override
78    public ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone,
79            final int elementId) {
80        if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
81            return getCommonAlphabetLayout(isPhone);
82        }
83        return ALPHABET_SHIFTED_COMMON;
84    }
85
86    // Helper method to create alphabet layout by adding special function keys.
87    @Override
88    ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder,
89            final boolean isPhone) {
90        final LayoutCustomizer customizer = getCustomizer();
91        builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone));
92        builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone));
93        builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone));
94        if (isPhone) {
95            builder.addKeysOnTheRightOfRow(4, DELETE_KEY)
96                    .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey())
97                    .addKeysOnTheRightOfRow(5, key(ENTER_KEY, EMOJI_KEY));
98        } else {
99            builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
100                    .addKeysOnTheRightOfRow(3, ENTER_KEY)
101                    .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey(), SETTINGS_KEY)
102                    .addKeysOnTheRightOfRow(5, EMOJI_KEY);
103        }
104        builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone))
105                .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone));
106        return builder;
107    }
108
109    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
110            .setKeysOfRow(1,
111                    // U+0EA2: "ຢ" LAO LETTER YO
112                    // U+0ED1: "໑" LAO DIGIT ONE
113                    key("\u0EA2", joinMoreKeys("1", "\u0ED1")),
114                    // U+0E9F: "ຟ" LAO LETTER FO SUNG
115                    // U+0ED2: "໒" LAO DIGIT TWO
116                    key("\u0E9F", joinMoreKeys("2", "\u0ED2")),
117                    // U+0EC2: "ໂ" LAO VOWEL SIGN O
118                    // U+0ED3: "໓" LAO DIGIT THREE
119                    key("\u0EC2", joinMoreKeys("3", "\u0ED3")),
120                    // U+0E96: "ຖ" LAO LETTER THO SUNG
121                    // U+0ED4: "໔" LAO DIGIT FOUR
122                    key("\u0E96", joinMoreKeys("4", "\u0ED4")),
123                    // U+0EB8: "ຸ" LAO VOWEL SIGN U
124                    // U+0EB9: "ູ" LAO VOWEL SIGN UU
125                    "\u0EB8", "\u0EB9",
126                    // U+0E84: "ຄ" LAO LETTER KHO TAM
127                    // U+0ED5: "໕" LAO DIGIT FIVE
128                    key("\u0E84", joinMoreKeys("5", "\u0ED5")),
129                    // U+0E95: "ຕ" LAO LETTER TO
130                    // U+0ED6: "໖" LAO DIGIT SIX
131                    key("\u0E95", joinMoreKeys("6", "\u0ED6")),
132                    // U+0E88: "ຈ" LAO LETTER CO
133                    // U+0ED7: "໗" LAO DIGIT SEVEN
134                    key("\u0E88", joinMoreKeys("7", "\u0ED7")),
135                    // U+0E82: "ຂ" LAO LETTER KHO SUNG
136                    // U+0ED8: "໘" LAO DIGIT EIGHT
137                    key("\u0E82", joinMoreKeys("8", "\u0ED8")),
138                    // U+0E8A: "ຊ" LAO LETTER SO TAM
139                    // U+0ED9: "໙" LAO DIGIT NINE
140                    key("\u0E8A", joinMoreKeys("9", "\u0ED9")),
141                    // U+0ECD: "ໍ" LAO NIGGAHITA
142                    "\u0ECD")
143            .setKeysOfRow(2,
144                    // U+0EBB: "ົ" LAO VOWEL SIGN MAI KON
145                    "\u0EBB",
146                    // U+0EC4: "ໄ" LAO VOWEL SIGN AI
147                    // U+0ED0: "໐" LAO DIGIT ZERO
148                    key("\u0EC4", joinMoreKeys("0", "\u0ED0")),
149                    // U+0EB3: "ຳ" LAO VOWEL SIGN AM
150                    // U+0E9E: "ພ" LAO LETTER PHO TAM
151                    // U+0EB0: "ະ" LAO VOWEL SIGN A
152                    // U+0EB4: "ິ" LAO VOWEL SIGN I
153                    // U+0EB5: "ີ" LAO VOWEL SIGN II
154                    // U+0EAE: "ຮ" LAO LETTER HO TAM
155                    // U+0E99: "ນ" LAO LETTER NO
156                    // U+0E8D: "ຍ" LAO LETTER NYO
157                    // U+0E9A: "ບ" LAO LETTER BO
158                    // U+0EA5: "ລ" LAO LETTER LO LOOT
159                    "\u0EB3", "\u0E9E", "\u0EB0", "\u0EB4", "\u0EB5", "\u0EAE", "\u0E99", "\u0E8D",
160                    "\u0E9A", "\u0EA5")
161            .setKeysOfRow(3,
162                    // U+0EB1: "ັ" LAO VOWEL SIGN MAI KAN
163                    // U+0EAB: "ຫ" LAO LETTER HO SUNG
164                    // U+0E81: "ກ" LAO LETTER KO
165                    // U+0E94: "ດ" LAO LETTER DO
166                    // U+0EC0: "ເ" LAO VOWEL SIGN E
167                    // U+0EC9: "້" LAO TONE MAI THO
168                    // U+0EC8: "່" LAO TONE MAI EK
169                    // U+0EB2: "າ" LAO VOWEL SIGN AA
170                    // U+0EAA: "ສ" LAO LETTER SO SUNG
171                    // U+0EA7: "ວ" LAO LETTER WO
172                    // U+0E87: "ງ" LAO LETTER NGO
173                    // U+201C: "“" LEFT DOUBLE QUOTATION MARK
174                    "\u0EB1", "\u0EAB", "\u0E81", "\u0E94", "\u0EC0", "\u0EC9", "\u0EC8", "\u0EB2",
175                    "\u0EAA", "\u0EA7", "\u0E87", "\u201C")
176            .setKeysOfRow(4,
177                    // U+0E9C: "ຜ" LAO LETTER PHO SUNG
178                    // U+0E9B: "ປ" LAO LETTER PO
179                    // U+0EC1: "ແ" LAO VOWEL SIGN EI
180                    // U+0EAD: "ອ" LAO LETTER O
181                    // U+0EB6: "ຶ" LAO VOWEL SIGN Y
182                    // U+0EB7: "ື" LAO VOWEL SIGN YY
183                    // U+0E97: "ທ" LAO LETTER THO TAM
184                    // U+0EA1: "ມ" LAO LETTER MO
185                    // U+0EC3: "ໃ" LAO VOWEL SIGN AY
186                    // U+0E9D: "ຝ" LAO LETTER FO TAM
187                    "\u0E9C", "\u0E9B", "\u0EC1", "\u0EAD", "\u0EB6", "\u0EB7", "\u0E97", "\u0EA1",
188                    "\u0EC3", "\u0E9D")
189            .build();
190
191    private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
192            .setKeysOfRow(1,
193                    // U+0ED1: "໑" LAO DIGIT ONE
194                    // U+0ED2: "໒" LAO DIGIT TWO
195                    // U+0ED3: "໓" LAO DIGIT THREE
196                    // U+0ED4: "໔" LAO DIGIT FOUR
197                    // U+0ECC: "໌" LAO CANCELLATION MARK
198                    // U+0EBC: "ຼ" LAO SEMIVOWEL SIGN LO
199                    // U+0ED5: "໕" LAO DIGIT FIVE
200                    // U+0ED6: "໖" LAO DIGIT SIX
201                    // U+0ED7: "໗" LAO DIGIT SEVEN
202                    // U+0ED8: "໘" LAO DIGIT EIGHT
203                    // U+0ED9: "໙" LAO DIGIT NINE
204                    // U+0ECD/U+0EC8: "ໍ່" LAO NIGGAHITA/LAO TONE MAI EK
205                    "\u0ED1", "\u0ED2", "\u0ED3", "\u0ED4", "\u0ECC", "\u0EBC", "\u0ED5", "\u0ED6",
206                    "\u0ED7", "\u0ED8", "\u0ED9", "\u0ECD\u0EC8")
207            .setKeysOfRow(2,
208                    // U+0EBB/U+0EC9: "" LAO VOWEL SIGN MAI KON/LAO TONE MAI THO
209                    // U+0ED0: "໐" LAO DIGIT ZERO
210                    // U+0EB3/U+0EC9: "ຳ້" LAO VOWEL SIGN AM/LAO TONE MAI THO
211                    // U+0EB4/U+0EC9: "ິ້" LAO VOWEL SIGN I/LAO TONE MAI THO
212                    // U+0EB5/U+0EC9: "ີ້" LAO VOWEL SIGN II/LAO TONE MAI THO
213                    // U+0EA3: "ຣ" LAO LETTER LO LING
214                    // U+0EDC: "ໜ" LAO HO NO
215                    // U+0EBD: "ຽ" LAO SEMIVOWEL SIGN NYO
216                    // U+0EAB/U+0EBC: "" LAO LETTER HO SUNG/LAO SEMIVOWEL SIGN LO
217                    // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
218                    "\u0EBB\u0EC9", "\u0ED0", "\u0EB3\u0EC9", "_", "+", "\u0EB4\u0EC9",
219                    "\u0EB5\u0EC9", "\u0EA3", "\u0EDC", "\u0EBD", "\u0EAB\u0EBC", "\u201D")
220            .setKeysOfRow(3,
221                    // U+0EB1/U+0EC9: "ັ້" LAO VOWEL SIGN MAI KAN/LAO TONE MAI THO
222                    // U+0ECA: "໊" LAO TONE MAI TI
223                    // U+0ECB: "໋" LAO TONE MAI CATAWA
224                    // U+201C: "“" LEFT DOUBLE QUOTATION MARK
225                    "\u0EB1\u0EC9", ";", ".", ",", ":", "\u0ECA", "\u0ECB", "!", "?", "%", "=",
226                    "\u201C")
227            .setKeysOfRow(4,
228                    // U+20AD: "₭" KIP SIGN
229                    // U+0EAF: "ຯ" LAO ELLIPSIS
230                    // U+0EB6/U+0EC9: "ຶ້" LAO VOWEL SIGN Y/LAO TONE MAI THO
231                    // U+0EB7/U+0EC9: "ື້" LAO VOWEL SIGN YY/LAO TONE MAI THO
232                    // U+0EC6: "ໆ" LAO KO LA
233                    // U+0EDD: "ໝ" LAO HO MO
234                    "\u20AD", "(", "\u0EAF", "@", "\u0EB6\u0EC9", "\u0EB7\u0EC9", "\u0EC6",
235                    "\u0EDD", "$", ")")
236            .build();
237}
238