17898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/* 27898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 37898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 47898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * you may not use this file except in compliance with the License. 67898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * You may obtain a copy of the License at 77898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 87898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * See the License for the specific language governing permissions and 147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations under the License. 157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpackage com.android.inputmethod.pinyin; 187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.KeyEvent; 207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.view.inputmethod.InputConnection; 217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/** 237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Class to handle English input. 247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpublic class EnglishInputProcessor { 267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private int mLastKeyCode = KeyEvent.KEYCODE_UNKNOWN; 287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public boolean processKey(InputConnection inputContext, KeyEvent event, 307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project boolean upperCase, boolean realAction) { 317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == inputContext || null == event) return false; 327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int keyCode = event.getKeyCode(); 347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project CharSequence prefix = null; 367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project prefix = inputContext.getTextBeforeCursor(2, 0); 377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int keyChar; 397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project keyChar = 0; 407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (keyCode >= KeyEvent.KEYCODE_A && keyCode <= KeyEvent.KEYCODE_Z) { 417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project keyChar = keyCode - KeyEvent.KEYCODE_A + 'a'; 427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (upperCase) { 437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project keyChar = keyChar + 'A' - 'a'; 447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else if (keyCode >= KeyEvent.KEYCODE_0 467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project && keyCode <= KeyEvent.KEYCODE_9) 477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project keyChar = keyCode - KeyEvent.KEYCODE_0 + '0'; 487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project else if (keyCode == KeyEvent.KEYCODE_COMMA) 497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project keyChar = ','; 507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project else if (keyCode == KeyEvent.KEYCODE_PERIOD) 517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project keyChar = '.'; 527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project else if (keyCode == KeyEvent.KEYCODE_APOSTROPHE) 537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project keyChar = '\''; 547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project else if (keyCode == KeyEvent.KEYCODE_AT) 557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project keyChar = '@'; 567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project else if (keyCode == KeyEvent.KEYCODE_SLASH) keyChar = '/'; 577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (0 == keyChar) { 597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mLastKeyCode = keyCode; 607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project String insert = null; 627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (KeyEvent.KEYCODE_DEL == keyCode) { 637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (realAction) { 647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project inputContext.deleteSurroundingText(1, 0); 657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else if (KeyEvent.KEYCODE_ENTER == keyCode) { 677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project insert = "\n"; 687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else if (KeyEvent.KEYCODE_SPACE == keyCode) { 697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project insert = " "; 707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else { 717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return false; 727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null != insert && realAction) 757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project inputContext.commitText(insert, insert.length()); 767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return true; 787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (!realAction) 817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return true; 827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (KeyEvent.KEYCODE_SHIFT_LEFT == mLastKeyCode 847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project || KeyEvent.KEYCODE_SHIFT_LEFT == mLastKeyCode) { 857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (keyChar >= 'a' && keyChar <= 'z') 867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project keyChar = keyChar - 'a' + 'A'; 877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } else if (KeyEvent.KEYCODE_ALT_LEFT == mLastKeyCode) { 887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project String result = String.valueOf((char) keyChar); 917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project inputContext.commitText(result, result.length()); 927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mLastKeyCode = keyCode; 937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return true; 947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} 96