17898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/*
27898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
37898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
47898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * you may not use this file except in compliance with the License.
67898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * You may obtain a copy of the License at
77898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
87898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * See the License for the specific language governing permissions and
147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations under the License.
157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */
167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpackage com.android.inputmethod.pinyin;
187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport com.android.inputmethod.pinyin.SoftKeyboard.KeyRow;
207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.content.res.Resources;
227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.inputmethod.EditorInfo;
237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/**
257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Switcher used to switching input mode between Chinese, English, symbol,etc.
267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */
277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpublic class InputModeSwitcher {
287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * User defined key code, used by soft keyboard.
307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int USERDEF_KEYCODE_SHIFT_1 = -1;
327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * User defined key code, used by soft keyboard.
357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int USERDEF_KEYCODE_LANG_2 = -2;
377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * User defined key code, used by soft keyboard.
407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int USERDEF_KEYCODE_SYM_3 = -3;
427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * User defined key code, used by soft keyboard.
457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int USERDEF_KEYCODE_PHONE_SYM_4 = -4;
477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * User defined key code, used by soft keyboard.
507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int USERDEF_KEYCODE_MORE_SYM_5 = -5;
527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * User defined key code, used by soft keyboard.
557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int USERDEF_KEYCODE_SMILEY_6 = -6;
577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Bits used to indicate soft keyboard layout. If none bit is set, the
617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * current input mode does not require a soft keyboard.
627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     **/
637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_SKB_LAYOUT = 0xf0000000;
647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * A kind of soft keyboard layout. An input mode should be anded with
677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * {@link #MASK_SKB_LAYOUT} to get its soft keyboard layout.
687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_SKB_LAYOUT_QWERTY = 0x10000000;
707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * A kind of soft keyboard layout. An input mode should be anded with
737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * {@link #MASK_SKB_LAYOUT} to get its soft keyboard layout.
747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_SKB_LAYOUT_SYMBOL1 = 0x20000000;
767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * A kind of soft keyboard layout. An input mode should be anded with
797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * {@link #MASK_SKB_LAYOUT} to get its soft keyboard layout.
807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_SKB_LAYOUT_SYMBOL2 = 0x30000000;
827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * A kind of soft keyboard layout. An input mode should be anded with
857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * {@link #MASK_SKB_LAYOUT} to get its soft keyboard layout.
867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_SKB_LAYOUT_SMILEY = 0x40000000;
887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * A kind of soft keyboard layout. An input mode should be anded with
917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * {@link #MASK_SKB_LAYOUT} to get its soft keyboard layout.
927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_SKB_LAYOUT_PHONE = 0x50000000;
947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Used to indicate which language the current input mode is in. If the
977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * current input mode works with a none-QWERTY soft keyboard, these bits are
987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * also used to get language information. For example, a Chinese symbol soft
997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * keyboard and an English one are different in an icon which is used to
1007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * tell user the language information. BTW, the smiley soft keyboard mode
1017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * should be set with {@link #MASK_LANGUAGE_CN} because it can only be
1027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * launched from Chinese QWERTY soft keyboard, and it has Chinese icon on
1037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * soft keyboard.
1047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_LANGUAGE = 0x0f000000;
1067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Used to indicate the current language. An input mode should be anded with
1097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * {@link #MASK_LANGUAGE} to get this information.
1107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_LANGUAGE_CN = 0x01000000;
1127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Used to indicate the current language. An input mode should be anded with
1157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * {@link #MASK_LANGUAGE} to get this information.
1167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_LANGUAGE_EN = 0x02000000;
1187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Used to indicate which case the current input mode is in. For example,
1217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * English QWERTY has lowercase and uppercase. For the Chinese QWERTY, these
1227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * bits are ignored. For phone keyboard layout, these bits can be
1237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * {@link #MASK_CASE_UPPER} to request symbol page for phone soft keyboard.
1247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_CASE = 0x00f00000;
1267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Used to indicate the current case information. An input mode should be
1297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * anded with {@link #MASK_CASE} to get this information.
1307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_CASE_LOWER = 0x00100000;
1327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Used to indicate the current case information. An input mode should be
1357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * anded with {@link #MASK_CASE} to get this information.
1367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static final int MASK_CASE_UPPER = 0x00200000;
1387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing Chinese with soft keyboard.
1417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_SKB_CHINESE = (MASK_SKB_LAYOUT_QWERTY | MASK_LANGUAGE_CN);
1437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing basic symbols for Chinese mode with soft keyboard.
1467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_SKB_SYMBOL1_CN = (MASK_SKB_LAYOUT_SYMBOL1 | MASK_LANGUAGE_CN);
1487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing more symbols for Chinese mode with soft keyboard.
1517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_SKB_SYMBOL2_CN = (MASK_SKB_LAYOUT_SYMBOL2 | MASK_LANGUAGE_CN);
1537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing English lower characters with soft keyboard.
1567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_SKB_ENGLISH_LOWER = (MASK_SKB_LAYOUT_QWERTY
1587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            | MASK_LANGUAGE_EN | MASK_CASE_LOWER);
1597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing English upper characters with soft keyboard.
1627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_SKB_ENGLISH_UPPER = (MASK_SKB_LAYOUT_QWERTY
1647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            | MASK_LANGUAGE_EN | MASK_CASE_UPPER);
1657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing basic symbols for English mode with soft keyboard.
1687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_SKB_SYMBOL1_EN = (MASK_SKB_LAYOUT_SYMBOL1 | MASK_LANGUAGE_EN);
1707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing more symbols for English mode with soft keyboard.
1737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_SKB_SYMBOL2_EN = (MASK_SKB_LAYOUT_SYMBOL2 | MASK_LANGUAGE_EN);
1757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing smileys with soft keyboard.
1787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_SKB_SMILEY = (MASK_SKB_LAYOUT_SMILEY | MASK_LANGUAGE_CN);
1807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing phone numbers.
1837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_SKB_PHONE_NUM = (MASK_SKB_LAYOUT_PHONE);
1857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing phone numbers.
1887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_SKB_PHONE_SYM = (MASK_SKB_LAYOUT_PHONE | MASK_CASE_UPPER);
1907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing Chinese with a hardware keyboard.
1937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_HKB_CHINESE = (MASK_LANGUAGE_CN);
1957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
1977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Mode for inputing English with a hardware keyboard
1987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
1997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_HKB_ENGLISH = (MASK_LANGUAGE_EN);
2007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Unset mode.
2037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MODE_UNSET = 0;
2057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Maximum toggle states for a soft keyboard.
2087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public static final int MAX_TOGGLE_STATES = 4;
2107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * The input mode for the current edit box.
2137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mInputMode = MODE_UNSET;
2157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Used to remember previous input mode. When user enters an edit field, the
2187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * previous input mode will be tried. If the previous mode can not be used
2197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * for the current situation (For example, previous mode is a soft keyboard
2207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * mode to input symbols, and we have a hardware keyboard for the current
2217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * situation), {@link #mRecentLauageInputMode} will be tried.
2227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     **/
2237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mPreviousInputMode = MODE_SKB_CHINESE;
2247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Used to remember recent mode to input language.
2277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mRecentLauageInputMode = MODE_SKB_CHINESE;
2297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Editor information of the current edit box.
2327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private EditorInfo mEditorInfo;
2347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Used to indicate required toggling operations.
2377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private ToggleStates mToggleStates = new ToggleStates();
2397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * The current field is a short message field?
2427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private boolean mShortMessageField;
2447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Is return key in normal state?
2477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private boolean mEnterKeyNormal = true;
2497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Current icon. 0 for none icon.
2527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    int mInputIcon = R.drawable.ime_pinyin;
2547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * IME service.
2577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private PinyinIME mImeService;
2597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for Chinese mode.
2627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateCn;
2647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for Chinese mode with candidates.
2677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateCnCand;
2697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for English lowwercase mode.
2727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateEnLower;
2747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for English upppercase mode.
2777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateEnUpper;
2797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for English symbol mode for the first page.
2827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateEnSym1;
2847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for English symbol mode for the second page.
2877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateEnSym2;
2897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for smiley mode.
2927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateSmiley;
2947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
2967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for phone symbol mode.
2977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
2987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStatePhoneSym;
2997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
3017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for GO action of ENTER key.
3027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
3037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateGo;
3047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
3067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for SEARCH action of ENTER key.
3077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
3087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateSearch;
3097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
3117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for SEND action of ENTER key.
3127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
3137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateSend;
3147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
3167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for NEXT action of ENTER key.
3177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
3187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateNext;
3197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
3217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * Key toggling state for SEND action of ENTER key.
3227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
3237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleStateDone;
3247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
3267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * QWERTY row toggling state for Chinese input.
3277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
3287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleRowCn;
3297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
3317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * QWERTY row toggling state for English input.
3327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
3337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleRowEn;
3347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
3367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * QWERTY row toggling state for URI input.
3377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
3387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleRowUri;
3397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    /**
3417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     * QWERTY row toggling state for email address input.
3427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project     */
3437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private int mToggleRowEmailAddress;
3447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    class ToggleStates {
3467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        /**
3477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         * If it is true, this soft keyboard is a QWERTY one.
3487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         */
3497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        boolean mQwerty;
3507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        /**
3527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         * If {@link #mQwerty} is true, this variable is used to decide the
3537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         * letter case of the QWERTY keyboard.
3547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         */
3557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        boolean mQwertyUpperCase;
3567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        /**
3587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         * The id of enabled row in the soft keyboard. Refer to
3597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         * {@link com.android.inputmethod.pinyin.SoftKeyboard.KeyRow} for
3607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         * details.
3617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         */
3627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        public int mRowIdToEnable;
3637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        /**
3657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         * Used to store all other toggle states for the current input mode.
3667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         */
3677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        public int mKeyStates[] = new int[MAX_TOGGLE_STATES];
3687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        /**
3707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         * Number of states to toggle.
3717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project         */
3727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        public int mKeyStatesNum;
3737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
3747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public InputModeSwitcher(PinyinIME imeService) {
3767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mImeService = imeService;
3777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        Resources r = mImeService.getResources();
3787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateCn = Integer.parseInt(r.getString(R.string.toggle_cn));
3797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateCnCand = Integer.parseInt(r
3807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_cn_cand));
3817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateEnLower = Integer.parseInt(r
3827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_en_lower));
3837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateEnUpper = Integer.parseInt(r
3847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_en_upper));
3857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateEnSym1 = Integer.parseInt(r
3867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_en_sym1));
3877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateEnSym2 = Integer.parseInt(r
3887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_en_sym2));
3897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateSmiley = Integer.parseInt(r
3907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_smiley));
3917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStatePhoneSym = Integer.parseInt(r
3927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_phone_sym));
3937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
3947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateGo = Integer
3957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .parseInt(r.getString(R.string.toggle_enter_go));
3967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateSearch = Integer.parseInt(r
3977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_enter_search));
3987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateSend = Integer.parseInt(r
3997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_enter_send));
4007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateNext = Integer.parseInt(r
4017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_enter_next));
4027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStateDone = Integer.parseInt(r
4037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_enter_done));
4047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
4057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleRowCn = Integer.parseInt(r.getString(R.string.toggle_row_cn));
4067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleRowEn = Integer.parseInt(r.getString(R.string.toggle_row_en));
4077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleRowUri = Integer.parseInt(r.getString(R.string.toggle_row_uri));
4087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleRowEmailAddress = Integer.parseInt(r
4097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getString(R.string.toggle_row_emailaddress));
4107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
4117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
4127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public int getInputMode() {
4137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return mInputMode;
4147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
4157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
4167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public ToggleStates getToggleStates() {
4177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return mToggleStates;
4187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
4197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
4207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public int getSkbLayout() {
4217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int layout = (mInputMode & MASK_SKB_LAYOUT);
4227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
4237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        switch (layout) {
4247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case MASK_SKB_LAYOUT_QWERTY:
4257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            return R.xml.skb_qwerty;
4267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case MASK_SKB_LAYOUT_SYMBOL1:
4277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            return R.xml.skb_sym1;
4287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case MASK_SKB_LAYOUT_SYMBOL2:
4297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            return R.xml.skb_sym2;
4307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case MASK_SKB_LAYOUT_SMILEY:
4317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            return R.xml.skb_smiley;
4327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case MASK_SKB_LAYOUT_PHONE:
4337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            return R.xml.skb_phone;
4347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
4357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return 0;
4367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
4377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
4387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    // Return the icon to update.
4397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public int switchLanguageWithHkb() {
4407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int newInputMode = MODE_HKB_CHINESE;
4417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mInputIcon = R.drawable.ime_pinyin;
4427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
4437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (MODE_HKB_CHINESE == mInputMode) {
4447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            newInputMode = MODE_HKB_ENGLISH;
4457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mInputIcon = R.drawable.ime_en;
4467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
4477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
4487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        saveInputMode(newInputMode);
4497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return mInputIcon;
4507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
4517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
4527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    // Return the icon to update.
4537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public int switchModeForUserKey(int userKey) {
4547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int newInputMode = MODE_UNSET;
4557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
4567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (USERDEF_KEYCODE_LANG_2 == userKey) {
4577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MODE_SKB_CHINESE == mInputMode) {
4587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_ENGLISH_LOWER;
4597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_ENGLISH_LOWER == mInputMode
4607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    || MODE_SKB_ENGLISH_UPPER == mInputMode) {
4617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_CHINESE;
4627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_SYMBOL1_CN == mInputMode) {
4637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_SYMBOL1_EN;
4647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_SYMBOL1_EN == mInputMode) {
4657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_SYMBOL1_CN;
4667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_SYMBOL2_CN == mInputMode) {
4677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_SYMBOL2_EN;
4687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_SYMBOL2_EN == mInputMode) {
4697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_SYMBOL2_CN;
4707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_SMILEY == mInputMode) {
4717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_CHINESE;
4727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
4737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else if (USERDEF_KEYCODE_SYM_3 == userKey) {
4747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MODE_SKB_CHINESE == mInputMode) {
4757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_SYMBOL1_CN;
4767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_ENGLISH_UPPER == mInputMode
4777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    || MODE_SKB_ENGLISH_LOWER == mInputMode) {
4787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_SYMBOL1_EN;
4797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_SYMBOL1_EN == mInputMode
4807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    || MODE_SKB_SYMBOL2_EN == mInputMode) {
4817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_ENGLISH_LOWER;
4827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_SYMBOL1_CN == mInputMode
4837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    || MODE_SKB_SYMBOL2_CN == mInputMode) {
4847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_CHINESE;
4857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_SMILEY == mInputMode) {
4867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_SYMBOL1_CN;
4877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
4887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else if (USERDEF_KEYCODE_SHIFT_1 == userKey) {
4897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MODE_SKB_ENGLISH_LOWER == mInputMode) {
4907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_ENGLISH_UPPER;
4917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MODE_SKB_ENGLISH_UPPER == mInputMode) {
4927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_ENGLISH_LOWER;
4937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
4947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else if (USERDEF_KEYCODE_MORE_SYM_5 == userKey) {
4957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            int sym = (MASK_SKB_LAYOUT & mInputMode);
4967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MASK_SKB_LAYOUT_SYMBOL1 == sym) {
4977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                sym = MASK_SKB_LAYOUT_SYMBOL2;
4987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else {
4997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                sym = MASK_SKB_LAYOUT_SYMBOL1;
5007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
5017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            newInputMode = ((mInputMode & (~MASK_SKB_LAYOUT)) | sym);
5027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else if (USERDEF_KEYCODE_SMILEY_6 == userKey) {
5037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MODE_SKB_CHINESE == mInputMode) {
5047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_SMILEY;
5057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else {
5067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_CHINESE;
5077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
5087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else if (USERDEF_KEYCODE_PHONE_SYM_4 == userKey) {
5097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MODE_SKB_PHONE_NUM == mInputMode) {
5107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_PHONE_SYM;
5117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else {
5127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_PHONE_NUM;
5137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
5147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
5157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
5167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (newInputMode == mInputMode || MODE_UNSET == newInputMode) {
5177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            return mInputIcon;
5187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
5197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
5207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        saveInputMode(newInputMode);
5217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        prepareToggleStates(true);
5227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return mInputIcon;
5237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
5247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
5257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    // Return the icon to update.
5267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public int requestInputWithHkb(EditorInfo editorInfo) {
5277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mShortMessageField = false;
5287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        boolean english = false;
5297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int newInputMode = MODE_HKB_CHINESE;
5307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
5317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        switch (editorInfo.inputType & EditorInfo.TYPE_MASK_CLASS) {
5327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case EditorInfo.TYPE_CLASS_NUMBER:
5337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case EditorInfo.TYPE_CLASS_PHONE:
5347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case EditorInfo.TYPE_CLASS_DATETIME:
5357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            english = true;
5367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            break;
5377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case EditorInfo.TYPE_CLASS_TEXT:
5387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            int v = editorInfo.inputType & EditorInfo.TYPE_MASK_VARIATION;
5397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (v == EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
5407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    || v == EditorInfo.TYPE_TEXT_VARIATION_PASSWORD
5417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    || v == EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
5427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    || v == EditorInfo.TYPE_TEXT_VARIATION_URI) {
5437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                english = true;
5447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (v == EditorInfo.TYPE_TEXT_VARIATION_SHORT_MESSAGE) {
5457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                mShortMessageField = true;
5467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
5477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            break;
5487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        default:
5497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
5507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
5517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (english) {
5527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            // If the application request English mode, we switch to it.
5537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            newInputMode = MODE_HKB_ENGLISH;
5547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else {
5557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            // If the application do not request English mode, we will
5567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            // try to keep the previous mode to input language text.
5577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            // Because there is not soft keyboard, we need discard all
5587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            // soft keyboard related information from the previous language
5597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            // mode.
5607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if ((mRecentLauageInputMode & MASK_LANGUAGE) == MASK_LANGUAGE_CN) {
5617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_HKB_CHINESE;
5627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else {
5637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_HKB_ENGLISH;
5647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
5657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
5667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mEditorInfo = editorInfo;
5677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        saveInputMode(newInputMode);
5687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        prepareToggleStates(false);
5697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return mInputIcon;
5707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
5717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
5727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    // Return the icon to update.
5737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public int requestInputWithSkb(EditorInfo editorInfo) {
5747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mShortMessageField = false;
5757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
5767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int newInputMode = MODE_SKB_CHINESE;
5777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
5787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        switch (editorInfo.inputType & EditorInfo.TYPE_MASK_CLASS) {
5797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case EditorInfo.TYPE_CLASS_NUMBER:
5807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case EditorInfo.TYPE_CLASS_DATETIME:
5817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            newInputMode = MODE_SKB_SYMBOL1_EN;
5827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            break;
5837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case EditorInfo.TYPE_CLASS_PHONE:
5847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            newInputMode = MODE_SKB_PHONE_NUM;
5857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            break;
5867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        case EditorInfo.TYPE_CLASS_TEXT:
5877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            int v = editorInfo.inputType & EditorInfo.TYPE_MASK_VARIATION;
5887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (v == EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
5897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    || v == EditorInfo.TYPE_TEXT_VARIATION_PASSWORD
5907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    || v == EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
5917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    || v == EditorInfo.TYPE_TEXT_VARIATION_URI) {
5927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                // If the application request English mode, we switch to it.
5937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = MODE_SKB_ENGLISH_LOWER;
5947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else {
5954248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project                if (v == EditorInfo.TYPE_TEXT_VARIATION_SHORT_MESSAGE) {
5964248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project                    mShortMessageField = true;
5974248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project                }
5987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                // If the application do not request English mode, we will
5997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                // try to keep the previous mode.
6007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
6017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                newInputMode = mInputMode;
6027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                if (0 == skbLayout) {
6037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    if ((mInputMode & MASK_LANGUAGE) == MASK_LANGUAGE_CN) {
6047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                        newInputMode = MODE_SKB_CHINESE;
6057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    } else {
6067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                        newInputMode = MODE_SKB_ENGLISH_LOWER;
6077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    }
6087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                }
6097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
6107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            break;
6117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        default:
6124248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project            // Try to keep the previous mode.
6134248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project            int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
6144248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project            newInputMode = mInputMode;
6154248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project            if (0 == skbLayout) {
6164248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project                if ((mInputMode & MASK_LANGUAGE) == MASK_LANGUAGE_CN) {
6174248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project                    newInputMode = MODE_SKB_CHINESE;
6184248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project                } else {
6194248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project                    newInputMode = MODE_SKB_ENGLISH_LOWER;
6204248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project                }
6214248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project            }
6224248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project            break;
6237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
6247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mEditorInfo = editorInfo;
6267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        saveInputMode(newInputMode);
6277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        prepareToggleStates(true);
6287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return mInputIcon;
6297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
6307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    // Return the icon to update.
6327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public int requestBackToPreviousSkb() {
6337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int layout = (mInputMode & MASK_SKB_LAYOUT);
6347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int lastLayout = (mPreviousInputMode & MASK_SKB_LAYOUT);
6357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (0 != layout && 0 != lastLayout) {
6367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mInputMode = mPreviousInputMode;
6377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            saveInputMode(mInputMode);
6387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            prepareToggleStates(true);
6397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            return mInputIcon;
6407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
6417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return 0;
6427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
6437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public int getTooggleStateForCnCand() {
6457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return mToggleStateCnCand;
6467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
6477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public boolean isEnglishWithHkb() {
6497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return MODE_HKB_ENGLISH == mInputMode;
6507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
6517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public boolean isEnglishWithSkb() {
6537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return MODE_SKB_ENGLISH_LOWER == mInputMode
6547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                || MODE_SKB_ENGLISH_UPPER == mInputMode;
6557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
6567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public boolean isEnglishUpperCaseWithSkb() {
6587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return MODE_SKB_ENGLISH_UPPER == mInputMode;
6597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
6607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public boolean isChineseText() {
6627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
6637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (MASK_SKB_LAYOUT_QWERTY == skbLayout || 0 == skbLayout) {
6647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            int language = (mInputMode & MASK_LANGUAGE);
6657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MASK_LANGUAGE_CN == language) return true;
6667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
6677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return false;
6687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
6697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public boolean isChineseTextWithHkb() {
6717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
6727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (0 == skbLayout) {
6737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            int language = (mInputMode & MASK_LANGUAGE);
6747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MASK_LANGUAGE_CN == language) return true;
6757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
6767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return false;
6777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
6787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public boolean isChineseTextWithSkb() {
6807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
6817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (MASK_SKB_LAYOUT_QWERTY == skbLayout) {
6827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            int language = (mInputMode & MASK_LANGUAGE);
6837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MASK_LANGUAGE_CN == language) return true;
6847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
6857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return false;
6867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
6877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public boolean isSymbolWithSkb() {
6897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
6907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (MASK_SKB_LAYOUT_SYMBOL1 == skbLayout
6917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                || MASK_SKB_LAYOUT_SYMBOL2 == skbLayout) {
6927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            return true;
6937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
6947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return false;
6957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
6967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
6977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public boolean isEnterNoramlState() {
6987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return mEnterKeyNormal;
6997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
7007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public boolean tryHandleLongPressSwitch(int keyCode) {
7027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (USERDEF_KEYCODE_LANG_2 == keyCode
7037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                || USERDEF_KEYCODE_PHONE_SYM_4 == keyCode) {
7047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mImeService.showOptionsMenu();
7057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            return true;
7067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
7077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return false;
7087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
7097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private void saveInputMode(int newInputMode) {
7117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mPreviousInputMode = mInputMode;
7127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mInputMode = newInputMode;
7137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
7154248fb0083e2e0f2f9b379ea5ce898036b900218The Android Open Source Project        if (MASK_SKB_LAYOUT_QWERTY == skbLayout || 0 == skbLayout) {
7167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mRecentLauageInputMode = mInputMode;
7177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
7187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mInputIcon = R.drawable.ime_pinyin;
7207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (isEnglishWithHkb()) {
7217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mInputIcon = R.drawable.ime_en;
7227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else if (isChineseTextWithHkb()) {
7237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mInputIcon = R.drawable.ime_pinyin;
7247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
7257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (!Environment.getInstance().hasHardKeyboard()) {
7277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mInputIcon = 0;
7287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
7297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
7307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private void prepareToggleStates(boolean needSkb) {
7327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mEnterKeyNormal = true;
7337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (!needSkb) return;
7347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStates.mQwerty = false;
7367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStates.mKeyStatesNum = 0;
7377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int states[] = mToggleStates.mKeyStates;
7397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int statesNum = 0;
7407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        // Toggle state for language.
7417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int language = (mInputMode & MASK_LANGUAGE);
7427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int layout = (mInputMode & MASK_SKB_LAYOUT);
7437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int charcase = (mInputMode & MASK_CASE);
7447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int variation = mEditorInfo.inputType & EditorInfo.TYPE_MASK_VARIATION;
7457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (MASK_SKB_LAYOUT_PHONE != layout) {
7477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MASK_LANGUAGE_CN == language) {
7487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                // Chinese and Chinese symbol are always the default states,
7497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                // do not add a toggling operation.
7507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                if (MASK_SKB_LAYOUT_QWERTY == layout) {
7517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    mToggleStates.mQwerty = true;
7527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    mToggleStates.mQwertyUpperCase = true;
7537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    if (mShortMessageField) {
7547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                        states[statesNum] = mToggleStateSmiley;
7557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                        statesNum++;
7567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    }
7577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                }
7587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MASK_LANGUAGE_EN == language) {
7597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                if (MASK_SKB_LAYOUT_QWERTY == layout) {
7607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    mToggleStates.mQwerty = true;
7617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    mToggleStates.mQwertyUpperCase = false;
7627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    states[statesNum] = mToggleStateEnLower;
7637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    if (MASK_CASE_UPPER == charcase) {
7647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                        mToggleStates.mQwertyUpperCase = true;
7657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                        states[statesNum] = mToggleStateEnUpper;
7667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    }
7677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    statesNum++;
7687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                } else if (MASK_SKB_LAYOUT_SYMBOL1 == layout) {
7697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    states[statesNum] = mToggleStateEnSym1;
7707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    statesNum++;
7717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                } else if (MASK_SKB_LAYOUT_SYMBOL2 == layout) {
7727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    states[statesNum] = mToggleStateEnSym2;
7737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                    statesNum++;
7747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                }
7757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
7767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            // Toggle rows for QWERTY.
7787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mToggleStates.mRowIdToEnable = KeyRow.DEFAULT_ROW_ID;
7797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (variation == EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) {
7807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                mToggleStates.mRowIdToEnable = mToggleRowEmailAddress;
7817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (variation == EditorInfo.TYPE_TEXT_VARIATION_URI) {
7827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                mToggleStates.mRowIdToEnable = mToggleRowUri;
7837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MASK_LANGUAGE_CN == language) {
7847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                mToggleStates.mRowIdToEnable = mToggleRowCn;
7857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            } else if (MASK_LANGUAGE_EN == language) {
7867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                mToggleStates.mRowIdToEnable = mToggleRowEn;
7877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
7887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else {
7897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (MASK_CASE_UPPER == charcase) {
7907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                states[statesNum] = mToggleStatePhoneSym;
7917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                statesNum++;
7927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
7937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
7947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        // Toggle state for enter key.
7967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        int action = mEditorInfo.imeOptions
7977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION);
7987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
7997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (action == EditorInfo.IME_ACTION_GO) {
8007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            states[statesNum] = mToggleStateGo;
8017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            statesNum++;
8027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mEnterKeyNormal = false;
8037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else if (action == EditorInfo.IME_ACTION_SEARCH) {
8047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            states[statesNum] = mToggleStateSearch;
8057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            statesNum++;
8067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mEnterKeyNormal = false;
8077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else if (action == EditorInfo.IME_ACTION_SEND) {
8087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            states[statesNum] = mToggleStateSend;
8097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            statesNum++;
8107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mEnterKeyNormal = false;
8117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else if (action == EditorInfo.IME_ACTION_NEXT) {
8127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            int f = mEditorInfo.inputType & EditorInfo.TYPE_MASK_FLAGS;
8137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (f != EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE) {
8147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                states[statesNum] = mToggleStateNext;
8157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                statesNum++;
8167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                mEnterKeyNormal = false;
8177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            }
8187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        } else if (action == EditorInfo.IME_ACTION_DONE) {
8197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            states[statesNum] = mToggleStateDone;
8207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            statesNum++;
8217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            mEnterKeyNormal = false;
8227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
8237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mToggleStates.mKeyStatesNum = statesNum;
8247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
8257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project}
826