1a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka/* 2a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * Copyright (C) 2014 The Android Open Source Project 3a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * 4a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 5a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * you may not use this file except in compliance with the License. 6a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * You may obtain a copy of the License at 7a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * 8a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 9a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * 10a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 11a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 12a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * See the License for the specific language governing permissions and 14a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * limitations under the License. 15a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka */ 16a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 17a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaokapackage com.android.inputmethod.keyboard.layout; 18a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 19a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaokaimport com.android.inputmethod.keyboard.KeyboardId; 206959a0f214fc18e314f54213877956d95a1631e8Tadashi G. Takaokaimport com.android.inputmethod.keyboard.layout.customizer.EuroCustomizer; 21a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaokaimport com.android.inputmethod.keyboard.layout.expected.ExpectedKey; 22a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaokaimport com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder; 239342484e8d573a40f470b6a593df31c602fa4076Ken Wakasaimport com.android.inputmethod.latin.common.Constants; 24a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 25a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaokaimport java.util.Locale; 26a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 27a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka/** 28a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka * The Greek alphabet keyboard. 29a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka */ 30a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaokapublic final class Greek extends LayoutBase { 31a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka private static final String LAYOUT_NAME = "greek"; 32a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 336959a0f214fc18e314f54213877956d95a1631e8Tadashi G. Takaoka public Greek(final Locale locale) { 346959a0f214fc18e314f54213877956d95a1631e8Tadashi G. Takaoka super(new GreekCustomizer(locale), Symbols.class, SymbolsShifted.class); 35a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka } 36a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 37a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka @Override 38a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka public String getName() { return LAYOUT_NAME; } 39a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 406959a0f214fc18e314f54213877956d95a1631e8Tadashi G. Takaoka private static class GreekCustomizer extends EuroCustomizer { 416959a0f214fc18e314f54213877956d95a1631e8Tadashi G. Takaoka GreekCustomizer(final Locale locale) { super(locale); } 42a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 43a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka @Override 44a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka public ExpectedKey getAlphabetKey() { return GREEK_ALPHABET_KEY; } 45a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 46a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+0391: "Α" GREEK CAPITAL LETTER ALPHA 47a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+0392: "Β" GREEK CAPITAL LETTER BETA 48a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+0393: "Γ" GREEK CAPITAL LETTER GAMMA 49a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka private static final ExpectedKey GREEK_ALPHABET_KEY = key( 50a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka "\u0391\u0392\u0393", Constants.CODE_SWITCH_ALPHA_SYMBOL); 51a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka } 52a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 53a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka @Override 54a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) { 55a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON); 56a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka builder.replaceKeyOfLabel(ROW1_1, ROW1_1_SEMICOLON); 57a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka builder.replaceKeyOfLabel(ROW1_2, ROW1_2_FINAL_SIGMA); 58a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka return builder.build(); 59a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka } 60a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 61a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka @Override 62a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone, final int elementId) { 63a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON); 64a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka builder.toUpperCase(getLocale()); 65a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka if (elementId == KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED 66a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka || elementId == KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED) { 67a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka builder.replaceKeyOfLabel(ROW1_1, ROW1_1_COLON); 68a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka } else { 69a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka builder.replaceKeyOfLabel(ROW1_1, ROW1_1_SEMICOLON); 70a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka } 71a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka builder.replaceKeyOfLabel(ROW1_2, ROW1_2_FINAL_SIGMA); 72a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka return builder.build(); 73a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka } 74a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 75a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka private static final String ROW1_1 = "ROW1_1"; 76a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka private static final ExpectedKey ROW1_1_SEMICOLON = key(";", joinMoreKeys("1", ":")); 77a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka private static final ExpectedKey ROW1_1_COLON = key(":", joinMoreKeys("1", ";")); 78a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 79a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka private static final String ROW1_2 = "ROW2_2"; 80a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03C2: "ς" GREEK SMALL LETTER FINAL SIGMA 81a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka private static final ExpectedKey ROW1_2_FINAL_SIGMA = key("\u03C2", moreKey("2")); 82a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka 83a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder() 84a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka .setKeysOfRow(1, 85a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka key(ROW1_1, moreKey("1")), 86a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka key(ROW1_2, moreKey("2")), 87a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03B5: "ε" GREEK SMALL LETTER EPSILON 88a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03AD: "έ" GREEK SMALL LETTER EPSILON WITH TONOS 89d1cc4e0beb2f51d91f303991b93c63fecbe6bb8aTadashi G. Takaoka key("\u03B5", joinMoreKeys("\u03AD", "3")), 90a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03C1: "ρ" GREEK SMALL LETTER RHO 91a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka key("\u03C1", moreKey("4")), 92a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03C4: "τ" GREEK SMALL LETTER TAU 93a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka key("\u03C4", moreKey("5")), 94a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03C5: "υ" GREEK SMALL LETTER UPSILON 95a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03CD: "ύ" GREEK SMALL LETTER UPSILON WITH TONOS 96a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03CB: "ϋ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA 97a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03B0: "ΰ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 98d1cc4e0beb2f51d91f303991b93c63fecbe6bb8aTadashi G. Takaoka key("\u03C5", joinMoreKeys("\u03CD", "6", "\u03CB", "\u03B0")), 99a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03B8: "θ" GREEK SMALL LETTER THETA 100a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka key("\u03B8", moreKey("7")), 101a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03B9: "ι" GREEK SMALL LETTER IOTA 102a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03AF: "ί" GREEK SMALL LETTER IOTA WITH TONOS 103a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03CA: "ϊ" GREEK SMALL LETTER IOTA WITH DIALYTIKA 104a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+0390: "ΐ" GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 105d1cc4e0beb2f51d91f303991b93c63fecbe6bb8aTadashi G. Takaoka key("\u03B9", joinMoreKeys("\u03AF", "8", "\u03CA", "\u0390")), 106a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03BF: "ο" GREEK SMALL LETTER OMICRON 107a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03CC: "ό" GREEK SMALL LETTER OMICRON WITH TONOS 108d1cc4e0beb2f51d91f303991b93c63fecbe6bb8aTadashi G. Takaoka key("\u03BF", joinMoreKeys("\u03CC", "9")), 109a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03C0: "π" GREEK SMALL LETTER PI 110a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka key("\u03C0", moreKey("0"))) 111a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka .setKeysOfRow(2, 112a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03B1: "α" GREEK SMALL LETTER ALPHA 113a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03AC: "ά" GREEK SMALL LETTER ALPHA WITH TONOS 114a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka key("\u03B1", moreKey("\u03AC")), 115a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03C3: "σ" GREEK SMALL LETTER SIGMA 116a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03B4: "δ" GREEK SMALL LETTER DELTA 117a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03C6: "φ" GREEK SMALL LETTER PHI 118a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03B3: "γ" GREEK SMALL LETTER GAMMA 1196d44cb512239a11572ec18b850d609bacc3267beTadashi G. Takaoka "\u03C3", "\u03B4", "\u03C6", "\u03B3", 120a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03B7: "η" GREEK SMALL LETTER ETA 121a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03AE: "ή" GREEK SMALL LETTER ETA WITH TONOS 122a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka key("\u03B7", moreKey("\u03AE")), 123a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03BE: "ξ" GREEK SMALL LETTER XI 124a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03BA: "κ" GREEK SMALL LETTER KAPPA 125a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03BB: "λ" GREEK SMALL LETTER LAMDA 1266d44cb512239a11572ec18b850d609bacc3267beTadashi G. Takaoka "\u03BE", "\u03BA", "\u03BB") 127a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka .setKeysOfRow(3, 128a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03B6: "ζ" GREEK SMALL LETTER ZETA 129a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03C7: "χ" GREEK SMALL LETTER CHI 130a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03C8: "ψ" GREEK SMALL LETTER PSI 1316d44cb512239a11572ec18b850d609bacc3267beTadashi G. Takaoka "\u03B6", "\u03C7", "\u03C8", 132a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03C9: "ω" GREEK SMALL LETTER OMEGA 133a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03CE: "ώ" GREEK SMALL LETTER OMEGA WITH TONOS 134a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka key("\u03C9", moreKey("\u03CE")), 135a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03B2: "β" GREEK SMALL LETTER BETA 136a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03BD: "ν" GREEK SMALL LETTER NU 137a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka // U+03BC: "μ" GREEK SMALL LETTER MU 1386d44cb512239a11572ec18b850d609bacc3267beTadashi G. Takaoka "\u03B2", "\u03BD", "\u03BC") 139a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka .build(); 140a394a62d0b66e1aa5f73e035d38d35d03c60a8bbTadashi G. Takaoka} 141