1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/*
259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Copyright (C) 2008-2012  OMRON SOFTWARE Co., Ltd.
3053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
4053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * you may not use this file except in compliance with the License.
6053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * You may obtain a copy of the License at
7053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
8053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
10053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * See the License for the specific language governing permissions and
14053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * limitations under the License.
15053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */
16053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
17053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpackage jp.co.omronsoft.openwnn.JAJP;
18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport android.app.AlertDialog;
20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport jp.co.omronsoft.openwnn.*;
2159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport android.content.DialogInterface;
2259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport android.content.res.Resources;
23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.KeyEvent;
24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.inputmethod.EditorInfo;
25e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawaimport android.view.inputmethod.InputConnection;
26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.util.Log;
27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View;
28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.SharedPreferences;
2959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
3059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport jp.co.omronsoft.openwnn.Keyboard;
3159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport jp.co.omronsoft.openwnn.BaseInputView;
3259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport jp.co.omronsoft.openwnn.R;
3359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport java.util.HashMap;
35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport java.util.Locale;
36e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawaimport java.util.List;
37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/**
393feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * The default Software Keyboard class for Japanese IME.
40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
413feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD.  All Rights Reserved.
42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */
43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic class DefaultSoftKeyboardJAJP extends DefaultSoftKeyboard {
44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Enable English word prediction on half-width alphabet mode */
45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final boolean USE_ENGLISH_PREDICT = true;
46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Key code for switching to full-width HIRAGANA mode */
48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int KEYCODE_SWITCH_FULL_HIRAGANA = -301;
49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Key code for switching to full-width KATAKANA mode */
51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int KEYCODE_SWITCH_FULL_KATAKANA = -302;
52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Key code for switching to full-width alphabet mode */
54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int KEYCODE_SWITCH_FULL_ALPHABET = -303;
55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Key code for switching to full-width number mode */
57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int KEYCODE_SWITCH_FULL_NUMBER = -304;
58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Key code for switching to half-width KATAKANA mode */
60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int KEYCODE_SWITCH_HALF_KATAKANA = -306;
61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Key code for switching to half-width alphabet mode */
63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int KEYCODE_SWITCH_HALF_ALPHABET = -307;
64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Key code for switching to half-width number mode */
66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int KEYCODE_SWITCH_HALF_NUMBER = -308;
67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Key code for case toggle key */
69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int KEYCODE_SELECT_CASE = -309;
70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Key code for EISU-KANA conversion */
72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int KEYCODE_EISU_KANA = -305;
73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Key code for NOP (no-operation) */
75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int KEYCODE_NOP = -310;
76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Input mode toggle cycle table */
79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int[] JP_MODE_CYCLE_TABLE = {
80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        KEYMODE_JA_FULL_HIRAGANA, KEYMODE_JA_HALF_ALPHABET, KEYMODE_JA_HALF_NUMBER
81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    };
82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
837b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** Definition for {@code mInputType} (toggle) */
847b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    private static final int INPUT_TYPE_TOGGLE = 1;
85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
867b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** Definition for {@code mInputType} (commit instantly) */
87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int INPUT_TYPE_INSTANT = 2;
88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
89e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /** Max key number of the 12 key keyboard (depends on the definition of keyboards) */
90e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    private static final int KEY_NUMBER_12KEY = 20;
91e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Toggle cycle table for full-width HIRAGANA */
93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final String[][] JP_FULL_HIRAGANA_CYCLE_TABLE = {
94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u3042", "\u3044", "\u3046", "\u3048", "\u304a", "\u3041", "\u3043", "\u3045", "\u3047", "\u3049"},
95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u304b", "\u304d", "\u304f", "\u3051", "\u3053"},
96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u3055", "\u3057", "\u3059", "\u305b", "\u305d"},
97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u305f", "\u3061", "\u3064", "\u3066", "\u3068", "\u3063"},
98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u306a", "\u306b", "\u306c", "\u306d", "\u306e"},
99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u306f", "\u3072", "\u3075", "\u3078", "\u307b"},
100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u307e", "\u307f", "\u3080", "\u3081", "\u3082"},
101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u3084", "\u3086", "\u3088", "\u3083", "\u3085", "\u3087"},
102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u3089", "\u308a", "\u308b", "\u308c", "\u308d"},
103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u308f", "\u3092", "\u3093", "\u308e", "\u30fc"},
104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u3001", "\u3002", "\uff1f", "\uff01", "\u30fb", "\u3000"},
105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    };
106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Replace table for full-width HIRAGANA */
1087b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    private static final HashMap<String, String> JP_FULL_HIRAGANA_REPLACE_TABLE = new HashMap<String, String>() {{
109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u3042", "\u3041"); put("\u3044", "\u3043"); put("\u3046", "\u3045"); put("\u3048", "\u3047"); put("\u304a", "\u3049");
110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u3041", "\u3042"); put("\u3043", "\u3044"); put("\u3045", "\u30f4"); put("\u3047", "\u3048"); put("\u3049", "\u304a");
111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u304b", "\u304c"); put("\u304d", "\u304e"); put("\u304f", "\u3050"); put("\u3051", "\u3052"); put("\u3053", "\u3054");
112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u304c", "\u304b"); put("\u304e", "\u304d"); put("\u3050", "\u304f"); put("\u3052", "\u3051"); put("\u3054", "\u3053");
113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u3055", "\u3056"); put("\u3057", "\u3058"); put("\u3059", "\u305a"); put("\u305b", "\u305c"); put("\u305d", "\u305e");
114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u3056", "\u3055"); put("\u3058", "\u3057"); put("\u305a", "\u3059"); put("\u305c", "\u305b"); put("\u305e", "\u305d");
115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u305f", "\u3060"); put("\u3061", "\u3062"); put("\u3064", "\u3063"); put("\u3066", "\u3067"); put("\u3068", "\u3069");
116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u3060", "\u305f"); put("\u3062", "\u3061"); put("\u3063", "\u3065"); put("\u3067", "\u3066"); put("\u3069", "\u3068");
117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u3065", "\u3064"); put("\u30f4", "\u3046");
118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u306f", "\u3070"); put("\u3072", "\u3073"); put("\u3075", "\u3076"); put("\u3078", "\u3079"); put("\u307b", "\u307c");
119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u3070", "\u3071"); put("\u3073", "\u3074"); put("\u3076", "\u3077"); put("\u3079", "\u307a"); put("\u307c", "\u307d");
120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u3071", "\u306f"); put("\u3074", "\u3072"); put("\u3077", "\u3075"); put("\u307a", "\u3078"); put("\u307d", "\u307b");
121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u3084", "\u3083"); put("\u3086", "\u3085"); put("\u3088", "\u3087");
122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u3083", "\u3084"); put("\u3085", "\u3086"); put("\u3087", "\u3088");
123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u308f", "\u308e");
124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u308e", "\u308f");
125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u309b", "\u309c");
126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project          put("\u309c", "\u309b");
127053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }};
128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Toggle cycle table for full-width KATAKANA */
130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final String[][] JP_FULL_KATAKANA_CYCLE_TABLE = {
131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u30a2", "\u30a4", "\u30a6", "\u30a8", "\u30aa", "\u30a1", "\u30a3",
132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         "\u30a5", "\u30a7", "\u30a9"},
133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u30ab", "\u30ad", "\u30af", "\u30b1", "\u30b3"},
134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u30b5", "\u30b7", "\u30b9", "\u30bb", "\u30bd"},
135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u30bf", "\u30c1", "\u30c4", "\u30c6", "\u30c8", "\u30c3"},
136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u30ca", "\u30cb", "\u30cc", "\u30cd", "\u30ce"},
137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u30cf", "\u30d2", "\u30d5", "\u30d8", "\u30db"},
138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u30de", "\u30df", "\u30e0", "\u30e1", "\u30e2"},
139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u30e4", "\u30e6", "\u30e8", "\u30e3", "\u30e5", "\u30e7"},
140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u30e9", "\u30ea", "\u30eb", "\u30ec", "\u30ed"},
141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u30ef", "\u30f2", "\u30f3", "\u30ee", "\u30fc"},
142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\u3001", "\u3002", "\uff1f", "\uff01", "\u30fb", "\u3000"}
143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    };
144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Replace table for full-width KATAKANA */
1467b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    private static final HashMap<String,String> JP_FULL_KATAKANA_REPLACE_TABLE = new HashMap<String,String>() {{
147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30a2", "\u30a1"); put("\u30a4", "\u30a3"); put("\u30a6", "\u30a5"); put("\u30a8", "\u30a7"); put("\u30aa", "\u30a9");
148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30a1", "\u30a2"); put("\u30a3", "\u30a4"); put("\u30a5", "\u30f4"); put("\u30a7", "\u30a8"); put("\u30a9", "\u30aa");
149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30ab", "\u30ac"); put("\u30ad", "\u30ae"); put("\u30af", "\u30b0"); put("\u30b1", "\u30b2"); put("\u30b3", "\u30b4");
150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30ac", "\u30ab"); put("\u30ae", "\u30ad"); put("\u30b0", "\u30af"); put("\u30b2", "\u30b1"); put("\u30b4", "\u30b3");
151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30b5", "\u30b6"); put("\u30b7", "\u30b8"); put("\u30b9", "\u30ba"); put("\u30bb", "\u30bc"); put("\u30bd", "\u30be");
152053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30b6", "\u30b5"); put("\u30b8", "\u30b7"); put("\u30ba", "\u30b9"); put("\u30bc", "\u30bb"); put("\u30be", "\u30bd");
153053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30bf", "\u30c0"); put("\u30c1", "\u30c2"); put("\u30c4", "\u30c3"); put("\u30c6", "\u30c7"); put("\u30c8", "\u30c9");
154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30c0", "\u30bf"); put("\u30c2", "\u30c1"); put("\u30c3", "\u30c5"); put("\u30c7", "\u30c6"); put("\u30c9", "\u30c8");
155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30c5", "\u30c4"); put("\u30f4", "\u30a6");
156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30cf", "\u30d0"); put("\u30d2", "\u30d3"); put("\u30d5", "\u30d6"); put("\u30d8", "\u30d9"); put("\u30db", "\u30dc");
157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30d0", "\u30d1"); put("\u30d3", "\u30d4"); put("\u30d6", "\u30d7"); put("\u30d9", "\u30da"); put("\u30dc", "\u30dd");
158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30d1", "\u30cf"); put("\u30d4", "\u30d2"); put("\u30d7", "\u30d5"); put("\u30da", "\u30d8"); put("\u30dd", "\u30db");
159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30e4", "\u30e3"); put("\u30e6", "\u30e5"); put("\u30e8", "\u30e7");
160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30e3", "\u30e4"); put("\u30e5", "\u30e6"); put("\u30e7", "\u30e8");
161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30ef", "\u30ee");
162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\u30ee", "\u30ef");
163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }};
164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Toggle cycle table for half-width KATAKANA */
166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final String[][] JP_HALF_KATAKANA_CYCLE_TABLE = {
167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff71", "\uff72", "\uff73", "\uff74", "\uff75", "\uff67", "\uff68", "\uff69", "\uff6a", "\uff6b"},
168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff76", "\uff77", "\uff78", "\uff79", "\uff7a"},
169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff7b", "\uff7c", "\uff7d", "\uff7e", "\uff7f"},
170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff80", "\uff81", "\uff82", "\uff83", "\uff84", "\uff6f"},
171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff85", "\uff86", "\uff87", "\uff88", "\uff89"},
172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff8a", "\uff8b", "\uff8c", "\uff8d", "\uff8e"},
173053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff8f", "\uff90", "\uff91", "\uff92", "\uff93"},
174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff94", "\uff95", "\uff96", "\uff6c", "\uff6d", "\uff6e"},
175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff97", "\uff98", "\uff99", "\uff9a", "\uff9b"},
176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff9c", "\uff66", "\uff9d", "\uff70"},
177053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff64", "\uff61", "?", "!", "\uff65", " "},
178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    };
179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Replace table for half-width KATAKANA */
1817b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    private static final HashMap<String,String> JP_HALF_KATAKANA_REPLACE_TABLE = new HashMap<String,String>() {{
182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff71", "\uff67");  put("\uff72", "\uff68");  put("\uff73", "\uff69");  put("\uff74", "\uff6a");  put("\uff75", "\uff6b");
183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff67", "\uff71");  put("\uff68", "\uff72");  put("\uff69", "\uff73\uff9e");  put("\uff6a", "\uff74");  put("\uff6b", "\uff75");
184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff76", "\uff76\uff9e"); put("\uff77", "\uff77\uff9e"); put("\uff78", "\uff78\uff9e"); put("\uff79", "\uff79\uff9e"); put("\uff7a", "\uff7a\uff9e");
185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff76\uff9e", "\uff76"); put("\uff77\uff9e", "\uff77"); put("\uff78\uff9e", "\uff78"); put("\uff79\uff9e", "\uff79"); put("\uff7a\uff9e", "\uff7a");
186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff7b", "\uff7b\uff9e"); put("\uff7c", "\uff7c\uff9e"); put("\uff7d", "\uff7d\uff9e"); put("\uff7e", "\uff7e\uff9e"); put("\uff7f", "\uff7f\uff9e");
187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff7b\uff9e", "\uff7b"); put("\uff7c\uff9e", "\uff7c"); put("\uff7d\uff9e", "\uff7d"); put("\uff7e\uff9e", "\uff7e"); put("\uff7f\uff9e", "\uff7f");
188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff80", "\uff80\uff9e"); put("\uff81", "\uff81\uff9e"); put("\uff82", "\uff6f");  put("\uff83", "\uff83\uff9e"); put("\uff84", "\uff84\uff9e");
189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff80\uff9e", "\uff80"); put("\uff81\uff9e", "\uff81"); put("\uff6f", "\uff82\uff9e"); put("\uff83\uff9e", "\uff83"); put("\uff84\uff9e", "\uff84");
190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff82\uff9e", "\uff82");
191053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff8a", "\uff8a\uff9e"); put("\uff8b", "\uff8b\uff9e"); put("\uff8c", "\uff8c\uff9e"); put("\uff8d", "\uff8d\uff9e"); put("\uff8e", "\uff8e\uff9e");
192053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        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");
193053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff8a\uff9f", "\uff8a"); put("\uff8b\uff9f", "\uff8b"); put("\uff8c\uff9f", "\uff8c"); put("\uff8d\uff9f", "\uff8d"); put("\uff8e\uff9f", "\uff8e");
194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff94", "\uff6c");  put("\uff95", "\uff6d");  put("\uff96", "\uff6e");
195053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff6c", "\uff94");  put("\uff6d", "\uff95");  put("\uff6e", "\uff96");
196053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff9c", "\uff9c"); put("\uff73\uff9e", "\uff73");
197053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }};
198053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
199053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Toggle cycle table for full-width alphabet */
200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final String[][] JP_FULL_ALPHABET_CYCLE_TABLE = {
201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff0e", "\uff20", "\uff0d", "\uff3f", "\uff0f", "\uff1a", "\uff5e", "\uff11"},
202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff41", "\uff42", "\uff43", "\uff21", "\uff22", "\uff23", "\uff12"},
203053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff44", "\uff45", "\uff46", "\uff24", "\uff25", "\uff26", "\uff13"},
204053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff47", "\uff48", "\uff49", "\uff27", "\uff28", "\uff29", "\uff14"},
205053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff4a", "\uff4b", "\uff4c", "\uff2a", "\uff2b", "\uff2c", "\uff15"},
206053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff4d", "\uff4e", "\uff4f", "\uff2d", "\uff2e", "\uff2f", "\uff16"},
207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff50", "\uff51", "\uff52", "\uff53", "\uff30", "\uff31", "\uff32", "\uff33", "\uff17"},
208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff54", "\uff55", "\uff56", "\uff34", "\uff35", "\uff36", "\uff18"},
209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff57", "\uff58", "\uff59", "\uff5a", "\uff37", "\uff38", "\uff39", "\uff3a", "\uff19"},
2107b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        {"\uff0d", "\uff10"},
211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"\uff0c", "\uff0e", "\uff1f", "\uff01", "\u30fb", "\u3000"}
212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    };
213053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
214053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Replace table for full-width alphabet */
2157b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    private static final HashMap<String,String> JP_FULL_ALPHABET_REPLACE_TABLE = new HashMap<String,String>() {{
216053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff21", "\uff41"); put("\uff22", "\uff42"); put("\uff23", "\uff43"); put("\uff24", "\uff44"); put("\uff25", "\uff45");
217053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff41", "\uff21"); put("\uff42", "\uff22"); put("\uff43", "\uff23"); put("\uff44", "\uff24"); put("\uff45", "\uff25");
218053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff26", "\uff46"); put("\uff27", "\uff47"); put("\uff28", "\uff48"); put("\uff29", "\uff49"); put("\uff2a", "\uff4a");
219053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff46", "\uff26"); put("\uff47", "\uff27"); put("\uff48", "\uff28"); put("\uff49", "\uff29"); put("\uff4a", "\uff2a");
220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff2b", "\uff4b"); put("\uff2c", "\uff4c"); put("\uff2d", "\uff4d"); put("\uff2e", "\uff4e"); put("\uff2f", "\uff4f");
221053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff4b", "\uff2b"); put("\uff4c", "\uff2c"); put("\uff4d", "\uff2d"); put("\uff4e", "\uff2e"); put("\uff4f", "\uff2f");
222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff30", "\uff50"); put("\uff31", "\uff51"); put("\uff32", "\uff52"); put("\uff33", "\uff53"); put("\uff34", "\uff54");
223053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff50", "\uff30"); put("\uff51", "\uff31"); put("\uff52", "\uff32"); put("\uff53", "\uff33"); put("\uff54", "\uff34");
224053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff35", "\uff55"); put("\uff36", "\uff56"); put("\uff37", "\uff57"); put("\uff38", "\uff58"); put("\uff39", "\uff59");
225053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff55", "\uff35"); put("\uff56", "\uff36"); put("\uff57", "\uff37"); put("\uff58", "\uff38"); put("\uff59", "\uff39");
226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff3a", "\uff5a");
227053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("\uff5a", "\uff3a");
228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }};
229053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Toggle cycle table for half-width alphabet */
231053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final String[][] JP_HALF_ALPHABET_CYCLE_TABLE = {
232053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {".", "@", "-", "_", "/", ":", "~", "1"},
233053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"a", "b", "c", "A", "B", "C", "2"},
234053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"d", "e", "f", "D", "E", "F", "3"},
235053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"g", "h", "i", "G", "H", "I", "4"},
236053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"j", "k", "l", "J", "K", "L", "5"},
237053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"m", "n", "o", "M", "N", "O", "6"},
238053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"p", "q", "r", "s", "P", "Q", "R", "S", "7"},
239053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"t", "u", "v", "T", "U", "V", "8"},
240053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"w", "x", "y", "z", "W", "X", "Y", "Z", "9"},
241053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {"-", "0"},
242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        {",", ".", "?", "!", ";", " "}
243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    };
244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Replace table for half-width alphabet */
2467b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    private static final HashMap<String,String> JP_HALF_ALPHABET_REPLACE_TABLE = new HashMap<String,String>() {{
247053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("A", "a"); put("B", "b"); put("C", "c"); put("D", "d"); put("E", "e");
248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("a", "A"); put("b", "B"); put("c", "C"); put("d", "D"); put("e", "E");
249053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("F", "f"); put("G", "g"); put("H", "h"); put("I", "i"); put("J", "j");
250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("f", "F"); put("g", "G"); put("h", "H"); put("i", "I"); put("j", "J");
251053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("K", "k"); put("L", "l"); put("M", "m"); put("N", "n"); put("O", "o");
252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("k", "K"); put("l", "L"); put("m", "M"); put("n", "N"); put("o", "O");
253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("P", "p"); put("Q", "q"); put("R", "r"); put("S", "s"); put("T", "t");
254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("p", "P"); put("q", "Q"); put("r", "R"); put("s", "S"); put("t", "T");
255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("U", "u"); put("V", "v"); put("W", "w"); put("X", "x"); put("Y", "y");
256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("u", "U"); put("v", "V"); put("w", "W"); put("x", "X"); put("y", "Y");
257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("Z", "z");
258053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        put("z", "Z");
259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }};
260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
261053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Character table for full-width number */
262053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final char[] INSTANT_CHAR_CODE_FULL_NUMBER =
263053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        "\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19\uff10\uff03\uff0a".toCharArray();
264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
265053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Character table for half-width number */
266053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final char[] INSTANT_CHAR_CODE_HALF_NUMBER =
267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        "1234567890#*".toCharArray();
268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The constant for mFixedKeyMode. It means that input mode is not fixed. */
270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final int INVALID_KEYMODE = -1;
271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
272e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /** KeyIndex of "Moji" key on 12 keyboard (depends on the definition of keyboards) */
273e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    private static final int KEY_INDEX_CHANGE_MODE_12KEY = 15;
274e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
275e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /** KeyIndex of "Moji" key on QWERTY keyboard (depends on the definition of keyboards) */
276e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    private static final int KEY_INDEX_CHANGE_MODE_QWERTY = 29;
277e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
278053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Type of input mode */
2797b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    private int mInputType = INPUT_TYPE_TOGGLE;
280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
281053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Previous input character code */
282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private int mPrevInputKeyCode = 0;
283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Character table to input when mInputType becomes INPUT_TYPE_INSTANT.
286053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * (Either INSTANT_CHAR_CODE_FULL_NUMBER or INSTANT_CHAR_CODE_HALF_NUMBER)
287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
288053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private char[] mCurrentInstantTable = null;
289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
290053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Input mode that is not able to be changed. If ENABLE_CHANGE_KEYMODE is set, input mode can change. */
291e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    private int[] mLimitedKeyMode = null;
292053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
293053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Input mode that is given the first priority. If ENABLE_CHANGE_KEYMODE is set, input mode can change. */
294053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private int mPreferenceKeyMode = INVALID_KEYMODE;
295053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
296053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The last input type */
297053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private int mLastInputType = 0;
298053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
2997b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** Auto caps mode */
3007b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    private boolean mEnableAutoCaps = true;
301053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
302e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /** PopupResId of "Moji" key (this is used for canceling long-press) */
303e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    private int mPopupResId = 0;
304e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
305e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /** Whether the InputType is null */
306e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    private boolean mIsInputTypeNull = false;
307e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
308e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /** {@code SharedPreferences} for save the keyboard type */
309e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    private SharedPreferences.Editor mPrefEditor = null;
310e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
311e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /** "Moji" key (this is used for canceling long-press) */
312e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    private Keyboard.Key mChangeModeKey = null;
313e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
314053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
315053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Default constructor */
316053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public DefaultSoftKeyboardJAJP() {
317053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mCurrentLanguage     = LANG_JA;
31859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        if (OpenWnn.isXLarge()) {
31959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            mCurrentKeyboardType = KEYBOARD_QWERTY;
32059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        } else {
32159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            mCurrentKeyboardType = KEYBOARD_12KEY;
32259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
323053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mShiftOn             = KEYBOARD_SHIFT_OFF;
324053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mCurrentKeyMode      = KEYMODE_JA_FULL_HIRAGANA;
325053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
326053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
327053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#createKeyboards */
328053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override protected void createKeyboards(OpenWnn parent) {
329053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
330053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* Keyboard[# of Languages][portrait/landscape][# of keyboard type][shift off/on][max # of key-modes][noinput/input] */
331053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mKeyboard = new Keyboard[3][2][4][2][8][2];
332053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
3337b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        if (mHardKeyboardHidden) {
334e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Create the suitable keyboard object */
3357b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            if (mDisplayMode == DefaultSoftKeyboard.PORTRAIT) {
3367b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                createKeyboardsPortrait(parent);
3377b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            } else {
3387b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                createKeyboardsLandscape(parent);
3397b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            }
3407b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
3417b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            if (mCurrentKeyboardType == KEYBOARD_12KEY) {
3427b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
3437b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                                              OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_12KEY));
3447b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            } else {
3457b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
3467b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                                              OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
3477b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            }
34859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        } else if (mEnableHardware12Keyboard) {
34959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
35059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                                          OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_12KEY));
351053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
3527b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
3537b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                                          OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
354053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
355053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
356053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
357053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
358e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     * Commit the pre-edit string for committing operation that is not explicit
359e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     * (ex. when a candidate is selected)
360053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
361053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private void commitText() {
362053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (!mNoInput) {
363053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.COMMIT_COMPOSING_TEXT));
364053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
365053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
366053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
367053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
368053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Change input mode
369053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
370053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param keyMode   The type of input mode
371053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
372053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void changeKeyMode(int keyMode) {
373e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        int targetMode = filterKeyMode(keyMode);
374e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        if (targetMode == INVALID_KEYMODE) {
375e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            return;
376e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        }
377e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
378053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        commitText();
379053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
380053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mCapsLock) {
381e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
382053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_UP,
383053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                                       KeyEvent.KEYCODE_SHIFT_LEFT)));
384053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCapsLock = false;
385053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
386053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mShiftOn = KEYBOARD_SHIFT_OFF;
387053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Keyboard kbd = getModeChangeKeyboard(targetMode);
388053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mCurrentKeyMode = targetMode;
389053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mPrevInputKeyCode = 0;
390053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
391053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int mode = OpenWnnEvent.Mode.DIRECT;
392053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
393053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (targetMode) {
394053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_HIRAGANA:
3957b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            mInputType = INPUT_TYPE_TOGGLE;
396053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mode = OpenWnnEvent.Mode.DEFAULT;
397053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
398053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
399053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_ALPHABET:
4007b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            if (USE_ENGLISH_PREDICT) {
4017b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                mInputType = INPUT_TYPE_TOGGLE;
402053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mode = OpenWnnEvent.Mode.NO_LV1_CONV;
403053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else {
4047b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                mInputType = INPUT_TYPE_TOGGLE;
405053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mode = OpenWnnEvent.Mode.DIRECT;
406053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
407053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
408053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
409053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_NUMBER:
410053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mInputType = INPUT_TYPE_INSTANT;
411053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mode = OpenWnnEvent.Mode.DIRECT;
412053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentInstantTable = INSTANT_CHAR_CODE_FULL_NUMBER;
413053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
414053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
415053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_NUMBER:
416053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mInputType = INPUT_TYPE_INSTANT;
417053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mode = OpenWnnEvent.Mode.DIRECT;
418053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentInstantTable = INSTANT_CHAR_CODE_HALF_NUMBER;
419053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
420053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
421053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_KATAKANA:
4227b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            mInputType = INPUT_TYPE_TOGGLE;
423053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mode = OpenWnnJAJP.ENGINE_MODE_FULL_KATAKANA;
424053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
425053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
426053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_ALPHABET:
4277b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            mInputType = INPUT_TYPE_TOGGLE;
428053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mode = OpenWnnEvent.Mode.DIRECT;
429053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
430053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
431053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_KATAKANA:
4327b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            mInputType = INPUT_TYPE_TOGGLE;
433053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mode = OpenWnnJAJP.ENGINE_MODE_HALF_KATAKANA;
434053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
435053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
436053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
437053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
438053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
439053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
440053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        setStatusIcon();
441053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        changeKeyboard(kbd);
442053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE, mode));
443053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
444053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
4457b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#initView */
4467b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     @Override public View initView(OpenWnn parent, int width, int height) {
447053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
4487b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        View view = super.initView(parent, width, height);
4497b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        changeKeyboard(mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0]);
450053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
451053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return view;
4527b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     }
453053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
454e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#changeKeyboard */
455e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    @Override protected boolean changeKeyboard(Keyboard keyboard) {
456e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        if (keyboard != null) {
4572d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa            if (mIsInputTypeNull && mChangeModeKey != null) {
458e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                mChangeModeKey.popupResId = mPopupResId;
459e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
460e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
461e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            List<Keyboard.Key> keys = keyboard.getKeys();
462e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            int keyIndex = (KEY_NUMBER_12KEY < keys.size())
463e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                ? KEY_INDEX_CHANGE_MODE_QWERTY : KEY_INDEX_CHANGE_MODE_12KEY;
464e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            mChangeModeKey = keys.get(keyIndex);
465e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
4662d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa            if (mIsInputTypeNull && mChangeModeKey != null) {
467e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                mPopupResId = mChangeModeKey.popupResId;
468e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                mChangeModeKey.popupResId = 0;
469e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
470e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        }
471e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
472e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        return super.changeKeyboard(keyboard);
473e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    }
474e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
475053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#changeKeyboardType */
476053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public void changeKeyboardType(int type) {
477053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        commitText();
478053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Keyboard kbd = getTypeChangeKeyboard(type);
479053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (kbd != null) {
480053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyboardType = type;
481e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            mPrefEditor.putBoolean("opt_enable_qwerty", type == KEYBOARD_QWERTY);
482e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            mPrefEditor.commit();
483053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(kbd);
484053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
485053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (type == KEYBOARD_12KEY) {
486053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE, OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_12KEY));
487053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
488053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE, OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
489053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
490053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
491053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
492053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#onKey */
493053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public void onKey(int primaryCode, int[] keyCodes) {
494053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
49577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa        if (mDisableKeyInput) {
49677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa            return;
49777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa        }
49877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
499053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (primaryCode) {
500053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_TOGGLE_MODE:
501053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_TOGGLE_MODE:
502e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            if (!mIsInputTypeNull) {
503e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                nextKeyMode();
504e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
505053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
506053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
507053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_QWERTY_BACKSPACE:
508053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_BACKSPACE:
509053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
510053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)));
511053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
512053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
513053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT:
514053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            toggleShiftLock();
515053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
516053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
517053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_QWERTY_ALT:
518053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            processAltKey();
519053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
520053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
521053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_ENTER:
522053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_ENTER:
523053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
524053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)));
525053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
526053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
527053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_REVERSE:
52859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            if (!mNoInput && !mEnableHardware12Keyboard) {
529053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.TOGGLE_REVERSE_CHAR, mCurrentCycleTable));
530053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
531053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
532053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
533053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_KBD:
534053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboardType(KEYBOARD_12KEY);
535053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
536053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
537053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_KBD:
538053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboardType(KEYBOARD_QWERTY);
539053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
540053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
541053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_EMOJI:
542053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_EMOJI:
543053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                commitText();
544053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE, OpenWnnJAJP.ENGINE_MODE_SYMBOL));
545053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
546053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
547053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_1:
548053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_2:
549053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_3:
550053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_4:
551053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_5:
552053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_6:
553053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_7:
554053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_8:
555053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_9:
556053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_0:
557053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_SHARP:
558e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Processing to input by ten key */
559e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            if (mInputType == INPUT_TYPE_INSTANT) {
560e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                /* Send a input character directly if instant input type is selected */
561053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                commitText();
562053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_CHAR,
563053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                              mCurrentInstantTable[getTableIndex(primaryCode)]));
564053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else {
565053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if ((mPrevInputKeyCode != primaryCode)) {
566e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.TOUCH_OTHER_KEY));
567053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    if ((mCurrentKeyMode == KEYMODE_JA_HALF_ALPHABET)
568053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                            && (primaryCode == KEYCODE_JP12_SHARP)) {
569e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                        /* Commit text by symbol character (',' '.') when alphabet input mode is selected */
570e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                        commitText();
571053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    }
572053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
573053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
5743feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                /* Convert the key code to the table index and send the toggle event with the table index */
575053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                String[][] cycleTable = getCycleTable();
576053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (cycleTable == null) {
577053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    Log.e("OpenWnn", "not founds cycle table");
578053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else {
579053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    int index = getTableIndex(primaryCode);
580053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.TOGGLE_CHAR, cycleTable[index]));
581053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentCycleTable = cycleTable[index];
582053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
583053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mPrevInputKeyCode = primaryCode;
584053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
585053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
586053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
587053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_ASTER:
588053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (mInputType == INPUT_TYPE_INSTANT) {
589053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                commitText();
590053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_CHAR,
591053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                              mCurrentInstantTable[getTableIndex(primaryCode)]));
592053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else {
593e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                if (!mNoInput) {
594e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    /* Processing to toggle Dakuten, Handakuten, and capital */
595e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    HashMap replaceTable = getReplaceTable();
5967b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                    if (replaceTable == null) {
5977b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                        Log.e("OpenWnn", "not founds replace table");
5987b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                    } else {
5997b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                        mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.REPLACE_CHAR, replaceTable));
6007b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                        mPrevInputKeyCode = primaryCode;
6017b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                    }
602053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
603053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
604053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
605053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
606053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_SWITCH_FULL_HIRAGANA:
607e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Change mode to Full width hiragana */
608e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            changeKeyMode(KEYMODE_JA_FULL_HIRAGANA);
609053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
610053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
611053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_SWITCH_FULL_KATAKANA:
612e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Change mode to Full width katakana */
613e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            changeKeyMode(KEYMODE_JA_FULL_KATAKANA);
614053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
615053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
616053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_SWITCH_FULL_ALPHABET:
617e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Change mode to Full width alphabet */
618e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            changeKeyMode(KEYMODE_JA_FULL_ALPHABET);
619053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
620053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
621053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_SWITCH_FULL_NUMBER:
622e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Change mode to Full width numeric */
623e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            changeKeyMode(KEYMODE_JA_FULL_NUMBER);
624053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
625053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
626053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_SWITCH_HALF_KATAKANA:
627e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Change mode to Half width katakana */
628e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            changeKeyMode(KEYMODE_JA_HALF_KATAKANA);
629053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
630053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
6313feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa        case KEYCODE_SWITCH_HALF_ALPHABET:
632e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Change mode to Half width alphabet */
633e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            changeKeyMode(KEYMODE_JA_HALF_ALPHABET);
634053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
635053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
636053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_SWITCH_HALF_NUMBER:
637e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Change mode to Half width numeric */
638e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            changeKeyMode(KEYMODE_JA_HALF_NUMBER);
639053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
640053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
641053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
642053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_SELECT_CASE:
643053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            int shifted = (mShiftOn == 0) ? 1 : 0;
644053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard newKeyboard = getShiftChangeKeyboard(shifted);
645053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (newKeyboard != null) {
646053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mShiftOn = shifted;
647053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                changeKeyboard(newKeyboard);
648053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
649053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
650053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
651053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_SPACE:
652053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if ((mCurrentKeyMode == KEYMODE_JA_FULL_HIRAGANA) && !mNoInput) {
653053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CONVERT));
654053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else {
655053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_CHAR, ' '));
656053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
657053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
658053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
659053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_EISU_KANA:
660053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE, OpenWnnJAJP.ENGINE_MODE_EISU_KANA));
661053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
662053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
663053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_CLOSE:
664053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_KEY,
665053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)));
666053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
667053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
668053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_LEFT:
669053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
670053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN,
671053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                                       KeyEvent.KEYCODE_DPAD_LEFT)));
672053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
673053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
674053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_RIGHT:
675053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
676053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN,
677053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                                       KeyEvent.KEYCODE_DPAD_RIGHT)));
678053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
679053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_NOP:
680053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
681053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
682053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
683053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (primaryCode >= 0) {
684053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (mKeyboardView.isShifted()) {
685053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    primaryCode = Character.toUpperCase(primaryCode);
686053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
687053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_CHAR, (char)primaryCode));
688053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
689053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
690053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
6917b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
692053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* update shift key's state */
6937b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        if (!mCapsLock && (primaryCode != DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT)) {
694053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            setShiftByEditorInfo();
695053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
696053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
697053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
698053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#setPreferences */
699053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public void setPreferences(SharedPreferences pref, EditorInfo editor) {
700e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        mPrefEditor = pref.edit();
70159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        boolean isQwerty;
70259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        if (OpenWnn.isXLarge()) {
70359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            isQwerty = pref.getBoolean("opt_enable_qwerty", true);
70459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        } else {
70559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            isQwerty = pref.getBoolean("opt_enable_qwerty", false);
70659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
70759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
708e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        if (isQwerty && (mCurrentKeyboardType == KEYBOARD_12KEY)) {
709e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            changeKeyboardType(KEYBOARD_QWERTY);
710e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        }
711e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
712053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        super.setPreferences(pref, editor);
713053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
714053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int inputType = editor.inputType;
715e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        if (mHardKeyboardHidden) {
716e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            if (inputType == EditorInfo.TYPE_NULL) {
717e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                if (!mIsInputTypeNull) {
718e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    mIsInputTypeNull = true;
7192d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa                    if (mChangeModeKey != null) {
7202d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa                        mPopupResId = mChangeModeKey.popupResId;
7212d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa                        mChangeModeKey.popupResId = 0;
7222d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa                    }
723e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                }
724e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                return;
725e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
726e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
727e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            if (mIsInputTypeNull) {
728e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                mIsInputTypeNull = false;
7292d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa                if (mChangeModeKey != null) {
7302d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa                    mChangeModeKey.popupResId = mPopupResId;
7312d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa                }
732e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
733053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
734053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
7357b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        mEnableAutoCaps = pref.getBoolean("auto_caps", true);
736e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        mLimitedKeyMode = null;
737053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mPreferenceKeyMode = INVALID_KEYMODE;
73877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa        mNoInput = true;
73977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa        mDisableKeyInput = false;
740e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        mCapsLock = false;
741053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
742053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (inputType & EditorInfo.TYPE_MASK_CLASS) {
743053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
744053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case EditorInfo.TYPE_CLASS_NUMBER:
745053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case EditorInfo.TYPE_CLASS_DATETIME:
746053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mPreferenceKeyMode = KEYMODE_JA_HALF_NUMBER;
747053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
748053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
749053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case EditorInfo.TYPE_CLASS_PHONE:
750e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            if (mHardKeyboardHidden) {
751e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_PHONE};
75259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            } else if (mEnableHardware12Keyboard) {
75359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_NUMBER};
754e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            } else {
755e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_ALPHABET};
756e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
757053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
758053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
759053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case EditorInfo.TYPE_CLASS_TEXT:
760053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            switch (inputType & EditorInfo.TYPE_MASK_VARIATION) {
761053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
762053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            case EditorInfo.TYPE_TEXT_VARIATION_PASSWORD:
7630470b8581ba08779a7cc223c050e7b3556891f45Daisuke Miyakawa            case EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD:
764e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_ALPHABET, KEYMODE_JA_HALF_NUMBER};
765053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
766053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
767053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            case EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS:
768053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            case EditorInfo.TYPE_TEXT_VARIATION_URI:
769053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mPreferenceKeyMode = KEYMODE_JA_HALF_ALPHABET;
770053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
771053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
772053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            default:
773053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
774053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
775053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
776053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
777053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
778053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
779053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
780053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
781053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (inputType != mLastInputType) {
782053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            setDefaultKeyboard();
783053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mLastInputType = inputType;
784053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
785053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
786e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        setStatusIcon();
787053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        setShiftByEditorInfo();
788053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
789053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
7907b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#onUpdateState */
7917b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    @Override public void onUpdateState(OpenWnn parent) {
7927b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        super.onUpdateState(parent);
79377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa        if (!mCapsLock) {
79477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa            setShiftByEditorInfo();
79577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa        }
7967b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    }
7977b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
798053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
799053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Change the keyboard to default
800053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
801053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void setDefaultKeyboard() {
802053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Locale locale = Locale.getDefault();
803053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int keymode = KEYMODE_JA_FULL_HIRAGANA;
804053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
805053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mPreferenceKeyMode != INVALID_KEYMODE) {
806053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            keymode = mPreferenceKeyMode;
807e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        } else if (mLimitedKeyMode != null) {
808e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            keymode = mLimitedKeyMode[0];
809053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
810053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (!locale.getLanguage().equals(Locale.JAPANESE.getLanguage())) {
811053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                keymode = KEYMODE_JA_HALF_ALPHABET;
812053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
813053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
814053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        changeKeyMode(keymode);
815053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
816053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
817053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
818053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
819053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Change to the next input mode
820053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
821e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    public void nextKeyMode() {
822e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        /* Search the current mode in the toggle table */
823e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        boolean found = false;
824053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int index;
825053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        for (index = 0; index < JP_MODE_CYCLE_TABLE.length; index++) {
826053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (JP_MODE_CYCLE_TABLE[index] == mCurrentKeyMode) {
827053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                found = true;
828053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
829053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
830053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
831053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
832053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (!found) {
833e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* If the current mode not exists, set the default mode */
834e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            setDefaultKeyboard();
835053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
836e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* If the current mode exists, set the next input mode */
837e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            int size = JP_MODE_CYCLE_TABLE.length;
838e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            int keyMode = INVALID_KEYMODE;
839e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            for (int i = 0; i < size; i++) {
840e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                index = (++index) % size;
841e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
842e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                keyMode = filterKeyMode(JP_MODE_CYCLE_TABLE[index]);
843e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                if (keyMode != INVALID_KEYMODE) {
844e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    break;
845e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                }
846e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
847e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
848e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            if (keyMode != INVALID_KEYMODE) {
849e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                changeKeyMode(keyMode);
850053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
851053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
852053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
853053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
854053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
855053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Create the keyboard for portrait mode
856053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
857053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param parent  The context
858053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
859053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private void createKeyboardsPortrait(OpenWnn parent) {
860053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Keyboard[][] keyList;
86159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        if (OpenWnn.isXLarge()) {
86259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* qwerty shift_off (portrait) */
86359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
86459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
86559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
86659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
86759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
86859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
86959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
87059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* qwerty shift_on (portrait) */
87159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
87259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
87359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
87459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
87559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
87659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE][0] =
87759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
87859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        } else {
87959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* qwerty shift_off (portrait) */
88059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
88159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
88259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet);
88359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
88459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana);
88559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
88659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
88759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana);
88859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
88959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
89059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* qwerty shift_on (portrait) */
89159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
89259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
89359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_shift);
89459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
89559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_shift);
89659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
89759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
89859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_shift);
89959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE][0] =
90059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
90159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
90259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
90359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* 12-keys shift_off (portrait) */
90459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
90559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_12keyjp);
90659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][1] = new Keyboard(parent, R.xml.keyboard_12keyjp_input);
90759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet);
90859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_input);
90959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_full_num);
91059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana);
91159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_input);
91259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet);
91359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_input);
91459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_half_num);
91559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana);
91659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_input);
91759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
91859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
91959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* 12-keys shift_on (portrait) */
92059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
92159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA]
92259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA];
92359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_ALPHABET]
92459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_ALPHABET];
92559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER]
92659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_NUMBER];
92759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_KATAKANA]
92859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_KATAKANA];
92959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET]
93059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_ALPHABET];;
93159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER]
93259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_NUMBER];
93359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_KATAKANA]
93459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA];
93559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE]
93659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE];
93759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
938053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
939053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
940053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
941053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Create the keyboard for landscape mode
942053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
943053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param parent  The context
944053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
945053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private void createKeyboardsLandscape(OpenWnn parent) {
946053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Keyboard[][] keyList;
94759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        if (OpenWnn.isXLarge()) {
94859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* qwerty shift_off (landscape) */
94959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
95059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
95159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
95259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
95359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
95459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
95559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
95659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* qwerty shift_on (landscape) */
95759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
95859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
95959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
96059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
96159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
96259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE][0] =
96359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
96459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        } else {
96559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* qwerty shift_off (landscape) */
96659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
96759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
96859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet);
96959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
97059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana);
97159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
97259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
97359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana);
97459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
97559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
97659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* qwerty shift_on (landscape) */
97759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
97859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
97959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_shift);
98059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
98159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_shift);
98259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
98359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
98459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_shift);
98559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE][0] =
98659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
98759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
98859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
98959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* 12-keys shift_off (landscape) */
99059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
99159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_12keyjp);
99259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA][1] = new Keyboard(parent, R.xml.keyboard_12keyjp_input);
99359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet);
99459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_input);
99559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_full_num);
99659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana);
99759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_input);
99859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet);
99959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_input);
100059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_half_num);
100159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana);
100259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_input);
100359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
100459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
100559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            /* 12-keys shift_on (landscape) */
100659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
100759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_HIRAGANA]
100859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA];
100959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_ALPHABET]
101059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_ALPHABET];
101159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_NUMBER]
101259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_NUMBER];
101359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_FULL_KATAKANA]
101459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_KATAKANA];
101559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_ALPHABET]
101659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_ALPHABET];;
101759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_NUMBER]
101859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_NUMBER];
101959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_KATAKANA]
102059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA];
102159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            keyList[KEYMODE_JA_HALF_PHONE]
102259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE];
102359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma         }
1024053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
1025053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1026053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
1027053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Convert the key code to the index of table
1028053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
1029053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param index     The key code
1030053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @return          The index of the toggle table for input
1031053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
1032053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private int getTableIndex(int keyCode) {
1033053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int index =
1034053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_1)     ?  0 :
1035053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_2)     ?  1 :
1036053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_3)     ?  2 :
1037053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_4)     ?  3 :
1038053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_5)     ?  4 :
1039053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_6)     ?  5 :
1040053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_7)     ?  6 :
1041053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_8)     ?  7 :
1042053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_9)     ?  8 :
1043053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_0)     ?  9 :
1044053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_SHARP) ? 10 :
1045053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            (keyCode == KEYCODE_JP12_ASTER) ? 11 :
1046053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            0;
1047053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1048053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return index;
1049053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
1050053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1051053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
10527b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * Get the toggle table for input that is appropriate in current mode.
10533feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     *
1054053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @return      The toggle table for input
1055053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
1056053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private String[][] getCycleTable() {
1057053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        String[][] cycleTable = null;
1058053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (mCurrentKeyMode) {
1059053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_HIRAGANA:
1060053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            cycleTable = JP_FULL_HIRAGANA_CYCLE_TABLE;
1061053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1062053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1063053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_KATAKANA:
1064053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            cycleTable = JP_FULL_KATAKANA_CYCLE_TABLE;
1065053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1066053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1067053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_ALPHABET:
1068053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            cycleTable = JP_FULL_ALPHABET_CYCLE_TABLE;
1069053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1070053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1071053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_NUMBER:
1072053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_NUMBER:
1073e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Because these modes belong to direct input group, No toggle table exists */
1074053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1075053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1076053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_ALPHABET:
1077053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            cycleTable = JP_HALF_ALPHABET_CYCLE_TABLE;
1078053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1079053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1080053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_KATAKANA:
1081053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            cycleTable = JP_HALF_KATAKANA_CYCLE_TABLE;
1082053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1083053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1084053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
1085053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1086053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
1087053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return cycleTable;
1088053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
1089053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1090053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
10917b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * Get the replace table that is appropriate in current mode.
10923feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     *
1093053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @return      The replace table
1094053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
1095053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private HashMap getReplaceTable() {
1096053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        HashMap hashTable = null;
1097053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (mCurrentKeyMode) {
1098053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_HIRAGANA:
1099053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            hashTable = JP_FULL_HIRAGANA_REPLACE_TABLE;
1100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_KATAKANA:
1102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            hashTable = JP_FULL_KATAKANA_REPLACE_TABLE;
1103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_ALPHABET:
1106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            hashTable = JP_FULL_ALPHABET_REPLACE_TABLE;
1107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_NUMBER:
1110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_NUMBER:
1111e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            /* Because these modes belong to direct input group, No replacing table exists */
1112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_ALPHABET:
1115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            hashTable = JP_HALF_ALPHABET_REPLACE_TABLE;
1116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_KATAKANA:
1119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            hashTable = JP_HALF_KATAKANA_REPLACE_TABLE;
1120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
1123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
1125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return hashTable;
1126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
1127053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
1129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Set the status icon that is appropriate in current mode
1130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
1131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private void setStatusIcon() {
1132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int icon = 0;
1133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (mCurrentKeyMode) {
1135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_HIRAGANA:
1136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            icon = R.drawable.immodeic_hiragana;
1137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_KATAKANA:
1139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            icon = R.drawable.immodeic_full_kana;
1140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_ALPHABET:
1142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            icon = R.drawable.immodeic_full_alphabet;
1143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_FULL_NUMBER:
1145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            icon = R.drawable.immodeic_full_number;
1146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_KATAKANA:
1148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            icon = R.drawable.immodeic_half_kana;
1149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_ALPHABET:
1151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            icon = R.drawable.immodeic_half_alphabet;
1152053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1153053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_NUMBER:
1154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYMODE_JA_HALF_PHONE:
1155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            icon = R.drawable.immodeic_half_number;
1156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
1158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
1159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
1160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mWnn.showStatusIcon(icon);
1162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
1163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
1165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Get the shift key state from the editor.
1166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
1167e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     * @param editor    The editor information
1168e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     * @return          The state id of the shift key (0:off, 1:on)
1169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
1170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected int getShiftKeyState(EditorInfo editor) {
1171e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        InputConnection connection = mWnn.getCurrentInputConnection();
1172e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        if (connection != null) {
1173e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            int caps = connection.getCursorCapsMode(editor.inputType);
1174e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            return (caps == 0) ? 0 : 1;
1175e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        } else {
1176e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            return 0;
1177e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        }
1178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
1179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
11817b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * Set the shift key state from {@link EditorInfo}.
1182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
1183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private void setShiftByEditorInfo() {
11847b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        if (mEnableAutoCaps && (mCurrentKeyMode == KEYMODE_JA_HALF_ALPHABET)) {
1185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            int shift = getShiftKeyState(mWnn.getCurrentInputEditorInfo());
1186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mShiftOn = shift;
1188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(getShiftChangeKeyboard(shift));
1189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
1190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
11917b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
11927b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#setHardKeyboardHidden */
11937b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    @Override public void setHardKeyboardHidden(boolean hidden) {
1194e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        if (mWnn != null) {
1195e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            if (!hidden) {
119659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                if (mEnableHardware12Keyboard) {
119759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
119859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                                                  OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_12KEY));
119959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                } else {
120059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
120159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                                                  OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
120259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                }
1203e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
1204e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
1205e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            if (mHardKeyboardHidden != hidden) {
1206e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                if ((mLimitedKeyMode != null)
120759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    || (!mEnableHardware12Keyboard
120859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        && (mCurrentKeyMode != KEYMODE_JA_FULL_HIRAGANA)
1209e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                        && (mCurrentKeyMode != KEYMODE_JA_HALF_ALPHABET))) {
1210e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
1211e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    mLastInputType = EditorInfo.TYPE_NULL;
1212e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    if (mWnn.isInputViewShown()) {
1213e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                        setDefaultKeyboard();
1214e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    }
1215e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                }
1216e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
12177b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        }
12183feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa        super.setHardKeyboardHidden(hidden);
12197b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    }
1220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
122159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#setHardware12Keyboard */
122259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    @Override public void setHardware12Keyboard(boolean type12Key) {
122359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        if (mWnn != null) {
122459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            if (mEnableHardware12Keyboard != type12Key) {
122559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                if (type12Key) {
122659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
122759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                                                  OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_12KEY));
122859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                } else {
122959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
123059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                                                  OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
123159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                }
123259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            }
123359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
123459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        super.setHardware12Keyboard(type12Key);
123559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    }
123659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
1237e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /**
1238e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     * Change the key-mode to the allowed one which is restricted
1239e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     *  by the text input field or the type of the keyboard.
1240e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     * @param keyMode The key-mode
1241e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     * @return the key-mode allowed
1242e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     */
1243e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    private int filterKeyMode(int keyMode) {
1244e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        int targetMode = keyMode;
1245e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        int[] limits = mLimitedKeyMode;
1246e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
1247e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        if (!mHardKeyboardHidden) { /* for hardware keyboard */
124859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            if (!mEnableHardware12Keyboard && (targetMode != KEYMODE_JA_FULL_HIRAGANA)
1249e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                && (targetMode != KEYMODE_JA_HALF_ALPHABET)) {
1250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1251e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                Locale locale = Locale.getDefault();
1252e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                int keymode = KEYMODE_JA_HALF_ALPHABET;
1253e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                if (locale.getLanguage().equals(Locale.JAPANESE.getLanguage())) {
1254e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    switch (targetMode) {
1255e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    case KEYMODE_JA_FULL_HIRAGANA:
1256e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    case KEYMODE_JA_FULL_KATAKANA:
1257e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    case KEYMODE_JA_HALF_KATAKANA:
1258e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                        keymode = KEYMODE_JA_FULL_HIRAGANA;
1259e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                        break;
1260e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    default:
1261e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                        /* half-alphabet */
1262e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                        break;
1263e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    }
1264e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                }
1265e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                targetMode = keymode;
1266e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
1267e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        }
1268e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
1269e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        /* restrict by the type of the text field */
1270e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        if (limits != null) {
1271e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            boolean hasAccepted = false;
1272e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            boolean hasRequiredChange = true;
1273e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            int size = limits.length;
1274e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            int nowMode = mCurrentKeyMode;
1275e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
1276e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            for (int i = 0; i < size; i++) {
1277e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                if (targetMode == limits[i]) {
1278e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    hasAccepted = true;
1279e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    break;
1280e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                }
1281e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                if (nowMode == limits[i]) {
1282e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    hasRequiredChange = false;
1283e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                }
1284e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
12857b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
1286e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            if (!hasAccepted) {
1287e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                if (hasRequiredChange) {
1288e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    targetMode = mLimitedKeyMode[0];
1289e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                } else {
1290e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                    targetMode = INVALID_KEYMODE;
1291e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa                }
1292e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            }
1293e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        }
1294e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
1295e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        return targetMode;
1296e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    }
129759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
129859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /**
129959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * Shows input mode choosing dialog.
130059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     *
130159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * @return boolean
130259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     */
130359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public boolean showInputModeSwitchDialog() {
130459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        BaseInputView baseInputView = (BaseInputView)getCurrentView();
130559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        AlertDialog.Builder builder = new AlertDialog.Builder(baseInputView.getContext());
130659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        builder.setCancelable(true);
130759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        builder.setNegativeButton(R.string.dialog_button_cancel, null);
130859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
130959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        Resources r = baseInputView.getResources();
131059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        CharSequence itemFullHirakana = r.getString(R.string.ti_input_mode_full_hirakana_title_txt);
131159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        CharSequence itemFullKatakana = r.getString(R.string.ti_input_mode_full_katakana_title_txt);
131259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        CharSequence itemHalfKatakana = r.getString(R.string.ti_input_mode_half_katakana_title_txt);
131359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        CharSequence itemFullAlphabet = r.getString(R.string.ti_input_mode_full_alphabet_title_txt);
131459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        CharSequence itemHalfAlphabet = r.getString(R.string.ti_input_mode_half_alphabet_title_txt);
131559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        CharSequence itemFullNumber = r.getString(R.string.ti_input_mode_full_number_title_txt);
131659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        CharSequence itemHalfNumber = r.getString(R.string.ti_input_mode_half_number_title_txt);
131759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        final CharSequence[] itemTitles;
131859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        final int[] itemValues;
131959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        if (OpenWnn.isXLarge()) {
132059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            itemTitles = new CharSequence[] {itemFullHirakana, itemHalfAlphabet,
132159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                                                itemFullNumber, itemHalfNumber};
132259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            itemValues = new int[] {KEYMODE_JA_FULL_HIRAGANA, KEYMODE_JA_HALF_ALPHABET,
132359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                                        KEYMODE_JA_FULL_NUMBER, KEYMODE_JA_HALF_NUMBER};
132459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        } else {
132559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            itemTitles = new CharSequence[] {itemFullHirakana, itemFullKatakana, itemHalfKatakana,
132659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                                               itemFullAlphabet, itemHalfAlphabet, itemFullNumber,
132759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                                               itemHalfNumber};
132859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            itemValues = new int[] {KEYMODE_JA_FULL_HIRAGANA, KEYMODE_JA_FULL_KATAKANA, KEYMODE_JA_HALF_KATAKANA,
132959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    KEYMODE_JA_FULL_ALPHABET, KEYMODE_JA_HALF_ALPHABET, KEYMODE_JA_FULL_NUMBER, KEYMODE_JA_HALF_NUMBER};
133059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
133159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
133259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        builder.setSingleChoiceItems(itemTitles, findIndexOfValue(itemValues,
133359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mCurrentKeyMode), new DialogInterface.OnClickListener() {
133459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            public void onClick(DialogInterface inputModeSwitchDialog, int position) {
133559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                switch(position){
133659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    case 0:
133759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        changeKeyMode(itemValues[0]);
133859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        break;
133959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
134059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    case 1:
134159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        changeKeyMode(itemValues[1]);
134259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        break;
134359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
134459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    case 2:
134559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        changeKeyMode(itemValues[2]);
134659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        break;
134759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
134859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    case 3:
134959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        changeKeyMode(itemValues[3]);
135059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        break;
135159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
135259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    case 4:
135359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        changeKeyMode(itemValues[4]);
135459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        break;
135559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
135659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    case 5:
135759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        changeKeyMode(itemValues[5]);
135859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        break;
135959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
136059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    case 6:
136159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        changeKeyMode(itemValues[6]);
136259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        break;
136359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
136459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    default:
136559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                        break;
136659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                }
136759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                inputModeSwitchDialog.dismiss();
136859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            }
136959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        });
137059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
137159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        builder.setTitle(r.getString(R.string.ti_long_press_dialog_input_mode_txt));
137259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        baseInputView.showDialog(builder);
137359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        return true;
137459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    }
137559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
137659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /**
137759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * Finds the index of a value in a int[].
137859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     *
137959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * @param value   the int[] to search in,
138059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * @param mode    the value need to find index,
138159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * @return the index of the value.
138259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     */
138359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    private int findIndexOfValue(int[] value, int mode) {
138459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        for (int i = 0; i < value.length; i++) {
138559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            if (value[i] == mode) {
138659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                return i;
138759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            }
138859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
138959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        return -1;
139059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    }
1391e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa}
1392