mirror of
https://gitlab.futo.org/keyboard/latinime.git
synced 2024-09-28 14:54:30 +01:00
242 lines
8.8 KiB
Java
242 lines
8.8 KiB
Java
|
/*
|
||
|
* Copyright (C) 2008 Google Inc.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||
|
* use this file except in compliance with the License. You may obtain a copy of
|
||
|
* the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||
|
* License for the specific language governing permissions and limitations under
|
||
|
* the License.
|
||
|
*/
|
||
|
|
||
|
package com.android.inputmethod.latin;
|
||
|
|
||
|
import android.inputmethodservice.Keyboard;
|
||
|
|
||
|
import java.util.List;
|
||
|
|
||
|
public class KeyboardSwitcher {
|
||
|
|
||
|
public static final int MODE_TEXT = 1;
|
||
|
public static final int MODE_SYMBOLS = 2;
|
||
|
public static final int MODE_PHONE = 3;
|
||
|
public static final int MODE_URL = 4;
|
||
|
public static final int MODE_EMAIL = 5;
|
||
|
public static final int MODE_IM = 6;
|
||
|
|
||
|
public static final int MODE_TEXT_QWERTY = 0;
|
||
|
public static final int MODE_TEXT_ALPHA = 1;
|
||
|
public static final int MODE_TEXT_COUNT = 2;
|
||
|
|
||
|
public static final int KEYBOARDMODE_NORMAL = R.id.mode_normal;
|
||
|
public static final int KEYBOARDMODE_URL = R.id.mode_url;
|
||
|
public static final int KEYBOARDMODE_EMAIL = R.id.mode_email;
|
||
|
public static final int KEYBOARDMODE_IM = R.id.mode_im;
|
||
|
|
||
|
|
||
|
LatinKeyboardView mInputView;
|
||
|
LatinIME mContext;
|
||
|
|
||
|
private LatinKeyboard mPhoneKeyboard;
|
||
|
private LatinKeyboard mPhoneSymbolsKeyboard;
|
||
|
private LatinKeyboard mSymbolsKeyboard;
|
||
|
private LatinKeyboard mSymbolsShiftedKeyboard;
|
||
|
private LatinKeyboard mQwertyKeyboard;
|
||
|
private LatinKeyboard mAlphaKeyboard;
|
||
|
private LatinKeyboard mUrlKeyboard;
|
||
|
private LatinKeyboard mEmailKeyboard;
|
||
|
private LatinKeyboard mIMKeyboard;
|
||
|
|
||
|
List<Keyboard> mKeyboards;
|
||
|
|
||
|
private int mMode;
|
||
|
private int mImeOptions;
|
||
|
private int mTextMode = MODE_TEXT_QWERTY;
|
||
|
|
||
|
private int mLastDisplayWidth;
|
||
|
|
||
|
KeyboardSwitcher(LatinIME context) {
|
||
|
mContext = context;
|
||
|
}
|
||
|
|
||
|
void setInputView(LatinKeyboardView inputView) {
|
||
|
mInputView = inputView;
|
||
|
}
|
||
|
|
||
|
void makeKeyboards() {
|
||
|
// Configuration change is coming after the keyboard gets recreated. So don't rely on that.
|
||
|
// If keyboards have already been made, check if we have a screen width change and
|
||
|
// create the keyboard layouts again at the correct orientation
|
||
|
if (mKeyboards != null) {
|
||
|
int displayWidth = mContext.getMaxWidth();
|
||
|
if (displayWidth == mLastDisplayWidth) return;
|
||
|
mLastDisplayWidth = displayWidth;
|
||
|
}
|
||
|
// Delayed creation when keyboard mode is set.
|
||
|
mQwertyKeyboard = null;
|
||
|
mAlphaKeyboard = null;
|
||
|
mUrlKeyboard = null;
|
||
|
mEmailKeyboard = null;
|
||
|
mIMKeyboard = null;
|
||
|
mPhoneKeyboard = null;
|
||
|
mPhoneSymbolsKeyboard = null;
|
||
|
mSymbolsKeyboard = null;
|
||
|
mSymbolsShiftedKeyboard = null;
|
||
|
}
|
||
|
|
||
|
void setKeyboardMode(int mode, int imeOptions) {
|
||
|
mMode = mode;
|
||
|
mImeOptions = imeOptions;
|
||
|
LatinKeyboard keyboard = (LatinKeyboard) mInputView.getKeyboard();
|
||
|
mInputView.setPreviewEnabled(true);
|
||
|
switch (mode) {
|
||
|
case MODE_TEXT:
|
||
|
if (mTextMode == MODE_TEXT_QWERTY) {
|
||
|
if (mQwertyKeyboard == null) {
|
||
|
mQwertyKeyboard = new LatinKeyboard(mContext, R.xml.kbd_qwerty,
|
||
|
KEYBOARDMODE_NORMAL);
|
||
|
mQwertyKeyboard.enableShiftLock();
|
||
|
}
|
||
|
keyboard = mQwertyKeyboard;
|
||
|
} else if (mTextMode == MODE_TEXT_ALPHA) {
|
||
|
if (mAlphaKeyboard == null) {
|
||
|
mAlphaKeyboard = new LatinKeyboard(mContext, R.xml.kbd_alpha,
|
||
|
KEYBOARDMODE_NORMAL);
|
||
|
mAlphaKeyboard.enableShiftLock();
|
||
|
}
|
||
|
keyboard = mAlphaKeyboard;
|
||
|
}
|
||
|
break;
|
||
|
case MODE_SYMBOLS:
|
||
|
if (mSymbolsKeyboard == null) {
|
||
|
mSymbolsKeyboard = new LatinKeyboard(mContext, R.xml.kbd_symbols);
|
||
|
}
|
||
|
if (mSymbolsShiftedKeyboard == null) {
|
||
|
mSymbolsShiftedKeyboard = new LatinKeyboard(mContext, R.xml.kbd_symbols_shift);
|
||
|
}
|
||
|
keyboard = mSymbolsKeyboard;
|
||
|
break;
|
||
|
case MODE_PHONE:
|
||
|
if (mPhoneKeyboard == null) {
|
||
|
mPhoneKeyboard = new LatinKeyboard(mContext, R.xml.kbd_phone);
|
||
|
}
|
||
|
mInputView.setPhoneKeyboard(mPhoneKeyboard);
|
||
|
if (mPhoneSymbolsKeyboard == null) {
|
||
|
mPhoneSymbolsKeyboard = new LatinKeyboard(mContext, R.xml.kbd_phone_symbols);
|
||
|
}
|
||
|
keyboard = mPhoneKeyboard;
|
||
|
mInputView.setPreviewEnabled(false);
|
||
|
break;
|
||
|
case MODE_URL:
|
||
|
if (mUrlKeyboard == null) {
|
||
|
mUrlKeyboard = new LatinKeyboard(mContext, R.xml.kbd_qwerty, KEYBOARDMODE_URL);
|
||
|
mUrlKeyboard.enableShiftLock();
|
||
|
}
|
||
|
keyboard = mUrlKeyboard;
|
||
|
break;
|
||
|
case MODE_EMAIL:
|
||
|
if (mEmailKeyboard == null) {
|
||
|
mEmailKeyboard = new LatinKeyboard(mContext, R.xml.kbd_qwerty, KEYBOARDMODE_EMAIL);
|
||
|
mEmailKeyboard.enableShiftLock();
|
||
|
}
|
||
|
keyboard = mEmailKeyboard;
|
||
|
break;
|
||
|
case MODE_IM:
|
||
|
if (mIMKeyboard == null) {
|
||
|
mIMKeyboard = new LatinKeyboard(mContext, R.xml.kbd_qwerty, KEYBOARDMODE_IM);
|
||
|
mIMKeyboard.enableShiftLock();
|
||
|
}
|
||
|
keyboard = mIMKeyboard;
|
||
|
break;
|
||
|
}
|
||
|
mInputView.setKeyboard(keyboard);
|
||
|
keyboard.setShifted(false);
|
||
|
keyboard.setShiftLocked(keyboard.isShiftLocked());
|
||
|
keyboard.setImeOptions(mContext.getResources(), mMode, imeOptions);
|
||
|
}
|
||
|
|
||
|
int getKeyboardMode() {
|
||
|
return mMode;
|
||
|
}
|
||
|
|
||
|
boolean isTextMode() {
|
||
|
return mMode == MODE_TEXT;
|
||
|
}
|
||
|
|
||
|
int getTextMode() {
|
||
|
return mTextMode;
|
||
|
}
|
||
|
|
||
|
void setTextMode(int position) {
|
||
|
if (position < MODE_TEXT_COUNT && position >= 0) {
|
||
|
mTextMode = position;
|
||
|
}
|
||
|
if (isTextMode()) {
|
||
|
setKeyboardMode(MODE_TEXT, mImeOptions);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int getTextModeCount() {
|
||
|
return MODE_TEXT_COUNT;
|
||
|
}
|
||
|
|
||
|
boolean isAlphabetMode() {
|
||
|
Keyboard current = mInputView.getKeyboard();
|
||
|
if (current == mQwertyKeyboard
|
||
|
|| current == mAlphaKeyboard
|
||
|
|| current == mUrlKeyboard
|
||
|
|| current == mIMKeyboard
|
||
|
|| current == mEmailKeyboard) {
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
void toggleShift() {
|
||
|
Keyboard currentKeyboard = mInputView.getKeyboard();
|
||
|
if (currentKeyboard == mSymbolsKeyboard) {
|
||
|
mSymbolsKeyboard.setShifted(true);
|
||
|
mInputView.setKeyboard(mSymbolsShiftedKeyboard);
|
||
|
mSymbolsShiftedKeyboard.setShifted(true);
|
||
|
mSymbolsShiftedKeyboard.setImeOptions(mContext.getResources(), mMode, mImeOptions);
|
||
|
} else if (currentKeyboard == mSymbolsShiftedKeyboard) {
|
||
|
mSymbolsShiftedKeyboard.setShifted(false);
|
||
|
mInputView.setKeyboard(mSymbolsKeyboard);
|
||
|
mSymbolsKeyboard.setShifted(false);
|
||
|
mSymbolsKeyboard.setImeOptions(mContext.getResources(), mMode, mImeOptions);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void toggleSymbols() {
|
||
|
Keyboard current = mInputView.getKeyboard();
|
||
|
if (mSymbolsKeyboard == null) {
|
||
|
mSymbolsKeyboard = new LatinKeyboard(mContext, R.xml.kbd_symbols);
|
||
|
}
|
||
|
if (mSymbolsShiftedKeyboard == null) {
|
||
|
mSymbolsShiftedKeyboard = new LatinKeyboard(mContext, R.xml.kbd_symbols_shift);
|
||
|
}
|
||
|
if (current == mSymbolsKeyboard || current == mSymbolsShiftedKeyboard) {
|
||
|
setKeyboardMode(mMode, mImeOptions); // Could be qwerty, alpha, url, email or im
|
||
|
return;
|
||
|
} else if (current == mPhoneKeyboard) {
|
||
|
current = mPhoneSymbolsKeyboard;
|
||
|
mPhoneSymbolsKeyboard.setImeOptions(mContext.getResources(), mMode, mImeOptions);
|
||
|
} else if (current == mPhoneSymbolsKeyboard) {
|
||
|
current = mPhoneKeyboard;
|
||
|
mPhoneKeyboard.setImeOptions(mContext.getResources(), mMode, mImeOptions);
|
||
|
} else {
|
||
|
current = mSymbolsKeyboard;
|
||
|
mSymbolsKeyboard.setImeOptions(mContext.getResources(), mMode, mImeOptions);
|
||
|
}
|
||
|
mInputView.setKeyboard(current);
|
||
|
if (current == mSymbolsKeyboard) {
|
||
|
current.setShifted(false);
|
||
|
}
|
||
|
}
|
||
|
}
|