Thai.java revision dc62c711aaa8f875996a8dd36d8a1726b8b2fb74
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 Thai alphabet keyboard.
28 */
29public final class Thai extends LayoutBase {
30    private static final String LAYOUT_NAME = "thai";
31
32    public Thai(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 ThaiCustomizer extends LayoutCustomizer {
40        public ThaiCustomizer(final Locale locale) { super(locale); }
41
42        @Override
43        public ExpectedKey getAlphabetKey() { return THAI_ALPHABET_KEY; }
44
45        @Override
46        public ExpectedKey getCurrencyKey() { return CURRENCY_BAHT; }
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+0E01: "ก" THAI CHARACTER KO KAI
57        // U+0E02: "ข" THAI CHARACTER KHO KHAI
58        // U+0E04: "ค" THAI CHARACTER KHO KHWAI
59        private static final ExpectedKey THAI_ALPHABET_KEY = key(
60                "\u0E01\u0E02\u0E04", Constants.CODE_SWITCH_ALPHA_SYMBOL);
61
62        // U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT
63        private static final ExpectedKey CURRENCY_BAHT = key("\u0E3F",
64                Symbols.CURRENCY_GENERIC_MORE_KEYS);
65    }
66
67    @Override
68    ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) {
69        final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
70        if (isPhone) {
71            // U+0E03: "ฃ" THAI CHARACTER KHO KHUAT
72            builder.addKeysOnTheRightOfRow(3, "\u0E03");
73        } else {
74            // U+0E03: "ฃ" THAI CHARACTER KHO KHUAT
75            builder.addKeysOnTheRightOfRow(2, "\u0E03")
76                    .addKeysOnTheRightOfRow(4, (Object[])EXCLAMATION_AND_QUESTION_MARKS);
77        }
78        return builder.build();
79    }
80
81    @Override
82    public ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone,
83            final int elementId) {
84        if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
85            return getCommonAlphabetLayout(isPhone);
86        }
87        final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(
88                ALPHABET_SHIFTED_COMMON);
89        if (isPhone) {
90            // U+0E05: "ฅ" THAI CHARACTER KHO KHON
91            builder.addKeysOnTheRightOfRow(3, "\u0E05");
92        } else {
93            // U+0E05: "ฅ" THAI CHARACTER KHO KHON
94            builder.addKeysOnTheRightOfRow(2, "\u0E05");
95        }
96        return builder.build();
97    }
98
99    // Helper method to create alphabet layout by adding special function keys.
100    @Override
101    ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder,
102            final boolean isPhone) {
103        final LayoutCustomizer customizer = getCustomizer();
104        builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone));
105        builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone));
106        builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone));
107        if (isPhone) {
108            builder.addKeysOnTheRightOfRow(4, DELETE_KEY)
109                    .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey())
110                    .addKeysOnTheRightOfRow(5, key(ENTER_KEY, EMOJI_KEY));
111        } else {
112            builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
113                    .addKeysOnTheRightOfRow(3, ENTER_KEY)
114                    .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey())
115                    .addKeysOnTheRightOfRow(5, EMOJI_KEY);
116        }
117        builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone))
118                .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone));
119        return builder;
120    }
121
122    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
123            .setKeysOfRow(1,
124                    // U+0E45: "ๅ" THAI CHARACTER LAKKHANGYAO
125                    "\u0E45",
126                    // U+0E51: "๑" THAI DIGIT ONE
127                    key("/", joinMoreKeys("1", "\u0E51")),
128                    // U+0E52: "๒" THAI DIGIT TWO
129                    key("_", joinMoreKeys("2", "\u0E52")),
130                    // U+0E20: "ภ" THAI CHARACTER PHO SAMPHAO
131                    // U+0E53: "๓" THAI DIGIT THREE
132                    key("\u0E20", joinMoreKeys("3", "\u0E53")),
133                    // U+0E16: "ถ" THAI CHARACTER THO THUNG
134                    // U+0E54: "๔" THAI DIGIT FOUR
135                    key("\u0E16", joinMoreKeys("4", "\u0E54")),
136                    // U+0E38: " ุ" THAI CHARACTER SARA U
137                    key(" \u0E38", "\u0E38"),
138                    // U+0E36: " ึ" THAI CHARACTER SARA UE
139                    key(" \u0E36", "\u0E36"),
140                    // U+0E04: "ค" THAI CHARACTER KHO KHWAI
141                    // U+0E55: "๕" THAI DIGIT FIVE
142                    key("\u0E04", joinMoreKeys("5", "\u0E55")),
143                    // U+0E15: "ต" THAI CHARACTER TO TAO
144                    // U+0E56: "๖" THAI DIGIT SIX
145                    key("\u0E15", joinMoreKeys("6", "\u0E56")),
146                    // U+0E08: "จ" THAI CHARACTER CHO CHAN
147                    // U+0E57: "๗" THAI DIGIT SEVEN
148                    key("\u0E08", joinMoreKeys("7", "\u0E57")),
149                    // U+0E02: "ข" THAI CHARACTER KHO KHAI
150                    // U+0E58: "๘" THAI DIGIT EIGHT
151                    key("\u0E02", joinMoreKeys("8", "\u0E58")),
152                    // U+0E0A: "ช" THAI CHARACTER CHO CHANG
153                    // U+0E59: "๙" THAI DIGIT NINE
154                    key("\u0E0A", joinMoreKeys("9", "\u0E59")))
155            .setKeysOfRow(2,
156                    // U+0E46: "ๆ" THAI CHARACTER MAIYAMOK
157                    // U+0E50: "๐" THAI DIGIT ZERO
158                    key("\u0E46", joinMoreKeys("0", "\u0E50")),
159                    // U+0E44: "ไ" THAI CHARACTER SARA AI MAIMALAI
160                    // U+0E33: "ำ" THAI CHARACTER SARA AM
161                    // U+0E1E: "พ" THAI CHARACTER PHO PHAN
162                    // U+0E30: "ะ" THAI CHARACTER SARA A
163                    "\u0E44", "\u0E33", "\u0E1E", "\u0E30",
164                    // U+0E31: " ั" THAI CHARACTER MAI HAN-AKAT
165                    key(" \u0E31", "\u0E31"),
166                    // U+0E35: " ี" HAI CHARACTER SARA II
167                    key(" \u0E35", "\u0E35"),
168                    // U+0E23: "ร" THAI CHARACTER RO RUA
169                    // U+0E19: "น" THAI CHARACTER NO NU
170                    // U+0E22: "ย" THAI CHARACTER YO YAK
171                    // U+0E1A: "บ" THAI CHARACTER BO BAIMAI
172                    // U+0E25: "ล" THAI CHARACTER LO LING
173                    "\u0E23", "\u0E19", "\u0E22", "\u0E1A", "\u0E25")
174            .setKeysOfRow(3,
175                    // U+0E1F: "ฟ" THAI CHARACTER FO FAN
176                    // U+0E2B: "ห" THAI CHARACTER HO HIP
177                    // U+0E01: "ก" THAI CHARACTER KO KAI
178                    // U+0E14: "ด" THAI CHARACTER DO DEK
179                    // U+0E40: "เ" THAI CHARACTER SARA E
180                    "\u0E1F", "\u0E2B", "\u0E01", "\u0E14", "\u0E40",
181                    // U+0E49: " ้" THAI CHARACTER MAI THO
182                    key(" \u0E49", "\u0E49"),
183                    // U+0E48: " ่" THAI CHARACTER MAI EK
184                    key(" \u0E48", "\u0E48"),
185                    // U+0E32: "า" THAI CHARACTER SARA AA
186                    // U+0E2A: "ส" THAI CHARACTER SO SUA
187                    // U+0E27: "ว" THAI CHARACTER WO WAEN
188                    // U+0E07: "ง" THAI CHARACTER NGO NGU
189                    "\u0E32", "\u0E2A", "\u0E27", "\u0E07")
190            .setKeysOfRow(4,
191                    // U+0E1C: "ผ" THAI CHARACTER PHO PHUNG
192                    // U+0E1B: "ป" THAI CHARACTER PO PLA
193                    // U+0E41: "แ" THAI CHARACTER SARA AE
194                    // U+0E2D: "อ" THAI CHARACTER O ANG
195                    "\u0E1C", "\u0E1B", "\u0E41", "\u0E2D",
196                    // U+0E34: " ิ" THAI CHARACTER SARA I
197                    key(" \u0E34", "\u0E34"),
198                    // U+0E37: " ื" THAI CHARACTER SARA UEE
199                    key(" \u0E37", "\u0E37"),
200                    // U+0E17: "ท" THAI CHARACTER THO THAHAN
201                    // U+0E21: "ม" THAI CHARACTER MO MA
202                    // U+0E43: "ใ" THAI CHARACTER SARA AI MAIMUAN
203                    // U+0E1D: "ฝ" THAI CHARACTER FO FA
204                    "\u0E17", "\u0E21", "\u0E43", "\u0E1D")
205            .build();
206
207    private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
208            .setKeysOfRow(1,
209                    // U+0E51: "๑" THAI DIGIT ONE
210                    // U+0E52: "๒" THAI DIGIT TWO
211                    // U+0E53: "๓" THAI DIGIT THREE
212                    // U+0E54: "๔" THAI DIGIT FOUR
213                    // U+0E39: " ู" THAI CHARACTER SARA UU
214                    "+", "\u0E51", "\u0E52", "\u0E53", "\u0E54",
215                    key(" \u0E39", "\u0E39"),
216                    // U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT
217                    // U+0E55: "๕" THAI DIGIT FIVE
218                    // U+0E56: "๖" THAI DIGIT SIX
219                    // U+0E57: "๗" THAI DIGIT SEVEN
220                    // U+0E58: "๘" THAI DIGIT EIGHT
221                    // U+0E59: "๙" THAI DIGIT NINE
222                    "\u0E3F", "\u0E55", "\u0E56", "\u0E57", "\u0E58", "\u0E59")
223            .setKeysOfRow(2,
224                    // U+0E50: "๐" THAI DIGIT ZERO
225                    // U+0E0E: "ฎ" THAI CHARACTER DO CHADA
226                    // U+0E11: "ฑ" THAI CHARACTER THO NANGMONTHO
227                    // U+0E18: "ธ" THAI CHARACTER THO THONG
228                    "\u0E50", "\"", "\u0E0E", "\u0E11", "\u0E18",
229                    // U+0E4D: " ํ" THAI CHARACTER THANTHAKHAT
230                    key(" \u0E4D", "\u0E4D"),
231                    // U+0E4A: " ๊" THAI CHARACTER MAI TRI
232                    key(" \u0E4A", "\u0E4A"),
233                    // U+0E13: "ณ" THAI CHARACTER NO NEN
234                    // U+0E2F: "ฯ" THAI CHARACTER PAIYANNOI
235                    // U+0E0D: "ญ" THAI CHARACTER YO YING
236                    // U+0E10: "ฐ" THAI CHARACTER THO THAN
237                    "\u0E13", "\u0E2F", "\u0E0D", "\u0E10", ",")
238            .setKeysOfRow(3,
239                    // U+0E24: "ฤ" THAI CHARACTER RU
240                    // U+0E06: "ฆ" THAI CHARACTER KHO RAKHANG
241                    // U+0E0F: "ฏ" THAI CHARACTER TO PATAK
242                    // U+0E42: "โ" THAI CHARACTER SARA O
243                    // U+0E0C: "ฌ" THAI CHARACTER CHO CHOE
244                    "\u0E24", "\u0E06", "\u0E0F", "\u0E42", "\u0E0C",
245                    // U+0E47: " ็" THAI CHARACTER MAITAIKHU
246                    key(" \u0E47", "\u0E47"),
247                    // U+0E4B: " ๋" THAI CHARACTER MAI CHATTAWA
248                    key(" \u0E4B", "\u0E4B"),
249                    // U+0E29: "ษ" THAI CHARACTER SO RUSI
250                    // U+0E28: "ศ" THAI CHARACTER SO SALA
251                    // U+0E0B: "ซ" THAI CHARACTER SO SO
252                    "\u0E29", "\u0E28", "\u0E0B", ".")
253            .setKeysOfRow(4,
254                    // U+0E09: "ฉ" THAI CHARACTER CHO CHING
255                    // U+0E2E: "ฮ" THAI CHARACTER HO NOKHUK
256                    "(", ")", "\u0E09", "\u0E2E",
257                    // U+0E3A: " ฺ" THAI CHARACTER PHINTHU
258                    key(" \u0E3A", "\u0E3A"),
259                    // U+0E4C: " ์" THAI CHARACTER THANTHAKHAT
260                    key(" \u0E4C", "\u0E4C"),
261                    // U+0E12: "ฒ" THAI CHARACTER THO PHUTHAO
262                    // U+0E2C: "ฬ" THAI CHARACTER LO CHULA
263                    // U+0E26: "ฦ" THAI CHARACTER LU
264                    "?", "\u0E12", "\u0E2C", "\u0E26")
265            .build();
266}
267