1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/*
2053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
3053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
4053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * you may not use this file except in compliance with the License.
6053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * You may obtain a copy of the License at
7053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
8053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
10053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * See the License for the specific language governing permissions and
14053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * limitations under the License.
15053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */
16053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
17053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpackage jp.co.omronsoft.openwnn.EN;
18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
193feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawaimport jp.co.omronsoft.openwnn.*;
20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.SharedPreferences;
21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.inputmethodservice.Keyboard;
22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.KeyEvent;
23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View;
24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.inputmethod.EditorInfo;
25e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawaimport android.view.inputmethod.InputConnection;
26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.util.Log;
28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/**
303feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * The default Software Keyboard class for English IME.
31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
323feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD.  All Rights Reserved.
33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */
34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic class DefaultSoftKeyboardEN extends DefaultSoftKeyboard {
35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** 12-key keyboard [PHONE MODE] */
36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public static final int KEYCODE_PHONE  = -116;
37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project	/**
39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Keyboards toggled by ALT key.
40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * The normal keyboard(KEYMODE_EN_ALPHABET) and the number/symbol
42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * keyboard(KEYMODE_EN_NUMBER) is active.  The phone number
43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * keyboard(KEYMODE_EN_PHONE) is disabled.
44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final boolean[] TOGGLE_KEYBOARD = {true, true, false};
46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Auto caps mode */
48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private boolean mAutoCaps = false;
49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project	/**
51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Default constructor
52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public DefaultSoftKeyboardEN() { }
54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Dismiss the pop-up keyboard.
57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Nothing will be done if no pop-up keyboard is displaying.
59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void dismissPopupKeyboard() {
617b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	try {
627b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		if (mKeyboardView != null) {
637b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    			mKeyboardView.handleBack();
647b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		}
657b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	} catch (Exception ex) {
667b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		/* ignore */
677b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	}
68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#createKeyboards */
71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override protected void createKeyboards(OpenWnn parent) {
72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mKeyboard = new Keyboard[3][2][4][2][7][2];
73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Keyboard[][] keyList;
75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /***********************************************************************
76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         * English
77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         ***********************************************************************/
78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* qwerty shift_off */
79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList = mKeyboard[LANG_EN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_ALPHABET][0] = new Keyboard(parent, R.xml.default_en_qwerty);
81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_NUMBER][0]   = new Keyboard(parent, R.xml.default_en_symbols);
82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* qwerty shift_on */
85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList = mKeyboard[LANG_EN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_ALPHABET][0] =
87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mKeyboard[LANG_EN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_EN_ALPHABET][0];
88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_NUMBER][0]   = new Keyboard(parent, R.xml.default_en_symbols_shift);
89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Get the shift key state from the editor.
94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
953feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     * @param editor	The information of editor
963feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     * @return 		state ID of the shift key (0:off, 1:on)
97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private int getShiftKeyState(EditorInfo editor) {
99e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        InputConnection connection = mWnn.getCurrentInputConnection();
100e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        if (connection != null) {
101e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            int caps = connection.getCursorCapsMode(editor.inputType);
102e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            return (caps == 0) ? 0 : 1;
103e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        } else {
104e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            return 0;
105e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        }
106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Switch the keymode
110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
1113feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     * @param keyMode		Keymode
112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project	private void changeKeyMode(int keyMode) {
114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project		Keyboard keyboard = super.getModeChangeKeyboard(keyMode);
115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    	if (keyboard != null) {
116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    		mCurrentKeyMode = keyMode;
117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    		super.changeKeyboard(keyboard);
118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project		}
119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project	}
120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /***********************************************************************
122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * from DefaultSoftKeyboard
123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     ***********************************************************************/
124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#initView */
125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public View initView(OpenWnn parent, int width, int height) {
1267b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        View view = super.initView(parent, width, height);
1277b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
1287b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	/* default setting */
1297b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	mCurrentLanguage     = LANG_EN;
1307b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	mCurrentKeyboardType = KEYBOARD_QWERTY;
1317b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	mShiftOn             = KEYBOARD_SHIFT_OFF;
1327b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	mCurrentKeyMode      = KEYMODE_EN_ALPHABET;
1337b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
1347b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	Keyboard kbd = mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
1357b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	if (kbd == null) {
1367b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		if(mDisplayMode == LANDSCAPE){
1377b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    			return view;
1387b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		}
1397b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		return null;
1407b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	}
1417b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	mCurrentKeyboard = null;
1427b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	changeKeyboard(kbd);
1437b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	return view;
144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#setPreferences */
147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public void setPreferences(SharedPreferences pref, EditorInfo editor) {
148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        super.setPreferences(pref, editor);
149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* auto caps mode */
1517b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        mAutoCaps = pref.getBoolean("auto_caps", true);
152053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
153053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (editor.inputType & EditorInfo.TYPE_MASK_CLASS) {
154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case EditorInfo.TYPE_CLASS_NUMBER:
155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case EditorInfo.TYPE_CLASS_DATETIME:
156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentLanguage     = LANG_EN;
157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyboardType = KEYBOARD_QWERTY;
158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mShiftOn             = KEYBOARD_SHIFT_OFF;
159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyMode      = KEYMODE_EN_NUMBER;
160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbdn =
162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(kbdn);
165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case EditorInfo.TYPE_CLASS_PHONE:
168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentLanguage     = LANG_EN;
169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyboardType = KEYBOARD_QWERTY;
170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mShiftOn             = KEYBOARD_SHIFT_OFF;
171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyMode      = KEYMODE_EN_PHONE;
172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
173053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbdp =
174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(kbdp);
177053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentLanguage     = LANG_EN;
182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyboardType = KEYBOARD_QWERTY;
183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mShiftOn             = KEYBOARD_SHIFT_OFF;
184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyMode      = KEYMODE_EN_ALPHABET;
185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbdq =
187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(kbdq);
190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project             break;
191053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
192053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
193053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int shift = (mAutoCaps)? getShiftKeyState(mWnn.getCurrentInputEditorInfo()) : 0;
194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (shift != mShiftOn) {
195053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbd = getShiftChangeKeyboard(shift);
196053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mShiftOn = shift;
197053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(kbd);
198053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
199053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#onKey */
202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public void onKey(int primaryCode, int[] keyCodes) {
203053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (primaryCode) {
204053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_HAN_ALPHA:
205053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            this.changeKeyMode(KEYMODE_EN_ALPHABET);
206053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_HAN_NUM:
209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            this.changeKeyMode(KEYMODE_EN_NUMBER);
210053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_PHONE:
213053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            this.changeKeyMode(KEYMODE_EN_PHONE);
214053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
215053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
216053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_EMOJI:
217053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_SYMBOLS));
218053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
219053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_TOGGLE_MODE:
221053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            switch(mCurrentKeyMode){
222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            case KEYMODE_EN_ALPHABET:
223053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (TOGGLE_KEYBOARD[KEYMODE_EN_NUMBER]){
224053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_NUMBER;
225053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else if (TOGGLE_KEYBOARD[KEYMODE_EN_PHONE]) {
226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_PHONE;
227053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
229053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            case KEYMODE_EN_NUMBER:
230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (TOGGLE_KEYBOARD[KEYMODE_EN_PHONE]) {
231053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_PHONE;
232053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else if(TOGGLE_KEYBOARD[KEYMODE_EN_ALPHABET]) {
233053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_ALPHABET;
234053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
235053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
236053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            case KEYMODE_EN_PHONE:
237053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (TOGGLE_KEYBOARD[KEYMODE_EN_ALPHABET]) {
238053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_ALPHABET;
239053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else if (TOGGLE_KEYBOARD[KEYMODE_EN_NUMBER]) {
240053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_NUMBER;
241053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbdp =
245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            super.changeKeyboard(kbdp);
247053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
249053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_QWERTY_BACKSPACE:
250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_JP12_BACKSPACE:
251053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)));
253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT:
256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            toggleShiftLock();
257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
258053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_QWERTY_ALT:
260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            processAltKey();
261053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
262053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
263053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_ENTER:
264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_ENTER:
265053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
266053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)));
267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_LEFT:
270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN,
272053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                                       KeyEvent.KEYCODE_DPAD_LEFT)));
273053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
274053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
275053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_RIGHT:
276053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
277053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN,
278053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                                       KeyEvent.KEYCODE_DPAD_RIGHT)));
279053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (primaryCode >= 0) {
281053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (mKeyboardView.isShifted()) {
282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    primaryCode = Character.toUpperCase(primaryCode);
283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_CHAR, (char)primaryCode));
285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
286053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
288053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* update shift key's state */
289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (!mCapsLock && primaryCode != KEYCODE_QWERTY_SHIFT) {
2903feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            if(mCurrentKeyMode != KEYMODE_EN_NUMBER){
2913feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                int shift = (mAutoCaps)? getShiftKeyState(mWnn.getCurrentInputEditorInfo()) : 0;
2923feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                if (shift != mShiftOn) {
2933feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                    Keyboard kbd = getShiftChangeKeyboard(shift);
2943feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                    mShiftOn = shift;
2953feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                    changeKeyboard(kbd);
2963feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                }
2973feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            }else{
2983feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                mShiftOn = KEYBOARD_SHIFT_OFF;
2993feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                Keyboard kbd = getShiftChangeKeyboard(mShiftOn);
300053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                changeKeyboard(kbd);
301053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
302053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
303053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
304053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
305053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
3067b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
3073feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa
308