2 * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.hiroshica.android.input.nicownn2.JAJP;
19 import android.view.KeyEvent;
20 import android.view.inputmethod.EditorInfo;
21 import android.view.inputmethod.InputConnection;
22 import android.inputmethodservice.Keyboard;
23 import android.util.Log;
24 import android.view.View;
25 import android.content.SharedPreferences;
26 import android.content.Intent;
28 import android.app.Activity;
30 import android.inputmethodservice.InputMethodService;
31 import android.view.WindowManager;
32 import android.content.Context;
33 import android.view.View;
34 import android.view.KeyEvent;
35 import android.content.SharedPreferences;
36 import android.preference.PreferenceManager;
37 import android.content.pm.PackageManager;
38 import android.util.Log;
40 import android.view.inputmethod.*;
41 import android.content.res.Configuration;
42 import android.graphics.*;
43 import android.graphics.drawable.*;
44 import android.view.MotionEvent;
45 import android.app.Activity;
46 import android.content.Intent;
49 import java.lang.Object;
50 import java.util.HashMap;
51 import java.util.Locale;
52 import java.util.List;
53 import java.lang.Math;
55 import com.hiroshica.android.input.nicownn2.*;
58 * The default Software Keyboard class for Japanese IME.
60 * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.
62 public class DefaultSoftKeyboardJAJP extends DefaultSoftKeyboard {
63 private static final String GETACTION_INTERCEPT = "com.hiroshica.android.input.nicownn2.ACTION_INTERCEPT";
64 private static final String REPLACE_KEY = "replace_key";
65 private static final String INPUTCONNECTION_KEY = "inputconnection_key";
67 /** Enable English word prediction on half-width alphabet mode */
68 private static final boolean USE_ENGLISH_PREDICT = true;
70 /** Key code for switching to full-width HIRAGANA mode */
71 private static final int KEYCODE_SWITCH_FULL_HIRAGANA = -301;
73 /** Key code for switching to full-width KATAKANA mode */
74 private static final int KEYCODE_SWITCH_FULL_KATAKANA = -302;
76 /** Key code for switching to full-width alphabet mode */
77 private static final int KEYCODE_SWITCH_FULL_ALPHABET = -303;
79 /** Key code for switching to full-width number mode */
80 private static final int KEYCODE_SWITCH_FULL_NUMBER = -304;
82 /** Key code for switching to half-width KATAKANA mode */
83 private static final int KEYCODE_SWITCH_HALF_KATAKANA = -306;
85 /** Key code for switching to half-width alphabet mode */
86 private static final int KEYCODE_SWITCH_HALF_ALPHABET = -307;
88 /** Key code for switching to half-width number mode */
89 private static final int KEYCODE_SWITCH_HALF_NUMBER = -308;
91 /** Key code for case toggle key */
92 private static final int KEYCODE_SELECT_CASE = -309;
94 /** Key code for EISU-KANA conversion */
95 private static final int KEYCODE_EISU_KANA = -305;
97 /** Key code for switching to full-width Nikotouch mode */
98 private static final int KEYCODE_SWITCH_FULL_NIKO = -400;
100 /** Key code for NOP (no-operation) */
101 private static final int KEYCODE_NOP = -310;
104 /** Input mode toggle cycle table */
105 private static final int[] JP_MODE_CYCLE_TABLE = {
106 KEYMODE_JA_FULL_NIKO, KEYMODE_JA_FULL_HIRAGANA, KEYMODE_JA_HALF_ALPHABET, KEYMODE_JA_HALF_NUMBER,
109 /** Definition for {@code mInputType} (toggle) */
110 private static final int INPUT_TYPE_TOGGLE = 1;
112 /** Definition for {@code mInputType} (commit instantly) */
113 private static final int INPUT_TYPE_INSTANT = 2;
115 /** Max key number of the 12 key keyboard (depends on the definition of keyboards) */
116 private static final int KEY_NUMBER_12KEY = 20;
118 /** Toggle cycle table for full-width HIRAGANA */
119 private static final String[][] JP_FULL_HIRAGANA_CYCLE_TABLE = {
120 {"\u3042", "\u3044", "\u3046", "\u3048", "\u304a", "\u3041", "\u3043", "\u3045", "\u3047", "\u3049"},
121 {"\u304b", "\u304d", "\u304f", "\u3051", "\u3053"},
122 {"\u3055", "\u3057", "\u3059", "\u305b", "\u305d"},
123 {"\u305f", "\u3061", "\u3064", "\u3066", "\u3068", "\u3063"},
124 {"\u306a", "\u306b", "\u306c", "\u306d", "\u306e"},
125 {"\u306f", "\u3072", "\u3075", "\u3078", "\u307b"},
126 {"\u307e", "\u307f", "\u3080", "\u3081", "\u3082"},
127 {"\u3084", "\u3086", "\u3088", "\u3083", "\u3085", "\u3087"},
128 {"\u3089", "\u308a", "\u308b", "\u308c", "\u308d"},
129 {"\u308f", "\u3092", "\u3093", "\u308e", "\u30fc"},
130 {"\u3001", "\u3002", "\uff1f", "\uff01", "\u30fb", "\u3000"},
133 /** Replace table for full-width HIRAGANA */
134 private static final HashMap<String, String> JP_FULL_HIRAGANA_REPLACE_TABLE = new HashMap<String, String>() {{
135 put("\u3042", "\u3041"); put("\u3044", "\u3043"); put("\u3046", "\u3045"); put("\u3048", "\u3047"); put("\u304a", "\u3049");
136 put("\u3041", "\u3042"); put("\u3043", "\u3044"); put("\u3045", "\u30f4"); put("\u3047", "\u3048"); put("\u3049", "\u304a");
137 put("\u304b", "\u304c"); put("\u304d", "\u304e"); put("\u304f", "\u3050"); put("\u3051", "\u3052"); put("\u3053", "\u3054");
138 put("\u304c", "\u304b"); put("\u304e", "\u304d"); put("\u3050", "\u304f"); put("\u3052", "\u3051"); put("\u3054", "\u3053");
139 put("\u3055", "\u3056"); put("\u3057", "\u3058"); put("\u3059", "\u305a"); put("\u305b", "\u305c"); put("\u305d", "\u305e");
140 put("\u3056", "\u3055"); put("\u3058", "\u3057"); put("\u305a", "\u3059"); put("\u305c", "\u305b"); put("\u305e", "\u305d");
141 put("\u305f", "\u3060"); put("\u3061", "\u3062"); put("\u3064", "\u3063"); put("\u3066", "\u3067"); put("\u3068", "\u3069");
142 put("\u3060", "\u305f"); put("\u3062", "\u3061"); put("\u3063", "\u3065"); put("\u3067", "\u3066"); put("\u3069", "\u3068");
143 put("\u3065", "\u3064"); put("\u30f4", "\u3046");
144 put("\u306f", "\u3070"); put("\u3072", "\u3073"); put("\u3075", "\u3076"); put("\u3078", "\u3079"); put("\u307b", "\u307c");
145 put("\u3070", "\u3071"); put("\u3073", "\u3074"); put("\u3076", "\u3077"); put("\u3079", "\u307a"); put("\u307c", "\u307d");
146 put("\u3071", "\u306f"); put("\u3074", "\u3072"); put("\u3077", "\u3075"); put("\u307a", "\u3078"); put("\u307d", "\u307b");
147 put("\u3084", "\u3083"); put("\u3086", "\u3085"); put("\u3088", "\u3087");
148 put("\u3083", "\u3084"); put("\u3085", "\u3086"); put("\u3087", "\u3088");
149 put("\u308f", "\u308e");
150 put("\u308e", "\u308f");
151 put("\u309b", "\u309c");
152 put("\u309c", "\u309b");
155 /** Toggle cycle table for full-width KATAKANA */
156 private static final String[][] JP_FULL_KATAKANA_CYCLE_TABLE = {
157 {"\u30a2", "\u30a4", "\u30a6", "\u30a8", "\u30aa", "\u30a1", "\u30a3",
158 "\u30a5", "\u30a7", "\u30a9"},
159 {"\u30ab", "\u30ad", "\u30af", "\u30b1", "\u30b3"},
160 {"\u30b5", "\u30b7", "\u30b9", "\u30bb", "\u30bd"},
161 {"\u30bf", "\u30c1", "\u30c4", "\u30c6", "\u30c8", "\u30c3"},
162 {"\u30ca", "\u30cb", "\u30cc", "\u30cd", "\u30ce"},
163 {"\u30cf", "\u30d2", "\u30d5", "\u30d8", "\u30db"},
164 {"\u30de", "\u30df", "\u30e0", "\u30e1", "\u30e2"},
165 {"\u30e4", "\u30e6", "\u30e8", "\u30e3", "\u30e5", "\u30e7"},
166 {"\u30e9", "\u30ea", "\u30eb", "\u30ec", "\u30ed"},
167 {"\u30ef", "\u30f2", "\u30f3", "\u30ee", "\u30fc"},
168 {"\u3001", "\u3002", "\uff1f", "\uff01", "\u30fb", "\u3000"}
171 /** Replace table for full-width KATAKANA */
172 private static final HashMap<String,String> JP_FULL_KATAKANA_REPLACE_TABLE = new HashMap<String,String>() {{
173 put("\u30a2", "\u30a1"); put("\u30a4", "\u30a3"); put("\u30a6", "\u30a5"); put("\u30a8", "\u30a7"); put("\u30aa", "\u30a9");
174 put("\u30a1", "\u30a2"); put("\u30a3", "\u30a4"); put("\u30a5", "\u30f4"); put("\u30a7", "\u30a8"); put("\u30a9", "\u30aa");
175 put("\u30ab", "\u30ac"); put("\u30ad", "\u30ae"); put("\u30af", "\u30b0"); put("\u30b1", "\u30b2"); put("\u30b3", "\u30b4");
176 put("\u30ac", "\u30ab"); put("\u30ae", "\u30ad"); put("\u30b0", "\u30af"); put("\u30b2", "\u30b1"); put("\u30b4", "\u30b3");
177 put("\u30b5", "\u30b6"); put("\u30b7", "\u30b8"); put("\u30b9", "\u30ba"); put("\u30bb", "\u30bc"); put("\u30bd", "\u30be");
178 put("\u30b6", "\u30b5"); put("\u30b8", "\u30b7"); put("\u30ba", "\u30b9"); put("\u30bc", "\u30bb"); put("\u30be", "\u30bd");
179 put("\u30bf", "\u30c0"); put("\u30c1", "\u30c2"); put("\u30c4", "\u30c3"); put("\u30c6", "\u30c7"); put("\u30c8", "\u30c9");
180 put("\u30c0", "\u30bf"); put("\u30c2", "\u30c1"); put("\u30c3", "\u30c5"); put("\u30c7", "\u30c6"); put("\u30c9", "\u30c8");
181 put("\u30c5", "\u30c4"); put("\u30f4", "\u30a6");
182 put("\u30cf", "\u30d0"); put("\u30d2", "\u30d3"); put("\u30d5", "\u30d6"); put("\u30d8", "\u30d9"); put("\u30db", "\u30dc");
183 put("\u30d0", "\u30d1"); put("\u30d3", "\u30d4"); put("\u30d6", "\u30d7"); put("\u30d9", "\u30da"); put("\u30dc", "\u30dd");
184 put("\u30d1", "\u30cf"); put("\u30d4", "\u30d2"); put("\u30d7", "\u30d5"); put("\u30da", "\u30d8"); put("\u30dd", "\u30db");
185 put("\u30e4", "\u30e3"); put("\u30e6", "\u30e5"); put("\u30e8", "\u30e7");
186 put("\u30e3", "\u30e4"); put("\u30e5", "\u30e6"); put("\u30e7", "\u30e8");
187 put("\u30ef", "\u30ee");
188 put("\u30ee", "\u30ef");
191 /** Toggle cycle table for half-width KATAKANA */
192 private static final String[][] JP_HALF_KATAKANA_CYCLE_TABLE = {
193 {"\uff71", "\uff72", "\uff73", "\uff74", "\uff75", "\uff67", "\uff68", "\uff69", "\uff6a", "\uff6b"},
194 {"\uff76", "\uff77", "\uff78", "\uff79", "\uff7a"},
195 {"\uff7b", "\uff7c", "\uff7d", "\uff7e", "\uff7f"},
196 {"\uff80", "\uff81", "\uff82", "\uff83", "\uff84", "\uff6f"},
197 {"\uff85", "\uff86", "\uff87", "\uff88", "\uff89"},
198 {"\uff8a", "\uff8b", "\uff8c", "\uff8d", "\uff8e"},
199 {"\uff8f", "\uff90", "\uff91", "\uff92", "\uff93"},
200 {"\uff94", "\uff95", "\uff96", "\uff6c", "\uff6d", "\uff6e"},
201 {"\uff97", "\uff98", "\uff99", "\uff9a", "\uff9b"},
202 {"\uff9c", "\uff66", "\uff9d", "\uff70"},
203 {"\uff64", "\uff61", "?", "!", "\uff65", " "},
206 /** Replace table for half-width KATAKANA */
207 private static final HashMap<String,String> JP_HALF_KATAKANA_REPLACE_TABLE = new HashMap<String,String>() {{
208 put("\uff71", "\uff67"); put("\uff72", "\uff68"); put("\uff73", "\uff69"); put("\uff74", "\uff6a"); put("\uff75", "\uff6b");
209 put("\uff67", "\uff71"); put("\uff68", "\uff72"); put("\uff69", "\uff73\uff9e"); put("\uff6a", "\uff74"); put("\uff6b", "\uff75");
210 put("\uff76", "\uff76\uff9e"); put("\uff77", "\uff77\uff9e"); put("\uff78", "\uff78\uff9e"); put("\uff79", "\uff79\uff9e"); put("\uff7a", "\uff7a\uff9e");
211 put("\uff76\uff9e", "\uff76"); put("\uff77\uff9e", "\uff77"); put("\uff78\uff9e", "\uff78"); put("\uff79\uff9e", "\uff79"); put("\uff7a\uff9e", "\uff7a");
212 put("\uff7b", "\uff7b\uff9e"); put("\uff7c", "\uff7c\uff9e"); put("\uff7d", "\uff7d\uff9e"); put("\uff7e", "\uff7e\uff9e"); put("\uff7f", "\uff7f\uff9e");
213 put("\uff7b\uff9e", "\uff7b"); put("\uff7c\uff9e", "\uff7c"); put("\uff7d\uff9e", "\uff7d"); put("\uff7e\uff9e", "\uff7e"); put("\uff7f\uff9e", "\uff7f");
214 put("\uff80", "\uff80\uff9e"); put("\uff81", "\uff81\uff9e"); put("\uff82", "\uff6f"); put("\uff83", "\uff83\uff9e"); put("\uff84", "\uff84\uff9e");
215 put("\uff80\uff9e", "\uff80"); put("\uff81\uff9e", "\uff81"); put("\uff6f", "\uff82\uff9e"); put("\uff83\uff9e", "\uff83"); put("\uff84\uff9e", "\uff84");
216 put("\uff82\uff9e", "\uff82");
217 put("\uff8a", "\uff8a\uff9e"); put("\uff8b", "\uff8b\uff9e"); put("\uff8c", "\uff8c\uff9e"); put("\uff8d", "\uff8d\uff9e"); put("\uff8e", "\uff8e\uff9e");
218 put("\uff8a\uff9e", "\uff8a\uff9f");put("\uff8b\uff9e", "\uff8b\uff9f");put("\uff8c\uff9e", "\uff8c\uff9f");put("\uff8d\uff9e", "\uff8d\uff9f");put("\uff8e\uff9e", "\uff8e\uff9f");
219 put("\uff8a\uff9f", "\uff8a"); put("\uff8b\uff9f", "\uff8b"); put("\uff8c\uff9f", "\uff8c"); put("\uff8d\uff9f", "\uff8d"); put("\uff8e\uff9f", "\uff8e");
220 put("\uff94", "\uff6c"); put("\uff95", "\uff6d"); put("\uff96", "\uff6e");
221 put("\uff6c", "\uff94"); put("\uff6d", "\uff95"); put("\uff6e", "\uff96");
222 put("\uff9c", "\uff9c"); put("\uff73\uff9e", "\uff73");
225 /** Toggle cycle table for full-width alphabet */
226 private static final String[][] JP_FULL_ALPHABET_CYCLE_TABLE = {
227 {"\uff0e", "\uff20", "\uff0d", "\uff3f", "\uff0f", "\uff1a", "\uff5e", "\uff11"},
228 {"\uff41", "\uff42", "\uff43", "\uff21", "\uff22", "\uff23", "\uff12"},
229 {"\uff44", "\uff45", "\uff46", "\uff24", "\uff25", "\uff26", "\uff13"},
230 {"\uff47", "\uff48", "\uff49", "\uff27", "\uff28", "\uff29", "\uff14"},
231 {"\uff4a", "\uff4b", "\uff4c", "\uff2a", "\uff2b", "\uff2c", "\uff15"},
232 {"\uff4d", "\uff4e", "\uff4f", "\uff2d", "\uff2e", "\uff2f", "\uff16"},
233 {"\uff50", "\uff51", "\uff52", "\uff53", "\uff30", "\uff31", "\uff32", "\uff33", "\uff17"},
234 {"\uff54", "\uff55", "\uff56", "\uff34", "\uff35", "\uff36", "\uff18"},
235 {"\uff57", "\uff58", "\uff59", "\uff5a", "\uff37", "\uff38", "\uff39", "\uff3a", "\uff19"},
236 {"\uff0d", "\uff10"},
237 {"\uff0c", "\uff0e", "\uff1f", "\uff01", "\u30fb", "\u3000"}
240 /** Replace table for full-width alphabet */
241 private static final HashMap<String,String> JP_FULL_ALPHABET_REPLACE_TABLE = new HashMap<String,String>() {{
242 put("\uff21", "\uff41"); put("\uff22", "\uff42"); put("\uff23", "\uff43"); put("\uff24", "\uff44"); put("\uff25", "\uff45");
243 put("\uff41", "\uff21"); put("\uff42", "\uff22"); put("\uff43", "\uff23"); put("\uff44", "\uff24"); put("\uff45", "\uff25");
244 put("\uff26", "\uff46"); put("\uff27", "\uff47"); put("\uff28", "\uff48"); put("\uff29", "\uff49"); put("\uff2a", "\uff4a");
245 put("\uff46", "\uff26"); put("\uff47", "\uff27"); put("\uff48", "\uff28"); put("\uff49", "\uff29"); put("\uff4a", "\uff2a");
246 put("\uff2b", "\uff4b"); put("\uff2c", "\uff4c"); put("\uff2d", "\uff4d"); put("\uff2e", "\uff4e"); put("\uff2f", "\uff4f");
247 put("\uff4b", "\uff2b"); put("\uff4c", "\uff2c"); put("\uff4d", "\uff2d"); put("\uff4e", "\uff2e"); put("\uff4f", "\uff2f");
248 put("\uff30", "\uff50"); put("\uff31", "\uff51"); put("\uff32", "\uff52"); put("\uff33", "\uff53"); put("\uff34", "\uff54");
249 put("\uff50", "\uff30"); put("\uff51", "\uff31"); put("\uff52", "\uff32"); put("\uff53", "\uff33"); put("\uff54", "\uff34");
250 put("\uff35", "\uff55"); put("\uff36", "\uff56"); put("\uff37", "\uff57"); put("\uff38", "\uff58"); put("\uff39", "\uff59");
251 put("\uff55", "\uff35"); put("\uff56", "\uff36"); put("\uff57", "\uff37"); put("\uff58", "\uff38"); put("\uff59", "\uff39");
252 put("\uff3a", "\uff5a");
253 put("\uff5a", "\uff3a");
256 /** Toggle cycle table for half-width alphabet */
257 private static final String[][] JP_HALF_ALPHABET_CYCLE_TABLE = {
258 {".", "@", "-", "_", "/", ":", "~", "1"},
259 {"a", "b", "c", "A", "B", "C", "2"},
260 {"d", "e", "f", "D", "E", "F", "3"},
261 {"g", "h", "i", "G", "H", "I", "4"},
262 {"j", "k", "l", "J", "K", "L", "5"},
263 {"m", "n", "o", "M", "N", "O", "6"},
264 {"p", "q", "r", "s", "P", "Q", "R", "S", "7"},
265 {"t", "u", "v", "T", "U", "V", "8"},
266 {"w", "x", "y", "z", "W", "X", "Y", "Z", "9"},
268 {",", ".", "?", "!", ";", " "}
271 /** Replace table for half-width alphabet */
272 private static final HashMap<String,String> JP_HALF_ALPHABET_REPLACE_TABLE = new HashMap<String,String>() {{
273 put("A", "a"); put("B", "b"); put("C", "c"); put("D", "d"); put("E", "e");
274 put("a", "A"); put("b", "B"); put("c", "C"); put("d", "D"); put("e", "E");
275 put("F", "f"); put("G", "g"); put("H", "h"); put("I", "i"); put("J", "j");
276 put("f", "F"); put("g", "G"); put("h", "H"); put("i", "I"); put("j", "J");
277 put("K", "k"); put("L", "l"); put("M", "m"); put("N", "n"); put("O", "o");
278 put("k", "K"); put("l", "L"); put("m", "M"); put("n", "N"); put("o", "O");
279 put("P", "p"); put("Q", "q"); put("R", "r"); put("S", "s"); put("T", "t");
280 put("p", "P"); put("q", "Q"); put("r", "R"); put("s", "S"); put("t", "T");
281 put("U", "u"); put("V", "v"); put("W", "w"); put("X", "x"); put("Y", "y");
282 put("u", "U"); put("v", "V"); put("w", "W"); put("x", "X"); put("y", "Y");
287 /** Toggle cycle table for full-width Nikotouch */
288 private static final String[][] JP_FULL_NIKO_CYCLE_TABLE = {
289 {"\u3042"}, {"\u3044"}, {"\u3046"}, {"\u3048"}, {"\u304a"}, {"."}, {"-"}, {"@"}, {"_"}, {"1"},
290 {"\u304b"}, {"\u304d"}, {"\u304f"}, {"\u3051"}, {"\u3053"}, {" "}, {"a"}, {"b"}, {"c"}, {"2"},
291 {"\u3055"}, {"\u3057"}, {"\u3059"}, {"\u305b"}, {"\u305d"}, {"/"}, {"d"}, {"e"}, {"f"}, {"3"},
292 {"\u305f"}, {"\u3061"}, {"\u3064"}, {"\u3066"}, {"\u3068"}, {"\u3063"}, {"g"}, {"h"}, {"i"}, {"4"},
293 {"\u306a"}, {"\u306b"}, {"\u306c"}, {"\u306d"}, {"\u306e"}, {"("}, {"j"}, {"k"}, {"l"}, {"5"},
294 {"\u306f"}, {"\u3072"}, {"\u3075"}, {"\u3078"}, {"\u307b"}, {")"}, {"m"}, {"n"}, {"o"}, {"6"},
295 {"\u307e"}, {"\u307f"}, {"\u3080"}, {"\u3081"}, {"\u3082"}, {"p"}, {"q"}, {"r"}, {"s"}, {"7"},
296 {"\u3084"}, {"\u3086"}, {"\u3088"}, {"\u3083"}, {"\u3085"}, {"\u3087"}, {"t"}, {"u"}, {"v"}, {"8"},
297 {"\u3089"}, {"\u308a"}, {"\u308b"}, {"\u308c"}, {"\u308d"}, {"w"}, {"x"}, {"y"}, {"z"}, {"9"},
298 {"\u308f"}, {"\u3092"}, {"\u3093"}, {"\u3001"}, {"\u3002"}, {"\u30fc"}, {"\u30fb"}, {"\uff01"}, {"\uff1f"}, {"0"},
301 /** Replace table for full-width Nikotouch */
302 private static final HashMap<String, String> JP_FULL_NIKO_REPLACE_TABLE = new HashMap<String, String>() {{
303 put("\u3042", "\u3041"); put("\u3044", "\u3043"); put("\u3046", "\u3045"); put("\u3048", "\u3047"); put("\u304a", "\u3049"); // A
304 put("\u3041", "\u3042"); put("\u3043", "\u3044"); put("\u3045", "\u30f4"); put("\u3047", "\u3048"); put("\u3049", "\u304a"); // a
305 put("\u304b", "\u304c"); put("\u304d", "\u304e"); put("\u304f", "\u3050"); put("\u3051", "\u3052"); put("\u3053", "\u3054"); // K
306 put("\u304c", "\u304b"); put("\u304e", "\u304d"); put("\u3050", "\u304f"); put("\u3052", "\u3051"); put("\u3054", "\u3053"); // k
307 put("\u3055", "\u3056"); put("\u3057", "\u3058"); put("\u3059", "\u305a"); put("\u305b", "\u305c"); put("\u305d", "\u305e"); // S
308 put("\u3056", "\u3055"); put("\u3058", "\u3057"); put("\u305a", "\u3059"); put("\u305c", "\u305b"); put("\u305e", "\u305d"); // s
309 put("\u305f", "\u3060"); put("\u3061", "\u3062"); put("\u3064", "\u3065"); put("\u3066", "\u3067"); put("\u3068", "\u3069"); // T
310 put("\u3060", "\u305f"); put("\u3062", "\u3061"); put("\u3065", "\u3063"); put("\u3067", "\u3066"); put("\u3069", "\u3068"); // t
311 put("\u3063", "\u3064"); put("\u30f4", "\u3046");
312 put("\u306f", "\u3070"); put("\u3072", "\u3073"); put("\u3075", "\u3076"); put("\u3078", "\u3079"); put("\u307b", "\u307c"); // H
313 put("\u3070", "\u3071"); put("\u3073", "\u3074"); put("\u3076", "\u3077"); put("\u3079", "\u307a"); put("\u307c", "\u307d"); // h
314 put("\u3071", "\u306f"); put("\u3074", "\u3072"); put("\u3077", "\u3075"); put("\u307a", "\u3078"); put("\u307d", "\u307b"); // h.
315 put("\u3084", "\u3083"); put("\u3086", "\u3085"); put("\u3088", "\u3087"); // Y
316 put("\u3083", "\u3084"); put("\u3085", "\u3086"); put("\u3087", "\u3088"); // y
317 put("\u308f", "\u308e");
318 put("\u308e", "\u308f");
319 put("\u309b", "\u309c");
320 put("\u309c", "\u309b");
322 put("a", "A"); put("b", "B"); put("c", "C"); put("d", "D"); put("e", "E"); put("f", "F"); put("g", "G"); put("h", "H"); put("i", "I"); put("j", "J");
323 put("k", "K"); put("l", "L"); put("m", "M"); put("n", "N"); put("o", "O"); put("p", "P"); put("q", "Q"); put("r", "R"); put("s", "S"); put("t", "T");
324 put("u", "U"); put("v", "V"); put("w", "W"); put("x", "X"); put("y", "Y"); put("z", "Z");
325 put("A", "a"); put("B", "b"); put("C", "c"); put("D", "d"); put("E", "e"); put("F", "f"); put("G", "g"); put("H", "h"); put("I", "i"); put("J", "j");
326 put("K", "k"); put("L", "l"); put("M", "m"); put("N", "n"); put("O", "o"); put("P", "p"); put("Q", "q"); put("R", "r"); put("S", "s"); put("T", "t");
327 put("U", "u"); put("V", "v"); put("W", "w"); put("X", "x"); put("Y", "y"); put("Z", "z");
329 put("1", "\uff11"); put("2", "\uff12"); put("3", "\uff13"); put("4", "\uff14"); put("5", "\uff15");
330 put("6", "\uff16"); put("7", "\uff17"); put("8", "\uff18"); put("9", "\uff19"); put("0", "\uff10");
331 put("\uff11", "1"); put("\uff12", "2"); put("\uff13", "3"); put("\uff14", "4"); put("\uff15", "5");
332 put("\uff16", "6"); put("\uff17", "7"); put("\uff18", "8"); put("\uff19", "9"); put("\uff10", "0");
334 put(".", "\uff0e"); put("-", "\u2015"); put("@", "\uff20"); put("_", "\uff3f");
335 put("\uff0e", "."); put("\u2015", "-"); put("\uff20", "@"); put("\uff3f", "_");
337 put("\uff01", "!"); put("\uff1f", "?");
338 put("!", "\uff01"); put("?", "\uff1f");
340 put("\u3000", " "); put(" ", "\u3000");
342 put("(", "["); put("[", "(");
343 put(")", "]"); put("]", ")");
348 /** Character table for full-width number */
349 private static final char[] INSTANT_CHAR_CODE_FULL_NUMBER =
350 "\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19\uff10\uff03\uff0a".toCharArray();
352 /** Character table for half-width number */
353 private static final char[] INSTANT_CHAR_CODE_HALF_NUMBER =
354 "1234567890#*".toCharArray();
356 /** The constant for mFixedKeyMode. It means that input mode is not fixed. */
357 private static final int INVALID_KEYMODE = -1;
359 /** KeyIndex of "Moji" key on 12 keyboard (depends on the definition of keyboards) */
360 private static final int KEY_INDEX_CHANGE_MODE_12KEY = 15;
362 /** KeyIndex of "Moji" key on QWERTY keyboard (depends on the definition of keyboards) */
363 private static final int KEY_INDEX_CHANGE_MODE_QWERTY = 29;
365 /** Type of input mode */
366 private int mInputType = INPUT_TYPE_TOGGLE;
368 /** Previous input character code */
369 private int mPrevInputKeyCode = 0;
372 private int mFlickLimitX;
373 private int mFlickLimitY;
376 * Character table to input when mInputType becomes INPUT_TYPE_INSTANT.
377 * (Either INSTANT_CHAR_CODE_FULL_NUMBER or INSTANT_CHAR_CODE_HALF_NUMBER)
379 private char[] mCurrentInstantTable = null;
381 /** Input mode that is not able to be changed. If ENABLE_CHANGE_KEYMODE is set, input mode can change. */
382 private int[] mLimitedKeyMode = null;
384 /** Input mode that is given the first priority. If ENABLE_CHANGE_KEYMODE is set, input mode can change. */
385 private int mPreferenceKeyMode = INVALID_KEYMODE;
387 /** The last input type */
388 private int mLastInputType = 0;
390 /** Auto caps mode */
391 private boolean mEnableAutoCaps = true;
393 /** PopupResId of "Moji" key (this is used for canceling long-press) */
394 private int mPopupResId = 0;
396 /** Whether the InputType is null */
397 private boolean mIsInputTypeNull = false;
399 /** {@code SharedPreferences} for save the keyboard type */
400 private SharedPreferences.Editor mPrefEditor = null;
402 /** "Moji" key (this is used for canceling long-press) */
403 private Keyboard.Key mChangeModeKey = null;
405 private boolean mNikoFirst = false;
407 private Keyboard[][] mNikoKeyboard;
408 private Keyboard[][] mBellKeyboard;
410 /** option keyboard type */
411 private boolean mHookKeyType;
412 private int mHookStockKeyType;
414 /** option bell type **/
415 private boolean mChangeYLineBellMode;
417 /** Default constructor */
418 public DefaultSoftKeyboardJAJP() {
419 mCurrentLanguage = LANG_JA;
420 mCurrentKeyboardType = KEYBOARD_12KEY;
421 mHookKeyType = false;
422 mHookStockKeyType = KEYBOARD_12KEY;
423 mShiftOn = KEYBOARD_SHIFT_OFF;
424 mCurrentKeyMode = KEYMODE_JA_FULL_NIKO;
425 mCurrentSlide = NIKO_SLIDE_MODE_TOP;
428 /** @see com.hiroshica.android.input.nicownn2.DefaultSoftKeyboard#createKeyboards */
429 @Override protected void createKeyboards(NicoWnn parent) {
431 /* Keyboard[# of Languages][portrait/landscape][# of keyboard type][shift off/on][max # of key-modes][noinput/input] */
432 mKeyboard = new Keyboard[3][2][4][2][9][2];
434 SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(parent);
435 mChange12keyQwertyMode = pref.getBoolean("change_12key_qwerty", false);
436 mChangeYLineBellMode = pref.getBoolean("change_y_bellmode", false);
438 if (mHardKeyboardHidden) {
439 /* Create the suitable keyboard object */
440 if (mDisplayMode == DefaultSoftKeyboard.PORTRAIT) {
441 //mCurrentKeyboardType = KEYBOARD_12KEY;
442 createKeyboardsPortrait(parent);
446 //mCurrentKeyboardType = KEYBOARD_QWERTY;
447 createKeyboardsLandscape(parent);
452 if (mCurrentKeyboardType == KEYBOARD_12KEY) {
453 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE,
454 NicoWnnJAJP.ENGINE_MODE_OPT_TYPE_12KEY));
456 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE,
457 NicoWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
460 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE,
461 NicoWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
466 * Commit the pre-edit string for committing operation that is not explicit
467 * (ex. when a candidate is selected)
469 private void commitText() {
471 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.COMMIT_COMPOSING_TEXT));
478 * @param keyMode The type of input mode
480 public void changeKeyMode(int keyMode) {
481 int targetMode = filterKeyMode(keyMode);
482 if (targetMode == INVALID_KEYMODE) {
489 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_SOFT_KEY,
490 new KeyEvent(KeyEvent.ACTION_UP,
491 KeyEvent.KEYCODE_SHIFT_LEFT)));
494 mShiftOn = KEYBOARD_SHIFT_OFF;
495 Keyboard kbd = getModeChangeKeyboard(targetMode);
496 mCurrentKeyMode = targetMode;
497 mPrevInputKeyCode = 0;
500 int mode = NicoWnnEvent.Mode.DIRECT;
502 switch (targetMode) {
503 case KEYMODE_JA_FULL_HIRAGANA:
504 mInputType = INPUT_TYPE_TOGGLE;
505 mode = NicoWnnEvent.Mode.DEFAULT;
508 case KEYMODE_JA_HALF_ALPHABET:
509 if (USE_ENGLISH_PREDICT) {
510 mInputType = INPUT_TYPE_TOGGLE;
511 mode = NicoWnnEvent.Mode.NO_LV1_CONV;
513 mInputType = INPUT_TYPE_TOGGLE;
514 mode = NicoWnnEvent.Mode.DIRECT;
518 case KEYMODE_JA_FULL_NUMBER:
519 mInputType = INPUT_TYPE_INSTANT;
520 mode = NicoWnnEvent.Mode.DIRECT;
521 mCurrentInstantTable = INSTANT_CHAR_CODE_FULL_NUMBER;
524 case KEYMODE_JA_HALF_NUMBER:
525 mInputType = INPUT_TYPE_INSTANT;
526 mode = NicoWnnEvent.Mode.DIRECT;
527 mCurrentInstantTable = INSTANT_CHAR_CODE_HALF_NUMBER;
530 case KEYMODE_JA_FULL_KATAKANA:
531 mInputType = INPUT_TYPE_TOGGLE;
532 mode = NicoWnnJAJP.ENGINE_MODE_FULL_KATAKANA;
535 case KEYMODE_JA_FULL_ALPHABET:
536 mInputType = INPUT_TYPE_TOGGLE;
537 mode = NicoWnnEvent.Mode.DIRECT;
540 case KEYMODE_JA_HALF_KATAKANA:
541 mInputType = INPUT_TYPE_TOGGLE;
542 mode = NicoWnnJAJP.ENGINE_MODE_HALF_KATAKANA;
545 case KEYMODE_JA_FULL_NIKO:
546 mInputType = INPUT_TYPE_TOGGLE;
547 mode = NicoWnnEvent.Mode.DEFAULT;
557 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE, mode));
559 if (mChange12keyQwertyMode == true) {
560 switch (targetMode) {
561 case KEYMODE_JA_FULL_ALPHABET:
562 case KEYMODE_JA_FULL_NUMBER:
563 case KEYMODE_JA_HALF_ALPHABET:
564 case KEYMODE_JA_HALF_NUMBER:
565 if (mHookKeyType == false) {
566 mHookStockKeyType = mCurrentKeyboardType;
569 changeKeyboardType(KEYBOARD_QWERTY);
572 if (mHookKeyType == true) {
573 mHookKeyType = false;
574 changeKeyboardType(mHookStockKeyType);
581 /** @see com.hiroshica.android.input.nicownn2.DefaultSoftKeyboard#initView */
582 @Override public View initView(NicoWnn parent, int width, int height) {
584 View view = super.initView(parent, width, height);
585 SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(parent);
586 mChange12keyQwertyMode = pref.getBoolean("change_12key_qwerty", false);
587 mChangeYLineBellMode = pref.getBoolean("change_y_bellmode", false);
589 if (mChange12keyQwertyMode == true) {
590 switch (mCurrentKeyMode) {
591 case KEYMODE_JA_FULL_ALPHABET:
592 case KEYMODE_JA_FULL_NUMBER:
593 case KEYMODE_JA_HALF_ALPHABET:
594 case KEYMODE_JA_HALF_NUMBER:
595 if (mHookKeyType == false) {
596 mHookStockKeyType = mCurrentKeyboardType;
599 mCurrentKeyboardType = KEYBOARD_QWERTY;
602 if (mHookKeyType == true) {
603 mHookKeyType = false;
604 mCurrentKeyboardType = mHookStockKeyType;
610 mHookKeyType = false;
611 mCurrentKeyboardType = mHookStockKeyType;
613 changeKeyboard(mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0]);
618 /** @see com.hiroshica.android.input.nicownn2.DefaultSoftKeyboard#changeKeyboard */
619 @Override protected boolean changeKeyboard(Keyboard keyboard) {
620 if (keyboard != null) {
621 if (mIsInputTypeNull) {
622 mChangeModeKey.popupResId = mPopupResId;
625 List<Keyboard.Key> keys = keyboard.getKeys();
626 int keyIndex = (KEY_NUMBER_12KEY < keys.size())
627 ? KEY_INDEX_CHANGE_MODE_QWERTY : KEY_INDEX_CHANGE_MODE_12KEY;
628 mChangeModeKey = keys.get(keyIndex);
630 if (mIsInputTypeNull) {
631 mPopupResId = mChangeModeKey.popupResId;
632 mChangeModeKey.popupResId = 0;
635 return super.changeKeyboard(keyboard);
638 /** @see com.hiroshica.android.input.nicownn2.DefaultSoftKeyboard#changeKeyboardType */
639 @Override public void changeKeyboardType(int type) {
641 Keyboard kbd = getTypeChangeKeyboard(type);
643 mCurrentKeyboardType = type;
644 mPrefEditor.putBoolean("opt_enable_qwerty", type == KEYBOARD_QWERTY);
645 mPrefEditor.commit();
648 if (type == KEYBOARD_12KEY) {
649 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE, NicoWnnJAJP.ENGINE_MODE_OPT_TYPE_12KEY));
651 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE, NicoWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
654 /** @see com.hiroshica.android.input.nicownn2.DefaultSoftKeyboard#setPreferences */
655 @Override public void setPreferences(SharedPreferences pref, EditorInfo editor) {
656 mPrefEditor = pref.edit();
657 boolean isQwerty = pref.getBoolean("opt_enable_qwerty", false);
658 if (isQwerty && (mCurrentKeyboardType != KEYBOARD_QWERTY)) {
659 changeKeyboardType(KEYBOARD_QWERTY);
662 super.setPreferences(pref, editor);
664 mChange12keyQwertyMode = pref.getBoolean("change_12key_qwerty", false);
665 mChangeYLineBellMode = pref.getBoolean("change_y_bellmode", false);
667 int inputType = editor.inputType;
668 if (mHardKeyboardHidden) {
669 if (inputType == EditorInfo.TYPE_NULL) {
670 if (!mIsInputTypeNull) {
671 mIsInputTypeNull = true;
672 mPopupResId = mChangeModeKey.popupResId;
673 mChangeModeKey.popupResId = 0;
678 if (mIsInputTypeNull) {
679 mIsInputTypeNull = false;
680 mChangeModeKey.popupResId = mPopupResId;
684 mEnableAutoCaps = pref.getBoolean("auto_caps", true);
685 mLimitedKeyMode = null;
686 mPreferenceKeyMode = INVALID_KEYMODE;
688 mDisableKeyInput = false;
691 switch (inputType & EditorInfo.TYPE_MASK_CLASS) {
693 case EditorInfo.TYPE_CLASS_NUMBER:
694 case EditorInfo.TYPE_CLASS_DATETIME:
695 mPreferenceKeyMode = KEYMODE_JA_HALF_NUMBER;
698 case EditorInfo.TYPE_CLASS_PHONE:
699 if (mHardKeyboardHidden) {
700 //mLimitedKeyMode = new int[] {KEYMODE_JA_FULL_NIKO};
701 mPreferenceKeyMode = KEYMODE_JA_FULL_NIKO;
703 //mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_ALPHABET};
704 mPreferenceKeyMode = KEYMODE_JA_HALF_ALPHABET;
708 case EditorInfo.TYPE_CLASS_TEXT:
709 switch (inputType & EditorInfo.TYPE_MASK_VARIATION) {
711 case EditorInfo.TYPE_TEXT_VARIATION_PASSWORD:
712 //mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_ALPHABET, KEYMODE_JA_HALF_NUMBER};
715 case EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS:
716 //mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_ALPHABET, KEYMODE_JA_HALF_NUMBER};
718 case EditorInfo.TYPE_TEXT_VARIATION_URI:
719 //mPreferenceKeyMode = KEYMODE_JA_HALF_ALPHABET;
720 mPreferenceKeyMode = KEYMODE_JA_FULL_NIKO;
732 if (inputType != mLastInputType) {
733 setDefaultKeyboard();
734 mLastInputType = inputType;
738 setShiftByEditorInfo();
741 /** @see com.hiroshica.android.input.nicownn2.DefaultSoftKeyboard#onUpdateState */
742 @Override public void onUpdateState(NicoWnn parent) {
743 super.onUpdateState(parent);
745 setShiftByEditorInfo();
746 if (true == mNoInput && true == mNikoFirst) {
752 * Change the keyboard to default
754 public void setDefaultKeyboard() {
755 Locale locale = Locale.getDefault();
756 int keymode = KEYMODE_JA_FULL_NIKO;
759 if (mPreferenceKeyMode != INVALID_KEYMODE) {
760 keymode = mPreferenceKeyMode;
761 } else if (mLimitedKeyMode != null) {
762 keymode = mLimitedKeyMode[0];
764 if (!locale.getLanguage().equals(Locale.JAPANESE.getLanguage())) {
765 keymode = KEYMODE_JA_HALF_ALPHABET;
769 changeKeyMode(keymode);
774 * Change to the next input mode
776 public void nextKeyMode() {
777 /* Search the current mode in the toggle table */
778 boolean found = false;
780 for (index = 0; index < JP_MODE_CYCLE_TABLE.length; index++) {
781 if (JP_MODE_CYCLE_TABLE[index] == mCurrentKeyMode) {
788 /* If the current mode not exists, set the default mode */
789 setDefaultKeyboard();
791 /* If the current mode exists, set the next input mode */
792 int size = JP_MODE_CYCLE_TABLE.length;
793 int keyMode = INVALID_KEYMODE;
794 for (int i = 0; i < size; i++) {
795 index = (++index) % size;
797 keyMode = filterKeyMode(JP_MODE_CYCLE_TABLE[index]);
798 if (keyMode != INVALID_KEYMODE) {
803 if (keyMode != INVALID_KEYMODE) {
804 changeKeyMode(keyMode);
810 * Create the keyboard for portrait mode
812 * @param parent The context
814 private void createKeyboardsPortrait(NicoWnn parent) {
815 Keyboard[][] keyList;
816 /* qwerty shift_off (portrait) */
817 keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
818 keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
819 keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet);
820 keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
821 keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana);
822 keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
823 keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
824 keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana);
825 keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
826 keyList[KEYMODE_JA_FULL_NIKO][0] = keyList[KEYMODE_JA_FULL_HIRAGANA][0];
828 /* qwerty shift_on (portrait) */
829 keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
830 keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
831 keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_shift);
832 keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
833 keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_shift);
834 keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
835 keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
836 keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_shift);
837 keyList[KEYMODE_JA_HALF_PHONE][0] = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
838 keyList[KEYMODE_JA_FULL_NIKO][0] = keyList[KEYMODE_JA_FULL_HIRAGANA][0];
840 /* 12-keys shift_off (portrait) */
841 keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
842 keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_12keyjp);
843 keyList[KEYMODE_JA_FULL_HIRAGANA][1] = new Keyboard(parent, R.xml.keyboard_12keyjp_input);
844 keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana);
845 keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_input);
846 keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana);
847 keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_input);
848 keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
850 keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet);
851 keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_input);
852 keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_full_num);
853 keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet);
854 keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_input);
855 keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_half_num);
857 /* 12-keys shift_on (portrait) */
858 keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
859 keyList[KEYMODE_JA_FULL_HIRAGANA] = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA];
860 keyList[KEYMODE_JA_FULL_KATAKANA] = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_KATAKANA];
861 keyList[KEYMODE_JA_HALF_KATAKANA] = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA];
862 keyList[KEYMODE_JA_HALF_PHONE] = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE];
864 keyList[KEYMODE_JA_FULL_ALPHABET] = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_ALPHABET];
865 keyList[KEYMODE_JA_FULL_NUMBER] = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_NUMBER];
866 keyList[KEYMODE_JA_HALF_ALPHABET] = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_ALPHABET];;
867 keyList[KEYMODE_JA_HALF_NUMBER] = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_NUMBER];
870 mNikoKeyboard = new Keyboard[11][2];
871 mNikoKeyboard[NIKO_SLIDE_MODE_TOP][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_top);
872 mNikoKeyboard[NIKO_SLIDE_MODE_A][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_a);
873 mNikoKeyboard[NIKO_SLIDE_MODE_K][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_k);
874 mNikoKeyboard[NIKO_SLIDE_MODE_S][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_s);
875 mNikoKeyboard[NIKO_SLIDE_MODE_T][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_t);
876 mNikoKeyboard[NIKO_SLIDE_MODE_N][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_n);
877 mNikoKeyboard[NIKO_SLIDE_MODE_H][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_h);
878 mNikoKeyboard[NIKO_SLIDE_MODE_M][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_m);
879 mNikoKeyboard[NIKO_SLIDE_MODE_Y][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_y);
880 mNikoKeyboard[NIKO_SLIDE_MODE_R][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_r);
881 mNikoKeyboard[NIKO_SLIDE_MODE_W][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_w);
883 mNikoKeyboard[NIKO_SLIDE_MODE_TOP][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_top);
884 mNikoKeyboard[NIKO_SLIDE_MODE_A][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_a);
885 mNikoKeyboard[NIKO_SLIDE_MODE_K][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_k);
886 mNikoKeyboard[NIKO_SLIDE_MODE_S][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_s);
887 mNikoKeyboard[NIKO_SLIDE_MODE_T][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_t);
888 mNikoKeyboard[NIKO_SLIDE_MODE_N][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_n);
889 mNikoKeyboard[NIKO_SLIDE_MODE_H][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_h);
890 mNikoKeyboard[NIKO_SLIDE_MODE_M][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_m);
891 mNikoKeyboard[NIKO_SLIDE_MODE_Y][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_y);
892 mNikoKeyboard[NIKO_SLIDE_MODE_R][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_r);
893 mNikoKeyboard[NIKO_SLIDE_MODE_W][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_w);
896 mBellKeyboard = new Keyboard[11][2];
897 mBellKeyboard[NIKO_SLIDE_MODE_TOP][0] = mNikoKeyboard[NIKO_SLIDE_MODE_TOP][0];
898 mBellKeyboard[NIKO_SLIDE_MODE_A][0] = mNikoKeyboard[NIKO_SLIDE_MODE_A][0];
899 mBellKeyboard[NIKO_SLIDE_MODE_K][0] = mNikoKeyboard[NIKO_SLIDE_MODE_K][0];
900 mBellKeyboard[NIKO_SLIDE_MODE_S][0] = mNikoKeyboard[NIKO_SLIDE_MODE_S][0];
901 mBellKeyboard[NIKO_SLIDE_MODE_T][0] = mNikoKeyboard[NIKO_SLIDE_MODE_T][0];
902 mBellKeyboard[NIKO_SLIDE_MODE_N][0] = mNikoKeyboard[NIKO_SLIDE_MODE_N][0];
903 mBellKeyboard[NIKO_SLIDE_MODE_H][0] = mNikoKeyboard[NIKO_SLIDE_MODE_H][0];
904 mBellKeyboard[NIKO_SLIDE_MODE_M][0] = mNikoKeyboard[NIKO_SLIDE_MODE_M][0];
905 mBellKeyboard[NIKO_SLIDE_MODE_Y][0] = new Keyboard(parent, R.xml.keyboard_12key_full_bell_y);
906 mBellKeyboard[NIKO_SLIDE_MODE_R][0] = mNikoKeyboard[NIKO_SLIDE_MODE_R][0];
907 mBellKeyboard[NIKO_SLIDE_MODE_W][0] = mNikoKeyboard[NIKO_SLIDE_MODE_W][0];
909 mBellKeyboard[NIKO_SLIDE_MODE_TOP][1] = mNikoKeyboard[NIKO_SLIDE_MODE_TOP][1];
910 mBellKeyboard[NIKO_SLIDE_MODE_A][1] = mNikoKeyboard[NIKO_SLIDE_MODE_A][1];
911 mBellKeyboard[NIKO_SLIDE_MODE_K][1] = mNikoKeyboard[NIKO_SLIDE_MODE_K][1];
912 mBellKeyboard[NIKO_SLIDE_MODE_S][1] = mNikoKeyboard[NIKO_SLIDE_MODE_S][1];
913 mBellKeyboard[NIKO_SLIDE_MODE_T][1] = mNikoKeyboard[NIKO_SLIDE_MODE_T][1];
914 mBellKeyboard[NIKO_SLIDE_MODE_N][1] = mNikoKeyboard[NIKO_SLIDE_MODE_N][1];
915 mBellKeyboard[NIKO_SLIDE_MODE_H][1] = mNikoKeyboard[NIKO_SLIDE_MODE_H][1];
916 mBellKeyboard[NIKO_SLIDE_MODE_M][1] = mNikoKeyboard[NIKO_SLIDE_MODE_M][1];
917 mBellKeyboard[NIKO_SLIDE_MODE_Y][1] = new Keyboard(parent, R.xml.keyboard_12key_full_bell_input_y);
918 mBellKeyboard[NIKO_SLIDE_MODE_R][1] = mNikoKeyboard[NIKO_SLIDE_MODE_R][1];
919 mBellKeyboard[NIKO_SLIDE_MODE_W][1] = mNikoKeyboard[NIKO_SLIDE_MODE_W][1];
921 keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
922 keyList[KEYMODE_JA_FULL_NIKO] = mNikoKeyboard[NIKO_SLIDE_MODE_TOP];
923 keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
924 if (false == mChangeYLineBellMode) {
925 keyList[KEYMODE_JA_FULL_NIKO] = mNikoKeyboard[NIKO_SLIDE_MODE_A];
928 keyList[KEYMODE_JA_FULL_NIKO] = mBellKeyboard[NIKO_SLIDE_MODE_A];
933 * Create the keyboard for landscape mode
935 * @param parent The context
937 private void createKeyboardsLandscape(NicoWnn parent) {
938 Keyboard[][] keyList;
939 /* qwerty shift_off (landscape) */
940 keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
941 keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_land);
942 keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_land);
943 keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_land);
944 keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_land);
945 keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_land);
946 keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_land);
947 keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_land);
948 keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone_land);
949 keyList[KEYMODE_JA_FULL_NIKO][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_niko_land);
950 /* qwerty shift_on (landscape) */
951 keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
952 keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift_land);
953 keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_shift_land);
954 keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift_land);
955 keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_shift_land);
956 keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift_land);
957 keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift_land);
958 keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_shift_land);
959 keyList[KEYMODE_JA_HALF_PHONE][0] = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
960 keyList[KEYMODE_JA_FULL_NIKO][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_niko_shift_land);
962 /* 12-keys shift_off (landscape) */
963 keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
964 keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_12keyjp_land);
965 keyList[KEYMODE_JA_FULL_HIRAGANA][1] = new Keyboard(parent, R.xml.keyboard_12keyjp_input_land);
966 keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_land);
967 keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_input_land);
968 keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_full_num_land);
969 keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_land);
970 keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_input_land);
971 keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_land);
972 keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_input_land);
973 keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_half_num_land);
974 keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_land);
975 keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_input_land);
976 keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone_land);
978 /* 12-keys shift_on (landscape) */
979 keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
980 keyList[KEYMODE_JA_FULL_HIRAGANA] = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA];
981 keyList[KEYMODE_JA_FULL_ALPHABET] = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_ALPHABET];
982 keyList[KEYMODE_JA_FULL_NUMBER] = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_NUMBER];
983 keyList[KEYMODE_JA_FULL_KATAKANA] = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_KATAKANA];
984 keyList[KEYMODE_JA_HALF_ALPHABET] = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_ALPHABET];;
985 keyList[KEYMODE_JA_HALF_NUMBER] = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_NUMBER];
986 keyList[KEYMODE_JA_HALF_KATAKANA] = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA];
987 keyList[KEYMODE_JA_HALF_PHONE] = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE];
990 mNikoKeyboard = new Keyboard[11][2];
991 mNikoKeyboard[NIKO_SLIDE_MODE_TOP][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_top_land);
992 mNikoKeyboard[NIKO_SLIDE_MODE_A][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_a_land);
993 mNikoKeyboard[NIKO_SLIDE_MODE_K][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_k_land);
994 mNikoKeyboard[NIKO_SLIDE_MODE_S][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_s_land);
995 mNikoKeyboard[NIKO_SLIDE_MODE_T][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_t_land);
996 mNikoKeyboard[NIKO_SLIDE_MODE_N][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_n_land);
997 mNikoKeyboard[NIKO_SLIDE_MODE_H][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_h_land);
998 mNikoKeyboard[NIKO_SLIDE_MODE_M][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_m_land);
999 mNikoKeyboard[NIKO_SLIDE_MODE_Y][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_y_land);
1000 mNikoKeyboard[NIKO_SLIDE_MODE_R][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_r_land);
1001 mNikoKeyboard[NIKO_SLIDE_MODE_W][0] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_w_land);
1003 mNikoKeyboard[NIKO_SLIDE_MODE_TOP][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_top_land);
1004 mNikoKeyboard[NIKO_SLIDE_MODE_A][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_a_land);
1005 mNikoKeyboard[NIKO_SLIDE_MODE_K][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_k_land);
1006 mNikoKeyboard[NIKO_SLIDE_MODE_S][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_s_land);
1007 mNikoKeyboard[NIKO_SLIDE_MODE_T][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_t_land);
1008 mNikoKeyboard[NIKO_SLIDE_MODE_N][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_n_land);
1009 mNikoKeyboard[NIKO_SLIDE_MODE_H][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_h_land);
1010 mNikoKeyboard[NIKO_SLIDE_MODE_M][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_m_land);
1011 mNikoKeyboard[NIKO_SLIDE_MODE_Y][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_y_land);
1012 mNikoKeyboard[NIKO_SLIDE_MODE_R][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_r_land);
1013 mNikoKeyboard[NIKO_SLIDE_MODE_W][1] = new Keyboard(parent, R.xml.keyboard_12key_full_niko_input_w_land);
1016 mBellKeyboard = new Keyboard[11][2];
1017 mBellKeyboard[NIKO_SLIDE_MODE_TOP][0] = mNikoKeyboard[NIKO_SLIDE_MODE_TOP][0];
1018 mBellKeyboard[NIKO_SLIDE_MODE_A][0] = mNikoKeyboard[NIKO_SLIDE_MODE_A][0];
1019 mBellKeyboard[NIKO_SLIDE_MODE_K][0] = mNikoKeyboard[NIKO_SLIDE_MODE_K][0];
1020 mBellKeyboard[NIKO_SLIDE_MODE_S][0] = mNikoKeyboard[NIKO_SLIDE_MODE_S][0];
1021 mBellKeyboard[NIKO_SLIDE_MODE_T][0] = mNikoKeyboard[NIKO_SLIDE_MODE_T][0];
1022 mBellKeyboard[NIKO_SLIDE_MODE_N][0] = mNikoKeyboard[NIKO_SLIDE_MODE_N][0];
1023 mBellKeyboard[NIKO_SLIDE_MODE_H][0] = mNikoKeyboard[NIKO_SLIDE_MODE_H][0];
1024 mBellKeyboard[NIKO_SLIDE_MODE_M][0] = mNikoKeyboard[NIKO_SLIDE_MODE_M][0];
1025 mBellKeyboard[NIKO_SLIDE_MODE_Y][0] = new Keyboard(parent, R.xml.keyboard_12key_full_bell_y_land);
1026 mBellKeyboard[NIKO_SLIDE_MODE_R][0] = mNikoKeyboard[NIKO_SLIDE_MODE_R][0];
1027 mBellKeyboard[NIKO_SLIDE_MODE_W][0] = mNikoKeyboard[NIKO_SLIDE_MODE_W][0];
1029 mBellKeyboard[NIKO_SLIDE_MODE_TOP][1] = mNikoKeyboard[NIKO_SLIDE_MODE_TOP][1];
1030 mBellKeyboard[NIKO_SLIDE_MODE_A][1] = mNikoKeyboard[NIKO_SLIDE_MODE_A][1];
1031 mBellKeyboard[NIKO_SLIDE_MODE_K][1] = mNikoKeyboard[NIKO_SLIDE_MODE_K][1];
1032 mBellKeyboard[NIKO_SLIDE_MODE_S][1] = mNikoKeyboard[NIKO_SLIDE_MODE_S][1];
1033 mBellKeyboard[NIKO_SLIDE_MODE_T][1] = mNikoKeyboard[NIKO_SLIDE_MODE_T][1];
1034 mBellKeyboard[NIKO_SLIDE_MODE_N][1] = mNikoKeyboard[NIKO_SLIDE_MODE_N][1];
1035 mBellKeyboard[NIKO_SLIDE_MODE_H][1] = mNikoKeyboard[NIKO_SLIDE_MODE_H][1];
1036 mBellKeyboard[NIKO_SLIDE_MODE_M][1] = mNikoKeyboard[NIKO_SLIDE_MODE_M][1];
1037 mBellKeyboard[NIKO_SLIDE_MODE_Y][1] = new Keyboard(parent, R.xml.keyboard_12key_full_bell_input_y_land);
1038 mBellKeyboard[NIKO_SLIDE_MODE_R][1] = mNikoKeyboard[NIKO_SLIDE_MODE_R][1];
1039 mBellKeyboard[NIKO_SLIDE_MODE_W][1] = mNikoKeyboard[NIKO_SLIDE_MODE_W][1];
1041 keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
1042 keyList[KEYMODE_JA_FULL_NIKO] = mNikoKeyboard[NIKO_SLIDE_MODE_TOP];
1043 keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
1044 if (false == mChangeYLineBellMode) {
1045 keyList[KEYMODE_JA_FULL_NIKO] = mNikoKeyboard[NIKO_SLIDE_MODE_A];
1048 keyList[KEYMODE_JA_FULL_NIKO] = mBellKeyboard[NIKO_SLIDE_MODE_A];
1053 * Convert the key code to the index of table
1055 * @param index The key code
1056 * @return The index of the toggle table for input
1058 private int getTableIndex(int keyCode) {
1060 (keyCode == KEYCODE_JP12_1) ? 0 :
1061 (keyCode == KEYCODE_JP12_2) ? 1 :
1062 (keyCode == KEYCODE_JP12_3) ? 2 :
1063 (keyCode == KEYCODE_JP12_4) ? 3 :
1064 (keyCode == KEYCODE_JP12_5) ? 4 :
1065 (keyCode == KEYCODE_JP12_6) ? 5 :
1066 (keyCode == KEYCODE_JP12_7) ? 6 :
1067 (keyCode == KEYCODE_JP12_8) ? 7 :
1068 (keyCode == KEYCODE_JP12_9) ? 8 :
1069 (keyCode == KEYCODE_JP12_0) ? 9 :
1070 (keyCode == KEYCODE_JP12_SHARP) ? 10 :
1071 (keyCode == KEYCODE_JP12_ASTER) ? 11 :
1078 * Get the toggle table for input that is appropriate in current mode.
1080 * @return The toggle table for input
1082 private String[][] getCycleTable() {
1083 String[][] cycleTable = null;
1084 switch (mCurrentKeyMode) {
1085 case KEYMODE_JA_FULL_HIRAGANA:
1086 cycleTable = JP_FULL_HIRAGANA_CYCLE_TABLE;
1089 case KEYMODE_JA_FULL_KATAKANA:
1090 cycleTable = JP_FULL_KATAKANA_CYCLE_TABLE;
1093 case KEYMODE_JA_FULL_ALPHABET:
1094 cycleTable = JP_FULL_ALPHABET_CYCLE_TABLE;
1097 case KEYMODE_JA_FULL_NUMBER:
1098 case KEYMODE_JA_HALF_NUMBER:
1099 /* Because these modes belong to direct input group, No toggle table exists */
1102 case KEYMODE_JA_HALF_ALPHABET:
1103 cycleTable = JP_HALF_ALPHABET_CYCLE_TABLE;
1106 case KEYMODE_JA_HALF_KATAKANA:
1107 cycleTable = JP_HALF_KATAKANA_CYCLE_TABLE;
1110 case KEYMODE_JA_FULL_NIKO:
1111 cycleTable = JP_FULL_NIKO_CYCLE_TABLE;
1121 * Get the replace table that is appropriate in current mode.
1123 * @return The replace table
1125 private HashMap getReplaceTable() {
1126 HashMap hashTable = null;
1127 switch (mCurrentKeyMode) {
1128 case KEYMODE_JA_FULL_HIRAGANA:
1129 hashTable = JP_FULL_HIRAGANA_REPLACE_TABLE;
1131 case KEYMODE_JA_FULL_KATAKANA:
1132 hashTable = JP_FULL_KATAKANA_REPLACE_TABLE;
1135 case KEYMODE_JA_FULL_ALPHABET:
1136 hashTable = JP_FULL_ALPHABET_REPLACE_TABLE;
1139 case KEYMODE_JA_FULL_NUMBER:
1140 case KEYMODE_JA_HALF_NUMBER:
1141 /* Because these modes belong to direct input group, No replacing table exists */
1144 case KEYMODE_JA_HALF_ALPHABET:
1145 hashTable = JP_HALF_ALPHABET_REPLACE_TABLE;
1148 case KEYMODE_JA_HALF_KATAKANA:
1149 hashTable = JP_HALF_KATAKANA_REPLACE_TABLE;
1152 case KEYMODE_JA_FULL_NIKO:
1153 hashTable = JP_FULL_NIKO_REPLACE_TABLE;
1163 * Set the status icon that is appropriate in current mode
1165 private void setStatusIcon() {
1168 switch (mCurrentKeyMode) {
1169 case KEYMODE_JA_FULL_HIRAGANA:
1170 icon = R.drawable.immodeic_hiragana;
1172 case KEYMODE_JA_FULL_KATAKANA:
1173 icon = R.drawable.immodeic_full_kana;
1175 case KEYMODE_JA_FULL_ALPHABET:
1176 icon = R.drawable.immodeic_full_alphabet;
1178 case KEYMODE_JA_FULL_NUMBER:
1179 icon = R.drawable.immodeic_full_number;
1181 case KEYMODE_JA_HALF_KATAKANA:
1182 icon = R.drawable.immodeic_half_kana;
1184 case KEYMODE_JA_HALF_ALPHABET:
1185 icon = R.drawable.immodeic_half_alphabet;
1187 case KEYMODE_JA_HALF_NUMBER:
1188 case KEYMODE_JA_HALF_PHONE:
1189 icon = R.drawable.immodeic_half_number;
1191 case KEYMODE_JA_FULL_NIKO:
1192 icon = R.drawable.immodeic_niko;
1199 mWnn.showStatusIcon(icon);
1203 * Get the shift key state from the editor.
1205 * @param editor The editor information
1206 * @return The state id of the shift key (0:off, 1:on)
1208 protected int getShiftKeyState(EditorInfo editor) {
1209 InputConnection connection = mWnn.getCurrentInputConnection();
1210 if (connection != null) {
1211 int caps = connection.getCursorCapsMode(editor.inputType);
1212 return (caps == 0) ? 0 : 1;
1219 * Set the shift key state from {@link EditorInfo}.
1221 private void setShiftByEditorInfo() {
1222 if (mEnableAutoCaps && (mCurrentKeyMode == KEYMODE_JA_HALF_ALPHABET)) {
1223 int shift = getShiftKeyState(mWnn.getCurrentInputEditorInfo());
1226 changeKeyboard(getShiftChangeKeyboard(shift));
1230 /** @see com.hiroshica.android.input.nicownn2.DefaultSoftKeyboard#setHardKeyboardHidden */
1231 @Override public void setHardKeyboardHidden(boolean hidden) {
1234 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE,
1235 NicoWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
1238 if (mHardKeyboardHidden != hidden) {
1239 if ((mLimitedKeyMode != null)
1240 || ((mCurrentKeyMode != KEYMODE_JA_FULL_HIRAGANA)
1241 && (mCurrentKeyMode != KEYMODE_JA_HALF_ALPHABET))) {
1243 mLastInputType = EditorInfo.TYPE_NULL;
1244 if (mWnn.isInputViewShown()) {
1245 setDefaultKeyboard();
1250 super.setHardKeyboardHidden(hidden);
1254 * Change the key-mode to the allowed one which is restricted
1255 * by the text input field or the type of the keyboard.
1256 * @param keyMode The key-mode
1257 * @return the key-mode allowed
1259 private int filterKeyMode(int keyMode) {
1260 int targetMode = keyMode;
1261 int[] limits = mLimitedKeyMode;
1263 if (!mHardKeyboardHidden) { /* for hardware keyboard */
1264 if ((targetMode != KEYMODE_JA_FULL_HIRAGANA)
1265 && (targetMode != KEYMODE_JA_HALF_ALPHABET)) {
1267 Locale locale = Locale.getDefault();
1268 int keymode = KEYMODE_JA_HALF_ALPHABET;
1269 if (locale.getLanguage().equals(Locale.JAPANESE.getLanguage())) {
1270 switch (targetMode) {
1271 case KEYMODE_JA_FULL_HIRAGANA:
1272 case KEYMODE_JA_FULL_KATAKANA:
1273 case KEYMODE_JA_HALF_KATAKANA:
1274 keymode = KEYMODE_JA_FULL_HIRAGANA;
1281 targetMode = keymode;
1285 /* restrict by the type of the text field */
1286 if (limits != null) {
1287 boolean hasAccepted = false;
1288 boolean hasRequiredChange = true;
1289 int size = limits.length;
1290 int nowMode = mCurrentKeyMode;
1292 for (int i = 0; i < size; i++) {
1293 if (targetMode == limits[i]) {
1297 if (nowMode == limits[i]) {
1298 hasRequiredChange = false;
1303 if (hasRequiredChange) {
1304 targetMode = mLimitedKeyMode[0];
1306 targetMode = INVALID_KEYMODE;
1316 /*****************************************
1319 /** @see com.hiroshica.android.input.nicownn2.DefaultSoftKeyboard#onKey */
1320 @Override public void onKey(int primaryCode, int[] keyCodes) {
1322 if (mDisableKeyInput) {
1326 if (mCurrentKeyMode == KEYMODE_JA_FULL_NIKO) {
1327 if (true == onKeyNiko(primaryCode, keyCodes)) {
1328 /* update shift key's state */
1329 if (!mCapsLock && (primaryCode != DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT)) {
1330 setShiftByEditorInfo();
1335 if (true == mIsEnableFlick) {
1336 onkeyFlick(primaryCode, keyCodes);
1340 switch (primaryCode) {
1341 case KEYCODE_JP12_TOGGLE_MODE:
1342 case KEYCODE_QWERTY_TOGGLE_MODE:
1343 if (!mIsInputTypeNull) {
1348 case DefaultSoftKeyboard.KEYCODE_QWERTY_BACKSPACE:
1349 case KEYCODE_JP12_BACKSPACE:
1350 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_SOFT_KEY,
1351 new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)));
1354 case DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT:
1358 case DefaultSoftKeyboard.KEYCODE_QWERTY_ALT:
1362 case KEYCODE_QWERTY_ENTER:
1363 case KEYCODE_JP12_ENTER:
1364 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_SOFT_KEY,
1365 new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)));
1368 case KEYCODE_JP12_REVERSE:
1370 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOGGLE_REVERSE_CHAR, mCurrentCycleTable));
1374 case KEYCODE_QWERTY_KBD:
1375 changeKeyboardType(KEYBOARD_12KEY);
1376 mHookKeyType = false;
1377 mHookStockKeyType = KEYBOARD_12KEY;
1380 case KEYCODE_JP12_KBD:
1381 changeKeyboardType(KEYBOARD_QWERTY);
1382 mHookKeyType = false;
1383 mHookStockKeyType = KEYBOARD_QWERTY;
1386 case KEYCODE_JP12_EMOJI:
1387 case KEYCODE_QWERTY_EMOJI:
1389 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE, NicoWnnJAJP.ENGINE_MODE_SYMBOL));
1392 case KEYCODE_JP12_1:
1393 case KEYCODE_JP12_2:
1394 case KEYCODE_JP12_3:
1395 case KEYCODE_JP12_4:
1396 case KEYCODE_JP12_5:
1397 case KEYCODE_JP12_6:
1398 case KEYCODE_JP12_7:
1399 case KEYCODE_JP12_8:
1400 case KEYCODE_JP12_9:
1401 case KEYCODE_JP12_0:
1402 case KEYCODE_JP12_SHARP:
1403 /* Processing to input by ten key */
1404 if (mInputType == INPUT_TYPE_INSTANT) {
1405 /* Send a input character directly if instant input type is selected */
1407 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_CHAR,
1408 mCurrentInstantTable[getTableIndex(primaryCode)]));
1410 if ((mPrevInputKeyCode != primaryCode)) {
1411 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOUCH_OTHER_KEY));
1412 if ((mCurrentKeyMode == KEYMODE_JA_HALF_ALPHABET)
1413 && (primaryCode == KEYCODE_JP12_SHARP)) {
1414 /* Commit text by symbol character (',' '.') when alphabet input mode is selected */
1419 /* Convert the key code to the table index and send the toggle event with the table index */
1420 String[][] cycleTable = getCycleTable();
1421 if (cycleTable == null) {
1422 Log.e("NicoWnn", "not founds cycle table");
1424 int index = getTableIndex(primaryCode);
1425 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOGGLE_CHAR, cycleTable[index]));
1426 mCurrentCycleTable = cycleTable[index];
1428 mPrevInputKeyCode = primaryCode;
1432 case KEYCODE_JP12_ASTER:
1433 if (mInputType == INPUT_TYPE_INSTANT) {
1435 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_CHAR,
1436 mCurrentInstantTable[getTableIndex(primaryCode)]));
1439 /* Processing to toggle Dakuten, Handakuten, and capital */
1440 HashMap replaceTable = getReplaceTable();
1441 if (replaceTable == null) {
1442 Log.e("NicoWnn", "not founds replace table");
1444 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.REPLACE_CHAR, replaceTable));
1445 mPrevInputKeyCode = primaryCode;
1451 case KEYCODE_SWITCH_FULL_HIRAGANA:
1452 /* Change mode to Full width hiragana */
1453 changeKeyMode(KEYMODE_JA_FULL_HIRAGANA);
1456 case KEYCODE_SWITCH_FULL_KATAKANA:
1457 /* Change mode to Full width katakana */
1458 changeKeyMode(KEYMODE_JA_FULL_KATAKANA);
1461 case KEYCODE_SWITCH_FULL_ALPHABET:
1462 /* Change mode to Full width alphabet */
1463 changeKeyMode(KEYMODE_JA_FULL_ALPHABET);
1466 case KEYCODE_SWITCH_FULL_NUMBER:
1467 /* Change mode to Full width numeric */
1468 changeKeyMode(KEYMODE_JA_FULL_NUMBER);
1471 case KEYCODE_SWITCH_HALF_KATAKANA:
1472 /* Change mode to Half width katakana */
1473 changeKeyMode(KEYMODE_JA_HALF_KATAKANA);
1476 case KEYCODE_SWITCH_HALF_ALPHABET:
1477 /* Change mode to Half width alphabet */
1478 changeKeyMode(KEYMODE_JA_HALF_ALPHABET);
1481 case KEYCODE_SWITCH_HALF_NUMBER:
1482 /* Change mode to Half width numeric */
1483 changeKeyMode(KEYMODE_JA_HALF_NUMBER);
1486 case KEYCODE_SWITCH_FULL_NIKO:
1487 /* Change mode to Full width nikotouch */
1488 changeKeyMode(KEYMODE_JA_FULL_NIKO);
1491 case KEYCODE_SELECT_CASE:
1492 int shifted = (mShiftOn == 0) ? 1 : 0;
1493 Keyboard newKeyboard = getShiftChangeKeyboard(shifted);
1494 if (newKeyboard != null) {
1496 changeKeyboard(newKeyboard);
1500 case KEYCODE_JP12_SPACE:
1501 if ((mCurrentKeyMode == KEYMODE_JA_FULL_HIRAGANA) && !mNoInput) {
1502 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CONVERT));
1504 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_CHAR, ' '));
1508 case KEYCODE_EISU_KANA:
1509 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE, NicoWnnJAJP.ENGINE_MODE_EISU_KANA));
1512 case KEYCODE_JP12_CLOSE:
1513 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_KEY,
1514 new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)));
1517 case KEYCODE_JP12_LEFT:
1518 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_SOFT_KEY,
1519 new KeyEvent(KeyEvent.ACTION_DOWN,
1520 KeyEvent.KEYCODE_DPAD_LEFT)));
1523 case KEYCODE_JP12_RIGHT:
1524 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_SOFT_KEY,
1525 new KeyEvent(KeyEvent.ACTION_DOWN,
1526 KeyEvent.KEYCODE_DPAD_RIGHT)));
1532 if (primaryCode >= 0) {
1533 if (mKeyboardView.isShifted()) {
1534 primaryCode = Character.toUpperCase(primaryCode);
1536 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_CHAR, (char)primaryCode));
1541 /* update shift key's state */
1542 if (!mCapsLock && (primaryCode != DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT)) {
1543 setShiftByEditorInfo();
1548 /*****************************************
1551 private boolean onKeyNiko(int primaryCode, int[] keyCodes) {
1552 Keyboard newKeyboard = null;
1553 boolean retcode = false;
1554 switch (primaryCode) {
1555 case DefaultSoftKeyboard.KEYCODE_QWERTY_BACKSPACE:
1556 case KEYCODE_JP12_BACKSPACE:
1557 if (mNikoFirst == true) {
1558 resetNikoKeyboard();
1561 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_SOFT_KEY, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)));
1565 case KEYCODE_QWERTY_ENTER:
1566 case KEYCODE_JP12_ENTER:
1567 if (mNikoFirst == false) {
1568 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_SOFT_KEY, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)));
1573 case KEYCODE_JP12_REVERSE:
1574 if (mNikoFirst == true) {
1575 resetNikoKeyboard();
1581 case KEYCODE_QWERTY_KBD:
1582 case KEYCODE_JP12_KBD:
1583 resetNikoKeyboard();
1586 case KEYCODE_JP12_EMOJI:
1587 case KEYCODE_QWERTY_EMOJI:
1588 if (mNikoFirst == false) {
1590 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE, NicoWnnJAJP.ENGINE_MODE_SYMBOL));
1595 case KEYCODE_JP12_SHARP:
1599 case KEYCODE_JP12_1:
1600 case KEYCODE_JP12_2:
1601 case KEYCODE_JP12_3:
1602 case KEYCODE_JP12_4:
1603 case KEYCODE_JP12_5:
1604 case KEYCODE_JP12_6:
1605 case KEYCODE_JP12_7:
1606 case KEYCODE_JP12_8:
1607 case KEYCODE_JP12_9:
1608 case KEYCODE_JP12_0:
1609 if (mNikoFirst == false) {
1610 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOUCH_OTHER_KEY));
1612 int index = getTableIndex(primaryCode);
1613 Keyboard[][] keyList = mKeyboard[LANG_JA][mDisplayMode][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
1614 if (false == mChangeYLineBellMode) {
1615 keyList[KEYMODE_JA_FULL_NIKO] = mNikoKeyboard[index+1];
1618 keyList[KEYMODE_JA_FULL_NIKO] = mBellKeyboard[index+1];
1620 newKeyboard = getShiftChangeKeyboard(KEYBOARD_SHIFT_ON);
1621 if (newKeyboard != null) {
1622 mShiftOn = KEYBOARD_SHIFT_ON;
1623 changeKeyboard(newKeyboard);
1625 mPrevInputKeyCode = primaryCode;
1629 int col = getTableIndex(mPrevInputKeyCode);
1630 int row = getTableIndex(primaryCode);
1631 String[][] cycleTable = getCycleTable();
1632 if (cycleTable == null) {
1633 Log.e("NicoWnn", "not founds cycle table");
1636 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOGGLE_CHAR, cycleTable[col * 10 + row]));
1638 newKeyboard = getShiftChangeKeyboard(KEYBOARD_SHIFT_OFF);
1639 if (newKeyboard != null) {
1640 mShiftOn = KEYBOARD_SHIFT_OFF;
1641 changeKeyboard(newKeyboard);
1648 case KEYCODE_JP12_ASTER:
1649 if (mNikoFirst == false && !mNoInput) {
1650 /* Processing to toggle Dakuten, Handakuten, and capital */
1651 HashMap replaceTable = getReplaceTable();
1652 if (replaceTable == null) {
1653 Log.e("NicoWnn", "not founds replace table");
1655 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.REPLACE_CHAR, replaceTable));
1656 mPrevInputKeyCode = primaryCode;
1662 case KEYCODE_JP12_SPACE:
1663 if (mNikoFirst == false) {
1664 if ((mCurrentKeyMode == KEYMODE_JA_FULL_HIRAGANA) && !mNoInput) {
1665 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CONVERT));
1667 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_CHAR, ' '));
1673 case KEYCODE_EISU_KANA:
1674 if (mNikoFirst == false) {
1675 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.CHANGE_MODE, NicoWnnJAJP.ENGINE_MODE_EISU_KANA));
1680 case KEYCODE_JP12_CLOSE:
1681 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_KEY, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)));
1685 case KEYCODE_JP12_LEFT:
1686 if (mNikoFirst == false) {
1687 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_SOFT_KEY, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT)));
1691 case KEYCODE_JP12_RIGHT:
1692 if (mNikoFirst == false) {
1693 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.INPUT_SOFT_KEY, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT)));
1701 * reset nikotouch keyboard
1703 @Override public void resetNikoKeyboard() {
1704 Keyboard newKeyboard = getShiftChangeKeyboard(KEYBOARD_SHIFT_OFF);
1705 if (newKeyboard != null) {
1706 mShiftOn = KEYBOARD_SHIFT_OFF;
1707 changeKeyboard(newKeyboard);
1710 } // resetNikoKeyboard
1711 private void setLastNikoChar(int keycode) {
1712 int col = getTableIndex(keycode);
1713 String[][] cycleTable = getCycleTable();
1714 if (cycleTable == null) {
1715 Log.e("NicoWnn", "not founds cycle table");
1718 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOGGLE_CHAR, cycleTable[col * 10]));
1720 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOUCH_OTHER_KEY));
1721 } // setLastNikoChar
1723 /*************************************************
1726 private void onkeyFlick(int primaryCode, int[] keyCodes) {
1727 switch (primaryCode) {
1728 case KEYCODE_JP12_TOGGLE_MODE:
1729 case KEYCODE_QWERTY_TOGGLE_MODE:
1730 if (!mIsInputTypeNull) {
1734 case KEYCODE_SWITCH_FULL_HIRAGANA:
1735 /* Change mode to Full width hiragana */
1736 changeKeyMode(KEYMODE_JA_FULL_HIRAGANA);
1739 case KEYCODE_SWITCH_FULL_KATAKANA:
1740 /* Change mode to Full width katakana */
1741 changeKeyMode(KEYMODE_JA_FULL_KATAKANA);
1744 case KEYCODE_SWITCH_FULL_ALPHABET:
1745 /* Change mode to Full width alphabet */
1746 changeKeyMode(KEYMODE_JA_FULL_ALPHABET);
1749 case KEYCODE_SWITCH_FULL_NUMBER:
1750 /* Change mode to Full width numeric */
1751 changeKeyMode(KEYMODE_JA_FULL_NUMBER);
1754 case KEYCODE_SWITCH_HALF_KATAKANA:
1755 /* Change mode to Half width katakana */
1756 changeKeyMode(KEYMODE_JA_HALF_KATAKANA);
1759 case KEYCODE_SWITCH_HALF_ALPHABET:
1760 /* Change mode to Half width alphabet */
1761 changeKeyMode(KEYMODE_JA_HALF_ALPHABET);
1764 case KEYCODE_SWITCH_HALF_NUMBER:
1765 /* Change mode to Half width numeric */
1766 changeKeyMode(KEYMODE_JA_HALF_NUMBER);
1769 case KEYCODE_SWITCH_FULL_NIKO:
1770 /* Change mode to Full width nikotouch */
1771 changeKeyMode(KEYMODE_JA_FULL_NIKO);
1773 case KEYCODE_SELECT_CASE:
1774 int shifted = (mShiftOn == 0) ? 1 : 0;
1775 Keyboard newKeyboard = getShiftChangeKeyboard(shifted);
1776 if (newKeyboard != null) {
1778 changeKeyboard(newKeyboard);
1784 /* update shift key's state */
1785 if (!mCapsLock && (primaryCode != DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT)) {
1786 setShiftByEditorInfo();
1791 @Override public void onPress(int primaryCode) {
1792 super.onPress(primaryCode);
1793 mStockFlickCode = primaryCode;
1797 @Override public void onRelease(int primaryCode) {
1798 super.onRelease(primaryCode);
1800 if (false == mIsEnableFlick) {
1803 if (mCurrentKeyMode == KEYMODE_JA_FULL_NIKO) {
1807 if (true == mIsHookFlick) {
1808 onKey(mStockFlickCode, null);
1812 float getx = mReleaseX - mPressX;
1813 float gety = mReleaseY - mPressY;
1816 if (limx < 0.0f) limx *= -1.0f;
1817 if (limy < 0.0f) limy *= -1.0f;
1819 if (limx < mFlickLimitX) {
1822 if (limy < mFlickLimitY) {
1828 if (getx < mFlickLimitX) {
1835 else if (limy > limx) {
1837 if (gety < mFlickLimitY) {
1847 switch (mStockFlickCode) {
1848 case KEYCODE_JP12_1:
1849 case KEYCODE_JP12_2:
1850 case KEYCODE_JP12_3:
1851 case KEYCODE_JP12_4:
1852 case KEYCODE_JP12_5:
1853 case KEYCODE_JP12_6:
1854 case KEYCODE_JP12_7:
1855 case KEYCODE_JP12_8:
1856 case KEYCODE_JP12_9:
1857 case KEYCODE_JP12_0:
1858 int col = getTableIndex(mStockFlickCode);
1859 String[][] cycleTable = getCycleTable();
1860 if (cycleTable == null) {
1861 Log.e("NicoWnn", "not founds cycle table");
1864 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOGGLE_CHAR, cycleTable[col * 10 + offset]));
1866 mWnn.onEvent(new NicoWnnEvent(NicoWnnEvent.TOUCH_OTHER_KEY));
1869 onKey(mStockFlickCode, null);
1872 /* update shift key's state */
1873 if (!mCapsLock && (primaryCode != DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT)) {
1874 setShiftByEditorInfo();