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