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