Myanmar.java revision b657c053c4fa8d51a2f1eeb8945ca51939edce6d
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 Myanmar alphabet keyboard. 28 */ 29public final class Myanmar extends LayoutBase { 30 private static final String LAYOUT_NAME = "myanmar"; 31 32 public Myanmar(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 MyanmarCustomizer extends LayoutCustomizer { 40 public MyanmarCustomizer(final Locale locale) { super(locale); } 41 42 @Override 43 public ExpectedKey getAlphabetKey() { return MYANMAR_ALPHABET_KEY; } 44 45 @Override 46 public ExpectedKey[] getRightShiftKeys(final boolean isPhone) { 47 return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS; 48 } 49 50 @Override 51 public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { 52 // U+002C: "," COMMA 53 // U+104A: "၊" MYANMAR SIGN LITTLE SECTION 54 return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY)) 55 : joinKeys(key("\u104A", moreKey(","), SETTINGS_KEY), "_"); 56 } 57 58 @Override 59 public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) { 60 // U+104B: "။" MYANMAR SIGN SECTION 61 final ExpectedKey periodKey = key("\u104B", getPunctuationMoreKeys(isPhone)); 62 return isPhone ? joinKeys(periodKey) : joinKeys("/", periodKey); 63 } 64 65 @Override 66 public ExpectedKey[] getPunctuationMoreKeys(final boolean isPhone) { 67 return isPhone ? MYANMAR_PHONE_PUNCTUATION_MORE_KEYS 68 : MYANMAR_TABLET_PUNCTUATION_MORE_KEYS; 69 } 70 71 // U+1000: "က" MYANMAR LETTER KA 72 // U+1001: "ခ" MYANMAR LETTER KHA 73 // U+1002: "ဂ" MYANMAR LETTER GA 74 private static final ExpectedKey MYANMAR_ALPHABET_KEY = key( 75 "\u1000\u1001\u1002", Constants.CODE_SWITCH_ALPHA_SYMBOL); 76 77 // U+104A: "၊" MYANMAR SIGN LITTLE SECTION 78 // Punctuation more keys for phone form factor. 79 private static final ExpectedKey[] MYANMAR_PHONE_PUNCTUATION_MORE_KEYS = joinKeys( 80 "\u104A", ".", "?", "!", "#", ")", "(", "/", ";", 81 "...", "'", "@", ":", "-", "\"", "+", "%", "&"); 82 // Punctuation more keys for tablet form factor. 83 private static final ExpectedKey[] MYANMAR_TABLET_PUNCTUATION_MORE_KEYS = joinKeys( 84 ".", "'", "#", ")", "(", "/", ";", "@", 85 "...", ":", "-", "\"", "+", "%", "&"); 86 } 87 88 @Override 89 ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) { return ALPHABET_COMMON; } 90 91 @Override 92 public ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone, 93 final int elementId) { 94 if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) { 95 return getCommonAlphabetLayout(isPhone); 96 } 97 return ALPHABET_SHIFTED_COMMON; 98 } 99 100 // Helper method to create alphabet layout by adding special function keys. 101 @Override 102 ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, 103 final boolean isPhone) { 104 final LayoutCustomizer customizer = getCustomizer(); 105 builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone)); 106 builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone)); 107 builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone)); 108 if (isPhone) { 109 builder.addKeysOnTheRightOfRow(4, DELETE_KEY) 110 .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) 111 .addKeysOnTheRightOfRow(5, key(ENTER_KEY, EMOJI_KEY)); 112 } else { 113 builder.addKeysOnTheRightOfRow(1, DELETE_KEY) 114 .addKeysOnTheRightOfRow(3, ENTER_KEY) 115 .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) 116 .addKeysOnTheRightOfRow(5, EMOJI_KEY); 117 } 118 builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone)) 119 .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone)); 120 return builder; 121 } 122 123 private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder() 124 .setKeysOfRow(1, 125 // U+1041: "၁" MYANMAR DIGIT ONE 126 key("\u1041", moreKey("1")), 127 // U+1042: "၂" MYANMAR DIGIT TWO 128 key("\u1042", moreKey("2")), 129 // U+1043: "၃" MYANMAR DIGIT THREE 130 key("\u1043", moreKey("3")), 131 // U+1044: "၄" MYANMAR DIGIT FOUR 132 key("\u1044", moreKey("4")), 133 // U+1045: "၅" MYANMAR DIGIT FIVE 134 key("\u1045", moreKey("5")), 135 // U+1046: "၆" MYANMAR DIGIT SIX 136 key("\u1046", moreKey("6")), 137 // U+1047: "၇" MYANMAR DIGIT SEVEN 138 key("\u1047", moreKey("7")), 139 // U+1048: "၈" MYANMAR DIGIT EIGHT 140 key("\u1048", moreKey("8")), 141 // U+1049: "၉" MYANMAR DIGIT NINE 142 key("\u1049", moreKey("9")), 143 // U+1040: "၀" MYANMAR DIGIT ZERO 144 key("\u1040", moreKey("0"))) 145 .setKeysOfRow(2, 146 // U+1006: "ဆ" MYANMAR LETTER CHA 147 // U+1039/U+1006: "္ဆ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CHA 148 key("\u1006", moreKey("\u1039\u1006")), 149 // U+1010: "တ" MYANMAR LETTER TA 150 // U+1039/U+1010: "္တ" MYANMAR SIGN VIRAMA/MYANMAR LETTER TA 151 key("\u1010", moreKey("\u1039\u1010")), 152 // U+1014: "န" MYANMAR LETTER NA 153 // U+1039/U+1014: "္န" MYANMAR SIGN VIRAMA/MYANMAR LETTER NA 154 key("\u1014", moreKey("\u1039\u1014")), 155 // U+1019: "မ" MYANMAR LETTER MA 156 // U+1039/U+1019: "္မ" MYANMAR SIGN VIRAMA/MYANMAR LETTER MA 157 key("\u1019", moreKey("\u1039\u1019")), 158 // U+1021: "အ" MYANMAR LETTER A 159 // U+1015: "ပ" MYANMAR LETTER PA 160 "\u1021", "\u1015", 161 // U+1000: "က" MYANMAR LETTER KA 162 // U+1039/U+1000: "္က" MYANMAR SIGN VIRAMA/MYANMAR LETTER KA 163 key("\u1000", moreKey("\u1039\u1000")), 164 // U+1004: "င" MYANMAR LETTER NGA 165 // U+101E: "သ" MYANMAR LETTER SA 166 "\u1004", "\u101E", 167 // U+1005: "စ" MYANMAR LETTER CA 168 // U+1039/U+1005: "္စ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CA 169 key("\u1005", moreKey("\u1039\u1005"))) 170 .setKeysOfRow(3, 171 // U+1031: "ေ" MYANMAR VOWEL SIGN E 172 // U+103B: "ျ" MYANMAR CONSONANT SIGN MEDIAL YA 173 // U+103C: "ြ" MYANMAR CONSONANT SIGN MEDIAL RA 174 "\u1031", "\u103B", "\u103C", 175 // U+103D: "ွ" MYANMAR CONSONANT SIGN MEDIAL WA 176 // U+103E: "ှ" MYANMAR CONSONANT SIGN MEDIAL HA 177 // U+103D/U+103E: 178 // "ွှ" MYANMAR CONSONANT SIGN MEDIAL WA/MYANMAR CONSONANT SIGN MEDIAL HA 179 key("\u103D", joinMoreKeys("\u103E", "\u103D\u103E")), 180 // U+102D: "ိ" MYANMAR VOWEL SIGN I 181 // U+102E: "ီ" MYANMAR VOWEL SIGN II 182 key("\u102D", moreKey("\u102E")), 183 // U+102F: "ု" MYANMAR VOWEL SIGN U 184 // U+1030: "ူ" MYANMAR VOWEL SIGN UU 185 key("\u102F", moreKey("\u1030")), 186 // U+102C: "ာ" MYANMAR VOWEL SIGN AA 187 // U+102B: "ါ" MYANMAR VOWEL SIGN TALL AA 188 key("\u102C", moreKey("\u102B")), 189 // U+103A: "်" MYANMAR SIGN ASAT 190 // U+1032: "ဲ" MYANMAR VOWEL SIGN AI 191 key("\u103A", moreKey("\u1032")), 192 // U+1037: "့" MYANMAR SIGN DOT BELOW 193 // U+1036: "ံ" MYANMAR SIGN ANUSVARA 194 key("\u1037", moreKey("\u1036")), 195 // U+1038: "း" MYANMAR SIGN VISARGA 196 "\u1038") 197 .setKeysOfRow(4, 198 // U+1016: "ဖ" MYANMAR LETTER PHA 199 "\u1016", 200 // U+1011: "ထ" MYANMAR LETTER THA 201 // U+1039/U+1011: "္ထ" MYANMAR SIGN VIRAMA/MYANMAR LETTER THA 202 key("\u1011", moreKey("\u1039\u1011")), 203 // U+1001: "ခ" MYANMAR LETTER KHA 204 // U+1039/U+1001: "္ခ" MYANMAR SIGN VIRAMA/MYANMAR LETTER KHA 205 key("\u1001", moreKey("\u1039\u1001")), 206 // U+101C: "လ" MYANMAR LETTER LA 207 // U+1039/U+101C: "္လ" MYANMAR SIGN VIRAMA/MYANMAR LETTER LA 208 key("\u101C", moreKey("\u1039\u101C")), 209 // U+1018: "ဘ" MYANMAR LETTER BHA 210 // U+1039/U+1018: "္ဘ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BHA 211 key("\u1018", moreKey("\u1039\u1018")), 212 // U+100A: "ည" MYANMAR LETTER NNYA 213 // U+1009: "ဉ" MYANMAR LETTER NYA 214 key("\u100A", moreKey("\u1009")), 215 // U+101B: "ရ" MYANMAR LETTER RA 216 // U+101D: "ဝ" MYANMAR LETTER WA 217 "\u101B", "\u101D") 218 .build(); 219 220 private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder() 221 .setKeysOfRow(1, 222 // U+1027: "ဧ" MYANMAR LETTER E 223 // U+104F: "၏" MYANMAR SYMBOL GENITIVE 224 // U+1024: "ဤ" MYANMAR LETTER II 225 // U+1023: "ဣ" MYANMAR LETTER I 226 // U+104E: "၎" MYANMAR SYMBOL AFOREMENTIONED 227 // U+1000/U+103B/U+1015/U+103A: "ကျပ်" MYANMAR LETTER KA 228 // /MYANMAR CONSONANT SIGN MEDIAL YA/MYANMAR LETTER PA/MYANMAR SIGN ASAT 229 // U+1029: "ဩ" MYANMAR LETTER O 230 // U+102A: "ဪ" MYANMAR LETTER AU 231 // U+104D: "၍" MYANMAR SYMBOL COMPLETED 232 // U+104C: "၌" MYANMAR SYMBOL LOCATIVE 233 "\u1027", "\u104F", "\u1024", "\u1023", "\u104E", "\u1000\u103B\u1015\u103A", 234 "\u1029", "\u102A", "\u104D", "\u104C") 235 .setKeysOfRow(2, 236 // U+1017: "ဗ" MYANMAR LETTER BA 237 // U+1039/U+1017: "္ဗ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BA 238 key("\u1017", moreKey("\u1039\u1017")), 239 // U+1012: "ဒ" MYANMAR LETTER DA 240 // U+1039/U+1012: "္ဒ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DA 241 key("\u1012", moreKey("\u1039\u1012")), 242 // U+1013: "ဓ" MYANMAR LETTER DHA 243 // U+1039/U+1013: "္ဓ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DHA 244 key("\u1013", moreKey("\u1039\u1013")), 245 // U+1003: "ဃ" MYANMAR LETTER GHA 246 // U+100E: "ဎ" MYANMAR LETTER DDHA 247 // U+103F: "ဿ" MYANMAR LETTER GREAT SA 248 // U+100F: "ဏ" MYANMAR LETTER NNA 249 "\u1003", "\u100E", "\u103F", "\u100F", 250 // U+1008: "ဈ" MYANMAR LETTER JHA 251 // U+1039/U+1008: "္ဈ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JHA 252 key("\u1008", moreKey("\u1039\u1008")), 253 // U+1007: "ဇ" MYANMAR LETTER JA 254 // U+1039/U+1007: "္ဇ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JA 255 key("\u1007", moreKey("\u1039\u1007")), 256 // U+1002: "ဂ" MYANMAR LETTER GA 257 // U+1039/U+1002: "္ဂ" MYANMAR SIGN VIRAMA/MYANMAR LETTER GA 258 key("\u1002", moreKey("\u1039\u1002"))) 259 .setKeysOfRow(3, 260 // U+101A: "ယ" MYANMAR LETTER YA 261 // U+1039: "္" MYANMAR SIGN VIRAMA 262 // U+1004/U+103A/U+1039: "င်္င" MYANMAR LETTER NGA 263 // /MYANMAR SIGN ASAT/MYANMAR SIGN VIRAMA 264 // U+103E: "ှ" MYANMAR CONSONANT SIGN MEDIAL HA 265 // U+102E: "ီ" MYANMAR VOWEL SIGN II 266 // U+1030: "ူ" MYANMAR VOWEL SIGN UU 267 // U+102B: "ါ" MYANMAR VOWEL SIGN TALL AA 268 // U+1032: "ဲ" MYANMAR VOWEL SIGN AI 269 // U+1036: "ံ" MYANMAR SIGN ANUSVARA 270 // U+101F: "ဟ" MYANMAR LETTER HA 271 "\u101A", "\u1039", "\u1004\u103A\u1039", "\u103E", "\u102E", "\u1030", 272 "\u102B", "\u1032", "\u1036", "\u101F") 273 .setKeysOfRow(4, 274 // U+1025: "ဥ" MYANMAR LETTER U 275 // U+1026: "ဦ" MYANMAR LETTER UU 276 // U+100C: "ဌ" MYANMAR LETTER TTHA 277 // U+100B: "ဋ" MYANMAR LETTER TTA 278 // U+100D: "ဍ" MYANMAR LETTER DDA 279 // U+1020: "ဠ" MYANMAR LETTER LLA 280 // U+100B/U+1039/U+100C: "ဋ္ဌ" MYANMAR LETTER TTA 281 // /MYANMAR SIGN VIRAMA/MYANMAR LETTER TTHA 282 "\u1025", "\u1026", "\u100C", "\u100B", "\u100D", "\u1020", 283 "\u100B\u1039\u100C", 284 // U+100F/U+1039/U+100D: "ဏ္ဍ" MYANMAR LETTER NNA 285 // /MYANMAR SIGN VIRAMA/MYANMAR LETTER DDA 286 // U+100F/U+1039/U+100C: "ဏ္ဌ" MYANMAR LETTER NNA 287 // /MYANMAR SIGN VIRAMA/MYANMAR LETTER TTHA 288 key("\u100F\u1039\u100D", moreKey("\u100F\u1039\u100C"))) 289 .build(); 290} 291