1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/*
259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Copyright (C) 2008-2012  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.view.KeyEvent;
22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View;
23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.inputmethod.EditorInfo;
24e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawaimport android.view.inputmethod.InputConnection;
25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
2659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport jp.co.omronsoft.openwnn.Keyboard;
2759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma
28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.util.Log;
29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/**
313feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * The default Software Keyboard class for English IME.
32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
333feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD.  All Rights Reserved.
34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */
35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic class DefaultSoftKeyboardEN extends DefaultSoftKeyboard {
36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** 12-key keyboard [PHONE MODE] */
37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public static final int KEYCODE_PHONE  = -116;
38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project	/**
40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Keyboards toggled by ALT key.
41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * The normal keyboard(KEYMODE_EN_ALPHABET) and the number/symbol
43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * keyboard(KEYMODE_EN_NUMBER) is active.  The phone number
44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * keyboard(KEYMODE_EN_PHONE) is disabled.
45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static final boolean[] TOGGLE_KEYBOARD = {true, true, false};
47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Auto caps mode */
49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private boolean mAutoCaps = false;
50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project	/**
52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Default constructor
53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public DefaultSoftKeyboardEN() { }
55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Dismiss the pop-up keyboard.
58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * <br>
59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Nothing will be done if no pop-up keyboard is displaying.
60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void dismissPopupKeyboard() {
627b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	try {
637b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		if (mKeyboardView != null) {
647b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    			mKeyboardView.handleBack();
657b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		}
667b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	} catch (Exception ex) {
677b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		/* ignore */
687b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	}
69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#createKeyboards */
72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override protected void createKeyboards(OpenWnn parent) {
73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mKeyboard = new Keyboard[3][2][4][2][7][2];
74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Keyboard[][] keyList;
76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /***********************************************************************
77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         * English
78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project         ***********************************************************************/
79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* qwerty shift_off */
80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList = mKeyboard[LANG_EN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_ALPHABET][0] = new Keyboard(parent, R.xml.default_en_qwerty);
82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_NUMBER][0]   = new Keyboard(parent, R.xml.default_en_symbols);
83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* qwerty shift_on */
86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList = mKeyboard[LANG_EN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_ALPHABET][0] =
88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mKeyboard[LANG_EN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_EN_ALPHABET][0];
89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_NUMBER][0]   = new Keyboard(parent, R.xml.default_en_symbols_shift);
90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        keyList[KEYMODE_EN_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Get the shift key state from the editor.
95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
963feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     * @param editor	The information of editor
973feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     * @return 		state ID of the shift key (0:off, 1:on)
98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private int getShiftKeyState(EditorInfo editor) {
100e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        InputConnection connection = mWnn.getCurrentInputConnection();
101e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        if (connection != null) {
102e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            int caps = connection.getCursorCapsMode(editor.inputType);
103e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            return (caps == 0) ? 0 : 1;
104e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        } else {
105e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa            return 0;
106e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa        }
107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Switch the keymode
111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
1123feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa     * @param keyMode		Keymode
113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project	private void changeKeyMode(int keyMode) {
115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project		Keyboard keyboard = super.getModeChangeKeyboard(keyMode);
116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    	if (keyboard != null) {
117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    		mCurrentKeyMode = keyMode;
118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    		super.changeKeyboard(keyboard);
119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project		}
120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project	}
121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /***********************************************************************
123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * from DefaultSoftKeyboard
124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     ***********************************************************************/
125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#initView */
126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public View initView(OpenWnn parent, int width, int height) {
1277b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        View view = super.initView(parent, width, height);
1287b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
1297b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	/* default setting */
1307b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	mCurrentLanguage     = LANG_EN;
1317b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	mCurrentKeyboardType = KEYBOARD_QWERTY;
1327b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	mShiftOn             = KEYBOARD_SHIFT_OFF;
1337b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	mCurrentKeyMode      = KEYMODE_EN_ALPHABET;
1347b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
1357b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	Keyboard kbd = mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
1367b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	if (kbd == null) {
1377b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		if(mDisplayMode == LANDSCAPE){
1387b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    			return view;
1397b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		}
1407b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    		return null;
1417b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	}
1427b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	mCurrentKeyboard = null;
1437b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	changeKeyboard(kbd);
1447b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    	return view;
145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#setPreferences */
148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public void setPreferences(SharedPreferences pref, EditorInfo editor) {
149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        super.setPreferences(pref, editor);
150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* auto caps mode */
1527b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        mAutoCaps = pref.getBoolean("auto_caps", true);
153053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (editor.inputType & EditorInfo.TYPE_MASK_CLASS) {
155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case EditorInfo.TYPE_CLASS_NUMBER:
156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case EditorInfo.TYPE_CLASS_DATETIME:
157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentLanguage     = LANG_EN;
158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyboardType = KEYBOARD_QWERTY;
159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mShiftOn             = KEYBOARD_SHIFT_OFF;
160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyMode      = KEYMODE_EN_NUMBER;
161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbdn =
163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(kbdn);
166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case EditorInfo.TYPE_CLASS_PHONE:
169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentLanguage     = LANG_EN;
170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyboardType = KEYBOARD_QWERTY;
171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mShiftOn             = KEYBOARD_SHIFT_OFF;
172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyMode      = KEYMODE_EN_PHONE;
173053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbdp =
175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
177053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(kbdp);
178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentLanguage     = LANG_EN;
183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyboardType = KEYBOARD_QWERTY;
184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mShiftOn             = KEYBOARD_SHIFT_OFF;
185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mCurrentKeyMode      = KEYMODE_EN_ALPHABET;
186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbdq =
188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(kbdq);
191053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project             break;
192053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
193053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int shift = (mAutoCaps)? getShiftKeyState(mWnn.getCurrentInputEditorInfo()) : 0;
195053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (shift != mShiftOn) {
196053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbd = getShiftChangeKeyboard(shift);
197053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mShiftOn = shift;
198053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            changeKeyboard(kbd);
199053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#onKey */
203053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public void onKey(int primaryCode, int[] keyCodes) {
204053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (primaryCode) {
205053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_HAN_ALPHA:
206053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            this.changeKeyMode(KEYMODE_EN_ALPHABET);
207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_HAN_NUM:
210053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            this.changeKeyMode(KEYMODE_EN_NUMBER);
211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
213053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_PHONE:
214053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            this.changeKeyMode(KEYMODE_EN_PHONE);
215053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
216053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
217053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_EMOJI:
218053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_SYMBOLS));
219053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
221053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_TOGGLE_MODE:
222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            switch(mCurrentKeyMode){
223053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            case KEYMODE_EN_ALPHABET:
224053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (TOGGLE_KEYBOARD[KEYMODE_EN_NUMBER]){
225053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_NUMBER;
226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else if (TOGGLE_KEYBOARD[KEYMODE_EN_PHONE]) {
227053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_PHONE;
228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
229053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            case KEYMODE_EN_NUMBER:
231053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (TOGGLE_KEYBOARD[KEYMODE_EN_PHONE]) {
232053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_PHONE;
233053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else if(TOGGLE_KEYBOARD[KEYMODE_EN_ALPHABET]) {
234053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_ALPHABET;
235053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
236053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
237053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            case KEYMODE_EN_PHONE:
238053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (TOGGLE_KEYBOARD[KEYMODE_EN_ALPHABET]) {
239053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_ALPHABET;
240053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else if (TOGGLE_KEYBOARD[KEYMODE_EN_NUMBER]) {
241053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mCurrentKeyMode = KEYMODE_EN_NUMBER;
242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Keyboard kbdp =
246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
247053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            super.changeKeyboard(kbdp);
248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
249053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_QWERTY_BACKSPACE:
251053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_JP12_BACKSPACE:
252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)));
254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT:
257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            toggleShiftLock();
258053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DefaultSoftKeyboard.KEYCODE_QWERTY_ALT:
261053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            processAltKey();
262053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
263053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_QWERTY_ENTER:
265053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_ENTER:
266053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)));
268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_LEFT:
271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
272053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN,
273053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                                       KeyEvent.KEYCODE_DPAD_LEFT)));
274053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
275053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
276053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case KEYCODE_JP12_RIGHT:
277053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
278053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                          new KeyEvent(KeyEvent.ACTION_DOWN,
279053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                                       KeyEvent.KEYCODE_DPAD_RIGHT)));
280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
281053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (primaryCode >= 0) {
282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (mKeyboardView.isShifted()) {
283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    primaryCode = Character.toUpperCase(primaryCode);
284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_CHAR, (char)primaryCode));
286053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
288053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* update shift key's state */
290053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (!mCapsLock && primaryCode != KEYCODE_QWERTY_SHIFT) {
2913feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            if(mCurrentKeyMode != KEYMODE_EN_NUMBER){
2923feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                int shift = (mAutoCaps)? getShiftKeyState(mWnn.getCurrentInputEditorInfo()) : 0;
2933feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                if (shift != mShiftOn) {
2943feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                    Keyboard kbd = getShiftChangeKeyboard(shift);
2953feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                    mShiftOn = shift;
2963feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                    changeKeyboard(kbd);
2973feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                }
2983feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa            }else{
2993feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                mShiftOn = KEYBOARD_SHIFT_OFF;
3003feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa                Keyboard kbd = getShiftChangeKeyboard(mShiftOn);
301053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                changeKeyboard(kbd);
302053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
303053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
304053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
305053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
306053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
3077b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa
3083feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa
309