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