KeyboardSwitcher.java revision b19668cfc17ad30afcc3c8c0407d47238ce1a90d
1923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project/* 2923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * Copyright (C) 2008 Google Inc. 3923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * 4923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * use this file except in compliance with the License. You may obtain a copy of 6923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * the License at 7923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * 8923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * 10923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * License for the specific language governing permissions and limitations under 14923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * the License. 15923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project */ 16923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 17923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Projectpackage com.android.inputmethod.latin; 18923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 19353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballingerimport java.util.HashMap; 20353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballingerimport java.util.Map; 21923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 22923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Projectpublic class KeyboardSwitcher { 23923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 24923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int MODE_TEXT = 1; 25923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int MODE_SYMBOLS = 2; 26923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int MODE_PHONE = 3; 27923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int MODE_URL = 4; 28923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int MODE_EMAIL = 5; 29923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int MODE_IM = 6; 30923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 31923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int MODE_TEXT_QWERTY = 0; 32923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int MODE_TEXT_ALPHA = 1; 33923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int MODE_TEXT_COUNT = 2; 34923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 35923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int KEYBOARDMODE_NORMAL = R.id.mode_normal; 36923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int KEYBOARDMODE_URL = R.id.mode_url; 37923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int KEYBOARDMODE_EMAIL = R.id.mode_email; 38923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project public static final int KEYBOARDMODE_IM = R.id.mode_im; 39923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 40b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani private static final int SYMBOLS_MODE_STATE_NONE = 0; 41b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani private static final int SYMBOLS_MODE_STATE_BEGIN = 1; 42b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani private static final int SYMBOLS_MODE_STATE_SYMBOL = 2; 43b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani 44923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project LatinKeyboardView mInputView; 45923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project LatinIME mContext; 46923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 47353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger private KeyboardId mSymbolsId; 48353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger private KeyboardId mSymbolsShiftedId; 49353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 50353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger private KeyboardId mCurrentId; 51353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger private Map<KeyboardId, LatinKeyboard> mKeyboards; 52923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 53923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project private int mMode; 54923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project private int mImeOptions; 55923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project private int mTextMode = MODE_TEXT_QWERTY; 56353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger private boolean mIsSymbols; 57b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani private int mSymbolsModeState = SYMBOLS_MODE_STATE_NONE; 58923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 59923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project private int mLastDisplayWidth; 60923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 61923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project KeyboardSwitcher(LatinIME context) { 62923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project mContext = context; 63353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mKeyboards = new HashMap<KeyboardId, LatinKeyboard>(); 64353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mSymbolsId = new KeyboardId(R.xml.kbd_symbols); 65353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift); 66923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 67923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 68923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project void setInputView(LatinKeyboardView inputView) { 69923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project mInputView = inputView; 70923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 71923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 72923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project void makeKeyboards() { 73923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project // Configuration change is coming after the keyboard gets recreated. So don't rely on that. 74923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project // If keyboards have already been made, check if we have a screen width change and 75923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project // create the keyboard layouts again at the correct orientation 76353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger int displayWidth = mContext.getMaxWidth(); 77353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger if (displayWidth == mLastDisplayWidth) return; 78353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mLastDisplayWidth = displayWidth; 79353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mKeyboards.clear(); 800221514bd1360c7bfcf6eeaa920da49557c5fd2aBrandon Ballinger mSymbolsId = new KeyboardId(R.xml.kbd_symbols); 810221514bd1360c7bfcf6eeaa920da49557c5fd2aBrandon Ballinger mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift); 82353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 83353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 84353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger /** 85353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger * Represents the parameters necessary to construct a new LatinKeyboard, 86353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger * which also serve as a unique identifier for each keyboard type. 87353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger */ 88353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger private static class KeyboardId { 89353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger public int mXml; 90353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger public int mMode; 91353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger public boolean mEnableShiftLock; 92353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 93353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger public KeyboardId(int xml, int mode, boolean enableShiftLock) { 94353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger this.mXml = xml; 95353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger this.mMode = mode; 96353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger this.mEnableShiftLock = enableShiftLock; 97353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 98353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 99353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger public KeyboardId(int xml) { 100353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger this(xml, 0, false); 101353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 102353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 103353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger public boolean equals(Object other) { 104353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return other instanceof KeyboardId && equals((KeyboardId) other); 105353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 106353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 107353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger public boolean equals(KeyboardId other) { 108353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return other.mXml == this.mXml && other.mMode == this.mMode; 109353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 110353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 111353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger public int hashCode() { 112353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return (mXml + 1) * (mMode + 1) * (mEnableShiftLock ? 2 : 1); 113923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 114923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 115923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 116923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project void setKeyboardMode(int mode, int imeOptions) { 117353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger setKeyboardMode(mode, imeOptions, false); 118353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 119353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 120353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger void setKeyboardMode(int mode, int imeOptions, boolean isSymbols) { 121923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project mMode = mode; 122923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project mImeOptions = imeOptions; 123c5bb4591b67b165f007e29bd9424d319ac3c7c28Brandon Ballinger mIsSymbols = isSymbols; 124923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project mInputView.setPreviewEnabled(true); 125353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger KeyboardId id = getKeyboardId(mode, imeOptions, isSymbols); 126353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger LatinKeyboard keyboard = getKeyboard(id); 127353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 128353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger if (mode == MODE_PHONE) { 129353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mInputView.setPhoneKeyboard(keyboard); 130353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mInputView.setPreviewEnabled(false); 131353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 132353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 133353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mCurrentId = id; 134353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mInputView.setKeyboard(keyboard); 135353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger keyboard.setShifted(false); 136353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger keyboard.setShiftLocked(keyboard.isShiftLocked()); 137353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger keyboard.setImeOptions(mContext.getResources(), mMode, imeOptions); 138353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 139353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 140353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 141353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger private LatinKeyboard getKeyboard(KeyboardId id) { 142353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger if (!mKeyboards.containsKey(id)) { 143353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger LatinKeyboard keyboard = new LatinKeyboard( 144353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mContext, id.mXml, id.mMode); 145353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger if (id.mEnableShiftLock) { 146353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger keyboard.enableShiftLock(); 147353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 148353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mKeyboards.put(id, keyboard); 149353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 150353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return mKeyboards.get(id); 151353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 152353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 153353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger private KeyboardId getKeyboardId(int mode, int imeOptions, boolean isSymbols) { 154353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger if (isSymbols) { 155353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return (mode == MODE_PHONE) 156353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger ? new KeyboardId(R.xml.kbd_phone_symbols) : new KeyboardId(R.xml.kbd_symbols); 157353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } 158353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger 159923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project switch (mode) { 160923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project case MODE_TEXT: 161923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project if (mTextMode == MODE_TEXT_QWERTY) { 162353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_NORMAL, true); 163923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } else if (mTextMode == MODE_TEXT_ALPHA) { 164353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return new KeyboardId(R.xml.kbd_alpha, KEYBOARDMODE_NORMAL, true); 165923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 166923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project break; 167923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project case MODE_SYMBOLS: 168353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return new KeyboardId(R.xml.kbd_symbols); 169923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project case MODE_PHONE: 170353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return new KeyboardId(R.xml.kbd_phone); 171923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project case MODE_URL: 172353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_URL, true); 173923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project case MODE_EMAIL: 174353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_EMAIL, true); 175923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project case MODE_IM: 176353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_IM, true); 177923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 178353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return null; 179923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 180923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 181923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project int getKeyboardMode() { 182923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project return mMode; 183923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 184923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 185923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project boolean isTextMode() { 186923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project return mMode == MODE_TEXT; 187923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 188923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 189923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project int getTextMode() { 190923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project return mTextMode; 191923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 192923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 193923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project void setTextMode(int position) { 194923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project if (position < MODE_TEXT_COUNT && position >= 0) { 195923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project mTextMode = position; 196923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 197923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project if (isTextMode()) { 198923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project setKeyboardMode(MODE_TEXT, mImeOptions); 199923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 200923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 201923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 202923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project int getTextModeCount() { 203923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project return MODE_TEXT_COUNT; 204923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 205923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 206923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project boolean isAlphabetMode() { 207353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger KeyboardId current = mCurrentId; 208353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger return current.mMode == KEYBOARDMODE_NORMAL 209353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger || current.mMode == KEYBOARDMODE_URL 210353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger || current.mMode == KEYBOARDMODE_EMAIL 211353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger || current.mMode == KEYBOARDMODE_IM; 212923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 213923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 214923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project void toggleShift() { 215353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger if (mCurrentId.equals(mSymbolsId)) { 216353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger LatinKeyboard symbolsKeyboard = getKeyboard(mSymbolsId); 217353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger LatinKeyboard symbolsShiftedKeyboard = getKeyboard(mSymbolsShiftedId); 218353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger symbolsKeyboard.setShifted(true); 219353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mCurrentId = mSymbolsShiftedId; 220353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mInputView.setKeyboard(symbolsShiftedKeyboard); 221353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger symbolsShiftedKeyboard.setShifted(true); 222353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger symbolsShiftedKeyboard.setImeOptions(mContext.getResources(), mMode, mImeOptions); 223353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger } else if (mCurrentId.equals(mSymbolsShiftedId)) { 224353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger LatinKeyboard symbolsKeyboard = getKeyboard(mSymbolsId); 225353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger LatinKeyboard symbolsShiftedKeyboard = getKeyboard(mSymbolsShiftedId); 226353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger symbolsShiftedKeyboard.setShifted(false); 227353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mCurrentId = mSymbolsId; 228353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger mInputView.setKeyboard(getKeyboard(mSymbolsId)); 229353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger symbolsKeyboard.setShifted(false); 230353da6d207bed3d32ec38b9ce52e4a136adbf060Brandon Ballinger symbolsKeyboard.setImeOptions(mContext.getResources(), mMode, mImeOptions); 231923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 232923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 233923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project 234923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project void toggleSymbols() { 235c5bb4591b67b165f007e29bd9424d319ac3c7c28Brandon Ballinger setKeyboardMode(mMode, mImeOptions, !mIsSymbols); 236b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani if (mIsSymbols) { 237b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani mSymbolsModeState = SYMBOLS_MODE_STATE_BEGIN; 238b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani } else { 239b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani mSymbolsModeState = SYMBOLS_MODE_STATE_NONE; 240b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani } 241b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani } 242b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani 243b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani /** 244b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani * Updates state machine to figure out when to automatically switch back to alpha mode. 245b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani * Returns true if the keyboard needs to switch back 246b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani */ 247b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani boolean onKey(int key) { 248b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani // Switch back to alpha mode if user types one or more non-space characters followed by 249b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani // a space. 250b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani switch (mSymbolsModeState) { 251b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani case SYMBOLS_MODE_STATE_BEGIN: 252b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani if (key != ' ' && key > 0) mSymbolsModeState = SYMBOLS_MODE_STATE_SYMBOL; 253b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani break; 254b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani case SYMBOLS_MODE_STATE_SYMBOL: 255b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani if (key == ' ') return true; 256b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani break; 257b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani } 258b19668cfc17ad30afcc3c8c0407d47238ce1a90dAmith Yamasani return false; 259923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project } 260923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project} 261