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;
18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport android.view.KeyEvent;
20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View;
213feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawaimport android.view.ViewGroup;
22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.inputmethod.EditorInfo;
2359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport android.view.inputmethod.InputConnection;
247b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawaimport android.widget.TextView;
25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.SharedPreferences;
26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.preference.PreferenceManager;
277b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawaimport android.content.res.*;
28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.os.Vibrator;
29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.media.MediaPlayer;
30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.Context;
31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.util.Log;
33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
3459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport jp.co.omronsoft.openwnn.Keyboard;
3559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport jp.co.omronsoft.openwnn.KeyboardView;
3659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener;
3759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/**
393feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * The default software keyboard class.
40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
4159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @author Copyright (C) 2009-2011 OMRON SOFTWARE CO., LTD.  All Rights Reserved.
42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */
43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic class DefaultSoftKeyboard implements InputViewManager, KeyboardView.OnKeyboardActionListener {
4477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /*
4577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     *----------------------------------------------------------------------
4677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * key codes for a software keyboard
4777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     *----------------------------------------------------------------------
4877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     */
49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Change the keyboard language */
5077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_CHANGE_LANG = -500;
5177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
5277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /* for Japanese 12-key keyboard */
5377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [1] */
5477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_1 = -201;
5577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [2] */
5677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_2 = -202;
5777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [3] */
5877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_3 = -203;
5977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [4] */
6077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_4 = -204;
6177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [5] */
6277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_5 = -205;
6377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [6] */
6477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_6 = -206;
6577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [7] */
6677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_7 = -207;
6777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [8] */
6877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_8 = -208;
6977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [9] */
7077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_9 = -209;
7177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [0] */
7277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_0 = -210;
7377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [#] */
7477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_SHARP = -211;
7577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [*] */
7677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_ASTER = -213;
7777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [DEL] */
7877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_BACKSPACE = -214;
7977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [SPACE] */
8077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_SPACE = -215;
8177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [ENTER] */
8277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_ENTER = -216;
8377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [RIGHT ARROW] */
8477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_RIGHT = -217;
8577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [LEFT ARROW] */
8677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_LEFT = -218;
8777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [REVERSE TOGGLE] */
8877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_REVERSE = -219;
8977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [CLOSE] */
9077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_CLOSE   = -220;
9177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [KEYBOARD TYPE CHANGE] */
9277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_KBD   = -221;
9377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [EMOJI] */
9477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_EMOJI      = -222;
9577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [FULL-WIDTH HIRAGANA MODE] */
9677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_ZEN_HIRA   = -223;
9777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [FULL-WIDTH NUMBER MODE] */
9877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_ZEN_NUM    = -224;
9977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [FULL-WIDTH ALPHABET MODE] */
10077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_ZEN_ALPHA  = -225;
10177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [FULL-WIDTH KATAKANA MODE] */
10277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_ZEN_KATA   = -226;
10377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [HALF-WIDTH KATAKANA MODE] */
10477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_HAN_KATA   = -227;
10577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [HALF-WIDTH NUMBER MODE] */
10677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_HAN_NUM    = -228;
10777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [HALF-WIDTH ALPHABET MODE] */
10877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_HAN_ALPHA  = -229;
10977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese 12-key keyboard [MODE TOOGLE CHANGE] */
11077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_JP12_TOGGLE_MODE = -230;
11159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
11259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** Key code for symbol keyboard alt key */
11359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public static final int KEYCODE_4KEY_MODE        = -300;
11459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** Key code for symbol keyboard up key */
11559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public static final int KEYCODE_4KEY_UP          = -301;
11659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** Key code for symbol keyboard down key */
11759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public static final int KEYCODE_4KEY_DOWN        = -302;
11859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** Key code for symbol keyboard del key */
11959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public static final int KEYCODE_4KEY_CLEAR       = -303;
12059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
12177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /* for Qwerty keyboard */
12277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Qwerty keyboard [DEL] */
12377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_BACKSPACE = -100;
12477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Qwerty keyboard [ENTER] */
12577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_ENTER = -101;
12677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Qwerty keyboard [SHIFT] */
12777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_SHIFT = Keyboard.KEYCODE_SHIFT;
12877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Qwerty keyboard [ALT] */
12977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_ALT   = -103;
13077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Qwerty keyboard [KEYBOARD TYPE CHANGE] */
13177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_KBD   = -104;
13277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Qwerty keyboard [CLOSE] */
13377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_CLOSE = -105;
13477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese Qwerty keyboard [EMOJI] */
13577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_EMOJI = -106;
13677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese Qwerty keyboard [FULL-WIDTH HIRAGANA MODE] */
13777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_ZEN_HIRA   = -107;
13877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese Qwerty keyboard [FULL-WIDTH NUMBER MODE] */
13977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_ZEN_NUM    = -108;
14077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese Qwerty keyboard [FULL-WIDTH ALPHABET MODE] */
14177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_ZEN_ALPHA  = -109;
14277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese Qwerty keyboard [FULL-WIDTH KATAKANA MODE] */
14377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_ZEN_KATA   = -110;
14477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Japanese Qwerty keyboard [HALF-WIDTH KATAKANA MODE] */
14577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_HAN_KATA   = -111;
14677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Qwerty keyboard [NUMBER MODE] */
14777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_HAN_NUM    = -112;
14877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Qwerty keyboard [ALPHABET MODE] */
14977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_HAN_ALPHA  = -113;
15077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Qwerty keyboard [MODE TOOGLE CHANGE] */
15177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_TOGGLE_MODE = -114;
15277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Qwerty keyboard [PINYIN MODE] */
15377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYCODE_QWERTY_PINYIN  = -115;
15477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
15577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** OpenWnn instance which hold this software keyboard*/
15677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected OpenWnn      mWnn;
15777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
15877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Current keyboard view */
15977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected KeyboardView mKeyboardView;
16077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
16177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** View objects (main side) */
16259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    protected BaseInputView mMainView;
16377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** View objects (sub side) */
16477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected ViewGroup mSubView;
16577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
16677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Current keyboard definition */
16777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected Keyboard mCurrentKeyboard;
16877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Caps lock state */
17077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected boolean mCapsLock;
17177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
17277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Input restraint */
17377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected boolean mDisableKeyInput = true;
17477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /**
17577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * Keyboard surfaces
17677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * <br>
17777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * Keyboard[language][portrait/landscape][keyboard type][shift off/on][key-mode]
17877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     */
17977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected Keyboard[][][][][][] mKeyboard;
18077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
18177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /* languages */
18277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Current language */
18377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected int mCurrentLanguage;
18477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Language (English) */
18577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int LANG_EN  = 0;
18677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Language (Japanese) */
18777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int LANG_JA  = 1;
18877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Language (Chinese) */
18977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int LANG_CN  = 2;
19077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
19177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /* portrait/landscape */
19277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** State of the display */
19377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected int mDisplayMode = 0;
19477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Display mode (Portrait) */
19577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int PORTRAIT  = 0;
19677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Display mode (Landscape) */
19777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int LANDSCAPE = 1;
19877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
19977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /* keyboard type */
20077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Current keyboard type */
20177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected int mCurrentKeyboardType;
20277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Keyboard (QWERTY keyboard) */
20377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYBOARD_QWERTY  = 0;
20477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Keyboard (12-keys keyboard) */
20577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYBOARD_12KEY   = 1;
20677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** State of the shift key */
20777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected int mShiftOn = 0;
20877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Shift key off */
20977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYBOARD_SHIFT_OFF = 0;
21077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Shift key on */
21177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYBOARD_SHIFT_ON  = 1;
21277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
21377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /* key-modes */
21477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Current key-mode */
21577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected int mCurrentKeyMode;
21677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
21777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /* key-modes for English */
218053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** English key-mode (alphabet) */
21977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_EN_ALPHABET = 0;
220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** English key-mode (number) */
22177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_EN_NUMBER   = 1;
222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** English key-mode (phone number) */
22377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_EN_PHONE    = 2;
224053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
22577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /* key-modes for Japanese */
226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Japanese key-mode (Full-width Hiragana) */
22777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_JA_FULL_HIRAGANA = 0;
228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Japanese key-mode (Full-width alphabet) */
22977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_JA_FULL_ALPHABET = 1;
230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Japanese key-mode (Full-width number) */
23177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_JA_FULL_NUMBER   = 2;
232053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Japanese key-mode (Full-width Katakana) */
23377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_JA_FULL_KATAKANA = 3;
234053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Japanese key-mode (Half-width alphabet) */
23577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_JA_HALF_ALPHABET = 4;
236053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Japanese key-mode (Half-width number) */
23777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_JA_HALF_NUMBER   = 5;
238053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Japanese key-mode (Half-width Katakana) */
23977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_JA_HALF_KATAKANA = 6;
240053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Japanese key-mode (Half-width phone number) */
24177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_JA_HALF_PHONE    = 7;
242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
24377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /* key-modes for Chinese */
244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Chinese key-mode (pinyin) */
24577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_CN_PINYIN   = 0;
246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Chinese key-mode (Full-width number) */
24777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_CN_FULL_NUMBER   = 1;
248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Chinese key-mode (alphabet) */
24977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_CN_ALPHABET = 2;
250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Chinese key-mode (phone) */
25177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_CN_PHONE    = 3;
252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Chinese key-mode (Half-width number) */
25377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public static final int KEYMODE_CN_HALF_NUMBER   = 4;
25477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
25577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /* key-modes for HARD */
2567b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** HARD key-mode (SHIFT_OFF_ALT_OFF) */
2577b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public static final int HARD_KEYMODE_SHIFT_OFF_ALT_OFF     = 2;
2587b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** HARD key-mode (SHIFT_ON_ALT_OFF) */
2597b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public static final int HARD_KEYMODE_SHIFT_ON_ALT_OFF      = 3;
2607b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** HARD key-mode (SHIFT_OFF_ALT_ON) */
2617b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public static final int HARD_KEYMODE_SHIFT_OFF_ALT_ON      = 4;
2627b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** HARD key-mode (SHIFT_ON_ALT_ON) */
2637b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public static final int HARD_KEYMODE_SHIFT_ON_ALT_ON       = 5;
26477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** HARD key-mode (SHIFT_LOCK_ALT_OFF) */
2657b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public static final int HARD_KEYMODE_SHIFT_LOCK_ALT_OFF    = 6;
2667b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** HARD key-mode (SHIFT_LOCK_ALT_ON) */
2677b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public static final int HARD_KEYMODE_SHIFT_LOCK_ALT_ON     = 7;
2687b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** HARD key-mode (SHIFT_LOCK_ALT_LOCK) */
2697b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public static final int HARD_KEYMODE_SHIFT_LOCK_ALT_LOCK   = 8;
2707b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** HARD key-mode (SHIFT_OFF_ALT_LOCK) */
2717b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public static final int HARD_KEYMODE_SHIFT_OFF_ALT_LOCK    = 9;
2727b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** HARD key-mode (SHIFT_ON_ALT_LOCK) */
2737b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public static final int HARD_KEYMODE_SHIFT_ON_ALT_LOCK     = 10;
2747b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
2757b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** Whether the H/W keyboard is hidden. */
2767b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    protected boolean mHardKeyboardHidden = true;
2777b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
27859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** Whether the H/W 12key keyboard. */
27959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    protected boolean mEnableHardware12Keyboard = false;
28059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
28159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** Symbol keyboard */
28259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    protected Keyboard mSymbolKeyboard;
28359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
28459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** Symbol keyboard state */
28559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    protected boolean mIsSymbolKeyboard = false;
28659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
28777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /**
28877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * Status of the composing text
28977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * <br>
29077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * {@code true} if there is no composing text.
29177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     */
29277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected boolean mNoInput = true;
29377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
29477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Vibratior for key click vibration */
29577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected Vibrator mVibrator = null;
29677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
29777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** MediaPlayer for key click sound */
29877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected MediaPlayer mSound = null;
29977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
30077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /** Key toggle cycle table currently using */
30177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    protected String[] mCurrentCycleTable;
30277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa
30359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** Event listener for symbol keyboard */
30459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    private OnKeyboardActionListener mSymbolOnKeyboardAction = new OnKeyboardActionListener() {
30559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        public void onKey(int primaryCode, int[] keyCodes) {
30659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            switch (primaryCode) {
30759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            case KEYCODE_4KEY_MODE:
30859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_KEY,
30959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                                              new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)));
31059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                break;
31159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
31259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            case KEYCODE_4KEY_UP:
31359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_UP));
31459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                break;
31559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
31659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            case KEYCODE_4KEY_DOWN:
31759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_DOWN));
31859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                break;
31959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
32059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            case KEYCODE_4KEY_CLEAR:
32159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                InputConnection connection = mWnn.getCurrentInputConnection();
32259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                if (connection != null) {
32359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                    connection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
32459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                }
32559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                return;
32659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
32759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            default:
32859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                break;
32959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            }
33059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
33159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        public void onPress(int primaryCode) {
33259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            playSoundAndVibration();
33359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
33459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        public void onText(CharSequence text) { }
33559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        public void swipeLeft() { }
33659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        public void swipeRight() { }
33759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        public void swipeUp() { }
33859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        public void swipeDown() { }
33959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        public void onRelease(int primaryCode) { }
34059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        public boolean onLongPress(Keyboard.Key key) {
34159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            switch (key.codes[0]) {
34259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            case KEYCODE_4KEY_UP:
34359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_FULL_UP));
34459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                return true;
34559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
34659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            case KEYCODE_4KEY_DOWN:
34759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_FULL_DOWN));
34859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                return true;
34959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
35059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            default:
35159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                break;
35259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            }
35359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            return false;
35459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
35559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    };
35659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
35777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    /**
358053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Constructor
359053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
36077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa    public DefaultSoftKeyboard() { }
361053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
362053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
363053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Create keyboard views
364053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
365053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param parent   OpenWnn using the keyboards.
366053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
367053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected void createKeyboards(OpenWnn parent) {
368053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /*
369053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         *  Keyboard[# of Languages][portrait/landscape][# of keyboard type]
370053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         *          [shift off/on][max # of key-modes][non-input/input]
371053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         */
372053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mKeyboard = new Keyboard[3][2][4][2][7][2];
373053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
374053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
375053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
376053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Get the keyboard changed the specified shift state.
377053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
37877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @param shift     Shift state
37977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @return          Keyboard view
380053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
381053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected Keyboard getShiftChangeKeyboard(int shift) {
382053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        try {
383053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard[] kbd = mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][shift][mCurrentKeyMode];
384053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
385053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (!mNoInput && kbd[1] != null) {
386053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                return kbd[1];
387053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
388053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return kbd[0];
389053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } catch (Exception ex) {
390053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return null;
391053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
392053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
393053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
394053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
395053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Get the keyboard changed the specified input mode.
396053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
39777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @param mode      Input mode
39877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @return          Keyboard view
399053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
400053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected Keyboard getModeChangeKeyboard(int mode) {
401053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        try {
402053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard[] kbd = mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mode];
403053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
404053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (!mNoInput && kbd[1] != null) {
405053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                return kbd[1];
406053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
407053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return kbd[0];
408053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } catch (Exception ex) {
409053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return null;
410053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
411053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
412053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
413053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
414053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Get the keyboard changed the specified keyboard type
415053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
41677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @param type      Keyboard type
41777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @return          Keyboard view
418053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
419053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected Keyboard getTypeChangeKeyboard(int type) {
420053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        try {
421053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard[] kbd = mKeyboard[mCurrentLanguage][mDisplayMode][type][mShiftOn][mCurrentKeyMode];
422053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
423053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (!mNoInput && kbd[1] != null) {
424053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                return kbd[1];
425053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
426053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return kbd[0];
427053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } catch (Exception ex) {
428053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return null;
429053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
430053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
431053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
432053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
433053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Get the keyboard when some characters are input or no character is input.
434053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
43577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @param inputed   {@code true} if some characters are inputed; {@code false} if no character is inputed.
43677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @return          Keyboard view
437053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
438053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected Keyboard getKeyboardInputed(boolean inputed) {
439053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        try {
440053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard[] kbd = mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode];
441053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
442053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (inputed && kbd[1] != null) {
443053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                return kbd[1];
444053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
445053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return kbd[0];
446053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } catch (Exception ex) {
447053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return null;
448053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
449053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
450053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
451053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
452053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Change the circulative key-mode.
453053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
454053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected void toggleKeyMode() {
455053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* unlock shift */
456053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mShiftOn = KEYBOARD_SHIFT_OFF;
457053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
458053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* search next defined key-mode */
459053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Keyboard[][] keyboardList = mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn];
460053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        do {
461053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (++mCurrentKeyMode >= keyboardList.length) {
462053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mCurrentKeyMode = 0;
463053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
464053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } while (keyboardList[mCurrentKeyMode][0] == null);
465053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
466053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Keyboard kbd;
467053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (!mNoInput && keyboardList[mCurrentKeyMode][1] != null) {
468053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            kbd = keyboardList[mCurrentKeyMode][1];
469053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
470053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            kbd = keyboardList[mCurrentKeyMode][0];
471053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
472053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        changeKeyboard(kbd);
473053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
474053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
475053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                      OpenWnnEvent.Mode.DEFAULT));
476053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
477053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
478053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
479053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Toggle change the shift lock state.
480053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
481053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected void toggleShiftLock() {
482053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mShiftOn == 0) {
483053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* turn shift on */
484053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard newKeyboard = getShiftChangeKeyboard(KEYBOARD_SHIFT_ON);
485053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (newKeyboard != null) {
486053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mShiftOn = 1;
487053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                changeKeyboard(newKeyboard);
488053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
489053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCapsLock = true;
490053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
491053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* turn shift off */
492053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard newKeyboard = getShiftChangeKeyboard(KEYBOARD_SHIFT_OFF);
493053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (newKeyboard != null) {
494053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mShiftOn = 0;
495053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                changeKeyboard(newKeyboard);
496053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
497053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCapsLock = false;
498053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
499053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
500053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
501053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
502053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Handling Alt key event.
503053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
504053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected void processAltKey() {
505053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* invalid if it is not qwerty mode */
506053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mCurrentKeyboardType != KEYBOARD_QWERTY) {
507053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return;
508053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
509053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
510053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int mode = -1;
511053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int keymode = mCurrentKeyMode;
512053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (mCurrentLanguage) {
513053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case LANG_EN:
514053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (keymode == KEYMODE_EN_ALPHABET) {
515053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mode = KEYMODE_EN_NUMBER;
516053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else if (keymode == KEYMODE_EN_NUMBER) {
517053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mode = KEYMODE_EN_ALPHABET;
518053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
519053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
520053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
521053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case LANG_JA:
522053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (keymode == KEYMODE_JA_HALF_ALPHABET) {
523053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mode = KEYMODE_JA_HALF_NUMBER;
524053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else if (keymode == KEYMODE_JA_HALF_NUMBER) {
525053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mode = KEYMODE_JA_HALF_ALPHABET;
526053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else if (keymode == KEYMODE_JA_FULL_ALPHABET) {
527053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mode = KEYMODE_JA_FULL_NUMBER;
528053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else if (keymode == KEYMODE_JA_FULL_NUMBER) {
529053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mode = KEYMODE_JA_FULL_ALPHABET;
530053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
531053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
532053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
533053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
534053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* invalid */
535053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
536053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
537053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mode >= 0) {
538053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbd = getModeChangeKeyboard(mode);
539053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (kbd != null) {
540053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mCurrentKeyMode = mode;
541053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                changeKeyboard(kbd);
542053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
543053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
544053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
545053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
546053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
547053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Change the keyboard type.
548053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
5493feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     * @param type  Type of the keyboard
5503feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     * @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#KEYBOARD_QWERTY
5513feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     * @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#KEYBOARD_12KEY
552053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
553053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void changeKeyboardType(int type) {
554053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* ignore invalid parameter */
555053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (type != KEYBOARD_QWERTY && type != KEYBOARD_12KEY) {
556053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return;
557053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
558053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
559053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* change keyboard view */
560053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Keyboard kbd = getTypeChangeKeyboard(type);
561053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (kbd != null) {
562053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyboardType = type;
563053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(kbd);
564053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
565053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
566053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* notice that the keyboard is changed */
567053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
568053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                      OpenWnnEvent.Mode.DEFAULT));
569053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
570053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
571053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
572053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Change the keyboard.
573053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
574053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param keyboard  The new keyboard
5757b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * @return          {@code true} if the keyboard is changed; {@code false} if not changed.
576053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
577053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected boolean changeKeyboard(Keyboard keyboard) {
578053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
579053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (keyboard == null) {
580053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return false;
581053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
582053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mCurrentKeyboard != keyboard) {
583053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mKeyboardView.setKeyboard(keyboard);
584053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mKeyboardView.setShifted((mShiftOn == 0) ? false : true);
585053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyboard = keyboard;
586053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return true;
587053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
588053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mKeyboardView.setShifted((mShiftOn == 0) ? false : true);
589053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return false;
590053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
591053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
592053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.InputViewManager#initView */
593053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public View initView(OpenWnn parent, int width, int height) {
594053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mWnn = parent;
595e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        mDisplayMode =
596e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            (parent.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
597e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            ? LANDSCAPE : PORTRAIT;
598053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
599053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /*
600053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         * create keyboards & the view.
601053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         * To re-display the input view when the display mode is changed portrait <-> landscape,
602053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         * create keyboards every time.
603053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         */
604053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        createKeyboards(parent);
6057b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
60659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        /* create symbol keyboard */
60759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        mSymbolKeyboard = new Keyboard(parent, R.xml.keyboard_4key);
60859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
6097b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(parent);
6107b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        String skin = pref.getString("keyboard_skin",
6117b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                                     mWnn.getResources().getString(R.string.keyboard_skin_id_default));
6127b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        int id = parent.getResources().getIdentifier(skin, "layout", "jp.co.omronsoft.openwnn");
6137b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
6147b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        mKeyboardView = (KeyboardView) mWnn.getLayoutInflater().inflate(id, null);
61577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa        mKeyboardView.setOnKeyboardActionListener(this);
616053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mCurrentKeyboard = null;
617053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
61859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        mMainView = (BaseInputView) parent.getLayoutInflater().inflate(R.layout.keyboard_default_main, null);
6193feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa        mSubView = (ViewGroup) parent.getLayoutInflater().inflate(R.layout.keyboard_default_sub, null);
62059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
62159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        if (!mHardKeyboardHidden) {
62259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            if (!mEnableHardware12Keyboard) {
62359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma                mMainView.addView(mSubView);
62459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            }
625f66e64c9108f64da8c301fe1830e3165eccac5ffDaisuke Miyakawa        } else if (mKeyboardView != null) {
6267b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            mMainView.addView(mKeyboardView);
6277b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        }
62859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
6297b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        return mMainView;
630053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
6317b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
6327b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /**
6337b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * Update the SHFIT/ALT keys indicator.
6347b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     *
6357b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * @param mode  The state of SHIFT/ALT keys.
6367b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     */
6377b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public void updateIndicator(int mode) {
6387b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        Resources res = mWnn.getResources();
6393feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa        TextView text1 = (TextView)mSubView.findViewById(R.id.shift);
6403feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa        TextView text2 = (TextView)mSubView.findViewById(R.id.alt);
6417b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
6427b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        switch (mode) {
6437b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        case HARD_KEYMODE_SHIFT_OFF_ALT_OFF:
6443feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setTextColor(res.getColor(R.color.indicator_textcolor_caps_off));
6453feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setTextColor(res.getColor(R.color.indicator_textcolor_alt_off));
6463feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6473feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6487b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            break;
6497b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        case HARD_KEYMODE_SHIFT_ON_ALT_OFF:
6503feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setTextColor(res.getColor(R.color.indicator_textcolor_caps_on));
6513feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setTextColor(res.getColor(R.color.indicator_textcolor_alt_off));
6523feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6533feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6547b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            break;
6557b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        case HARD_KEYMODE_SHIFT_LOCK_ALT_OFF:
6563feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setTextColor(res.getColor(R.color.indicator_textcolor_caps_lock));
6573feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setTextColor(res.getColor(R.color.indicator_textcolor_alt_off));
6583feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setBackgroundColor(res.getColor(R.color.indicator_background_lock_caps));
6593feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6607b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            break;
6617b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        case HARD_KEYMODE_SHIFT_OFF_ALT_ON:
6623feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setTextColor(res.getColor(R.color.indicator_textcolor_caps_off));
6633feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setTextColor(res.getColor(R.color.indicator_textcolor_alt_on));
6643feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6653feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6667b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            break;
6677b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        case HARD_KEYMODE_SHIFT_OFF_ALT_LOCK:
6683feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setTextColor(res.getColor(R.color.indicator_textcolor_caps_off));
6693feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setTextColor(res.getColor(R.color.indicator_textcolor_alt_lock));
6703feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6713feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setBackgroundColor(res.getColor(R.color.indicator_background_lock_alt));
6727b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            break;
6737b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        case HARD_KEYMODE_SHIFT_ON_ALT_ON:
6743feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setTextColor(res.getColor(R.color.indicator_textcolor_caps_on));
6753feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setTextColor(res.getColor(R.color.indicator_textcolor_alt_on));
6763feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6773feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6787b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            break;
6797b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        case HARD_KEYMODE_SHIFT_ON_ALT_LOCK:
6803feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setTextColor(res.getColor(R.color.indicator_textcolor_caps_on));
6813feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setTextColor(res.getColor(R.color.indicator_textcolor_alt_lock));
6823feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6833feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setBackgroundColor(res.getColor(R.color.indicator_background_lock_alt));
6847b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            break;
6857b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        case HARD_KEYMODE_SHIFT_LOCK_ALT_ON:
6863feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setTextColor(res.getColor(R.color.indicator_textcolor_caps_lock));
6873feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setTextColor(res.getColor(R.color.indicator_textcolor_alt_on));
6883feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setBackgroundColor(res.getColor(R.color.indicator_background_lock_caps));
6893feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
6907b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            break;
6917b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        case HARD_KEYMODE_SHIFT_LOCK_ALT_LOCK:
6923feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setTextColor(res.getColor(R.color.indicator_textcolor_caps_lock));
6933feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setTextColor(res.getColor(R.color.indicator_textcolor_alt_lock));
6943feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setBackgroundColor(res.getColor(R.color.indicator_background_lock_caps));
6953feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setBackgroundColor(res.getColor(R.color.indicator_background_lock_alt));
6967b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            break;
6977b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        default:
6983feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setTextColor(res.getColor(R.color.indicator_textcolor_caps_off));
6993feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setTextColor(res.getColor(R.color.indicator_textcolor_alt_off));
7003feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text1.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
7013feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            text2.setBackgroundColor(res.getColor(R.color.indicator_textbackground_default));
7027b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            break;
7037b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        }
7047b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        return;
7057b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    }
7067b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
707053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.InputViewManager#getCurrentView */
708053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public View getCurrentView() {
7097b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        return mMainView;
710053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
711053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
712053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.InputViewManager#onUpdateState */
713053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void onUpdateState(OpenWnn parent) {
714053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        try {
715053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (parent.mComposingText.size(1) == 0) {
716053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (!mNoInput) {
717053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    /* when the mode changed to "no input" */
718053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mNoInput = true;
719053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    Keyboard newKeyboard = getKeyboardInputed(false);
720053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    if (mCurrentKeyboard != newKeyboard) {
721053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                        changeKeyboard(newKeyboard);
722053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    }
723053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
724053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else {
725053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (mNoInput) {
726053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    /* when the mode changed to "input some characters" */
727053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mNoInput = false;
728053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    Keyboard newKeyboard = getKeyboardInputed(true);
729053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    if (mCurrentKeyboard != newKeyboard) {
730053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                        changeKeyboard(newKeyboard);
731053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    }
732053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
733053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
734053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } catch (Exception ex) {
735053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
736053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
737053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
738053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.InputViewManager#setPreferences */
739053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void setPreferences(SharedPreferences pref, EditorInfo editor) {
740053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
741053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* vibrator */
742053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        try {
743053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (pref.getBoolean("key_vibration", false)) {
744053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mVibrator = (Vibrator)mWnn.getSystemService(Context.VIBRATOR_SERVICE);
745053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else {
746053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mVibrator = null;
747053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
748053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } catch (Exception ex) {
749053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Log.d("OpenWnn", "NO VIBRATOR");
750053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
751053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
752053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* sound */
753053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        try {
754053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (pref.getBoolean("key_sound", false)) {
755053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mSound = MediaPlayer.create(mWnn, R.raw.type);
756053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else {
757053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mSound = null;
758053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
759053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } catch (Exception ex) {
760053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Log.d("OpenWnn", "NO SOUND");
761053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
762053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
763053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* pop-up preview */
76459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        if (OpenWnn.isXLarge()) {
76559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            mKeyboardView.setPreviewEnabled(false);
76659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        } else {
76759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            mKeyboardView.setPreviewEnabled(pref.getBoolean("popup_preview", true));
76859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            mKeyboardView.clearWindowInfo();
76959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
770053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
771053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
772053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
773053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.InputViewManager#closing */
774053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void closing() {
775053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mKeyboardView != null) {
776053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mKeyboardView.closing();
777053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
77877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa        mDisableKeyInput = true;
779053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
780053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
78159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.InputViewManager#showInputView */
78259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public void showInputView() {
78359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        if (mKeyboardView != null) {
78459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            mKeyboardView.setVisibility(View.VISIBLE);
78559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
78659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    }
78759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
78859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.InputViewManager#hideInputView */
78959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public void hideInputView() {
79059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        mKeyboardView.setVisibility(View.GONE);
79159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    }
79259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
793053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /***********************************************************************
794053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * onKeyboardActionListener
795053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     ***********************************************************************/
79659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#onKey */
797053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void onKey(int primaryCode, int[] keyCodes) { }
798053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
79959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#swipeRight */
800053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void swipeRight() { }
801053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
80259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#swipeLeft */
803053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void swipeLeft() { }
804053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
80559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#swipeDown */
806053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void swipeDown() { }
807053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
80859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#swipeUp */
809053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void swipeUp() { }
810053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
81159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#onRelease */
812053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void onRelease(int x) { }
813053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
81459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#onPress */
815053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void onPress(int x) {
81659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        playSoundAndVibration();
81759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    }
81859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
81959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see android.jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#onLongPress */
82059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public boolean onLongPress(Keyboard.Key key) {
82159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        return false;
82259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    }
82359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
82459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /**
82559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * Play sound & vibration.
82659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     */
82759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    private void playSoundAndVibration() {
828053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* key click sound & vibration */
829053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mVibrator != null) {
83059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            try { mVibrator.vibrate(5); } catch (Exception ex) { }
831053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
832053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mSound != null) {
833053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            try { mSound.seekTo(0); mSound.start(); } catch (Exception ex) { }
834053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
835053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
83659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
83759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#onText */
8387b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public void onText(CharSequence text) {}
839053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
840053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
841053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Get current key mode.
8423feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     *
8437b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * @return Current key mode
844053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
845053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public int getKeyMode() {
846053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return mCurrentKeyMode;
847053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
848053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
849053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
850053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Get current keyboard type.
8513feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     *
8527b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * @return Current keyboard type
853053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
854053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public int getKeyboardType() {
855053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return mCurrentKeyboardType;
856053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
857053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
8587b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /**
8597b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * Set the H/W keyboard's state.
8603feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     *
8617b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * @param hidden {@code true} if hidden.
8627b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     */
8637b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    public void setHardKeyboardHidden(boolean hidden) {
8647b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        mHardKeyboardHidden = hidden;
8657b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    }
8667b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
867e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /**
86859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * Set the H/W keyboard's type.
86959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     *
87059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * @param type12Key {@code true} if 12Key.
87159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     */
87259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public void setHardware12Keyboard(boolean type12Key) {
87359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        mEnableHardware12Keyboard = type12Key;
87459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    }
87559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
87659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /**
877e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     * Get current keyboard view.
878e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     */
879e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    public View getKeyboardView() {
880e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        return mKeyboardView;
881e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    }
882e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa
883e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    /**
884e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     * Reset the current keyboard
885e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa     */
886e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    public void resetCurrentKeyboard() {
887e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        closing();
888e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        Keyboard keyboard = mCurrentKeyboard;
889e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        mCurrentKeyboard = null;
890e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        changeKeyboard(keyboard);
891e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa    }
89259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
89359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /**
89459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * Set the normal keyboard.
89559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     */
89659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public void setNormalKeyboard() {
89759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        if (mCurrentKeyboard == null) {
89859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma            return;
89959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        }
90059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        mKeyboardView.setKeyboard(mCurrentKeyboard);
90159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        mKeyboardView.setOnKeyboardActionListener(this);
90259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        mIsSymbolKeyboard = false;
90359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    }
90459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
90559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    /**
90659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     * Set the symbol keyboard.
90759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma     */
90859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    public void setSymbolKeyboard() {
90959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        mKeyboardView.setKeyboard(mSymbolKeyboard);
91059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        mKeyboardView.setOnKeyboardActionListener(mSymbolOnKeyboardAction);
91159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma        mIsSymbolKeyboard = true;
91259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma    }
9137b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa}
914