| /* |
| * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd. |
| * |
| * 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 jp.co.omronsoft.openwnn.EN; |
| |
| import jp.co.omronsoft.openwnn.*; |
| import android.content.SharedPreferences; |
| import android.view.KeyEvent; |
| import android.view.View; |
| import android.view.inputmethod.EditorInfo; |
| import android.view.inputmethod.InputConnection; |
| |
| import jp.co.omronsoft.openwnn.Keyboard; |
| |
| import android.util.Log; |
| |
| /** |
| * The default Software Keyboard class for English IME. |
| * |
| * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved. |
| */ |
| public class DefaultSoftKeyboardEN extends DefaultSoftKeyboard { |
| /** 12-key keyboard [PHONE MODE] */ |
| public static final int KEYCODE_PHONE = -116; |
| |
| /** |
| * Keyboards toggled by ALT key. |
| * <br> |
| * The normal keyboard(KEYMODE_EN_ALPHABET) and the number/symbol |
| * keyboard(KEYMODE_EN_NUMBER) is active. The phone number |
| * keyboard(KEYMODE_EN_PHONE) is disabled. |
| */ |
| private static final boolean[] TOGGLE_KEYBOARD = {true, true, false}; |
| |
| /** Auto caps mode */ |
| private boolean mAutoCaps = false; |
| |
| /** |
| * Default constructor |
| */ |
| public DefaultSoftKeyboardEN() { } |
| |
| /** |
| * Dismiss the pop-up keyboard. |
| * <br> |
| * Nothing will be done if no pop-up keyboard is displaying. |
| */ |
| public void dismissPopupKeyboard() { |
| try { |
| if (mKeyboardView != null) { |
| mKeyboardView.handleBack(); |
| } |
| } catch (Exception ex) { |
| /* ignore */ |
| } |
| } |
| |
| /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#createKeyboards */ |
| @Override protected void createKeyboards(OpenWnn parent) { |
| mKeyboard = new Keyboard[3][2][4][2][7][2]; |
| |
| Keyboard[][] keyList; |
| /*********************************************************************** |
| * English |
| ***********************************************************************/ |
| /* qwerty shift_off */ |
| keyList = mKeyboard[LANG_EN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF]; |
| keyList[KEYMODE_EN_ALPHABET][0] = new Keyboard(parent, R.xml.default_en_qwerty); |
| keyList[KEYMODE_EN_NUMBER][0] = new Keyboard(parent, R.xml.default_en_symbols); |
| keyList[KEYMODE_EN_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone); |
| |
| /* qwerty shift_on */ |
| keyList = mKeyboard[LANG_EN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON]; |
| keyList[KEYMODE_EN_ALPHABET][0] = |
| mKeyboard[LANG_EN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_EN_ALPHABET][0]; |
| keyList[KEYMODE_EN_NUMBER][0] = new Keyboard(parent, R.xml.default_en_symbols_shift); |
| keyList[KEYMODE_EN_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone); |
| } |
| |
| /** |
| * Get the shift key state from the editor. |
| * |
| * @param editor The information of editor |
| * @return state ID of the shift key (0:off, 1:on) |
| */ |
| private int getShiftKeyState(EditorInfo editor) { |
| InputConnection connection = mWnn.getCurrentInputConnection(); |
| if (connection != null) { |
| int caps = connection.getCursorCapsMode(editor.inputType); |
| return (caps == 0) ? 0 : 1; |
| } else { |
| return 0; |
| } |
| } |
| |
| /** |
| * Switch the keymode |
| * |
| * @param keyMode Keymode |
| */ |
| private void changeKeyMode(int keyMode) { |
| Keyboard keyboard = super.getModeChangeKeyboard(keyMode); |
| if (keyboard != null) { |
| mCurrentKeyMode = keyMode; |
| super.changeKeyboard(keyboard); |
| } |
| } |
| |
| /*********************************************************************** |
| * from DefaultSoftKeyboard |
| ***********************************************************************/ |
| /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#initView */ |
| @Override public View initView(OpenWnn parent, int width, int height) { |
| View view = super.initView(parent, width, height); |
| |
| /* default setting */ |
| mCurrentLanguage = LANG_EN; |
| mCurrentKeyboardType = KEYBOARD_QWERTY; |
| mShiftOn = KEYBOARD_SHIFT_OFF; |
| mCurrentKeyMode = KEYMODE_EN_ALPHABET; |
| |
| Keyboard kbd = mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0]; |
| if (kbd == null) { |
| if(mDisplayMode == LANDSCAPE){ |
| return view; |
| } |
| return null; |
| } |
| mCurrentKeyboard = null; |
| changeKeyboard(kbd); |
| return view; |
| } |
| |
| /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#setPreferences */ |
| @Override public void setPreferences(SharedPreferences pref, EditorInfo editor) { |
| super.setPreferences(pref, editor); |
| |
| /* auto caps mode */ |
| mAutoCaps = pref.getBoolean("auto_caps", true); |
| |
| switch (editor.inputType & EditorInfo.TYPE_MASK_CLASS) { |
| case EditorInfo.TYPE_CLASS_NUMBER: |
| case EditorInfo.TYPE_CLASS_DATETIME: |
| mCurrentLanguage = LANG_EN; |
| mCurrentKeyboardType = KEYBOARD_QWERTY; |
| mShiftOn = KEYBOARD_SHIFT_OFF; |
| mCurrentKeyMode = KEYMODE_EN_NUMBER; |
| |
| Keyboard kbdn = |
| mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0]; |
| |
| changeKeyboard(kbdn); |
| break; |
| |
| case EditorInfo.TYPE_CLASS_PHONE: |
| mCurrentLanguage = LANG_EN; |
| mCurrentKeyboardType = KEYBOARD_QWERTY; |
| mShiftOn = KEYBOARD_SHIFT_OFF; |
| mCurrentKeyMode = KEYMODE_EN_PHONE; |
| |
| Keyboard kbdp = |
| mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0]; |
| |
| changeKeyboard(kbdp); |
| |
| break; |
| |
| default: |
| mCurrentLanguage = LANG_EN; |
| mCurrentKeyboardType = KEYBOARD_QWERTY; |
| mShiftOn = KEYBOARD_SHIFT_OFF; |
| mCurrentKeyMode = KEYMODE_EN_ALPHABET; |
| |
| Keyboard kbdq = |
| mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0]; |
| |
| changeKeyboard(kbdq); |
| break; |
| } |
| |
| int shift = (mAutoCaps)? getShiftKeyState(mWnn.getCurrentInputEditorInfo()) : 0; |
| if (shift != mShiftOn) { |
| Keyboard kbd = getShiftChangeKeyboard(shift); |
| mShiftOn = shift; |
| changeKeyboard(kbd); |
| } |
| } |
| |
| /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#onKey */ |
| @Override public void onKey(int primaryCode, int[] keyCodes) { |
| switch (primaryCode) { |
| case KEYCODE_QWERTY_HAN_ALPHA: |
| this.changeKeyMode(KEYMODE_EN_ALPHABET); |
| break; |
| |
| case KEYCODE_QWERTY_HAN_NUM: |
| this.changeKeyMode(KEYMODE_EN_NUMBER); |
| break; |
| |
| case KEYCODE_PHONE: |
| this.changeKeyMode(KEYMODE_EN_PHONE); |
| break; |
| |
| case KEYCODE_QWERTY_EMOJI: |
| mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_SYMBOLS)); |
| break; |
| |
| case KEYCODE_QWERTY_TOGGLE_MODE: |
| switch(mCurrentKeyMode){ |
| case KEYMODE_EN_ALPHABET: |
| if (TOGGLE_KEYBOARD[KEYMODE_EN_NUMBER]){ |
| mCurrentKeyMode = KEYMODE_EN_NUMBER; |
| } else if (TOGGLE_KEYBOARD[KEYMODE_EN_PHONE]) { |
| mCurrentKeyMode = KEYMODE_EN_PHONE; |
| } |
| break; |
| case KEYMODE_EN_NUMBER: |
| if (TOGGLE_KEYBOARD[KEYMODE_EN_PHONE]) { |
| mCurrentKeyMode = KEYMODE_EN_PHONE; |
| } else if(TOGGLE_KEYBOARD[KEYMODE_EN_ALPHABET]) { |
| mCurrentKeyMode = KEYMODE_EN_ALPHABET; |
| } |
| break; |
| case KEYMODE_EN_PHONE: |
| if (TOGGLE_KEYBOARD[KEYMODE_EN_ALPHABET]) { |
| mCurrentKeyMode = KEYMODE_EN_ALPHABET; |
| } else if (TOGGLE_KEYBOARD[KEYMODE_EN_NUMBER]) { |
| mCurrentKeyMode = KEYMODE_EN_NUMBER; |
| } |
| break; |
| } |
| Keyboard kbdp = |
| mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0]; |
| super.changeKeyboard(kbdp); |
| break; |
| |
| case DefaultSoftKeyboard.KEYCODE_QWERTY_BACKSPACE: |
| case DefaultSoftKeyboard.KEYCODE_JP12_BACKSPACE: |
| mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY, |
| new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL))); |
| break; |
| |
| case DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT: |
| toggleShiftLock(); |
| break; |
| |
| case DefaultSoftKeyboard.KEYCODE_QWERTY_ALT: |
| processAltKey(); |
| break; |
| |
| case KEYCODE_QWERTY_ENTER: |
| case KEYCODE_JP12_ENTER: |
| mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY, |
| new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER))); |
| break; |
| |
| case KEYCODE_JP12_LEFT: |
| mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY, |
| new KeyEvent(KeyEvent.ACTION_DOWN, |
| KeyEvent.KEYCODE_DPAD_LEFT))); |
| break; |
| |
| case KEYCODE_JP12_RIGHT: |
| mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY, |
| new KeyEvent(KeyEvent.ACTION_DOWN, |
| KeyEvent.KEYCODE_DPAD_RIGHT))); |
| default: |
| if (primaryCode >= 0) { |
| if (mKeyboardView.isShifted()) { |
| primaryCode = Character.toUpperCase(primaryCode); |
| } |
| mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_CHAR, (char)primaryCode)); |
| } |
| } |
| |
| /* update shift key's state */ |
| if (!mCapsLock && primaryCode != KEYCODE_QWERTY_SHIFT) { |
| if(mCurrentKeyMode != KEYMODE_EN_NUMBER){ |
| int shift = (mAutoCaps)? getShiftKeyState(mWnn.getCurrentInputEditorInfo()) : 0; |
| if (shift != mShiftOn) { |
| Keyboard kbd = getShiftChangeKeyboard(shift); |
| mShiftOn = shift; |
| changeKeyboard(kbd); |
| } |
| }else{ |
| mShiftOn = KEYBOARD_SHIFT_OFF; |
| Keyboard kbd = getShiftChangeKeyboard(mShiftOn); |
| changeKeyboard(kbd); |
| } |
| } |
| } |
| } |
| |
| |
| |