OSDN Git Service

delete other imput methods
[gb-231r1-is01/GB_2.3_IS01.git] / packages / inputmethods / PinyinIME / src / com / android / inputmethod / pinyin / InputModeSwitcher.java
diff --git a/packages/inputmethods/PinyinIME/src/com/android/inputmethod/pinyin/InputModeSwitcher.java b/packages/inputmethods/PinyinIME/src/com/android/inputmethod/pinyin/InputModeSwitcher.java
deleted file mode 100644 (file)
index 7167182..0000000
+++ /dev/null
@@ -1,825 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.pinyin;
-
-import com.android.inputmethod.pinyin.SoftKeyboard.KeyRow;
-
-import android.content.res.Resources;
-import android.view.inputmethod.EditorInfo;
-
-/**
- * Switcher used to switching input mode between Chinese, English, symbol,etc.
- */
-public class InputModeSwitcher {
-    /**
-     * User defined key code, used by soft keyboard.
-     */
-    private static final int USERDEF_KEYCODE_SHIFT_1 = -1;
-
-    /**
-     * User defined key code, used by soft keyboard.
-     */
-    private static final int USERDEF_KEYCODE_LANG_2 = -2;
-
-    /**
-     * User defined key code, used by soft keyboard.
-     */
-    private static final int USERDEF_KEYCODE_SYM_3 = -3;
-
-    /**
-     * User defined key code, used by soft keyboard.
-     */
-    public static final int USERDEF_KEYCODE_PHONE_SYM_4 = -4;
-
-    /**
-     * User defined key code, used by soft keyboard.
-     */
-    private static final int USERDEF_KEYCODE_MORE_SYM_5 = -5;
-
-    /**
-     * User defined key code, used by soft keyboard.
-     */
-    private static final int USERDEF_KEYCODE_SMILEY_6 = -6;
-
-
-    /**
-     * Bits used to indicate soft keyboard layout. If none bit is set, the
-     * current input mode does not require a soft keyboard.
-     **/
-    private static final int MASK_SKB_LAYOUT = 0xf0000000;
-
-    /**
-     * A kind of soft keyboard layout. An input mode should be anded with
-     * {@link #MASK_SKB_LAYOUT} to get its soft keyboard layout.
-     */
-    private static final int MASK_SKB_LAYOUT_QWERTY = 0x10000000;
-
-    /**
-     * A kind of soft keyboard layout. An input mode should be anded with
-     * {@link #MASK_SKB_LAYOUT} to get its soft keyboard layout.
-     */
-    private static final int MASK_SKB_LAYOUT_SYMBOL1 = 0x20000000;
-
-    /**
-     * A kind of soft keyboard layout. An input mode should be anded with
-     * {@link #MASK_SKB_LAYOUT} to get its soft keyboard layout.
-     */
-    private static final int MASK_SKB_LAYOUT_SYMBOL2 = 0x30000000;
-
-    /**
-     * A kind of soft keyboard layout. An input mode should be anded with
-     * {@link #MASK_SKB_LAYOUT} to get its soft keyboard layout.
-     */
-    private static final int MASK_SKB_LAYOUT_SMILEY = 0x40000000;
-
-    /**
-     * A kind of soft keyboard layout. An input mode should be anded with
-     * {@link #MASK_SKB_LAYOUT} to get its soft keyboard layout.
-     */
-    private static final int MASK_SKB_LAYOUT_PHONE = 0x50000000;
-
-    /**
-     * Used to indicate which language the current input mode is in. If the
-     * current input mode works with a none-QWERTY soft keyboard, these bits are
-     * also used to get language information. For example, a Chinese symbol soft
-     * keyboard and an English one are different in an icon which is used to
-     * tell user the language information. BTW, the smiley soft keyboard mode
-     * should be set with {@link #MASK_LANGUAGE_CN} because it can only be
-     * launched from Chinese QWERTY soft keyboard, and it has Chinese icon on
-     * soft keyboard.
-     */
-    private static final int MASK_LANGUAGE = 0x0f000000;
-
-    /**
-     * Used to indicate the current language. An input mode should be anded with
-     * {@link #MASK_LANGUAGE} to get this information.
-     */
-    private static final int MASK_LANGUAGE_CN = 0x01000000;
-
-    /**
-     * Used to indicate the current language. An input mode should be anded with
-     * {@link #MASK_LANGUAGE} to get this information.
-     */
-    private static final int MASK_LANGUAGE_EN = 0x02000000;
-
-    /**
-     * Used to indicate which case the current input mode is in. For example,
-     * English QWERTY has lowercase and uppercase. For the Chinese QWERTY, these
-     * bits are ignored. For phone keyboard layout, these bits can be
-     * {@link #MASK_CASE_UPPER} to request symbol page for phone soft keyboard.
-     */
-    private static final int MASK_CASE = 0x00f00000;
-
-    /**
-     * Used to indicate the current case information. An input mode should be
-     * anded with {@link #MASK_CASE} to get this information.
-     */
-    private static final int MASK_CASE_LOWER = 0x00100000;
-
-    /**
-     * Used to indicate the current case information. An input mode should be
-     * anded with {@link #MASK_CASE} to get this information.
-     */
-    private static final int MASK_CASE_UPPER = 0x00200000;
-
-    /**
-     * Mode for inputing Chinese with soft keyboard.
-     */
-    public static final int MODE_SKB_CHINESE = (MASK_SKB_LAYOUT_QWERTY | MASK_LANGUAGE_CN);
-
-    /**
-     * Mode for inputing basic symbols for Chinese mode with soft keyboard.
-     */
-    public static final int MODE_SKB_SYMBOL1_CN = (MASK_SKB_LAYOUT_SYMBOL1 | MASK_LANGUAGE_CN);
-
-    /**
-     * Mode for inputing more symbols for Chinese mode with soft keyboard.
-     */
-    public static final int MODE_SKB_SYMBOL2_CN = (MASK_SKB_LAYOUT_SYMBOL2 | MASK_LANGUAGE_CN);
-
-    /**
-     * Mode for inputing English lower characters with soft keyboard.
-     */
-    public static final int MODE_SKB_ENGLISH_LOWER = (MASK_SKB_LAYOUT_QWERTY
-            | MASK_LANGUAGE_EN | MASK_CASE_LOWER);
-
-    /**
-     * Mode for inputing English upper characters with soft keyboard.
-     */
-    public static final int MODE_SKB_ENGLISH_UPPER = (MASK_SKB_LAYOUT_QWERTY
-            | MASK_LANGUAGE_EN | MASK_CASE_UPPER);
-
-    /**
-     * Mode for inputing basic symbols for English mode with soft keyboard.
-     */
-    public static final int MODE_SKB_SYMBOL1_EN = (MASK_SKB_LAYOUT_SYMBOL1 | MASK_LANGUAGE_EN);
-
-    /**
-     * Mode for inputing more symbols for English mode with soft keyboard.
-     */
-    public static final int MODE_SKB_SYMBOL2_EN = (MASK_SKB_LAYOUT_SYMBOL2 | MASK_LANGUAGE_EN);
-
-    /**
-     * Mode for inputing smileys with soft keyboard.
-     */
-    public static final int MODE_SKB_SMILEY = (MASK_SKB_LAYOUT_SMILEY | MASK_LANGUAGE_CN);
-
-    /**
-     * Mode for inputing phone numbers.
-     */
-    public static final int MODE_SKB_PHONE_NUM = (MASK_SKB_LAYOUT_PHONE);
-
-    /**
-     * Mode for inputing phone numbers.
-     */
-    public static final int MODE_SKB_PHONE_SYM = (MASK_SKB_LAYOUT_PHONE | MASK_CASE_UPPER);
-
-    /**
-     * Mode for inputing Chinese with a hardware keyboard.
-     */
-    public static final int MODE_HKB_CHINESE = (MASK_LANGUAGE_CN);
-
-    /**
-     * Mode for inputing English with a hardware keyboard
-     */
-    public static final int MODE_HKB_ENGLISH = (MASK_LANGUAGE_EN);
-
-    /**
-     * Unset mode.
-     */
-    public static final int MODE_UNSET = 0;
-
-    /**
-     * Maximum toggle states for a soft keyboard.
-     */
-    public static final int MAX_TOGGLE_STATES = 4;
-
-    /**
-     * The input mode for the current edit box.
-     */
-    private int mInputMode = MODE_UNSET;
-
-    /**
-     * Used to remember previous input mode. When user enters an edit field, the
-     * previous input mode will be tried. If the previous mode can not be used
-     * for the current situation (For example, previous mode is a soft keyboard
-     * mode to input symbols, and we have a hardware keyboard for the current
-     * situation), {@link #mRecentLauageInputMode} will be tried.
-     **/
-    private int mPreviousInputMode = MODE_SKB_CHINESE;
-
-    /**
-     * Used to remember recent mode to input language.
-     */
-    private int mRecentLauageInputMode = MODE_SKB_CHINESE;
-
-    /**
-     * Editor information of the current edit box.
-     */
-    private EditorInfo mEditorInfo;
-
-    /**
-     * Used to indicate required toggling operations.
-     */
-    private ToggleStates mToggleStates = new ToggleStates();
-
-    /**
-     * The current field is a short message field?
-     */
-    private boolean mShortMessageField;
-
-    /**
-     * Is return key in normal state?
-     */
-    private boolean mEnterKeyNormal = true;
-
-    /**
-     * Current icon. 0 for none icon.
-     */
-    int mInputIcon = R.drawable.ime_pinyin;
-
-    /**
-     * IME service.
-     */
-    private PinyinIME mImeService;
-
-    /**
-     * Key toggling state for Chinese mode.
-     */
-    private int mToggleStateCn;
-
-    /**
-     * Key toggling state for Chinese mode with candidates.
-     */
-    private int mToggleStateCnCand;
-
-    /**
-     * Key toggling state for English lowwercase mode.
-     */
-    private int mToggleStateEnLower;
-
-    /**
-     * Key toggling state for English upppercase mode.
-     */
-    private int mToggleStateEnUpper;
-
-    /**
-     * Key toggling state for English symbol mode for the first page.
-     */
-    private int mToggleStateEnSym1;
-
-    /**
-     * Key toggling state for English symbol mode for the second page.
-     */
-    private int mToggleStateEnSym2;
-
-    /**
-     * Key toggling state for smiley mode.
-     */
-    private int mToggleStateSmiley;
-
-    /**
-     * Key toggling state for phone symbol mode.
-     */
-    private int mToggleStatePhoneSym;
-
-    /**
-     * Key toggling state for GO action of ENTER key.
-     */
-    private int mToggleStateGo;
-
-    /**
-     * Key toggling state for SEARCH action of ENTER key.
-     */
-    private int mToggleStateSearch;
-
-    /**
-     * Key toggling state for SEND action of ENTER key.
-     */
-    private int mToggleStateSend;
-
-    /**
-     * Key toggling state for NEXT action of ENTER key.
-     */
-    private int mToggleStateNext;
-
-    /**
-     * Key toggling state for SEND action of ENTER key.
-     */
-    private int mToggleStateDone;
-
-    /**
-     * QWERTY row toggling state for Chinese input.
-     */
-    private int mToggleRowCn;
-
-    /**
-     * QWERTY row toggling state for English input.
-     */
-    private int mToggleRowEn;
-
-    /**
-     * QWERTY row toggling state for URI input.
-     */
-    private int mToggleRowUri;
-
-    /**
-     * QWERTY row toggling state for email address input.
-     */
-    private int mToggleRowEmailAddress;
-
-    class ToggleStates {
-        /**
-         * If it is true, this soft keyboard is a QWERTY one.
-         */
-        boolean mQwerty;
-
-        /**
-         * If {@link #mQwerty} is true, this variable is used to decide the
-         * letter case of the QWERTY keyboard.
-         */
-        boolean mQwertyUpperCase;
-
-        /**
-         * The id of enabled row in the soft keyboard. Refer to
-         * {@link com.android.inputmethod.pinyin.SoftKeyboard.KeyRow} for
-         * details.
-         */
-        public int mRowIdToEnable;
-
-        /**
-         * Used to store all other toggle states for the current input mode.
-         */
-        public int mKeyStates[] = new int[MAX_TOGGLE_STATES];
-
-        /**
-         * Number of states to toggle.
-         */
-        public int mKeyStatesNum;
-    }
-
-    public InputModeSwitcher(PinyinIME imeService) {
-        mImeService = imeService;
-        Resources r = mImeService.getResources();
-        mToggleStateCn = Integer.parseInt(r.getString(R.string.toggle_cn));
-        mToggleStateCnCand = Integer.parseInt(r
-                .getString(R.string.toggle_cn_cand));
-        mToggleStateEnLower = Integer.parseInt(r
-                .getString(R.string.toggle_en_lower));
-        mToggleStateEnUpper = Integer.parseInt(r
-                .getString(R.string.toggle_en_upper));
-        mToggleStateEnSym1 = Integer.parseInt(r
-                .getString(R.string.toggle_en_sym1));
-        mToggleStateEnSym2 = Integer.parseInt(r
-                .getString(R.string.toggle_en_sym2));
-        mToggleStateSmiley = Integer.parseInt(r
-                .getString(R.string.toggle_smiley));
-        mToggleStatePhoneSym = Integer.parseInt(r
-                .getString(R.string.toggle_phone_sym));
-
-        mToggleStateGo = Integer
-                .parseInt(r.getString(R.string.toggle_enter_go));
-        mToggleStateSearch = Integer.parseInt(r
-                .getString(R.string.toggle_enter_search));
-        mToggleStateSend = Integer.parseInt(r
-                .getString(R.string.toggle_enter_send));
-        mToggleStateNext = Integer.parseInt(r
-                .getString(R.string.toggle_enter_next));
-        mToggleStateDone = Integer.parseInt(r
-                .getString(R.string.toggle_enter_done));
-
-        mToggleRowCn = Integer.parseInt(r.getString(R.string.toggle_row_cn));
-        mToggleRowEn = Integer.parseInt(r.getString(R.string.toggle_row_en));
-        mToggleRowUri = Integer.parseInt(r.getString(R.string.toggle_row_uri));
-        mToggleRowEmailAddress = Integer.parseInt(r
-                .getString(R.string.toggle_row_emailaddress));
-    }
-
-    public int getInputMode() {
-        return mInputMode;
-    }
-
-    public ToggleStates getToggleStates() {
-        return mToggleStates;
-    }
-
-    public int getSkbLayout() {
-        int layout = (mInputMode & MASK_SKB_LAYOUT);
-
-        switch (layout) {
-        case MASK_SKB_LAYOUT_QWERTY:
-            return R.xml.skb_qwerty;
-        case MASK_SKB_LAYOUT_SYMBOL1:
-            return R.xml.skb_sym1;
-        case MASK_SKB_LAYOUT_SYMBOL2:
-            return R.xml.skb_sym2;
-        case MASK_SKB_LAYOUT_SMILEY:
-            return R.xml.skb_smiley;
-        case MASK_SKB_LAYOUT_PHONE:
-            return R.xml.skb_phone;
-        }
-        return 0;
-    }
-
-    // Return the icon to update.
-    public int switchLanguageWithHkb() {
-        int newInputMode = MODE_HKB_CHINESE;
-        mInputIcon = R.drawable.ime_pinyin;
-
-        if (MODE_HKB_CHINESE == mInputMode) {
-            newInputMode = MODE_HKB_ENGLISH;
-            mInputIcon = R.drawable.ime_en;
-        }
-
-        saveInputMode(newInputMode);
-        return mInputIcon;
-    }
-
-    // Return the icon to update.
-    public int switchModeForUserKey(int userKey) {
-        int newInputMode = MODE_UNSET;
-
-        if (USERDEF_KEYCODE_LANG_2 == userKey) {
-            if (MODE_SKB_CHINESE == mInputMode) {
-                newInputMode = MODE_SKB_ENGLISH_LOWER;
-            } else if (MODE_SKB_ENGLISH_LOWER == mInputMode
-                    || MODE_SKB_ENGLISH_UPPER == mInputMode) {
-                newInputMode = MODE_SKB_CHINESE;
-            } else if (MODE_SKB_SYMBOL1_CN == mInputMode) {
-                newInputMode = MODE_SKB_SYMBOL1_EN;
-            } else if (MODE_SKB_SYMBOL1_EN == mInputMode) {
-                newInputMode = MODE_SKB_SYMBOL1_CN;
-            } else if (MODE_SKB_SYMBOL2_CN == mInputMode) {
-                newInputMode = MODE_SKB_SYMBOL2_EN;
-            } else if (MODE_SKB_SYMBOL2_EN == mInputMode) {
-                newInputMode = MODE_SKB_SYMBOL2_CN;
-            } else if (MODE_SKB_SMILEY == mInputMode) {
-                newInputMode = MODE_SKB_CHINESE;
-            }
-        } else if (USERDEF_KEYCODE_SYM_3 == userKey) {
-            if (MODE_SKB_CHINESE == mInputMode) {
-                newInputMode = MODE_SKB_SYMBOL1_CN;
-            } else if (MODE_SKB_ENGLISH_UPPER == mInputMode
-                    || MODE_SKB_ENGLISH_LOWER == mInputMode) {
-                newInputMode = MODE_SKB_SYMBOL1_EN;
-            } else if (MODE_SKB_SYMBOL1_EN == mInputMode
-                    || MODE_SKB_SYMBOL2_EN == mInputMode) {
-                newInputMode = MODE_SKB_ENGLISH_LOWER;
-            } else if (MODE_SKB_SYMBOL1_CN == mInputMode
-                    || MODE_SKB_SYMBOL2_CN == mInputMode) {
-                newInputMode = MODE_SKB_CHINESE;
-            } else if (MODE_SKB_SMILEY == mInputMode) {
-                newInputMode = MODE_SKB_SYMBOL1_CN;
-            }
-        } else if (USERDEF_KEYCODE_SHIFT_1 == userKey) {
-            if (MODE_SKB_ENGLISH_LOWER == mInputMode) {
-                newInputMode = MODE_SKB_ENGLISH_UPPER;
-            } else if (MODE_SKB_ENGLISH_UPPER == mInputMode) {
-                newInputMode = MODE_SKB_ENGLISH_LOWER;
-            }
-        } else if (USERDEF_KEYCODE_MORE_SYM_5 == userKey) {
-            int sym = (MASK_SKB_LAYOUT & mInputMode);
-            if (MASK_SKB_LAYOUT_SYMBOL1 == sym) {
-                sym = MASK_SKB_LAYOUT_SYMBOL2;
-            } else {
-                sym = MASK_SKB_LAYOUT_SYMBOL1;
-            }
-            newInputMode = ((mInputMode & (~MASK_SKB_LAYOUT)) | sym);
-        } else if (USERDEF_KEYCODE_SMILEY_6 == userKey) {
-            if (MODE_SKB_CHINESE == mInputMode) {
-                newInputMode = MODE_SKB_SMILEY;
-            } else {
-                newInputMode = MODE_SKB_CHINESE;
-            }
-        } else if (USERDEF_KEYCODE_PHONE_SYM_4 == userKey) {
-            if (MODE_SKB_PHONE_NUM == mInputMode) {
-                newInputMode = MODE_SKB_PHONE_SYM;
-            } else {
-                newInputMode = MODE_SKB_PHONE_NUM;
-            }
-        }
-
-        if (newInputMode == mInputMode || MODE_UNSET == newInputMode) {
-            return mInputIcon;
-        }
-
-        saveInputMode(newInputMode);
-        prepareToggleStates(true);
-        return mInputIcon;
-    }
-
-    // Return the icon to update.
-    public int requestInputWithHkb(EditorInfo editorInfo) {
-        mShortMessageField = false;
-        boolean english = false;
-        int newInputMode = MODE_HKB_CHINESE;
-
-        switch (editorInfo.inputType & EditorInfo.TYPE_MASK_CLASS) {
-        case EditorInfo.TYPE_CLASS_NUMBER:
-        case EditorInfo.TYPE_CLASS_PHONE:
-        case EditorInfo.TYPE_CLASS_DATETIME:
-            english = true;
-            break;
-        case EditorInfo.TYPE_CLASS_TEXT:
-            int v = editorInfo.inputType & EditorInfo.TYPE_MASK_VARIATION;
-            if (v == EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
-                    || v == EditorInfo.TYPE_TEXT_VARIATION_PASSWORD
-                    || v == EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
-                    || v == EditorInfo.TYPE_TEXT_VARIATION_URI) {
-                english = true;
-            } else if (v == EditorInfo.TYPE_TEXT_VARIATION_SHORT_MESSAGE) {
-                mShortMessageField = true;
-            }
-            break;
-        default:
-        }
-
-        if (english) {
-            // If the application request English mode, we switch to it.
-            newInputMode = MODE_HKB_ENGLISH;
-        } else {
-            // If the application do not request English mode, we will
-            // try to keep the previous mode to input language text.
-            // Because there is not soft keyboard, we need discard all
-            // soft keyboard related information from the previous language
-            // mode.
-            if ((mRecentLauageInputMode & MASK_LANGUAGE) == MASK_LANGUAGE_CN) {
-                newInputMode = MODE_HKB_CHINESE;
-            } else {
-                newInputMode = MODE_HKB_ENGLISH;
-            }
-        }
-        mEditorInfo = editorInfo;
-        saveInputMode(newInputMode);
-        prepareToggleStates(false);
-        return mInputIcon;
-    }
-
-    // Return the icon to update.
-    public int requestInputWithSkb(EditorInfo editorInfo) {
-        mShortMessageField = false;
-
-        int newInputMode = MODE_SKB_CHINESE;
-
-        switch (editorInfo.inputType & EditorInfo.TYPE_MASK_CLASS) {
-        case EditorInfo.TYPE_CLASS_NUMBER:
-        case EditorInfo.TYPE_CLASS_DATETIME:
-            newInputMode = MODE_SKB_SYMBOL1_EN;
-            break;
-        case EditorInfo.TYPE_CLASS_PHONE:
-            newInputMode = MODE_SKB_PHONE_NUM;
-            break;
-        case EditorInfo.TYPE_CLASS_TEXT:
-            int v = editorInfo.inputType & EditorInfo.TYPE_MASK_VARIATION;
-            if (v == EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
-                    || v == EditorInfo.TYPE_TEXT_VARIATION_PASSWORD
-                    || v == EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
-                    || v == EditorInfo.TYPE_TEXT_VARIATION_URI) {
-                // If the application request English mode, we switch to it.
-                newInputMode = MODE_SKB_ENGLISH_LOWER;
-            } else {
-                if (v == EditorInfo.TYPE_TEXT_VARIATION_SHORT_MESSAGE) {
-                    mShortMessageField = true;
-                }
-                // If the application do not request English mode, we will
-                // try to keep the previous mode.
-                int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
-                newInputMode = mInputMode;
-                if (0 == skbLayout) {
-                    if ((mInputMode & MASK_LANGUAGE) == MASK_LANGUAGE_CN) {
-                        newInputMode = MODE_SKB_CHINESE;
-                    } else {
-                        newInputMode = MODE_SKB_ENGLISH_LOWER;
-                    }
-                }
-            }
-            break;
-        default:
-            // Try to keep the previous mode.
-            int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
-            newInputMode = mInputMode;
-            if (0 == skbLayout) {
-                if ((mInputMode & MASK_LANGUAGE) == MASK_LANGUAGE_CN) {
-                    newInputMode = MODE_SKB_CHINESE;
-                } else {
-                    newInputMode = MODE_SKB_ENGLISH_LOWER;
-                }
-            }
-            break;
-        }
-
-        mEditorInfo = editorInfo;
-        saveInputMode(newInputMode);
-        prepareToggleStates(true);
-        return mInputIcon;
-    }
-
-    // Return the icon to update.
-    public int requestBackToPreviousSkb() {
-        int layout = (mInputMode & MASK_SKB_LAYOUT);
-        int lastLayout = (mPreviousInputMode & MASK_SKB_LAYOUT);
-        if (0 != layout && 0 != lastLayout) {
-            mInputMode = mPreviousInputMode;
-            saveInputMode(mInputMode);
-            prepareToggleStates(true);
-            return mInputIcon;
-        }
-        return 0;
-    }
-
-    public int getTooggleStateForCnCand() {
-        return mToggleStateCnCand;
-    }
-
-    public boolean isEnglishWithHkb() {
-        return MODE_HKB_ENGLISH == mInputMode;
-    }
-
-    public boolean isEnglishWithSkb() {
-        return MODE_SKB_ENGLISH_LOWER == mInputMode
-                || MODE_SKB_ENGLISH_UPPER == mInputMode;
-    }
-
-    public boolean isEnglishUpperCaseWithSkb() {
-        return MODE_SKB_ENGLISH_UPPER == mInputMode;
-    }
-
-    public boolean isChineseText() {
-        int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
-        if (MASK_SKB_LAYOUT_QWERTY == skbLayout || 0 == skbLayout) {
-            int language = (mInputMode & MASK_LANGUAGE);
-            if (MASK_LANGUAGE_CN == language) return true;
-        }
-        return false;
-    }
-
-    public boolean isChineseTextWithHkb() {
-        int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
-        if (0 == skbLayout) {
-            int language = (mInputMode & MASK_LANGUAGE);
-            if (MASK_LANGUAGE_CN == language) return true;
-        }
-        return false;
-    }
-
-    public boolean isChineseTextWithSkb() {
-        int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
-        if (MASK_SKB_LAYOUT_QWERTY == skbLayout) {
-            int language = (mInputMode & MASK_LANGUAGE);
-            if (MASK_LANGUAGE_CN == language) return true;
-        }
-        return false;
-    }
-
-    public boolean isSymbolWithSkb() {
-        int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
-        if (MASK_SKB_LAYOUT_SYMBOL1 == skbLayout
-                || MASK_SKB_LAYOUT_SYMBOL2 == skbLayout) {
-            return true;
-        }
-        return false;
-    }
-
-    public boolean isEnterNoramlState() {
-        return mEnterKeyNormal;
-    }
-
-    public boolean tryHandleLongPressSwitch(int keyCode) {
-        if (USERDEF_KEYCODE_LANG_2 == keyCode
-                || USERDEF_KEYCODE_PHONE_SYM_4 == keyCode) {
-            mImeService.showOptionsMenu();
-            return true;
-        }
-        return false;
-    }
-
-    private void saveInputMode(int newInputMode) {
-        mPreviousInputMode = mInputMode;
-        mInputMode = newInputMode;
-
-        int skbLayout = (mInputMode & MASK_SKB_LAYOUT);
-        if (MASK_SKB_LAYOUT_QWERTY == skbLayout || 0 == skbLayout) {
-            mRecentLauageInputMode = mInputMode;
-        }
-
-        mInputIcon = R.drawable.ime_pinyin;
-        if (isEnglishWithHkb()) {
-            mInputIcon = R.drawable.ime_en;
-        } else if (isChineseTextWithHkb()) {
-            mInputIcon = R.drawable.ime_pinyin;
-        }
-
-        if (!Environment.getInstance().hasHardKeyboard()) {
-            mInputIcon = 0;
-        }
-    }
-
-    private void prepareToggleStates(boolean needSkb) {
-        mEnterKeyNormal = true;
-        if (!needSkb) return;
-
-        mToggleStates.mQwerty = false;
-        mToggleStates.mKeyStatesNum = 0;
-
-        int states[] = mToggleStates.mKeyStates;
-        int statesNum = 0;
-        // Toggle state for language.
-        int language = (mInputMode & MASK_LANGUAGE);
-        int layout = (mInputMode & MASK_SKB_LAYOUT);
-        int charcase = (mInputMode & MASK_CASE);
-        int variation = mEditorInfo.inputType & EditorInfo.TYPE_MASK_VARIATION;
-
-        if (MASK_SKB_LAYOUT_PHONE != layout) {
-            if (MASK_LANGUAGE_CN == language) {
-                // Chinese and Chinese symbol are always the default states,
-                // do not add a toggling operation.
-                if (MASK_SKB_LAYOUT_QWERTY == layout) {
-                    mToggleStates.mQwerty = true;
-                    mToggleStates.mQwertyUpperCase = true;
-                    if (mShortMessageField) {
-                        states[statesNum] = mToggleStateSmiley;
-                        statesNum++;
-                    }
-                }
-            } else if (MASK_LANGUAGE_EN == language) {
-                if (MASK_SKB_LAYOUT_QWERTY == layout) {
-                    mToggleStates.mQwerty = true;
-                    mToggleStates.mQwertyUpperCase = false;
-                    states[statesNum] = mToggleStateEnLower;
-                    if (MASK_CASE_UPPER == charcase) {
-                        mToggleStates.mQwertyUpperCase = true;
-                        states[statesNum] = mToggleStateEnUpper;
-                    }
-                    statesNum++;
-                } else if (MASK_SKB_LAYOUT_SYMBOL1 == layout) {
-                    states[statesNum] = mToggleStateEnSym1;
-                    statesNum++;
-                } else if (MASK_SKB_LAYOUT_SYMBOL2 == layout) {
-                    states[statesNum] = mToggleStateEnSym2;
-                    statesNum++;
-                }
-            }
-
-            // Toggle rows for QWERTY.
-            mToggleStates.mRowIdToEnable = KeyRow.DEFAULT_ROW_ID;
-            if (variation == EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) {
-                mToggleStates.mRowIdToEnable = mToggleRowEmailAddress;
-            } else if (variation == EditorInfo.TYPE_TEXT_VARIATION_URI) {
-                mToggleStates.mRowIdToEnable = mToggleRowUri;
-            } else if (MASK_LANGUAGE_CN == language) {
-                mToggleStates.mRowIdToEnable = mToggleRowCn;
-            } else if (MASK_LANGUAGE_EN == language) {
-                mToggleStates.mRowIdToEnable = mToggleRowEn;
-            }
-        } else {
-            if (MASK_CASE_UPPER == charcase) {
-                states[statesNum] = mToggleStatePhoneSym;
-                statesNum++;
-            }
-        }
-
-        // Toggle state for enter key.
-        int action = mEditorInfo.imeOptions
-                & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION);
-
-        if (action == EditorInfo.IME_ACTION_GO) {
-            states[statesNum] = mToggleStateGo;
-            statesNum++;
-            mEnterKeyNormal = false;
-        } else if (action == EditorInfo.IME_ACTION_SEARCH) {
-            states[statesNum] = mToggleStateSearch;
-            statesNum++;
-            mEnterKeyNormal = false;
-        } else if (action == EditorInfo.IME_ACTION_SEND) {
-            states[statesNum] = mToggleStateSend;
-            statesNum++;
-            mEnterKeyNormal = false;
-        } else if (action == EditorInfo.IME_ACTION_NEXT) {
-            int f = mEditorInfo.inputType & EditorInfo.TYPE_MASK_FLAGS;
-            if (f != EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE) {
-                states[statesNum] = mToggleStateNext;
-                statesNum++;
-                mEnterKeyNormal = false;
-            }
-        } else if (action == EditorInfo.IME_ACTION_DONE) {
-            states[statesNum] = mToggleStateDone;
-            statesNum++;
-            mEnterKeyNormal = false;
-        }
-        mToggleStates.mKeyStatesNum = statesNum;
-    }
-}