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; 18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport jp.co.omronsoft.openwnn.JAJP.*; 20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.inputmethodservice.InputMethodService; 21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.WindowManager; 22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.Context; 23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View; 24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.KeyEvent; 252d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawaimport android.view.MotionEvent; 26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.SharedPreferences; 27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.preference.PreferenceManager; 28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.util.Log; 30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.os.*; 31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.inputmethod.*; 32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.res.Configuration; 33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.graphics.*; 34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.graphics.drawable.*; 35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 3659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport java.util.ArrayList; 3759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport java.util.List; 3859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 3959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport jp.co.omronsoft.openwnn.KeyAction; 4059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/** 423feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * The OpenWnn IME's base class. 43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 4459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @author Copyright (C) 2009-2011 OMRON SOFTWARE CO., LTD. All Rights Reserved. 45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic class OpenWnn extends InputMethodService { 47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Candidate view */ 49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected CandidatesViewManager mCandidatesViewManager = null; 50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Input view (software keyboard) */ 51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected InputViewManager mInputViewManager = null; 52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Conversion engine */ 53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected WnnEngine mConverter = null; 54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Pre-converter (for Romaji-to-Kana input, Hangul input, etc.) */ 55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected LetterConverter mPreConverter = null; 56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The inputing/editing string */ 57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected ComposingText mComposingText = null; 58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The input connection */ 59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected InputConnection mInputConnection = null; 60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Auto hide candidate view */ 61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected boolean mAutoHideMode = true; 62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Direct input mode */ 63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected boolean mDirectInputMode = true; 64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Flag for checking if the previous down key event is consumed by OpenWnn */ 66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private boolean mConsumeDownEvent; 67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 6859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** for isXLarge */ 6959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma private static boolean mIsXLarge = false; 7059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 7159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** TextCandidatesViewManager */ 7259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma protected TextCandidatesViewManager mTextCandidatesViewManager = null; 7359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 7459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** TextCandidates1LineViewManager */ 7559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma protected TextCandidates1LineViewManager mTextCandidates1LineViewManager = null; 7659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 7759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** The instance of current IME */ 7859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma private static OpenWnn mCurrentIme; 7959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 8059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** KeyAction list */ 8159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma private List<KeyAction> KeyActionList = new ArrayList<KeyAction>(); 8259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Constructor 85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public OpenWnn() { 87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super(); 88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /*********************************************************************** 91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * InputMethodService 92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project **********************************************************************/ 93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.inputmethodservice.InputMethodService#onCreate */ 94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public void onCreate() { 9559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma updateXLargeMode(); 96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super.onCreate(); 977b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 10059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mCurrentIme = this; 10159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 10259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 10359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mTextCandidatesViewManager = new TextCandidatesViewManager(-1); 10459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma if (isXLarge()) { 10559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mTextCandidates1LineViewManager = 10659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma new TextCandidates1LineViewManager(OpenWnnEngineJAJP.LIMIT_OF_CANDIDATES_1LINE); 10759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mCandidatesViewManager = mTextCandidates1LineViewManager; 10859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } else { 10959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mCandidatesViewManager = mTextCandidatesViewManager; 11059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 1117b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mConverter != null) { mConverter.init(); } 113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mComposingText != null) { mComposingText.clear(); } 114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.inputmethodservice.InputMethodService#onCreateCandidatesView */ 117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public View onCreateCandidatesView() { 118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mCandidatesViewManager != null) { 119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); 12059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma if (isXLarge()) { 12159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mCandidatesViewManager = mTextCandidates1LineViewManager; 12259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mTextCandidatesViewManager.initView(this, 12359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma wm.getDefaultDisplay().getWidth(), 12459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma wm.getDefaultDisplay().getHeight()); 12559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } else { 12659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mCandidatesViewManager = mTextCandidatesViewManager; 12759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project View view = mCandidatesViewManager.initView(this, 129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wm.getDefaultDisplay().getWidth(), 130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wm.getDefaultDisplay().getHeight()); 131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL); 132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return view; 133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return super.onCreateCandidatesView(); 135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.inputmethodservice.InputMethodService#onCreateInputView */ 139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public View onCreateInputView() { 140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1427b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mInputViewManager != null) { 144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); 145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return mInputViewManager.initView(this, 146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wm.getDefaultDisplay().getWidth(), 147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wm.getDefaultDisplay().getHeight()); 148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return super.onCreateInputView(); 150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 152053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 153053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.inputmethodservice.InputMethodService#onDestroy */ 154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public void onDestroy() { 155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super.onDestroy(); 15659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mCurrentIme = null; 157e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa close(); 158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.inputmethodservice.InputMethodService#onKeyDown */ 161053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public boolean onKeyDown(int keyCode, KeyEvent event) { 162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mConsumeDownEvent = onEvent(new OpenWnnEvent(event)); 16359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 16459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma KeyAction Keycodeinfo = new KeyAction(); 16559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma Keycodeinfo.mConsumeDownEvent = mConsumeDownEvent; 16659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma Keycodeinfo.mKeyCode = keyCode; 16759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 16859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma int cnt = KeyActionList.size(); 16959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma if (cnt != 0) { 17059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma for (int i = 0; i < cnt; i++) { 17159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma if (KeyActionList.get(i).mKeyCode == keyCode) { 17259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma KeyActionList.remove(i); 17359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma break; 17459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 17559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 17659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 17759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma KeyActionList.add(Keycodeinfo); 178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (!mConsumeDownEvent) { 179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return super.onKeyDown(keyCode, event); 180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return mConsumeDownEvent; 182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.inputmethodservice.InputMethodService#onKeyUp */ 185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public boolean onKeyUp(int keyCode, KeyEvent event) { 186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project boolean ret = mConsumeDownEvent; 18759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma int cnt = KeyActionList.size(); 18859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma for (int i = 0; i < cnt; i++) { 18959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma KeyAction Keycodeinfo = KeyActionList.get(i); 19059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma if (Keycodeinfo.mKeyCode == keyCode) { 19159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma ret = Keycodeinfo.mConsumeDownEvent; 19259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma KeyActionList.remove(i); 19359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma break; 19459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 19559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 196053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (!ret) { 197053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = super.onKeyUp(keyCode, event); 1983feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa }else{ 19959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma ret = onEvent(new OpenWnnEvent(event)); 200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 20359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 20459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** 20559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Called when the key long press event occurred. 20659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * 20759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @see android.inputmethodservice.InputMethodService#onKeyLongPress 20859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma */ 20959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) { 21059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma if (mCurrentIme == null) { 21159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma Log.e("iWnn", "OpenWnn::onKeyLongPress() Unprocessing onCreate() "); 21259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma return super.onKeyLongPress(keyCode, event); 21359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 21459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 21559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma OpenWnnEvent wnnEvent = new OpenWnnEvent(event); 21659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma wnnEvent.code = OpenWnnEvent.KEYLONGPRESS; 21759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma return onEvent(wnnEvent); 21859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 219053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.inputmethodservice.InputMethodService#onStartInput */ 221053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public void onStartInput(EditorInfo attribute, boolean restarting) { 222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super.onStartInput(attribute, restarting); 223053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mInputConnection = getCurrentInputConnection(); 2242d6595cdc6058d8712a90fc499b7c8b539f81247Daisuke Miyakawa if (!restarting && mComposingText != null) { 225053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mComposingText.clear(); 226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 227053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 229053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.inputmethodservice.InputMethodService#onStartInputView */ 230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public void onStartInputView(EditorInfo attribute, boolean restarting) { 231053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super.onStartInputView(attribute, restarting); 232053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mInputConnection = getCurrentInputConnection(); 233053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 234053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project setCandidatesViewShown(false); 235053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mInputConnection != null) { 236053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDirectInputMode = false; 237053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mConverter != null) { mConverter.init(); } 238053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 239053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDirectInputMode = true; 240053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 241053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mCandidatesViewManager != null) { mCandidatesViewManager.setPreferences(pref); } 243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mInputViewManager != null) { mInputViewManager.setPreferences(pref, attribute); } 244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mPreConverter != null) { mPreConverter.setPreferences(pref); } 245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mConverter != null) { mConverter.setPreferences(pref); } 246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 247053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 2487b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** @see android.inputmethodservice.InputMethodService#requestHideSelf */ 249053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public void requestHideSelf(int flag) { 250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super.requestHideSelf(flag); 251053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mInputViewManager == null) { 252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project hideWindow(); 253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.inputmethodservice.InputMethodService#setCandidatesViewShown */ 257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public void setCandidatesViewShown(boolean shown) { 258053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super.setCandidatesViewShown(shown); 259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (shown) { 260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project showWindow(true); 261053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 262053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mAutoHideMode && mInputViewManager == null) { 263053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project hideWindow(); 264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 265053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 266053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.inputmethodservice.InputMethodService#hideWindow */ 269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public void hideWindow() { 270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super.hideWindow(); 271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDirectInputMode = true; 272053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project hideStatusIcon(); 273053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 274e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** @see android.inputmethodservice.InputMethodService#onComputeInsets */ 275e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa @Override public void onComputeInsets(InputMethodService.Insets outInsets) { 276e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa super.onComputeInsets(outInsets); 277e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa outInsets.contentTopInsets = outInsets.visibleTopInsets; 278e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 279053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 281053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /********************************************************************** 282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * OpenWnn 283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project **********************************************************************/ 284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Process an event. 286053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param ev An event 28877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa * @return {@code true} if the event is processed in this method; {@code false} if not. 289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 290053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public boolean onEvent(OpenWnnEvent ev) { 291053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 292053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 293053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 294053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 295053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Search a character for toggle input. 296053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 297053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param prevChar The character input previous 298053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param toggleTable Toggle table 2993feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * @param reverse {@code false} if toggle direction is forward, {@code true} if toggle direction is backward 30077ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa * @return A character ({@code null} if no character is found) 301053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 302053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected String searchToggleCharacter(String prevChar, String[] toggleTable, boolean reverse) { 303053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for (int i = 0; i < toggleTable.length; i++) { 304053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (prevChar.equals(toggleTable[i])) { 305053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (reverse) { 306053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i--; 307053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (i < 0) { 308053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return toggleTable[toggleTable.length - 1]; 309053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 310053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return toggleTable[i]; 311053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 312053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 313053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i++; 314053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (i == toggleTable.length) { 315053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return toggleTable[0]; 316053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 317053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return toggleTable[i]; 318053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 319053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 320053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 321053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 322053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return null; 323053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 324e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 325e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** 326e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa * Processing of resource open when IME ends. 327e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa */ 328e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa protected void close() { 329e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (mConverter != null) { mConverter.close(); } 330e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 33159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 33259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** 33359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Whether the x large mode. 33459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * 33559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @return {@code true} if x large; {@code false} if not x large. 33659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma */ 33759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma public static boolean isXLarge() { 33859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma return mIsXLarge; 33959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 34059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 34159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** 34259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Update the x large mode. 34359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma */ 34459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma public void updateXLargeMode() { 34559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mIsXLarge = ((getResources().getConfiguration().screenLayout & 34659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma Configuration.SCREENLAYOUT_SIZE_MASK) 34759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma == Configuration.SCREENLAYOUT_SIZE_XLARGE); 34859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 34959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 35059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** 35159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Get the instance of current IME. 35259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * 35359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @return the instance of current IME, See {@link jp.co.omronsoft.openwnn.OpenWnn} 35459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma */ 35559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma public static OpenWnn getCurrentIme() { 35659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma return mCurrentIme; 35759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 35859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 35959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** 36059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Check through key code in IME. 36159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * 36259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @param keyCode check key code. 36359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @return {@code true} if through key code; {@code false} otherwise. 36459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma */ 36559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma protected boolean isThroughKeyCode(int keyCode) { 36659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma boolean result; 36759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma switch (keyCode) { 36859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_CALL: 36959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_VOLUME_DOWN: 37059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_VOLUME_UP: 37159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: 37259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_NEXT: 37359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: 37459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_PREVIOUS: 37559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_REWIND: 37659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_STOP: 37759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MUTE: 37859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_HEADSETHOOK: 37959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_VOLUME_MUTE: 38059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_CLOSE: 38159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_EJECT: 38259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_PAUSE: 38359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_PLAY: 38459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MEDIA_RECORD: 38559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_MANNER_MODE: 38659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma result = true; 38759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma break; 38859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 38959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma default: 39059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma result = false; 39159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma break; 39259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 39359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 39459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma return result; 39559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 39659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 39759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** 39859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Check ten-key code. 39959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * 40059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @param keyCode check key code. 40159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @return {@code true} if ten-key code; {@code false} not ten-key code. 40259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma */ 40359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma protected boolean isTenKeyCode(int keyCode) { 40459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma boolean result = false; 40559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma switch (keyCode) { 40659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_0: 40759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_1: 40859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_2: 40959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_3: 41059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_4: 41159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_5: 41259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_6: 41359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_7: 41459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_8: 41559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_9: 41659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma case KeyEvent.KEYCODE_NUMPAD_DOT: 41759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma result = true; 41859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma break; 41959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 42059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma default: 42159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma break; 42259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 42359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 42459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma return result; 42559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 426053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 427