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 
17 package com.android.inputmethod.keyboard.layout;
18 
19 import com.android.inputmethod.keyboard.layout.customizer.LayoutCustomizer;
20 import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
21 import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
22 import com.android.inputmethod.latin.common.Constants;
23 
24 import java.util.Locale;
25 
26 /**
27  * The Kannada keyboard.
28  */
29 public final class Kannada extends LayoutBase {
30     private static final String LAYOUT_NAME = "kannada";
31 
Kannada(final Locale locale)32     public Kannada(final Locale locale) {
33         super(new KannadaCustomizer(locale), Symbols.class, SymbolsShifted.class);
34     }
35 
36     @Override
getName()37     public String getName() { return LAYOUT_NAME; }
38 
39     private static class KannadaCustomizer extends LayoutCustomizer {
KannadaCustomizer(final Locale locale)40         KannadaCustomizer(final Locale locale) { super(locale); }
41 
42         @Override
getAlphabetKey()43         public ExpectedKey getAlphabetKey() { return KANNADA_ALPHABET_KEY; }
44 
45         @Override
getCurrencyKey()46         public ExpectedKey getCurrencyKey() { return CURRENCY_RUPEE; }
47 
48         @Override
getOtherCurrencyKeys()49         public ExpectedKey[] getOtherCurrencyKeys() {
50             return SymbolsShifted.CURRENCIES_OTHER_GENERIC;
51         }
52 
53         @Override
getLeftShiftKeys(final boolean isPhone)54         public ExpectedKey[] getLeftShiftKeys(final boolean isPhone) {
55             return EMPTY_KEYS;
56         }
57 
58         @Override
getRightShiftKeys(final boolean isPhone)59         public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
60             return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
61         }
62 
63         @Override
getSpaceKeys(final boolean isPhone)64         public ExpectedKey[] getSpaceKeys(final boolean isPhone) {
65             return joinKeys(LANGUAGE_SWITCH_KEY, SPACE_KEY, key(ZWNJ_KEY, ZWJ_KEY));
66         }
67 
68         // U+0C85: "ಅ" KANNADA LETTER A
69         // U+0C86: "ಆ" KANNADA LETTER AA
70         // U+0C87: "ಇ" KANNADA LETTER I
71         private static final ExpectedKey KANNADA_ALPHABET_KEY = key(
72                 "\u0C85\u0C86\u0C87", Constants.CODE_SWITCH_ALPHA_SYMBOL);
73 
74         // U+20B9: "₹" INDIAN RUPEE SIGN
75         private static final ExpectedKey CURRENCY_RUPEE = key("\u20B9",
76                 Symbols.CURRENCY_GENERIC_MORE_KEYS);
77     }
78 
79     @Override
getCommonAlphabetLayout(boolean isPhone)80     ExpectedKey[][] getCommonAlphabetLayout(boolean isPhone) { return ALPHABET_COMMON; }
81 
82     @Override
getCommonAlphabetShiftLayout(boolean isPhone, final int elementId)83     ExpectedKey[][] getCommonAlphabetShiftLayout(boolean isPhone, final int elementId) {
84         return null;
85     }
86 
87     private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
88             .setKeysOfRow(1,
89                     // U+0CCC: "ೌ" KANNADA VOWEL SIGN AU
90                     // U+0C94: "ಔ" KANNADA LETTER AU
91                     // U+0CE7: "೧" KANNADA DIGIT ONE
92                     key("\u0CCC", joinMoreKeys("\u0C94", "\u0CE7", "1")),
93                     // U+0CC8: "ೈ" KANNADA VOWEL SIGN AI
94                     // U+0C90: "ಐ" KANNADA LETTER AI
95                     // U+0CE8: "೨" KANNADA DIGIT TWO
96                     key("\u0CC8", joinMoreKeys("\u0C90", "\u0CE8", "2")),
97                     // U+0CBE: "ಾ" KANNADA VOWEL SIGN AA
98                     // U+0C86: "ಆ" KANNADA LETTER AA
99                     // U+0CE9: "೩" KANNADA DIGIT THREE
100                     key("\u0CBE", joinMoreKeys("\u0C86", "\u0CE9", "3")),
101                     // U+0CC0: "ೀ" KANNADA VOWEL SIGN II
102                     // U+0C88: "ಈ" KANNADA LETTER II
103                     // U+0CEA: "೪" KANNADA DIGIT FOUR
104                     key("\u0CC0", joinMoreKeys("\u0C88", "\u0CEA", "4")),
105                     // U+0CC2: "ೂ" KANNADA VOWEL SIGN UU
106                     // U+0C8A: "ಊ" KANNADA LETTER UU
107                     // U+0CEB: "೫" KANNADA DIGIT FIVE
108                     key("\u0CC2", joinMoreKeys("\u0C8A", "\u0CEB", "5")),
109                     // U+0CAC: "ಬ" KANNADA LETTER BA
110                     // U+0CAD: "ಭ" KANNADA LETTER BHA
111                     // U+0CEC: "೬" KANNADA DIGIT SIX
112                     key("\u0CAC", joinMoreKeys("\u0CAD", "\u0CEC", "6")),
113                     // U+0CB9: "ಹ" KANNADA LETTER HA
114                     // U+0C99: "ಙ" KANNADA LETTER NGA
115                     // U+0CED: "೭" KANNADA DIGIT SEVEN
116                     key("\u0CB9", joinMoreKeys("\u0C99", "\u0CED", "7")),
117                     // U+0C97: "ಗ" KANNADA LETTER GA
118                     // U+0C98: "ಘ" KANNADA LETTER GHA
119                     // U+0CEE: "೮" KANNADA DIGIT EIGHT
120                     key("\u0C97", joinMoreKeys("\u0C98", "\u0CEE", "8")),
121                     // U+0CA6: "ದ" KANNADA LETTER DA
122                     // U+0CA7: "ಧ" KANNADA LETTER DHA
123                     // U+0CEF: "೯" KANNADA DIGIT NINE
124                     key("\u0CA6", joinMoreKeys("\u0CA7", "\u0CEF", "9")),
125                     // U+0C9C: "ಜ" KANNADA LETTER JA
126                     // U+0C9D: "ಝ" KANNADA LETTER JHA
127                     // U+0CE6: "೦" KANNADA DIGIT ZERO
128                     key("\u0C9C", joinMoreKeys("\u0C9D", "\u0CE6", "0")),
129                     // U+0CA1: "ಡ" KANNADA LETTER DDA
130                     // U+0CA2: "ಢ" KANNADA LETTER DDHA
131                     key("\u0CA1", moreKey("\u0CA2")))
132             .setKeysOfRow(2,
133                     // U+0CCB: "ೋ" KANNADA VOWEL SIGN OO
134                     // U+0C93: "ಓ" KANNADA LETTER OO
135                     key("\u0CCB", moreKey("\u0C93")),
136                     // U+0CC7: "ೇ" KANNADA VOWEL SIGN EE
137                     // U+0C8F: "ಏ" KANNADA LETTER EE
138                     key("\u0CC7", moreKey("\u0C8F")),
139                     // U+0CCD: "್" KANNADA SIGN VIRAMA
140                     // U+0C85: "ಅ" KANNADA LETTER A
141                     key("\u0CCD", moreKey("\u0C85")),
142                     // U+0CBF: "ಿ" KANNADA VOWEL SIGN I
143                     // U+0C87: "ಇ" KANNADA LETTER I
144                     key("\u0CBF", moreKey("\u0C87")),
145                     // U+0CC1: "ು" KANNADA VOWEL SIGN U
146                     // U+0C89: "ಉ" KANNADA LETTER U
147                     key("\u0CC1", moreKey("\u0C89")),
148                     // U+0CAA: "ಪ" KANNADA LETTER PA
149                     // U+0CAB: "ಫ" KANNADA LETTER PHA
150                     key("\u0CAA", moreKey("\u0CAB")),
151                     // U+0CB0: "ರ" KANNADA LETTER RA
152                     // U+0CB1: "ಱ" KANNADA LETTER RRA
153                     // U+0CC3: "ೃ" KANNADA VOWEL SIGN VOCALIC R
154                     key("\u0CB0", joinMoreKeys("\u0CB1", "\u0CC3")),
155                     // U+0C95: "ಕ" KANNADA LETTER KA
156                     // U+0C96: "ಖ" KANNADA LETTER KHA
157                     key("\u0C95", moreKey("\u0C96")),
158                     // U+0CA4: "ತ" KANNADA LETTER TA
159                     // U+0CA5: "ಥ" KANNADA LETTER THA
160                     key("\u0CA4", moreKey("\u0CA5")),
161                     // U+0C9A: "ಚ" KANNADA LETTER CA
162                     // U+0C9B: "ಛ" KANNADA LETTER CHA
163                     key("\u0C9A", moreKey("\u0C9B")),
164                     // U+0C9F: "ಟ" KANNADA LETTER TTA
165                     // U+0CA0: "ಠ" KANNADA LETTER TTHA
166                     key("\u0C9F", moreKey("\u0CA0")))
167             .setKeysOfRow(3,
168                     // U+0CC6: "ೆ" KANNADA VOWEL SIGN E
169                     // U+0C92: "ಒ" KANNADA LETTER O
170                     key("\u0CC6", moreKey("\u0C92")),
171                     // U+0C82: "ಂ" KANNADA SIGN ANUSVARA
172                     // U+0C8E: "ಎ" KANNADA LETTER E
173                     key("\u0C82", moreKey("\u0C8E")),
174                     // U+0CAE: "ಮ" KANNADA LETTER MA
175                     "\u0CAE",
176                     // U+0CA8: "ನ" KANNADA LETTER NA
177                     // U+0CA3: "ಣ" KANNADA LETTER NNA
178                     key("\u0CA8", moreKey("\u0CA3")),
179                     // U+0CB5: "ವ" KANNADA LETTER VA
180                     "\u0CB5",
181                     // U+0CB2: "ಲ" KANNADA LETTER LA
182                     // U+0CB3: "ಳ" KANNADA LETTER LLA
183                     key("\u0CB2", moreKey("\u0CB3")),
184                     // U+0CB8: "ಸ" KANNADA LETTER SA
185                     // U+0CB6: "ಶ" KANNADA LETTER SHA
186                     key("\u0CB8", moreKey("\u0CB6")),
187                     // U+0C8B: "ಋ" KANNADA LETTER VOCALIC R
188                     // U+0CCD/U+0CB0: "್ರ" KANNADA SIGN VIRAMA/KANNADA LETTER RA
189                     key("\u0C8B", moreKey("\u0CCD\u0CB0")),
190                     // U+0CB7: "ಷ" KANNADA LETTER SSA
191                     // U+0C95/U+0CCD/U+0CB7:
192                     //     "ಕ್ಷ" KANNADA LETTER RA/KANNADA SIGN VIRAMA/KANNADA LETTER SSA
193                     key("\u0CB7", moreKey("\u0C95\u0CCD\u0CB7")),
194                     // U+0CAF: "ಯ" KANNADA LETTER YA
195                     // U+0C9C/U+0CCD/U+0C9E:
196                     //     "ಜ್ಞ" KANNADA LETTER JA/KANNADA SIGN VIRAMA/KANNADA LETTER NYA
197                     key("\u0CAF", moreKey("\u0C9C\u0CCD\u0C9E")))
198             .build();
199 }
200