Greek.java revision a394a62d0b66e1aa5f73e035d38d35d03c60a8bb
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 Greek alphabet keyboard.
28 */
29public final class Greek extends LayoutBase {
30    private static final String LAYOUT_NAME = "greek";
31
32    public Greek(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 GreekCustomizer extends EuroLayoutCustomizer {
40        public GreekCustomizer(final Locale locale) { super(locale); }
41
42        @Override
43        public ExpectedKey getAlphabetKey() { return GREEK_ALPHABET_KEY; }
44
45        // U+0391: "Α" GREEK CAPITAL LETTER ALPHA
46        // U+0392: "Β" GREEK CAPITAL LETTER BETA
47        // U+0393: "Γ" GREEK CAPITAL LETTER GAMMA
48        private static final ExpectedKey GREEK_ALPHABET_KEY = key(
49                "\u0391\u0392\u0393", Constants.CODE_SWITCH_ALPHA_SYMBOL);
50    }
51
52    @Override
53    ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) {
54        final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
55        builder.replaceKeyOfLabel(ROW1_1, ROW1_1_SEMICOLON);
56        builder.replaceKeyOfLabel(ROW1_2, ROW1_2_FINAL_SIGMA);
57        return builder.build();
58    }
59
60    @Override
61    ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone, final int elementId) {
62        final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
63        builder.toUpperCase(getLocale());
64        if (elementId == KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED
65                || elementId == KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED) {
66            builder.replaceKeyOfLabel(ROW1_1, ROW1_1_COLON);
67        } else {
68            builder.replaceKeyOfLabel(ROW1_1, ROW1_1_SEMICOLON);
69        }
70        builder.replaceKeyOfLabel(ROW1_2, ROW1_2_FINAL_SIGMA);
71        return builder.build();
72    }
73
74    private static final String ROW1_1 = "ROW1_1";
75    private static final ExpectedKey ROW1_1_SEMICOLON = key(";", joinMoreKeys("1", ":"));
76    private static final ExpectedKey ROW1_1_COLON = key(":", joinMoreKeys("1", ";"));
77
78    private static final String ROW1_2 = "ROW2_2";
79    // U+03C2: "ς" GREEK SMALL LETTER FINAL SIGMA
80    private static final ExpectedKey ROW1_2_FINAL_SIGMA = key("\u03C2", moreKey("2"));
81
82    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
83            .setKeysOfRow(1,
84                    key(ROW1_1, moreKey("1")),
85                    key(ROW1_2, moreKey("2")),
86                    // U+03B5: "ε" GREEK SMALL LETTER EPSILON
87                    // U+03AD: "έ" GREEK SMALL LETTER EPSILON WITH TONOS
88                    key("\u03B5", joinMoreKeys("3", "\u03AD")),
89                    // U+03C1: "ρ" GREEK SMALL LETTER RHO
90                    key("\u03C1", moreKey("4")),
91                    // U+03C4: "τ" GREEK SMALL LETTER TAU
92                    key("\u03C4", moreKey("5")),
93                    // U+03C5: "υ" GREEK SMALL LETTER UPSILON
94                    // U+03CD: "ύ" GREEK SMALL LETTER UPSILON WITH TONOS
95                    // U+03CB: "ϋ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA
96                    // U+03B0: "ΰ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
97                    key("\u03C5", joinMoreKeys("6", "\u03CD", "\u03CB", "\u03B0")),
98                    // U+03B8: "θ" GREEK SMALL LETTER THETA
99                    key("\u03B8", moreKey("7")),
100                    // U+03B9: "ι" GREEK SMALL LETTER IOTA
101                    // U+03AF: "ί" GREEK SMALL LETTER IOTA WITH TONOS
102                    // U+03CA: "ϊ" GREEK SMALL LETTER IOTA WITH DIALYTIKA
103                    // U+0390: "ΐ" GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
104                    key("\u03B9", joinMoreKeys("8", "\u03AF", "\u03CA", "\u0390")),
105                    // U+03BF: "ο" GREEK SMALL LETTER OMICRON
106                    // U+03CC: "ό" GREEK SMALL LETTER OMICRON WITH TONOS
107                    key("\u03BF", joinMoreKeys("9", "\u03CC")),
108                    // U+03C0: "π" GREEK SMALL LETTER PI
109                    key("\u03C0", moreKey("0")))
110            .setKeysOfRow(2,
111                    // U+03B1: "α" GREEK SMALL LETTER ALPHA
112                    // U+03AC: "ά" GREEK SMALL LETTER ALPHA WITH TONOS
113                    key("\u03B1", moreKey("\u03AC")),
114                    // U+03C3: "σ" GREEK SMALL LETTER SIGMA
115                    key("\u03C3"),
116                    // U+03B4: "δ" GREEK SMALL LETTER DELTA
117                    key("\u03B4"),
118                    // U+03C6: "φ" GREEK SMALL LETTER PHI
119                    key("\u03C6"),
120                    // U+03B3: "γ" GREEK SMALL LETTER GAMMA
121                    key("\u03B3"),
122                    // U+03B7: "η" GREEK SMALL LETTER ETA
123                    // U+03AE: "ή" GREEK SMALL LETTER ETA WITH TONOS
124                    key("\u03B7", moreKey("\u03AE")),
125                    // U+03BE: "ξ" GREEK SMALL LETTER XI
126                    key("\u03BE"),
127                    // U+03BA: "κ" GREEK SMALL LETTER KAPPA
128                    key("\u03BA"),
129                    // U+03BB: "λ" GREEK SMALL LETTER LAMDA
130                    key("\u03BB"))
131            .setKeysOfRow(3,
132                    // U+03B6: "ζ" GREEK SMALL LETTER ZETA
133                    key("\u03B6"),
134                    // U+03C7: "χ" GREEK SMALL LETTER CHI
135                    key("\u03C7"),
136                    // U+03C8: "ψ" GREEK SMALL LETTER PSI
137                    key("\u03C8"),
138                    // U+03C9: "ω" GREEK SMALL LETTER OMEGA
139                    // U+03CE: "ώ" GREEK SMALL LETTER OMEGA WITH TONOS
140                    key("\u03C9", moreKey("\u03CE")),
141                    // U+03B2: "β" GREEK SMALL LETTER BETA
142                    key("\u03B2"),
143                    // U+03BD: "ν" GREEK SMALL LETTER NU
144                    key("\u03BD"),
145                    // U+03BC: "μ" GREEK SMALL LETTER MU
146                    key("\u03BC"))
147            .build();
148}
149