15a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka/*
28632bff2d5a8e1160989008dea6eff4b94b065ddTadashi G. Takaoka * Copyright (C) 2010 The Android Open Source Project
35a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka *
45a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); you may not
55a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * use this file except in compliance with the License. You may obtain a copy of
65a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * the License at
75a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka *
85a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0
95a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka *
105a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software
115a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
125a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
135a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * License for the specific language governing permissions and limitations under
145a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * the License.
155a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka */
165a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
175a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaokapackage com.android.inputmethod.keyboard;
185a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
19f0f726464dcb5b3cef4f8e703659b35ca62430b5Tadashi G. Takaokaimport android.view.inputmethod.EditorInfo;
20f0f726464dcb5b3cef4f8e703659b35ca62430b5Tadashi G. Takaoka
21f1a81f5eb37df4170de2cf6327c860e3d64dc2f8satokimport com.android.inputmethod.compat.EditorInfoCompatUtils;
22e9957752bcaad048746c7a57bbd2c0a59e1918a0satokimport com.android.inputmethod.compat.InputTypeCompatUtils;
235a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaokaimport com.android.inputmethod.latin.R;
245a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
255a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaokaimport java.util.Arrays;
265a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaokaimport java.util.Locale;
275a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
285a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka/**
295a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * Represents the parameters necessary to construct a new LatinKeyboard,
305a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * which also serve as a unique identifier for each keyboard type.
315a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka */
325a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaokapublic class KeyboardId {
335a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public static final int MODE_TEXT = 0;
345a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public static final int MODE_URL = 1;
355a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public static final int MODE_EMAIL = 2;
365a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public static final int MODE_IM = 3;
379e2d810dc524380ca1db6b384cfb00b4401585e5Tadashi G. Takaoka    public static final int MODE_PHONE = 4;
389e2d810dc524380ca1db6b384cfb00b4401585e5Tadashi G. Takaoka    public static final int MODE_NUMBER = 5;
395a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
40cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka    public static final int F2KEY_MODE_NONE = 0;
41cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka    public static final int F2KEY_MODE_SETTINGS = 1;
42cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka    public static final int F2KEY_MODE_SHORTCUT_IME = 2;
43cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka    public static final int F2KEY_MODE_SHORTCUT_IME_OR_SETTINGS = 3;
44cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka
455a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public final Locale mLocale;
465a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public final int mOrientation;
47e896d31bb92146379c8b7c0050ee05eec0830317Tadashi G. Takaoka    public final int mWidth;
485a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public final int mMode;
495a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public final int mXmlId;
5028a38fdfeeb9596883ee5b422c12532a73d38c87Tadashi G. Takaoka    public final boolean mNavigateAction;
514b13b4f94215368c6387b2564bdaf2cbcbe4c130Tadashi G. Takaoka    public final boolean mPasswordInput;
52cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka    // TODO: Clean up these booleans and modes.
535a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public final boolean mHasSettingsKey;
54cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka    public final int mF2KeyMode;
55cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka    public final boolean mClobberSettingsKey;
56c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka    public final boolean mShortcutKeyEnabled;
57c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka    public final boolean mHasShortcutKey;
58d9c52ba62317aa7919483ccd157182ae0f0db7f4Tadashi G. Takaoka    public final int mImeAction;
59e896d31bb92146379c8b7c0050ee05eec0830317Tadashi G. Takaoka
609b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka    public final String mXmlName;
61e896d31bb92146379c8b7c0050ee05eec0830317Tadashi G. Takaoka    public final EditorInfo mAttribute;
625a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
635a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    private final int mHashCode;
645a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
65a93d27d6b87c29cb6292d1dd1223a4e42cca07d9Tadashi G. Takaoka    public KeyboardId(String xmlName, int xmlId, Locale locale, int orientation, int width,
66cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka            int mode, EditorInfo attribute, boolean hasSettingsKey, int f2KeyMode,
67c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka            boolean clobberSettingsKey, boolean shortcutKeyEnabled, boolean hasShortcutKey) {
684b13b4f94215368c6387b2564bdaf2cbcbe4c130Tadashi G. Takaoka        final int inputType = (attribute != null) ? attribute.inputType : 0;
694b13b4f94215368c6387b2564bdaf2cbcbe4c130Tadashi G. Takaoka        final int imeOptions = (attribute != null) ? attribute.imeOptions : 0;
705a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        this.mLocale = locale;
715a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        this.mOrientation = orientation;
72e896d31bb92146379c8b7c0050ee05eec0830317Tadashi G. Takaoka        this.mWidth = width;
735a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        this.mMode = mode;
745a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        this.mXmlId = xmlId;
75f0f726464dcb5b3cef4f8e703659b35ca62430b5Tadashi G. Takaoka        // Note: Turn off checking navigation flag to show TAB key for now.
76f0f726464dcb5b3cef4f8e703659b35ca62430b5Tadashi G. Takaoka        this.mNavigateAction = InputTypeCompatUtils.isWebInputType(inputType);
77f0f726464dcb5b3cef4f8e703659b35ca62430b5Tadashi G. Takaoka//                || EditorInfoCompatUtils.hasFlagNavigateNext(imeOptions)
78f0f726464dcb5b3cef4f8e703659b35ca62430b5Tadashi G. Takaoka//                || EditorInfoCompatUtils.hasFlagNavigatePrevious(imeOptions);
79e9957752bcaad048746c7a57bbd2c0a59e1918a0satok        this.mPasswordInput = InputTypeCompatUtils.isPasswordInputType(inputType)
80e9957752bcaad048746c7a57bbd2c0a59e1918a0satok                || InputTypeCompatUtils.isVisiblePasswordInputType(inputType);
815a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        this.mHasSettingsKey = hasSettingsKey;
82cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka        this.mF2KeyMode = f2KeyMode;
83cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka        this.mClobberSettingsKey = clobberSettingsKey;
84c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka        this.mShortcutKeyEnabled = shortcutKeyEnabled;
85c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka        this.mHasShortcutKey = hasShortcutKey;
86d9c52ba62317aa7919483ccd157182ae0f0db7f4Tadashi G. Takaoka        // We are interested only in {@link EditorInfo#IME_MASK_ACTION} enum value and
87d9c52ba62317aa7919483ccd157182ae0f0db7f4Tadashi G. Takaoka        // {@link EditorInfo#IME_FLAG_NO_ENTER_ACTION}.
884b13b4f94215368c6387b2564bdaf2cbcbe4c130Tadashi G. Takaoka        this.mImeAction = imeOptions & (
894b13b4f94215368c6387b2564bdaf2cbcbe4c130Tadashi G. Takaoka                EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION);
90e896d31bb92146379c8b7c0050ee05eec0830317Tadashi G. Takaoka
919b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka        this.mXmlName = xmlName;
92e896d31bb92146379c8b7c0050ee05eec0830317Tadashi G. Takaoka        this.mAttribute = attribute;
935a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
945a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        this.mHashCode = Arrays.hashCode(new Object[] {
955a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka                locale,
965a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka                orientation,
97e896d31bb92146379c8b7c0050ee05eec0830317Tadashi G. Takaoka                width,
985a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka                mode,
995a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka                xmlId,
10028a38fdfeeb9596883ee5b422c12532a73d38c87Tadashi G. Takaoka                mNavigateAction,
1014b13b4f94215368c6387b2564bdaf2cbcbe4c130Tadashi G. Takaoka                mPasswordInput,
1025a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka                hasSettingsKey,
103cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka                f2KeyMode,
104cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka                clobberSettingsKey,
105c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka                shortcutKeyEnabled,
106c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka                hasShortcutKey,
107d9c52ba62317aa7919483ccd157182ae0f0db7f4Tadashi G. Takaoka                mImeAction,
1085a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        });
1095a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    }
1105a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
1118da9a13760896cd78235b60d0ea680ea13620532Tadashi G. Takaoka    public KeyboardId cloneWithNewXml(String xmlName, int xmlId) {
1128da9a13760896cd78235b60d0ea680ea13620532Tadashi G. Takaoka        return new KeyboardId(xmlName, xmlId, mLocale, mOrientation, mWidth, mMode, mAttribute,
1138da9a13760896cd78235b60d0ea680ea13620532Tadashi G. Takaoka                false, F2KEY_MODE_NONE, false, false, false);
114d773bf38a3c8f49ea56de67d3b828f8126f46ed2Tadashi G. Takaoka    }
115d773bf38a3c8f49ea56de67d3b828f8126f46ed2Tadashi G. Takaoka
1165a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public int getXmlId() {
1175a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        return mXmlId;
1185a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    }
1195a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
120571bdb401f670b92bd7710a12a990cb65a99b7d3Tadashi G. Takaoka    public boolean isAlphabetKeyboard() {
1215a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        return mXmlId == R.xml.kbd_qwerty;
1225a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    }
1235a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
1249e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka    public boolean isSymbolsKeyboard() {
1255ac4638f999db4fea8a9e24171dbceb640a10858Alan Viverette        return mXmlId == R.xml.kbd_symbols || mXmlId == R.xml.kbd_symbols_shift;
1269e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka    }
1279e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka
128571bdb401f670b92bd7710a12a990cb65a99b7d3Tadashi G. Takaoka    public boolean isPhoneKeyboard() {
129571bdb401f670b92bd7710a12a990cb65a99b7d3Tadashi G. Takaoka        return mMode == MODE_PHONE;
130571bdb401f670b92bd7710a12a990cb65a99b7d3Tadashi G. Takaoka    }
131571bdb401f670b92bd7710a12a990cb65a99b7d3Tadashi G. Takaoka
13260ccbe16eea5ce9a874835850f257b3c88295022Tadashi G. Takaoka    public boolean isPhoneShiftKeyboard() {
13360ccbe16eea5ce9a874835850f257b3c88295022Tadashi G. Takaoka        return mXmlId == R.xml.kbd_phone_shift;
1345ac4638f999db4fea8a9e24171dbceb640a10858Alan Viverette    }
1355ac4638f999db4fea8a9e24171dbceb640a10858Alan Viverette
136571bdb401f670b92bd7710a12a990cb65a99b7d3Tadashi G. Takaoka    public boolean isNumberKeyboard() {
137571bdb401f670b92bd7710a12a990cb65a99b7d3Tadashi G. Takaoka        return mMode == MODE_NUMBER;
138571bdb401f670b92bd7710a12a990cb65a99b7d3Tadashi G. Takaoka    }
139571bdb401f670b92bd7710a12a990cb65a99b7d3Tadashi G. Takaoka
1405a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    @Override
1415a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public boolean equals(Object other) {
1425a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        return other instanceof KeyboardId && equals((KeyboardId) other);
1435a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    }
1445a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
145c3d175c01ff1956ddb1c2d608d69af1793b4ad8aTadashi G. Takaoka    private boolean equals(KeyboardId other) {
1465a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        return other.mLocale.equals(this.mLocale)
1475a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka            && other.mOrientation == this.mOrientation
148e896d31bb92146379c8b7c0050ee05eec0830317Tadashi G. Takaoka            && other.mWidth == this.mWidth
1495a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka            && other.mMode == this.mMode
1505a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka            && other.mXmlId == this.mXmlId
15128a38fdfeeb9596883ee5b422c12532a73d38c87Tadashi G. Takaoka            && other.mNavigateAction == this.mNavigateAction
1524b13b4f94215368c6387b2564bdaf2cbcbe4c130Tadashi G. Takaoka            && other.mPasswordInput == this.mPasswordInput
1535a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka            && other.mHasSettingsKey == this.mHasSettingsKey
154cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka            && other.mF2KeyMode == this.mF2KeyMode
155cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka            && other.mClobberSettingsKey == this.mClobberSettingsKey
156c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka            && other.mShortcutKeyEnabled == this.mShortcutKeyEnabled
157c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka            && other.mHasShortcutKey == this.mHasShortcutKey
1586d9bcd5e1317722207116ab6a3ddfcb152005701Tadashi G. Takaoka            && other.mImeAction == this.mImeAction;
1595a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    }
1605a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
1615a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    @Override
1625a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public int hashCode() {
1635a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        return mHashCode;
1645a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    }
1655a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
1665a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    @Override
1675a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    public String toString() {
1686d9bcd5e1317722207116ab6a3ddfcb152005701Tadashi G. Takaoka        return String.format("[%s.xml %s %s%d %s %s %s%s%s%s%s%s%s]",
1699b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka                mXmlName,
1705a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka                mLocale,
171e896d31bb92146379c8b7c0050ee05eec0830317Tadashi G. Takaoka                (mOrientation == 1 ? "port" : "land"), mWidth,
1725a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka                modeName(mMode),
173f1a81f5eb37df4170de2cf6327c860e3d64dc2f8satok                EditorInfoCompatUtils.imeOptionsName(mImeAction),
174cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka                f2KeyModeName(mF2KeyMode),
175cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka                (mClobberSettingsKey ? " clobberSettingsKey" : ""),
17628a38fdfeeb9596883ee5b422c12532a73d38c87Tadashi G. Takaoka                (mNavigateAction ? " navigateAction" : ""),
1774b13b4f94215368c6387b2564bdaf2cbcbe4c130Tadashi G. Takaoka                (mPasswordInput ? " passwordInput" : ""),
1785a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka                (mHasSettingsKey ? " hasSettingsKey" : ""),
179c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka                (mShortcutKeyEnabled ? " shortcutKeyEnabled" : ""),
180c3afe2c244c14ed0f8a355fe608b3402e3656330Tadashi G. Takaoka                (mHasShortcutKey ? " hasShortcutKey" : "")
1814b13b4f94215368c6387b2564bdaf2cbcbe4c130Tadashi G. Takaoka        );
1825a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    }
1835a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka
1849b6d1d52d91f8f18952ae3841f4bb0d7309bfc0eTadashi G. Takaoka    public static String modeName(int mode) {
1855a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        switch (mode) {
1865a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        case MODE_TEXT: return "text";
1875a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        case MODE_URL: return "url";
1885a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        case MODE_EMAIL: return "email";
1895a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        case MODE_IM: return "im";
1905a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        case MODE_PHONE: return "phone";
1915a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        case MODE_NUMBER: return "number";
192cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka        default: return null;
193cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka        }
194cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka    }
195cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka
196cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka    public static String f2KeyModeName(int f2KeyMode) {
197cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka        switch (f2KeyMode) {
198cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka        case F2KEY_MODE_NONE: return "none";
199cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka        case F2KEY_MODE_SETTINGS: return "settings";
200cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka        case F2KEY_MODE_SHORTCUT_IME: return "shortcutIme";
201cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka        case F2KEY_MODE_SHORTCUT_IME_OR_SETTINGS: return "shortcutImeOrSettings";
202cd96a691b14b384face577d907f6c1aa33b47233Tadashi G. Takaoka        default: return null;
2035a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka        }
2045a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka    }
2055a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka}
206