15a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka/* 28632bff2d5a8e1160989008dea6eff4b94b065ddTadashi G. Takaoka * Copyright (C) 2010 The Android Open Source Project 35a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * 45a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); you may not 55a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * use this file except in compliance with the License. You may obtain a copy of 65a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * the License at 75a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * 85a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 95a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * 105a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 115a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 125a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 135a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * License for the specific language governing permissions and limitations under 145a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * the License. 155a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka */ 165a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka 175a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaokapackage com.android.inputmethod.keyboard; 185a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka 19ac78633be28e8990fc3b3a8de192c80966e746e3Tadashi G. Takaokaimport com.android.inputmethod.latin.Constants; 20eea34598bf63f670f47d7b3f37b6436921e5fe02Tom Ouyangimport com.android.inputmethod.latin.InputPointers; 21eea34598bf63f670f47d7b3f37b6436921e5fe02Tom Ouyang 225a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaokapublic interface KeyboardActionListener { 235a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka 245a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka /** 25a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * Called when the user presses a key. This is sent before the {@link #onCodeInput} is called. 26a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * For keys that repeat, this is only called once. 275a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * 28a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * @param primaryCode the unicode of the key being pressed. If the touch is not on a valid key, 29a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * the value will be zero. 305a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka */ 312a88440419f49d100c73e067a823390f64aba3b1Tadashi G. Takaoka public void onPressKey(int primaryCode); 325a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka 335a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka /** 34a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * Called when the user releases a key. This is sent after the {@link #onCodeInput} is called. 35a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * For keys that repeat, this is only called once. 365a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * 37a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * @param primaryCode the code of the key that was released 38e59491460b0411bed430a5ca6eca0c56c5bf18d9Tadashi G. Takaoka * @param withSliding true if releasing has occurred because the user slid finger from the key 39e59491460b0411bed430a5ca6eca0c56c5bf18d9Tadashi G. Takaoka * to other key without releasing the finger. 405a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka */ 412a88440419f49d100c73e067a823390f64aba3b1Tadashi G. Takaoka public void onReleaseKey(int primaryCode, boolean withSliding); 425a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka 435a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka /** 448aa3f5a3ad6095a3355841ce30bce4877319d0a0Tadashi G. Takaoka * Send a key code to the listener. 455a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * 46a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * @param primaryCode this is the code of the key that was pressed 47a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * @param x x-coordinate pixel of touched event. If {@link #onCodeInput} is not called by 48ac78633be28e8990fc3b3a8de192c80966e746e3Tadashi G. Takaoka * {@link PointerTracker} or so, the value should be 49ac78633be28e8990fc3b3a8de192c80966e746e3Tadashi G. Takaoka * {@link Constants#NOT_A_COORDINATE}. If it's called on insertion from the 50ac78633be28e8990fc3b3a8de192c80966e746e3Tadashi G. Takaoka * suggestion strip, it should be {@link Constants#SUGGESTION_STRIP_COORDINATE}. 51a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * @param y y-coordinate pixel of touched event. If {@link #onCodeInput} is not called by 52ac78633be28e8990fc3b3a8de192c80966e746e3Tadashi G. Takaoka * {@link PointerTracker} or so, the value should be 53ac78633be28e8990fc3b3a8de192c80966e746e3Tadashi G. Takaoka * {@link Constants#NOT_A_COORDINATE}.If it's called on insertion from the 54ac78633be28e8990fc3b3a8de192c80966e746e3Tadashi G. Takaoka * suggestion strip, it should be {@link Constants#SUGGESTION_STRIP_COORDINATE}. 555a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka */ 56ca7ec2097ca6af1505c1e6aa8b81b6068ba46daesatok public void onCodeInput(int primaryCode, int x, int y); 57a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka 585a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka /** 595a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * Sends a sequence of characters to the listener. 605a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * 61a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka * @param text the sequence of characters to be displayed. 625a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka */ 63a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka public void onTextInput(CharSequence text); 645a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka 654be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka /** 664be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka * Called when user started batch input. 674be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka */ 684be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka public void onStartBatchInput(); 694be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka 70eea34598bf63f670f47d7b3f37b6436921e5fe02Tom Ouyang /** 7110102f02af1216cfca115d1742740f567b909e2cTadashi G. Takaoka * Sends the ongoing batch input points data. 72eea34598bf63f670f47d7b3f37b6436921e5fe02Tom Ouyang * @param batchPointers the batch input points representing the user input 73eea34598bf63f670f47d7b3f37b6436921e5fe02Tom Ouyang */ 7410102f02af1216cfca115d1742740f567b909e2cTadashi G. Takaoka public void onUpdateBatchInput(InputPointers batchPointers); 75eea34598bf63f670f47d7b3f37b6436921e5fe02Tom Ouyang 764be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka /** 7710102f02af1216cfca115d1742740f567b909e2cTadashi G. Takaoka * Sends the final batch input points data. 784be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka * 7910102f02af1216cfca115d1742740f567b909e2cTadashi G. Takaoka * @param batchPointers the batch input points representing the user input 804be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka */ 8110102f02af1216cfca115d1742740f567b909e2cTadashi G. Takaoka public void onEndBatchInput(InputPointers batchPointers); 824be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka 835a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka /** 845a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka * Called when user released a finger outside any key. 855a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka */ 86a96574fdd5e38a237a35b21a2b7c20a29138c648Tadashi G. Takaoka public void onCancelInput(); 87cadb2128f54b49be31bb4dc06374afe81ed028b7Ken Wakasa 88cadb2128f54b49be31bb4dc06374afe81ed028b7Ken Wakasa /** 89cadb2128f54b49be31bb4dc06374afe81ed028b7Ken Wakasa * Send a non-"code input" custom request to the listener. 90cadb2128f54b49be31bb4dc06374afe81ed028b7Ken Wakasa * @return true if the request has been consumed, false otherwise. 91cadb2128f54b49be31bb4dc06374afe81ed028b7Ken Wakasa */ 92cadb2128f54b49be31bb4dc06374afe81ed028b7Ken Wakasa public boolean onCustomRequest(int requestCode); 93e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka 94e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka public static class Adapter implements KeyboardActionListener { 95e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka @Override 962a88440419f49d100c73e067a823390f64aba3b1Tadashi G. Takaoka public void onPressKey(int primaryCode) {} 97e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka @Override 982a88440419f49d100c73e067a823390f64aba3b1Tadashi G. Takaoka public void onReleaseKey(int primaryCode, boolean withSliding) {} 99e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka @Override 100ca7ec2097ca6af1505c1e6aa8b81b6068ba46daesatok public void onCodeInput(int primaryCode, int x, int y) {} 101e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka @Override 102e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka public void onTextInput(CharSequence text) {} 103e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka @Override 1044be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka public void onStartBatchInput() {} 1054be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka @Override 10610102f02af1216cfca115d1742740f567b909e2cTadashi G. Takaoka public void onUpdateBatchInput(InputPointers batchPointers) {} 107eea34598bf63f670f47d7b3f37b6436921e5fe02Tom Ouyang @Override 10810102f02af1216cfca115d1742740f567b909e2cTadashi G. Takaoka public void onEndBatchInput(InputPointers batchPointers) {} 1094be03befe3cf771a33448367f50c517dc01ced21Tadashi G. Takaoka @Override 110e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka public void onCancelInput() {} 111e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka @Override 112e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka public boolean onCustomRequest(int requestCode) { 113e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka return false; 114e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka } 1155c641a9f59735f0eaa772bde027993275b1bdfd7Tadashi G. Takaoka 1165c641a9f59735f0eaa772bde027993275b1bdfd7Tadashi G. Takaoka // TODO: Remove this method when the vertical correction is removed. 1175c641a9f59735f0eaa772bde027993275b1bdfd7Tadashi G. Takaoka public static boolean isInvalidCoordinate(int coordinate) { 118ac78633be28e8990fc3b3a8de192c80966e746e3Tadashi G. Takaoka // Detect {@link Constants#NOT_A_COORDINATE}, 119ac78633be28e8990fc3b3a8de192c80966e746e3Tadashi G. Takaoka // {@link Constants#SUGGESTION_STRIP_COORDINATE}, and 120ac78633be28e8990fc3b3a8de192c80966e746e3Tadashi G. Takaoka // {@link Constants#SPELL_CHECKER_COORDINATE}. 1215c641a9f59735f0eaa772bde027993275b1bdfd7Tadashi G. Takaoka return coordinate < 0; 1225c641a9f59735f0eaa772bde027993275b1bdfd7Tadashi G. Takaoka } 123e3be3bcebc11892b536fdf650f74bba21af13383Tadashi G. Takaoka } 1245a309f57155fb95667c2ccdda730eaf175de8876Tadashi G. Takaoka} 125