19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.view; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 216b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brownimport android.text.method.MetaKeyKeyListener; 228d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackbornimport android.util.Log; 2328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brownimport android.util.Slog; 246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brownimport android.util.SparseArray; 2583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackbornimport android.util.SparseIntArray; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyCharacterMap; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyCharacterMap.KeyData; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 30dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Object used to report key and button events. 31dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * <p> 32dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Each key press is described by a sequence of key events. A key press 33dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * starts with a key event with {@link #ACTION_DOWN}. If the key is held 34dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * sufficiently long that it repeats, then the initial down is followed 35dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * additional key events with {@link #ACTION_DOWN} and a non-zero value for 36dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * {@link #getRepeatCount()}. The last key event is a {@link #ACTION_UP} 37dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * for the key up. If the key press is canceled, the key up event will have the 38dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * {@link #FLAG_CANCELED} flag set. 39dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p> 40dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Key events are generally accompanied by a key code ({@link #getKeyCode()}), 41dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * scan code ({@link #getScanCode()}) and meta state ({@link #getMetaState()}). 42dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Key code constants are defined in this class. Scan code constants are raw 43dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * device-specific codes obtained from the OS and so are not generally meaningful 44dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * to applications unless interpreted using the {@link KeyCharacterMap}. 45dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Meta states describe the pressed state of key modifiers 46dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * such as {@link #META_SHIFT_ON} or {@link #META_ALT_ON}. 47dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p> 48497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Key codes typically correspond one-to-one with individual keys on an input device. 49497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Many keys and key combinations serve quite different functions on different 50497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * input devices so care must be taken when interpreting them. Always use the 51497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * {@link KeyCharacterMap} associated with the input device when mapping keys 52497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * to characters. Be aware that there may be multiple key input devices active 53497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * at the same time and each will have its own key character map. 54497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * </p><p> 55405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * As soft input methods can use multiple and inventive ways of inputting text, 56405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * there is no guarantee that any key press on a soft keyboard will generate a key 57405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * event: this is left to the IME's discretion, and in fact sending such events is 58405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * discouraged. You should never rely on receiving KeyEvents for any key on a soft 59405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * input method. In particular, the default software keyboard will never send any 60405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * key event to any application targetting Jelly Bean or later, and will only send 61405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * events for some presses of the delete and return keys to applications targetting 62405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * Ice Cream Sandwich or earlier. Be aware that other software input methods may 63405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * never send key events regardless of the version. Consider using editor actions 64405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * like {@link android.view.inputmethod.EditorInfo#IME_ACTION_DONE} if you need 65405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * specific interaction with the software keyboard, as it gives more visibility to 66405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * the user as to how your application will react to key presses. 67405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * </p><p> 68dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * When interacting with an IME, the framework may deliver key events 69dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * with the special action {@link #ACTION_MULTIPLE} that either specifies 70dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * that single repeated key code or a sequence of characters to insert. 71dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p> 72b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * In general, the framework cannot guarantee that the key events it delivers 73b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * to a view always constitute complete key sequences since some events may be dropped 74b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * or modified by containing views before they are delivered. The view implementation 75b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * should be prepared to handle {@link #FLAG_CANCELED} and should tolerate anomalous 76b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * situations such as receiving a new {@link #ACTION_DOWN} without first having 77b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * received an {@link #ACTION_UP} for the prior key press. 78dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p> 79dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Refer to {@link InputDevice} for more information about how different kinds of 80dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * input devices and sources represent keys and buttons. 81dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p> 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 83c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brownpublic class KeyEvent extends InputEvent implements Parcelable { 84dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Unknown key code. */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_UNKNOWN = 0; 86dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Soft Left key. 87dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Usually situated below the display on phones and used as a multi-function 88dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * feature key for selecting a software defined function shown on the bottom left 89dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * of the display. */ 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SOFT_LEFT = 1; 91dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Soft Right key. 92dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Usually situated below the display on phones and used as a multi-function 93dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * feature key for selecting a software defined function shown on the bottom right 94dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * of the display. */ 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SOFT_RIGHT = 2; 96dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Home key. 97dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * This key is handled by the framework and is never delivered to applications. */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_HOME = 3; 99dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Back key. */ 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_BACK = 4; 101dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Call key. */ 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_CALL = 5; 103dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: End Call key. */ 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_ENDCALL = 6; 105dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '0' key. */ 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_0 = 7; 107dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '1' key. */ 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_1 = 8; 109dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '2' key. */ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_2 = 9; 111dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '3' key. */ 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_3 = 10; 113dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '4' key. */ 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_4 = 11; 115dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '5' key. */ 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_5 = 12; 117dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '6' key. */ 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_6 = 13; 119dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '7' key. */ 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_7 = 14; 121dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '8' key. */ 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_8 = 15; 123dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '9' key. */ 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_9 = 16; 125dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '*' key. */ 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_STAR = 17; 127dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '#' key. */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_POUND = 18; 129dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Directional Pad Up key. 130dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * May also be synthesized from trackball motions. */ 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DPAD_UP = 19; 132dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Directional Pad Down key. 133dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * May also be synthesized from trackball motions. */ 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DPAD_DOWN = 20; 135dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Directional Pad Left key. 136dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * May also be synthesized from trackball motions. */ 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DPAD_LEFT = 21; 138dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Directional Pad Right key. 139dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * May also be synthesized from trackball motions. */ 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DPAD_RIGHT = 22; 141dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Directional Pad Center key. 142dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * May also be synthesized from trackball motions. */ 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DPAD_CENTER = 23; 144b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown /** Key code constant: Volume Up key. 145b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * Adjusts the speaker volume up. */ 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_VOLUME_UP = 24; 147b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown /** Key code constant: Volume Down key. 148b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * Adjusts the speaker volume down. */ 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_VOLUME_DOWN = 25; 150dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Power key. */ 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_POWER = 26; 152dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Camera key. 153dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to launch a camera application or take pictures. */ 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_CAMERA = 27; 155dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Clear key. */ 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_CLEAR = 28; 157dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'A' key. */ 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_A = 29; 159dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'B' key. */ 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_B = 30; 161dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'C' key. */ 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_C = 31; 163dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'D' key. */ 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_D = 32; 165dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'E' key. */ 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_E = 33; 167dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'F' key. */ 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_F = 34; 169dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'G' key. */ 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_G = 35; 171dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'H' key. */ 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_H = 36; 173dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'I' key. */ 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_I = 37; 175dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'J' key. */ 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_J = 38; 177dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'K' key. */ 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_K = 39; 179dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'L' key. */ 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_L = 40; 181dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'M' key. */ 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_M = 41; 183dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'N' key. */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_N = 42; 185dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'O' key. */ 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_O = 43; 187dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'P' key. */ 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_P = 44; 189dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'Q' key. */ 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_Q = 45; 191dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'R' key. */ 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_R = 46; 193dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'S' key. */ 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_S = 47; 195dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'T' key. */ 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_T = 48; 197dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'U' key. */ 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_U = 49; 199dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'V' key. */ 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_V = 50; 201dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'W' key. */ 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_W = 51; 203dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'X' key. */ 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_X = 52; 205dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'Y' key. */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_Y = 53; 207dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'Z' key. */ 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_Z = 54; 209dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: ',' key. */ 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_COMMA = 55; 211dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '.' key. */ 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_PERIOD = 56; 213dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Left Alt modifier key. */ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_ALT_LEFT = 57; 215dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Right Alt modifier key. */ 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_ALT_RIGHT = 58; 217dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Left Shift modifier key. */ 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SHIFT_LEFT = 59; 219dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Right Shift modifier key. */ 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SHIFT_RIGHT = 60; 221dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Tab key. */ 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_TAB = 61; 223dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Space key. */ 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SPACE = 62; 225224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown /** Key code constant: Symbol modifier key. 226224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown * Used to enter alternate symbols. */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SYM = 63; 228dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Explorer special function key. 229dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to launch a browser application. */ 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_EXPLORER = 64; 231dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Envelope special function key. 232dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to launch a mail application. */ 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_ENVELOPE = 65; 234dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Enter key. */ 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_ENTER = 66; 236224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown /** Key code constant: Backspace key. 237497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Deletes characters before the insertion point, unlike {@link #KEYCODE_FORWARD_DEL}. */ 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DEL = 67; 239dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '`' (backtick) key. */ 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_GRAVE = 68; 241dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '-'. */ 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_MINUS = 69; 243dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '=' key. */ 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_EQUALS = 70; 245dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '[' key. */ 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_LEFT_BRACKET = 71; 247dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: ']' key. */ 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_RIGHT_BRACKET = 72; 249dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '\' key. */ 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_BACKSLASH = 73; 251dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: ';' key. */ 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SEMICOLON = 74; 253dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: ''' (apostrophe) key. */ 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_APOSTROPHE = 75; 255dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '/' key. */ 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SLASH = 76; 257dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '@' key. */ 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_AT = 77; 259224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown /** Key code constant: Number modifier key. 260224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown * Used to enter numeric symbols. 261224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown * This key is not Num Lock; it is more like {@link #KEYCODE_ALT_LEFT} and is 262224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown * interpreted as an ALT key by {@link android.text.method.MetaKeyKeyListener}. */ 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_NUM = 78; 264dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Headset Hook key. 265dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to hang up calls and stop media. */ 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_HEADSETHOOK = 79; 267dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Camera Focus key. 268dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to focus the camera. */ 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_FOCUS = 80; // *Camera* focus 270dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '+' key. */ 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_PLUS = 81; 272dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Menu key. */ 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_MENU = 82; 274dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Notification key. */ 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_NOTIFICATION = 83; 276dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Search key. */ 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SEARCH = 84; 278dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Play/Pause media key. */ 279935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_PLAY_PAUSE= 85; 280dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Stop media key. */ 281935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_STOP = 86; 282dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Play Next media key. */ 283935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_NEXT = 87; 284dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Play Previous media key. */ 285935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_PREVIOUS = 88; 286dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Rewind media key. */ 287935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_REWIND = 89; 288dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Fast Forward media key. */ 289935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_FAST_FORWARD = 90; 290b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown /** Key code constant: Mute key. 291b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * Mutes the microphone, unlike {@link #KEYCODE_VOLUME_MUTE}. */ 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_MUTE = 91; 293dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Page Up key. */ 2944fedd80c1d3997d62073518973b1fe09862ebaa5Chih-Wei Huang public static final int KEYCODE_PAGE_UP = 92; 295dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Page Down key. */ 2964fedd80c1d3997d62073518973b1fe09862ebaa5Chih-Wei Huang public static final int KEYCODE_PAGE_DOWN = 93; 297dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Picture Symbols modifier key. 298dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to switch symbol sets (Emoji, Kao-moji). */ 299b032bc037399110f41cfdb838a792b3c65756323mogimo public static final int KEYCODE_PICTSYMBOLS = 94; // switch symbol-sets (Emoji,Kao-moji) 300dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Switch Charset modifier key. 301dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to switch character sets (Kanji, Katakana). */ 302b032bc037399110f41cfdb838a792b3c65756323mogimo public static final int KEYCODE_SWITCH_CHARSET = 95; // switch char-sets (Kanji,Katakana) 303dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: A Button key. 304dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the A button should be either the button labeled A 305dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the first button on the upper row of controller buttons. */ 306fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_A = 96; 307dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: B Button key. 308dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the B button should be either the button labeled B 309dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the second button on the upper row of controller buttons. */ 310fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_B = 97; 311dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: C Button key. 312dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the C button should be either the button labeled C 313dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the third button on the upper row of controller buttons. */ 314fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_C = 98; 315dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: X Button key. 316dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the X button should be either the button labeled X 317dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the first button on the lower row of controller buttons. */ 318fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_X = 99; 319dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Y Button key. 320dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the Y button should be either the button labeled Y 321dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the second button on the lower row of controller buttons. */ 322fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_Y = 100; 323dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Z Button key. 324dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the Z button should be either the button labeled Z 325dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the third button on the lower row of controller buttons. */ 326fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_Z = 101; 327dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: L1 Button key. 328dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the L1 button should be either the button labeled L1 (or L) 329dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the top left trigger button. */ 330fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_L1 = 102; 331dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: R1 Button key. 332dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the R1 button should be either the button labeled R1 (or R) 333dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the top right trigger button. */ 334fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_R1 = 103; 335dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: L2 Button key. 336dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the L2 button should be either the button labeled L2 337dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the bottom left trigger button. */ 338fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_L2 = 104; 339dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: R2 Button key. 340dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the R2 button should be either the button labeled R2 341dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the bottom right trigger button. */ 342fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_R2 = 105; 343dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Left Thumb Button key. 344dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the left thumb button indicates that the left (or only) 345dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * joystick is pressed. */ 346fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_THUMBL = 106; 347dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Right Thumb Button key. 348dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the right thumb button indicates that the right 349dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * joystick is pressed. */ 350fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_THUMBR = 107; 351dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Start Button key. 352dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the button labeled Start. */ 353fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_START = 108; 354dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Select Button key. 355dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the button labeled Select. */ 356fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_SELECT = 109; 357dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Mode Button key. 358dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the button labeled Mode. */ 359fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_MODE = 110; 360497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Escape key. */ 361497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_ESCAPE = 111; 362497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Forward Delete key. 363497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Deletes characters ahead of the insertion point, unlike {@link #KEYCODE_DEL}. */ 364497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_FORWARD_DEL = 112; 365497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Left Control modifier key. */ 366497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_CTRL_LEFT = 113; 367497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Right Control modifier key. */ 368497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_CTRL_RIGHT = 114; 36928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** Key code constant: Caps Lock key. */ 370497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_CAPS_LOCK = 115; 371497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Scroll Lock key. */ 372497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_SCROLL_LOCK = 116; 373497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Left Meta modifier key. */ 374497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_META_LEFT = 117; 375497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Right Meta modifier key. */ 376497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_META_RIGHT = 118; 377497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Function modifier key. */ 378497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_FUNCTION = 119; 379497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: System Request / Print Screen key. */ 380497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_SYSRQ = 120; 381497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Break / Pause key. */ 382497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_BREAK = 121; 383497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Home Movement key. 384497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Used for scrolling or moving the cursor around to the start of a line 385497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * or to the top of a list. */ 386497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MOVE_HOME = 122; 387497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: End Movement key. 388497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Used for scrolling or moving the cursor around to the end of a line 389497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * or to the bottom of a list. */ 390497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MOVE_END = 123; 391497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Insert key. 392497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Toggles insert / overwrite edit mode. */ 393497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_INSERT = 124; 394497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Forward key. 395497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Navigates forward in the history stack. Complement of {@link #KEYCODE_BACK}. */ 396497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_FORWARD = 125; 397497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Play media key. */ 398497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MEDIA_PLAY = 126; 399497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Pause media key. */ 400497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MEDIA_PAUSE = 127; 401497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Close media key. 402497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * May be used to close a CD tray, for example. */ 403497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MEDIA_CLOSE = 128; 404497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Eject media key. 405497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * May be used to eject a CD tray, for example. */ 406497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MEDIA_EJECT = 129; 407497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Record media key. */ 408497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MEDIA_RECORD = 130; 409497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F1 key. */ 410497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F1 = 131; 411497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F2 key. */ 412497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F2 = 132; 413497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F3 key. */ 414497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F3 = 133; 415497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F4 key. */ 416497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F4 = 134; 417497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F5 key. */ 418497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F5 = 135; 419497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F6 key. */ 420497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F6 = 136; 421497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F7 key. */ 422497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F7 = 137; 423497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F8 key. */ 424497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F8 = 138; 425497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F9 key. */ 426497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F9 = 139; 427497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F10 key. */ 428497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F10 = 140; 429497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F11 key. */ 430497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F11 = 141; 431497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F12 key. */ 432497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F12 = 142; 43328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** Key code constant: Num Lock key. 434497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * This is the Num Lock key; it is different from {@link #KEYCODE_NUM}. 43528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * This key alters the behavior of other keys on the numeric keypad. */ 436497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUM_LOCK = 143; 437497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '0' key. */ 438497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_0 = 144; 439497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '1' key. */ 440497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_1 = 145; 441497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '2' key. */ 442497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_2 = 146; 443497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '3' key. */ 444497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_3 = 147; 445497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '4' key. */ 446497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_4 = 148; 447497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '5' key. */ 448497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_5 = 149; 449497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '6' key. */ 450497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_6 = 150; 451497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '7' key. */ 452497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_7 = 151; 453497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '8' key. */ 454497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_8 = 152; 455497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '9' key. */ 456497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_9 = 153; 457497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '/' key (for division). */ 458497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_DIVIDE = 154; 459497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '*' key (for multiplication). */ 460497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_MULTIPLY = 155; 461497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '-' key (for subtraction). */ 462497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_SUBTRACT = 156; 463497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '+' key (for addition). */ 464497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_ADD = 157; 465497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '.' key (for decimals or digit grouping). */ 466497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_DOT = 158; 467497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad ',' key (for decimals or digit grouping). */ 468497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_COMMA = 159; 469497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad Enter key. */ 470497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_ENTER = 160; 471497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '=' key. */ 472497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_EQUALS = 161; 473497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '(' key. */ 474497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_LEFT_PAREN = 162; 475497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad ')' key. */ 476497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_RIGHT_PAREN = 163; 477b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown /** Key code constant: Volume Mute key. 478b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * Mutes the speaker, unlike {@link #KEYCODE_MUTE}. 479b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * This key should normally be implemented as a toggle such that the first press 480b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * mutes the speaker and the second press restores the original volume. */ 481b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown public static final int KEYCODE_VOLUME_MUTE = 164; 4823adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Info key. 4833adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * Common on TV remotes to show additional information related to what is 4843adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * currently being viewed. */ 4853adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_INFO = 165; 4863adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Channel up key. 4873adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, increments the television channel. */ 4883adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_CHANNEL_UP = 166; 4893adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Channel down key. 4903adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, decrements the television channel. */ 4913adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_CHANNEL_DOWN = 167; 4923adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Zoom in key. */ 4933adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_ZOOM_IN = 168; 4943adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Zoom out key. */ 4953adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_ZOOM_OUT = 169; 4963adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: TV key. 4973adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, switches to viewing live TV. */ 4983adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_TV = 170; 4993adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Window key. 5003adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, toggles picture-in-picture mode or other windowing functions. */ 5013adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_WINDOW = 171; 5023adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Guide key. 5033adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, shows a programming guide. */ 5043adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_GUIDE = 172; 5053adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: DVR key. 5063adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On some TV remotes, switches to a DVR mode for recorded shows. */ 5073adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_DVR = 173; 5083adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Bookmark key. 5093adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On some TV remotes, bookmarks content or web pages. */ 5103adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_BOOKMARK = 174; 5113adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Toggle captions key. 5123adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * Switches the mode for closed-captioning text, for example during television shows. */ 5133adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_CAPTIONS = 175; 5143adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Settings key. 5153adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * Starts the system settings activity. */ 5163adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_SETTINGS = 176; 5173adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: TV power key. 5183adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, toggles the power on a television screen. */ 5193adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_TV_POWER = 177; 5203adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: TV input key. 5213adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, switches the input on a television screen. */ 5223adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_TV_INPUT = 178; 5233adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Set-top-box power key. 5243adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, toggles the power on an external Set-top-box. */ 5253adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_STB_POWER = 179; 5263adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Set-top-box input key. 5273adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, switches the input mode on an external Set-top-box. */ 5283adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_STB_INPUT = 180; 5293adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: A/V Receiver power key. 5303adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, toggles the power on an external A/V Receiver. */ 5313adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_AVR_POWER = 181; 5323adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: A/V Receiver input key. 5333adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, switches the input mode on an external A/V Receiver. */ 5343adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_AVR_INPUT = 182; 5353adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Red "programmable" key. 5363adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, acts as a contextual/programmable key. */ 5373adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_PROG_RED = 183; 5383adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Green "programmable" key. 5393adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, actsas a contextual/programmable key. */ 5403adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_PROG_GREEN = 184; 5413adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Yellow "programmable" key. 5423adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, acts as a contextual/programmable key. */ 5433adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_PROG_YELLOW = 185; 5443adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Blue "programmable" key. 5453adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, acts as a contextual/programmable key. */ 5463adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_PROG_BLUE = 186; 54749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown /** Key code constant: App switch key. 54849ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * Should bring up the application switcher dialog. */ 54949ed71db425c5054e3ad9526496a7e116c89556bJeff Brown public static final int KEYCODE_APP_SWITCH = 187; 550cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #1.*/ 551cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_1 = 188; 552cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #2.*/ 553cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_2 = 189; 554cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #3.*/ 555cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_3 = 190; 556cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #4.*/ 557cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_4 = 191; 558cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #5.*/ 559cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_5 = 192; 560cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #6.*/ 561cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_6 = 193; 562cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #7.*/ 563cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_7 = 194; 564cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #8.*/ 565cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_8 = 195; 566cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #9.*/ 567cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_9 = 196; 568cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #10.*/ 569cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_10 = 197; 570cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #11.*/ 571cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_11 = 198; 572cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #12.*/ 573cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_12 = 199; 574cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #13.*/ 575cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_13 = 200; 576cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #14.*/ 577cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_14 = 201; 578cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #15.*/ 579cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_15 = 202; 580cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #16.*/ 581cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_16 = 203; 5829812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown /** Key code constant: Language Switch key. 5839812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * Toggles the current input language such as switching between English and Japanese on 5849812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * a QWERTY keyboard. On some devices, the same function may be performed by 5859812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * pressing Shift+Spacebar. */ 5869812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown public static final int KEYCODE_LANGUAGE_SWITCH = 204; 5879812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown /** Key code constant: Manner Mode key. 5889812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * Toggles silent or vibrate mode on and off to make the device behave more politely 5899812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * in certain settings such as on a crowded train. On some devices, the key may only 5909812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * operate when long-pressed. */ 5919812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown public static final int KEYCODE_MANNER_MODE = 205; 5929812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown /** Key code constant: 3D Mode key. 5939812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * Toggles the display between 2D and 3D mode. */ 5949812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown public static final int KEYCODE_3D_MODE = 206; 5956651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown /** Key code constant: Contacts special function key. 5966651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown * Used to launch an address book application. */ 5976651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown public static final int KEYCODE_CONTACTS = 207; 5986651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown /** Key code constant: Calendar special function key. 5996651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown * Used to launch a calendar application. */ 6006651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown public static final int KEYCODE_CALENDAR = 208; 6016651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown /** Key code constant: Music special function key. 6026651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown * Used to launch a music player application. */ 6036651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown public static final int KEYCODE_MUSIC = 209; 6046651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown /** Key code constant: Calculator special function key. 6056651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown * Used to launch a calculator application. */ 6066651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown public static final int KEYCODE_CALCULATOR = 210; 6077511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese full-width / half-width key. */ 6087511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_ZENKAKU_HANKAKU = 211; 6097511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese alphanumeric key. */ 6107511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_EISU = 212; 6117511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese non-conversion key. */ 6127511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_MUHENKAN = 213; 6137511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese conversion key. */ 6147511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_HENKAN = 214; 6157511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese katakana / hiragana key. */ 6167511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_KATAKANA_HIRAGANA = 215; 6177511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese Yen key. */ 6187511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_YEN = 216; 6197511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese Ro key. */ 6207511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_RO = 217; 6217511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese kana key. */ 6227511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_KANA = 218; 623de7a8ead2467a4a152a5a9b2416c8048f1b48bbbJeff Brown /** Key code constant: Assist key. 624de7a8ead2467a4a152a5a9b2416c8048f1b48bbbJeff Brown * Launches the global assist activity. Not delivered to applications. */ 625de7a8ead2467a4a152a5a9b2416c8048f1b48bbbJeff Brown public static final int KEYCODE_ASSIST = 219; 626497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 627de7a8ead2467a4a152a5a9b2416c8048f1b48bbbJeff Brown private static final int LAST_KEYCODE = KEYCODE_ASSIST; 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // NOTE: If you add a new keycode here you must also add it to: 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // isSystem() 63146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown // native/include/android/keycodes.h 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // frameworks/base/include/ui/KeycodeLabels.h 633fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown // external/webkit/WebKit/android/plugins/ANPKeyCodes.h 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // frameworks/base/core/res/res/values/attrs.xml 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // emulator? 6366651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown // LAST_KEYCODE 6376651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown // KEYCODE_SYMBOLIC_NAMES 638935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // 639935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // Also Android currently does not reserve code ranges for vendor- 640935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // specific key codes. If you have new key codes to have, you 641935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // MUST contribute a patch to the open source project to define 642935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // those new codes. This is intended to maintain a consistent 643935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // set of key code definitions across all Android devices. 644497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 6456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown // Symbolic names of all key codes. 6466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown private static final SparseArray<String> KEYCODE_SYMBOLIC_NAMES = new SparseArray<String>(); 6476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown private static void populateKeycodeSymbolicNames() { 6486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown SparseArray<String> names = KEYCODE_SYMBOLIC_NAMES; 6496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_UNKNOWN, "KEYCODE_UNKNOWN"); 6506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SOFT_LEFT, "KEYCODE_SOFT_LEFT"); 6516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SOFT_RIGHT, "KEYCODE_SOFT_RIGHT"); 6526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_HOME, "KEYCODE_HOME"); 6536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BACK, "KEYCODE_BACK"); 6546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_CALL, "KEYCODE_CALL"); 6556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_ENDCALL, "KEYCODE_ENDCALL"); 6566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_0, "KEYCODE_0"); 6576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_1, "KEYCODE_1"); 6586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_2, "KEYCODE_2"); 6596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_3, "KEYCODE_3"); 6606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_4, "KEYCODE_4"); 6616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_5, "KEYCODE_5"); 6626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_6, "KEYCODE_6"); 6636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_7, "KEYCODE_7"); 6646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_8, "KEYCODE_8"); 6656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_9, "KEYCODE_9"); 6666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_STAR, "KEYCODE_STAR"); 6676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_POUND, "KEYCODE_POUND"); 6686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_DPAD_UP, "KEYCODE_DPAD_UP"); 6696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_DPAD_DOWN, "KEYCODE_DPAD_DOWN"); 6706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_DPAD_LEFT, "KEYCODE_DPAD_LEFT"); 6716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_DPAD_RIGHT, "KEYCODE_DPAD_RIGHT"); 6726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_DPAD_CENTER, "KEYCODE_DPAD_CENTER"); 6736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_VOLUME_UP, "KEYCODE_VOLUME_UP"); 6746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_VOLUME_DOWN, "KEYCODE_VOLUME_DOWN"); 6756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_POWER, "KEYCODE_POWER"); 6766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_CAMERA, "KEYCODE_CAMERA"); 6776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_CLEAR, "KEYCODE_CLEAR"); 6786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_A, "KEYCODE_A"); 6796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_B, "KEYCODE_B"); 6806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_C, "KEYCODE_C"); 6816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_D, "KEYCODE_D"); 6826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_E, "KEYCODE_E"); 6836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F, "KEYCODE_F"); 6846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_G, "KEYCODE_G"); 6856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_H, "KEYCODE_H"); 6866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_I, "KEYCODE_I"); 6876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_J, "KEYCODE_J"); 6886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_K, "KEYCODE_K"); 6896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_L, "KEYCODE_L"); 6906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_M, "KEYCODE_M"); 6916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_N, "KEYCODE_N"); 6926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_O, "KEYCODE_O"); 6936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_P, "KEYCODE_P"); 6946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_Q, "KEYCODE_Q"); 6956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_R, "KEYCODE_R"); 6966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_S, "KEYCODE_S"); 6976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_T, "KEYCODE_T"); 6986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_U, "KEYCODE_U"); 6996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_V, "KEYCODE_V"); 7006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_W, "KEYCODE_W"); 7016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_X, "KEYCODE_X"); 7026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_Y, "KEYCODE_Y"); 7036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_Z, "KEYCODE_Z"); 7046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_COMMA, "KEYCODE_COMMA"); 7056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_PERIOD, "KEYCODE_PERIOD"); 7066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_ALT_LEFT, "KEYCODE_ALT_LEFT"); 7076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_ALT_RIGHT, "KEYCODE_ALT_RIGHT"); 7086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SHIFT_LEFT, "KEYCODE_SHIFT_LEFT"); 7096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SHIFT_RIGHT, "KEYCODE_SHIFT_RIGHT"); 7106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_TAB, "KEYCODE_TAB"); 7116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SPACE, "KEYCODE_SPACE"); 7126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SYM, "KEYCODE_SYM"); 7136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_EXPLORER, "KEYCODE_EXPLORER"); 7146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_ENVELOPE, "KEYCODE_ENVELOPE"); 7156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_ENTER, "KEYCODE_ENTER"); 7166f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_DEL, "KEYCODE_DEL"); 7176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_GRAVE, "KEYCODE_GRAVE"); 7186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MINUS, "KEYCODE_MINUS"); 7196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_EQUALS, "KEYCODE_EQUALS"); 7206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_LEFT_BRACKET, "KEYCODE_LEFT_BRACKET"); 7216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_RIGHT_BRACKET, "KEYCODE_RIGHT_BRACKET"); 7226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BACKSLASH, "KEYCODE_BACKSLASH"); 7236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SEMICOLON, "KEYCODE_SEMICOLON"); 7246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_APOSTROPHE, "KEYCODE_APOSTROPHE"); 7256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SLASH, "KEYCODE_SLASH"); 7266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_AT, "KEYCODE_AT"); 7276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUM, "KEYCODE_NUM"); 7286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_HEADSETHOOK, "KEYCODE_HEADSETHOOK"); 7296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_FOCUS, "KEYCODE_FOCUS"); 7306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_PLUS, "KEYCODE_PLUS"); 7316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MENU, "KEYCODE_MENU"); 7326f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NOTIFICATION, "KEYCODE_NOTIFICATION"); 7336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SEARCH, "KEYCODE_SEARCH"); 7346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_PLAY_PAUSE, "KEYCODE_MEDIA_PLAY_PAUSE"); 7356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_STOP, "KEYCODE_MEDIA_STOP"); 7366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_NEXT, "KEYCODE_MEDIA_NEXT"); 7376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_PREVIOUS, "KEYCODE_MEDIA_PREVIOUS"); 7386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_REWIND, "KEYCODE_MEDIA_REWIND"); 7396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_FAST_FORWARD, "KEYCODE_MEDIA_FAST_FORWARD"); 7406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MUTE, "KEYCODE_MUTE"); 7416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_PAGE_UP, "KEYCODE_PAGE_UP"); 7426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_PAGE_DOWN, "KEYCODE_PAGE_DOWN"); 7436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_PICTSYMBOLS, "KEYCODE_PICTSYMBOLS"); 7446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SWITCH_CHARSET, "KEYCODE_SWITCH_CHARSET"); 7456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_A, "KEYCODE_BUTTON_A"); 7466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_B, "KEYCODE_BUTTON_B"); 7476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_C, "KEYCODE_BUTTON_C"); 7486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_X, "KEYCODE_BUTTON_X"); 7496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_Y, "KEYCODE_BUTTON_Y"); 7506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_Z, "KEYCODE_BUTTON_Z"); 7516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_L1, "KEYCODE_BUTTON_L1"); 7526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_R1, "KEYCODE_BUTTON_R1"); 7536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_L2, "KEYCODE_BUTTON_L2"); 7546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_R2, "KEYCODE_BUTTON_R2"); 7556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_THUMBL, "KEYCODE_BUTTON_THUMBL"); 7566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_THUMBR, "KEYCODE_BUTTON_THUMBR"); 7576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_START, "KEYCODE_BUTTON_START"); 7586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_SELECT, "KEYCODE_BUTTON_SELECT"); 7596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_MODE, "KEYCODE_BUTTON_MODE"); 7606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_ESCAPE, "KEYCODE_ESCAPE"); 7616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_FORWARD_DEL, "KEYCODE_FORWARD_DEL"); 7626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_CTRL_LEFT, "KEYCODE_CTRL_LEFT"); 7636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_CTRL_RIGHT, "KEYCODE_CTRL_RIGHT"); 7646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_CAPS_LOCK, "KEYCODE_CAPS_LOCK"); 7656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SCROLL_LOCK, "KEYCODE_SCROLL_LOCK"); 7666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_META_LEFT, "KEYCODE_META_LEFT"); 7676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_META_RIGHT, "KEYCODE_META_RIGHT"); 7686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_FUNCTION, "KEYCODE_FUNCTION"); 7696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SYSRQ, "KEYCODE_SYSRQ"); 7706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BREAK, "KEYCODE_BREAK"); 7716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MOVE_HOME, "KEYCODE_MOVE_HOME"); 7726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MOVE_END, "KEYCODE_MOVE_END"); 7736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_INSERT, "KEYCODE_INSERT"); 7746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_FORWARD, "KEYCODE_FORWARD"); 7756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_PLAY, "KEYCODE_MEDIA_PLAY"); 7766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_PAUSE, "KEYCODE_MEDIA_PAUSE"); 7776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_CLOSE, "KEYCODE_MEDIA_CLOSE"); 7786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_EJECT, "KEYCODE_MEDIA_EJECT"); 7796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_MEDIA_RECORD, "KEYCODE_MEDIA_RECORD"); 7806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F1, "KEYCODE_F1"); 7816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F2, "KEYCODE_F2"); 7826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F3, "KEYCODE_F3"); 7836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F4, "KEYCODE_F4"); 7846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F5, "KEYCODE_F5"); 7856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F6, "KEYCODE_F6"); 7866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F7, "KEYCODE_F7"); 7876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F8, "KEYCODE_F8"); 7886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F9, "KEYCODE_F9"); 7896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F10, "KEYCODE_F10"); 7906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F11, "KEYCODE_F11"); 7916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_F12, "KEYCODE_F12"); 7926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUM_LOCK, "KEYCODE_NUM_LOCK"); 7936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_0, "KEYCODE_NUMPAD_0"); 7946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_1, "KEYCODE_NUMPAD_1"); 7956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_2, "KEYCODE_NUMPAD_2"); 7966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_3, "KEYCODE_NUMPAD_3"); 7976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_4, "KEYCODE_NUMPAD_4"); 7986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_5, "KEYCODE_NUMPAD_5"); 7996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_6, "KEYCODE_NUMPAD_6"); 8006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_7, "KEYCODE_NUMPAD_7"); 8016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_8, "KEYCODE_NUMPAD_8"); 8026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_9, "KEYCODE_NUMPAD_9"); 8036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_DIVIDE, "KEYCODE_NUMPAD_DIVIDE"); 8046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_MULTIPLY, "KEYCODE_NUMPAD_MULTIPLY"); 8056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_SUBTRACT, "KEYCODE_NUMPAD_SUBTRACT"); 8066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_ADD, "KEYCODE_NUMPAD_ADD"); 8076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_DOT, "KEYCODE_NUMPAD_DOT"); 8086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_COMMA, "KEYCODE_NUMPAD_COMMA"); 8096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_ENTER, "KEYCODE_NUMPAD_ENTER"); 8106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_EQUALS, "KEYCODE_NUMPAD_EQUALS"); 8116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_LEFT_PAREN, "KEYCODE_NUMPAD_LEFT_PAREN"); 8126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_NUMPAD_RIGHT_PAREN, "KEYCODE_NUMPAD_RIGHT_PAREN"); 8136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_VOLUME_MUTE, "KEYCODE_VOLUME_MUTE"); 8146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_INFO, "KEYCODE_INFO"); 8156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_CHANNEL_UP, "KEYCODE_CHANNEL_UP"); 8166f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_CHANNEL_DOWN, "KEYCODE_CHANNEL_DOWN"); 8176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_ZOOM_IN, "KEYCODE_ZOOM_IN"); 8186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_ZOOM_OUT, "KEYCODE_ZOOM_OUT"); 8196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_TV, "KEYCODE_TV"); 8206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_WINDOW, "KEYCODE_WINDOW"); 8216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_GUIDE, "KEYCODE_GUIDE"); 8226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_DVR, "KEYCODE_DVR"); 8236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BOOKMARK, "KEYCODE_BOOKMARK"); 8246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_CAPTIONS, "KEYCODE_CAPTIONS"); 8256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_SETTINGS, "KEYCODE_SETTINGS"); 8266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_TV_POWER, "KEYCODE_TV_POWER"); 8276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_TV_INPUT, "KEYCODE_TV_INPUT"); 8286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_STB_INPUT, "KEYCODE_STB_INPUT"); 8296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_STB_POWER, "KEYCODE_STB_POWER"); 8306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_AVR_POWER, "KEYCODE_AVR_POWER"); 8316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_AVR_INPUT, "KEYCODE_AVR_INPUT"); 8326f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_PROG_RED, "KEYCODE_PROG_RED"); 8336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_PROG_GREEN, "KEYCODE_PROG_GREEN"); 8346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_PROG_YELLOW, "KEYCODE_PROG_YELLOW"); 8356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_PROG_BLUE, "KEYCODE_PROG_BLUE"); 8366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_APP_SWITCH, "KEYCODE_APP_SWITCH"); 8376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_1, "KEYCODE_BUTTON_1"); 8386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_2, "KEYCODE_BUTTON_2"); 8396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_3, "KEYCODE_BUTTON_3"); 8406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_4, "KEYCODE_BUTTON_4"); 8416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_5, "KEYCODE_BUTTON_5"); 8426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_6, "KEYCODE_BUTTON_6"); 8436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_7, "KEYCODE_BUTTON_7"); 8446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_8, "KEYCODE_BUTTON_8"); 8456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_9, "KEYCODE_BUTTON_9"); 8466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_10, "KEYCODE_BUTTON_10"); 8476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_11, "KEYCODE_BUTTON_11"); 8486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_12, "KEYCODE_BUTTON_12"); 8496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_13, "KEYCODE_BUTTON_13"); 8506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_14, "KEYCODE_BUTTON_14"); 8516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_15, "KEYCODE_BUTTON_15"); 8526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown names.append(KEYCODE_BUTTON_16, "KEYCODE_BUTTON_16"); 8539812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown names.append(KEYCODE_LANGUAGE_SWITCH, "KEYCODE_LANGUAGE_SWITCH"); 8549812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown names.append(KEYCODE_MANNER_MODE, "KEYCODE_MANNER_MODE"); 8559812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown names.append(KEYCODE_3D_MODE, "KEYCODE_3D_MODE"); 8566651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown names.append(KEYCODE_CONTACTS, "KEYCODE_CONTACTS"); 8576651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown names.append(KEYCODE_CALENDAR, "KEYCODE_CALENDAR"); 8586651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown names.append(KEYCODE_MUSIC, "KEYCODE_MUSIC"); 8596651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown names.append(KEYCODE_CALCULATOR, "KEYCODE_CALCULATOR"); 8607511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang names.append(KEYCODE_ZENKAKU_HANKAKU, "KEYCODE_ZENKAKU_HANKAKU"); 8617511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang names.append(KEYCODE_EISU, "KEYCODE_EISU"); 8627511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang names.append(KEYCODE_MUHENKAN, "KEYCODE_MUHENKAN"); 8637511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang names.append(KEYCODE_HENKAN, "KEYCODE_HENKAN"); 8647511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang names.append(KEYCODE_KATAKANA_HIRAGANA, "KEYCODE_KATAKANA_HIRAGANA"); 8657511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang names.append(KEYCODE_YEN, "KEYCODE_YEN"); 8667511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang names.append(KEYCODE_RO, "KEYCODE_RO"); 8677511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang names.append(KEYCODE_KANA, "KEYCODE_KANA"); 868de7a8ead2467a4a152a5a9b2416c8048f1b48bbbJeff Brown names.append(KEYCODE_ASSIST, "KEYCODE_ASSIST"); 869497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown }; 870497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 871497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown // Symbolic names of all metakeys in bit order from least significant to most significant. 872497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown // Accordingly there are exactly 32 values in this table. 873497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown private static final String[] META_SYMBOLIC_NAMES = new String[] { 874497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_SHIFT_ON", 875497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_ALT_ON", 876497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_SYM_ON", 877497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_FUNCTION_ON", 878497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_ALT_LEFT_ON", 879497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_ALT_RIGHT_ON", 880497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_SHIFT_LEFT_ON", 881497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_SHIFT_RIGHT_ON", 882497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_CAP_LOCKED", 883497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_ALT_LOCKED", 884497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_SYM_LOCKED", 885497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x00000800", 886497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_CTRL_ON", 887497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_CTRL_LEFT_ON", 888497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_CTRL_RIGHT_ON", 889497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x00008000", 890497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_META_ON", 891497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_META_LEFT_ON", 892497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_META_RIGHT_ON", 893497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x00080000", 89451e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown "META_CAPS_LOCK_ON", 89551e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown "META_NUM_LOCK_ON", 89651e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown "META_SCROLL_LOCK_ON", 897497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x00800000", 898497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x01000000", 899497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x02000000", 900497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x04000000", 901497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x08000000", 902497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x10000000", 903497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x20000000", 904497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x40000000", 905497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x80000000", 906497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown }; 907497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated There are now more than MAX_KEYCODE keycodes. 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use {@link #getMaxKeyCode()} instead. 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Deprecated 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MAX_KEYCODE = 84; 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getAction} value: the key has been pressed down. 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_DOWN = 0; 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getAction} value: the key has been released. 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_UP = 1; 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getAction} value: multiple duplicate key events have 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * occurred in a row, or a complex string is being delivered. If the 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key code is not {#link {@link #KEYCODE_UNKNOWN} then the 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {#link {@link #getRepeatCount()} method returns the number of times 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the given key code should be executed. 92946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * Otherwise, if the key code is {@link #KEYCODE_UNKNOWN}, then 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this is a sequence of characters as returned by {@link #getCharacters}. 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_MULTIPLE = 2; 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 935497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * SHIFT key locked in CAPS mode. 936497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Reserved for use by {@link MetaKeyKeyListener} for a published constant in its API. 937497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 938497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 939497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_CAP_LOCKED = 0x100; 940497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 941497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 942497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * ALT key locked. 943497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Reserved for use by {@link MetaKeyKeyListener} for a published constant in its API. 944497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 945497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 946497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_ALT_LOCKED = 0x200; 947497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 948497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 949497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * SYM key locked. 950497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Reserved for use by {@link MetaKeyKeyListener} for a published constant in its API. 951497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 952497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 953497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_SYM_LOCKED = 0x400; 954497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 955497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 956497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Text is in selection mode. 957497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Reserved for use by {@link MetaKeyKeyListener} for a private unpublished constant 958497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * in its API that is currently being retained for legacy reasons. 959497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 960497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 961497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_SELECTING = 0x800; 962497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 963497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether one of the ALT meta keys is pressed.</p> 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isAltPressed() 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_LEFT 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_RIGHT 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_ALT_ON = 0x02; 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether the left ALT meta key is pressed.</p> 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isAltPressed() 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_LEFT 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_ALT_LEFT_ON = 0x10; 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether the right the ALT meta key is pressed.</p> 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isAltPressed() 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_RIGHT 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_ALT_RIGHT_ON = 0x20; 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether one of the SHIFT meta keys is pressed.</p> 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isShiftPressed() 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_LEFT 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_RIGHT 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_SHIFT_ON = 0x1; 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether the left SHIFT meta key is pressed.</p> 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isShiftPressed() 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_LEFT 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_SHIFT_LEFT_ON = 0x40; 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether the right SHIFT meta key is pressed.</p> 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isShiftPressed() 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_RIGHT 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_SHIFT_RIGHT_ON = 0x80; 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether the SYM meta key is pressed.</p> 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isSymPressed() 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_SYM_ON = 0x4; 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1028497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether the FUNCTION meta key is pressed.</p> 1029497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1030497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isFunctionPressed() 1031497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1032497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1033497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_FUNCTION_ON = 0x8; 1034497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1035497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1036497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether one of the CTRL meta keys is pressed.</p> 1037497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1038497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isCtrlPressed() 1039497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1040497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_LEFT 1041497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_RIGHT 1042497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1043497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_CTRL_ON = 0x1000; 1044497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1045497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1046497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether the left CTRL meta key is pressed.</p> 1047497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1048497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isCtrlPressed() 1049497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1050497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_LEFT 1051497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1052497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_CTRL_LEFT_ON = 0x2000; 1053497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1054497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1055497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether the right CTRL meta key is pressed.</p> 1056497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1057497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isCtrlPressed() 1058497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1059497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_RIGHT 1060497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1061497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_CTRL_RIGHT_ON = 0x4000; 1062497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1063497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1064497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether one of the META meta keys is pressed.</p> 1065497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1066497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isMetaPressed() 1067497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1068497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_LEFT 1069497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_RIGHT 1070497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1071497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_META_ON = 0x10000; 1072497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1073497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1074497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether the left META meta key is pressed.</p> 1075497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1076497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isMetaPressed() 1077497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1078497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_LEFT 1079497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1080497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_META_LEFT_ON = 0x20000; 1081497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1082497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1083497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether the right META meta key is pressed.</p> 1084497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1085497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isMetaPressed() 1086497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1087497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_RIGHT 1088497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1089497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_META_RIGHT_ON = 0x40000; 1090497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1091497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 109251e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>This mask is used to check whether the CAPS LOCK meta key is on.</p> 1093497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 109451e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isCapsLockOn() 1095497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1096497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CAPS_LOCK 1097497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 109851e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public static final int META_CAPS_LOCK_ON = 0x100000; 1099497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1100497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 110151e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>This mask is used to check whether the NUM LOCK meta key is on.</p> 1102497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 110351e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isNumLockOn() 1104497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1105497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_NUM_LOCK 1106497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 110751e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public static final int META_NUM_LOCK_ON = 0x200000; 1108497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1109497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 111051e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>This mask is used to check whether the SCROLL LOCK meta key is on.</p> 1111497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 111251e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isScrollLockOn() 1113497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1114497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_SCROLL_LOCK 1115497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 111651e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public static final int META_SCROLL_LOCK_ON = 0x400000; 1117497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 111864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 111964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * This mask is a combination of {@link #META_SHIFT_ON}, {@link #META_SHIFT_LEFT_ON} 112064da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * and {@link #META_SHIFT_RIGHT_ON}. 112164da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 1122c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown public static final int META_SHIFT_MASK = META_SHIFT_ON 1123c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown | META_SHIFT_LEFT_ON | META_SHIFT_RIGHT_ON; 1124c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown 112564da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 112664da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * This mask is a combination of {@link #META_ALT_ON}, {@link #META_ALT_LEFT_ON} 112764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * and {@link #META_ALT_RIGHT_ON}. 112864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 1129c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown public static final int META_ALT_MASK = META_ALT_ON 1130c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown | META_ALT_LEFT_ON | META_ALT_RIGHT_ON; 1131c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown 113264da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 113364da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * This mask is a combination of {@link #META_CTRL_ON}, {@link #META_CTRL_LEFT_ON} 113464da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * and {@link #META_CTRL_RIGHT_ON}. 113564da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 1136c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown public static final int META_CTRL_MASK = META_CTRL_ON 1137c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown | META_CTRL_LEFT_ON | META_CTRL_RIGHT_ON; 1138c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown 113964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 114064da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * This mask is a combination of {@link #META_META_ON}, {@link #META_META_LEFT_ON} 114164da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * and {@link #META_META_RIGHT_ON}. 114264da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 114364da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown public static final int META_META_MASK = META_META_ON 1144c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown | META_META_LEFT_ON | META_META_RIGHT_ON; 1145c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown 1146497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This mask is set if the device woke because of this key event. 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_WOKE_HERE = 0x1; 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This mask is set if the key event was generated by a software keyboard. 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_SOFT_KEYBOARD = 0x2; 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This mask is set if we don't want the key event to cause us to leave 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * touch mode. 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_KEEP_TOUCH_MODE = 0x4; 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1163105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * This mask is set if an event was known to come from a trusted part 1164105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * of the system. That is, the event is known to come from the user, 1165105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * and could not have been spoofed by a third party component. 1166105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1167105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public static final int FLAG_FROM_SYSTEM = 0x8; 1168105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1169105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 1170105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * This mask is used for compatibility, to identify enter keys that are 1171105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * coming from an IME whose enter key has been auto-labelled "next" or 1172105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * "done". This allows TextView to dispatch these as normal enter keys 1173105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * for old applications, but still do the appropriate action when 1174105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * receiving them. 1175105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1176105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public static final int FLAG_EDITOR_ACTION = 0x10; 1177105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1178105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 1179ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * When associated with up key events, this indicates that the key press 1180ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * has been canceled. Typically this is used with virtual touch screen 1181ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * keys, where the user can slide from the virtual key area on to the 1182ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * display: in that case, the application will receive a canceled up 1183ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * event and should not perform the action normally associated with the 1184ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * key. Note that for this to work, the application can not perform an 1185ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * action for a key until it receives an up or the long press timeout has 1186ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * expired. 1187ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn */ 1188ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn public static final int FLAG_CANCELED = 0x20; 1189ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn 1190ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn /** 1191ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * This key event was generated by a virtual (on-screen) hard key area. 1192ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * Typically this is an area of the touchscreen, outside of the regular 1193ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * display, dedicated to "hardware" buttons. 1194ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn */ 1195ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn public static final int FLAG_VIRTUAL_HARD_KEY = 0x40; 1196ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn 1197ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn /** 119883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * This flag is set for the first key repeat that occurs after the 119983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * long press timeout. 120083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 120183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static final int FLAG_LONG_PRESS = 0x80; 120283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 120383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 120483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Set when a key event has {@link #FLAG_CANCELED} set because a long 120583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * press action was executed while it was down. 120683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 120783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static final int FLAG_CANCELED_LONG_PRESS = 0x100; 120883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 120983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 121083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Set for {@link #ACTION_UP} when this event's key code is still being 121183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * tracked from its initial down. That is, somebody requested that tracking 121283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * started on the key down and a long press has not caused 121383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the tracking to be canceled. 121483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 121583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static final int FLAG_TRACKING = 0x200; 121649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 121749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown /** 121849ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * Set when a key event has been synthesized to implement default behavior 121949ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * for an event that the application did not handle. 122049ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * Fallback key events are generated by unhandled trackball motions 122149ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * (to emulate a directional keypad) and by certain unhandled key presses 122249ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * that are declared in the key map (such as special function numeric keypad 122349ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * keys when numlock is off). 122449ed71db425c5054e3ad9526496a7e116c89556bJeff Brown */ 122549ed71db425c5054e3ad9526496a7e116c89556bJeff Brown public static final int FLAG_FALLBACK = 0x400; 122649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 122783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 122883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Private control to determine when an app is tracking a key sequence. 122983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @hide 123083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 123183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static final int FLAG_START_TRACKING = 0x40000000; 123221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 123321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown /** 123421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * Private flag that indicates when the system has detected that this key event 123521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * may be inconsistent with respect to the sequence of previously delivered key events, 123621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * such as when a key up event is sent but the key was not down. 123721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * 123821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * @hide 123921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * @see #isTainted 124021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * @see #setTainted 124121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown */ 124221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown public static final int FLAG_TAINTED = 0x80000000; 124321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 124483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the maximum keycode. 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getMaxKeyCode() { 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return LAST_KEYCODE; 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the character that is produced by putting accent on the character 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * c. 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For example, getDeadChar('`', 'e') returns è. 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getDeadChar(int accent, int c) { 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return KeyCharacterMap.getDeadChar(accent, c); 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12608d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn static final boolean DEBUG = false; 12618d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn static final String TAG = "KeyEvent"; 12621f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 12631f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private static final int MAX_RECYCLED = 10; 12641f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private static final Object gRecyclerLock = new Object(); 12651f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private static int gRecyclerUsed; 12661f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private static KeyEvent gRecyclerTop; 12671f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 12681f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private KeyEvent mNext; 12691f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 127091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown private int mDeviceId; 127191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown private int mSource; 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mMetaState; 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mAction; 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mKeyCode; 127546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown private int mScanCode; 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mRepeatCount; 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mFlags; 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long mDownTime; 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long mEventTime; 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mCharacters; 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface Callback { 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 128483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Called when a key down event has occurred. If you return true, 128583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * you can first call {@link KeyEvent#startTracking() 128683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * KeyEvent.startTracking()} to have the framework track the event 128783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * through its {@link #onKeyUp(int, KeyEvent)} and also call your 128883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * {@link #onKeyLongPress(int, KeyEvent)} if it occurs. 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param keyCode The value in event.getKeyCode(). 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event Description of the key event. 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If you handled the event, return true. If you want to allow 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event to be handled by the next receiver, return false. 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean onKeyDown(int keyCode, KeyEvent event); 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 129983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Called when a long press has occurred. If you return true, 130083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the final key up will have {@link KeyEvent#FLAG_CANCELED} and 130183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * {@link KeyEvent#FLAG_CANCELED_LONG_PRESS} set. Note that in 130283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * order to receive this callback, someone in the event change 130383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <em>must</em> return true from {@link #onKeyDown} <em>and</em> 130483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * call {@link KeyEvent#startTracking()} on the event. 130583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * 130683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param keyCode The value in event.getKeyCode(). 130783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param event Description of the key event. 130883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * 130983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @return If you handled the event, return true. If you want to allow 131083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the event to be handled by the next receiver, return false. 131183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 131283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn boolean onKeyLongPress(int keyCode, KeyEvent event); 131383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 131483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a key up event has occurred. 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param keyCode The value in event.getKeyCode(). 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event Description of the key event. 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If you handled the event, return true. If you want to allow 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event to be handled by the next receiver, return false. 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean onKeyUp(int keyCode, KeyEvent event); 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when multiple down/up pairs of the same key have occurred 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in a row. 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param keyCode The value in event.getKeyCode(). 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param count Number of pairs as returned by event.getRepeatCount(). 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event Description of the key event. 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If you handled the event, return true. If you want to allow 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event to be handled by the next receiver, return false. 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean onKeyMultiple(int keyCode, int count, KeyEvent event); 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown static { 13406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown populateKeycodeSymbolicNames(); 1341497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 1342497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 13431f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private KeyEvent() { 13441f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 13451f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event. 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Action code: either {@link #ACTION_DOWN}, 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param code The key code. 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(int action, int code) { 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = code; 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = 0; 13576b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown mDeviceId = KeyCharacterMap.VIRTUAL_KEYBOARD; 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event. 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis}) 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this key code originally went down. 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis}) 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this event happened. 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Action code: either {@link #ACTION_DOWN}, 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param code The key code. 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param repeat A repeat count for down events (> 0 if this is after the 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * initial down) or event count for multiple events. 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(long downTime, long eventTime, int action, 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int code, int repeat) { 13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = downTime; 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = eventTime; 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = code; 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = repeat; 13806b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown mDeviceId = KeyCharacterMap.VIRTUAL_KEYBOARD; 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event. 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis}) 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this key code originally went down. 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis}) 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this event happened. 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Action code: either {@link #ACTION_DOWN}, 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param code The key code. 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param repeat A repeat count for down events (> 0 if this is after the 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * initial down) or event count for multiple events. 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState Flags indicating which meta keys are currently pressed. 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(long downTime, long eventTime, int action, 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int code, int repeat, int metaState) { 13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = downTime; 14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = eventTime; 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = code; 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = repeat; 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = metaState; 14056b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown mDeviceId = KeyCharacterMap.VIRTUAL_KEYBOARD; 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event. 14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis}) 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this key code originally went down. 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis}) 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this event happened. 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Action code: either {@link #ACTION_DOWN}, 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param code The key code. 14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param repeat A repeat count for down events (> 0 if this is after the 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * initial down) or event count for multiple events. 14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState Flags indicating which meta keys are currently pressed. 1421c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param deviceId The device ID that generated the key event. 14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param scancode Raw device scan code of the event. 14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(long downTime, long eventTime, int action, 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int code, int repeat, int metaState, 1426c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int deviceId, int scancode) { 14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = downTime; 14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = eventTime; 14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = code; 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = repeat; 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = metaState; 1433c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDeviceId = deviceId; 143446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = scancode; 14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event. 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis}) 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this key code originally went down. 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis}) 14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this event happened. 14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Action code: either {@link #ACTION_DOWN}, 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param code The key code. 14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param repeat A repeat count for down events (> 0 if this is after the 14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * initial down) or event count for multiple events. 14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState Flags indicating which meta keys are currently pressed. 1450c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param deviceId The device ID that generated the key event. 14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param scancode Raw device scan code of the event. 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags The flags for this key event 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(long downTime, long eventTime, int action, 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int code, int repeat, int metaState, 1456c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int deviceId, int scancode, int flags) { 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = downTime; 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = eventTime; 14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = code; 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = repeat; 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = metaState; 1463c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDeviceId = deviceId; 146446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = scancode; 14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags = flags; 14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1469c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Create a new key event. 1470c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1471c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis}) 1472c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * at which this key code originally went down. 1473c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis}) 1474c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * at which this event happened. 1475c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param action Action code: either {@link #ACTION_DOWN}, 1476c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 1477c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param code The key code. 1478c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param repeat A repeat count for down events (> 0 if this is after the 1479c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * initial down) or event count for multiple events. 1480c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param metaState Flags indicating which meta keys are currently pressed. 1481c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param deviceId The device ID that generated the key event. 1482c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param scancode Raw device scan code of the event. 1483c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param flags The flags for this key event 1484c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param source The input source such as {@link InputDevice#SOURCE_KEYBOARD}. 1485c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1486c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyEvent(long downTime, long eventTime, int action, 1487c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int code, int repeat, int metaState, 1488c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int deviceId, int scancode, int flags, int source) { 1489c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDownTime = downTime; 1490c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mEventTime = eventTime; 1491c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mAction = action; 1492c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mKeyCode = code; 1493c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mRepeatCount = repeat; 1494c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mMetaState = metaState; 1495c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDeviceId = deviceId; 1496c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mScanCode = scancode; 1497c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mFlags = flags; 1498c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = source; 1499c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1500c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1501c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event for a string of characters. The key code, 1503c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * action, repeat count and source will automatically be set to 1504c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #KEYCODE_UNKNOWN}, {@link #ACTION_MULTIPLE}, 0, and 1505c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link InputDevice#SOURCE_KEYBOARD} for you. 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param time The time (in {@link android.os.SystemClock#uptimeMillis}) 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this event occured. 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param characters The string of characters. 1510c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param deviceId The device ID that generated the key event. 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags The flags for this key event 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1513c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyEvent(long time, String characters, int deviceId, int flags) { 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = time; 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = time; 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCharacters = characters; 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = ACTION_MULTIPLE; 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = KEYCODE_UNKNOWN; 15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = 0; 1520c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDeviceId = deviceId; 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags = flags; 1522c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = InputDevice.SOURCE_KEYBOARD; 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1526105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Make an exact copy of an existing key event. 1527105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1528105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public KeyEvent(KeyEvent origEvent) { 1529105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mDownTime = origEvent.mDownTime; 1530105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mEventTime = origEvent.mEventTime; 1531105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mAction = origEvent.mAction; 1532105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mKeyCode = origEvent.mKeyCode; 1533105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mRepeatCount = origEvent.mRepeatCount; 1534105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mMetaState = origEvent.mMetaState; 1535105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mDeviceId = origEvent.mDeviceId; 1536c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = origEvent.mSource; 153746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = origEvent.mScanCode; 1538105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mFlags = origEvent.mFlags; 1539105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mCharacters = origEvent.mCharacters; 1540105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 1541105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1542105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copy an existing key event, modifying its time and repeat count. 15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 154583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @deprecated Use {@link #changeTimeRepeat(KeyEvent, long, int)} 154683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * instead. 154783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * 15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param origEvent The existing event to be copied. 15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventTime The new event time 15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (in {@link android.os.SystemClock#uptimeMillis}) of the event. 15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newRepeat The new repeat count of the event. 15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 155383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn @Deprecated 15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(KeyEvent origEvent, long eventTime, int newRepeat) { 15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = origEvent.mDownTime; 15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = eventTime; 15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = origEvent.mAction; 15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = origEvent.mKeyCode; 15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = newRepeat; 15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = origEvent.mMetaState; 15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDeviceId = origEvent.mDeviceId; 1562c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = origEvent.mSource; 156346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = origEvent.mScanCode; 15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags = origEvent.mFlags; 15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCharacters = origEvent.mCharacters; 15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15681f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private static KeyEvent obtain() { 15691f2451007c660091b7b090c1ea332f9044515d2dJeff Brown final KeyEvent ev; 15701f2451007c660091b7b090c1ea332f9044515d2dJeff Brown synchronized (gRecyclerLock) { 15711f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev = gRecyclerTop; 15721f2451007c660091b7b090c1ea332f9044515d2dJeff Brown if (ev == null) { 15731f2451007c660091b7b090c1ea332f9044515d2dJeff Brown return new KeyEvent(); 15741f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 15751f2451007c660091b7b090c1ea332f9044515d2dJeff Brown gRecyclerTop = ev.mNext; 15761f2451007c660091b7b090c1ea332f9044515d2dJeff Brown gRecyclerUsed -= 1; 15771f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 15781f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mNext = null; 157932cbc3855c2a971aa5a801fd339fb6a37db91a1aJeff Brown ev.prepareForReuse(); 15801f2451007c660091b7b090c1ea332f9044515d2dJeff Brown return ev; 15811f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 15821f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 15831f2451007c660091b7b090c1ea332f9044515d2dJeff Brown /** 15841f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * Obtains a (potentially recycled) key event. 15851f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * 15861f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * @hide 15871f2451007c660091b7b090c1ea332f9044515d2dJeff Brown */ 15881f2451007c660091b7b090c1ea332f9044515d2dJeff Brown public static KeyEvent obtain(long downTime, long eventTime, int action, 15891f2451007c660091b7b090c1ea332f9044515d2dJeff Brown int code, int repeat, int metaState, 15901f2451007c660091b7b090c1ea332f9044515d2dJeff Brown int deviceId, int scancode, int flags, int source, String characters) { 15911f2451007c660091b7b090c1ea332f9044515d2dJeff Brown KeyEvent ev = obtain(); 15921f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mDownTime = downTime; 15931f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mEventTime = eventTime; 15941f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mAction = action; 15951f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mKeyCode = code; 15961f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mRepeatCount = repeat; 15971f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mMetaState = metaState; 15981f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mDeviceId = deviceId; 15991f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mScanCode = scancode; 16001f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mFlags = flags; 16011f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mSource = source; 16021f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mCharacters = characters; 16031f2451007c660091b7b090c1ea332f9044515d2dJeff Brown return ev; 16041f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 16051f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 16061f2451007c660091b7b090c1ea332f9044515d2dJeff Brown /** 160721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * Obtains a (potentially recycled) copy of another key event. 160821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * 160921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * @hide 161021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown */ 161121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown public static KeyEvent obtain(KeyEvent other) { 161221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown KeyEvent ev = obtain(); 161321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mDownTime = other.mDownTime; 161421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mEventTime = other.mEventTime; 161521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mAction = other.mAction; 161621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mKeyCode = other.mKeyCode; 161721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mRepeatCount = other.mRepeatCount; 161821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mMetaState = other.mMetaState; 161921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mDeviceId = other.mDeviceId; 162021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mScanCode = other.mScanCode; 162121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mFlags = other.mFlags; 162221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mSource = other.mSource; 162321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mCharacters = other.mCharacters; 162421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown return ev; 162521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown } 162621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 162721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown /** @hide */ 162821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown @Override 162921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown public KeyEvent copy() { 163021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown return obtain(this); 163121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown } 163221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 163321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown /** 16341f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * Recycles a key event. 16351f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * Key events should only be recycled if they are owned by the system since user 16361f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * code expects them to be essentially immutable, "tracking" notwithstanding. 16371f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * 16381f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * @hide 16391f2451007c660091b7b090c1ea332f9044515d2dJeff Brown */ 164092cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown @Override 16411f2451007c660091b7b090c1ea332f9044515d2dJeff Brown public final void recycle() { 164232cbc3855c2a971aa5a801fd339fb6a37db91a1aJeff Brown super.recycle(); 16431f2451007c660091b7b090c1ea332f9044515d2dJeff Brown mCharacters = null; 16441f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 16451f2451007c660091b7b090c1ea332f9044515d2dJeff Brown synchronized (gRecyclerLock) { 16461f2451007c660091b7b090c1ea332f9044515d2dJeff Brown if (gRecyclerUsed < MAX_RECYCLED) { 16471f2451007c660091b7b090c1ea332f9044515d2dJeff Brown gRecyclerUsed++; 16481f2451007c660091b7b090c1ea332f9044515d2dJeff Brown mNext = gRecyclerTop; 16491f2451007c660091b7b090c1ea332f9044515d2dJeff Brown gRecyclerTop = this; 16501f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 16511f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 16521f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 16531f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 165492cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown /** @hide */ 165592cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown @Override 165692cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown public final void recycleIfNeededAfterDispatch() { 165792cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown // Do nothing. 165892cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown } 165992cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown 16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1661105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Create a new key event that is the same as the given one, but whose 1662105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * event time and repeat count are replaced with the given value. 1663105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 1664105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param event The existing event to be copied. This is not modified. 1665105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param eventTime The new event time 1666105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * (in {@link android.os.SystemClock#uptimeMillis}) of the event. 1667105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param newRepeat The new repeat count of the event. 1668105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1669105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public static KeyEvent changeTimeRepeat(KeyEvent event, long eventTime, 1670105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project int newRepeat) { 1671105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project return new KeyEvent(event, eventTime, newRepeat); 1672105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 1673105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1674105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 167583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Create a new key event that is the same as the given one, but whose 167683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * event time and repeat count are replaced with the given value. 167783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * 167883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param event The existing event to be copied. This is not modified. 167983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param eventTime The new event time 168083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * (in {@link android.os.SystemClock#uptimeMillis}) of the event. 168183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param newRepeat The new repeat count of the event. 168283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param newFlags New flags for the event, replacing the entire value 168383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * in the original event. 168483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 168583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static KeyEvent changeTimeRepeat(KeyEvent event, long eventTime, 168683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn int newRepeat, int newFlags) { 168783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn KeyEvent ret = new KeyEvent(event); 168883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn ret.mEventTime = eventTime; 168983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn ret.mRepeatCount = newRepeat; 169083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn ret.mFlags = newFlags; 169183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return ret; 169283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 169383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 169483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copy an existing key event, modifying its action. 16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param origEvent The existing event to be copied. 16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action The new action code of the event. 16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1700105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project private KeyEvent(KeyEvent origEvent, int action) { 17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = origEvent.mDownTime; 17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = origEvent.mEventTime; 17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = origEvent.mKeyCode; 17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = origEvent.mRepeatCount; 17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = origEvent.mMetaState; 17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDeviceId = origEvent.mDeviceId; 1708c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = origEvent.mSource; 170946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = origEvent.mScanCode; 17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags = origEvent.mFlags; 17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Don't copy mCharacters, since one way or the other we'll lose it 17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // when changing the action. 17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1716105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Create a new key event that is the same as the given one, but whose 1717105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * action is replaced with the given value. 1718105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 1719105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param event The existing event to be copied. This is not modified. 1720105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param action The new action code of the event. 1721105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1722105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public static KeyEvent changeAction(KeyEvent event, int action) { 1723105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project return new KeyEvent(event, action); 1724105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 1725105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1726105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 1727105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Create a new key event that is the same as the given one, but whose 1728105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * flags are replaced with the given value. 1729105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 1730105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param event The existing event to be copied. This is not modified. 1731105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param flags The new flags constant. 1732105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1733105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public static KeyEvent changeFlags(KeyEvent event, int flags) { 1734105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project event = new KeyEvent(event); 1735105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project event.mFlags = flags; 1736105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project return event; 1737105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 173821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 173921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown /** @hide */ 174021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown @Override 174121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown public final boolean isTainted() { 174221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown return (mFlags & FLAG_TAINTED) != 0; 174321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown } 174421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 174521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown /** @hide */ 174621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown @Override 174721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown public final void setTainted(boolean tainted) { 174821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown mFlags = tainted ? mFlags | FLAG_TAINTED : mFlags & ~FLAG_TAINTED; 174921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown } 175021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 1751105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Don't use in new code, instead explicitly check 17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getAction()}. 17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If the action is ACTION_DOWN, returns true; else false. 17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated 17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Deprecated public final boolean isDown() { 17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAction == ACTION_DOWN; 17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Is this a system key? System keys can not be used for menu shortcuts. 17669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TODO: this information should come from a table somewhere. 17689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TODO: should the dpad keys be here? arguably, because they also shouldn't be menu shortcuts 17699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isSystem() { 17713c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return native_isSystemKey(mKeyCode); 17723c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn } 17733c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 17743c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn /** @hide */ 17753c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn public final boolean hasDefaultAction() { 17763c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return native_hasDefaultAction(mKeyCode); 17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown /** 17806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Returns true if the specified keycode is a gamepad button. 17816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return True if the keycode is a gamepad button, such as {@link #KEYCODE_BUTTON_A}. 17826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown */ 17836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown public static final boolean isGamepadButton(int keyCode) { 17846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown switch (keyCode) { 17856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_A: 17866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_B: 17876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_C: 17886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_X: 17896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_Y: 17906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_Z: 17916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_L1: 17926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_R1: 17936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_L2: 17946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_R2: 17956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_THUMBL: 17966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_THUMBR: 17976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_START: 17986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_SELECT: 17996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_MODE: 18006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_1: 18016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_2: 18026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_3: 18036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_4: 18046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_5: 18056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_6: 18066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_7: 18076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_8: 18086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_9: 18096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_10: 18106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_11: 18116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_12: 18126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_13: 18136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_14: 18146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_15: 18156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_16: 18166f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return true; 18176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown default: 18186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return false; 18196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 18206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 18216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown 182291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown /** {@inheritDoc} */ 182391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Override 182491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public final int getDeviceId() { 182591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown return mDeviceId; 182691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 182791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 182891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown /** {@inheritDoc} */ 182991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Override 183091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public final int getSource() { 183191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown return mSource; 183291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 183391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 183491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown /** {@inheritDoc} */ 183591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Override 183691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public final void setSource(int source) { 183791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown mSource = source; 183891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Returns the state of the meta keys.</p> 18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return an integer in which each bit set to 1 represents a pressed 18449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * meta key 18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isAltPressed() 18479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isShiftPressed() 18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isSymPressed() 1849497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isCtrlPressed() 1850497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isMetaPressed() 1851497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isFunctionPressed() 185251e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isCapsLockOn() 185351e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isNumLockOn() 185451e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isScrollLockOn() 18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_ALT_ON 1856497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_ALT_LEFT_ON 1857497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_ALT_RIGHT_ON 18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_SHIFT_ON 1859497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_SHIFT_LEFT_ON 1860497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_SHIFT_RIGHT_ON 18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_SYM_ON 1862497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_FUNCTION_ON 1863497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_CTRL_ON 1864497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_CTRL_LEFT_ON 1865497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_CTRL_RIGHT_ON 1866497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_META_ON 1867497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_META_LEFT_ON 1868497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_META_RIGHT_ON 186951e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_CAPS_LOCK_ON 187051e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_NUM_LOCK_ON 187151e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_SCROLL_LOCK_ON 18725487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * @see #getModifiers 18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getMetaState() { 18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMetaState; 18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18795487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * Returns the state of the modifier keys. 18805487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * <p> 18815487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 18825487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 18835487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * not considered modifier keys. Consequently, this function specifically masks out 18845487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 18855487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * </p><p> 18865487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * The value returned consists of the meta state (from {@link #getMetaState}) 18875487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * normalized using {@link #normalizeMetaState(int)} and then masked with 18885487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * {@link #getModifierMetaStateMask} so that only valid modifier bits are retained. 18895487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * </p> 18905487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * 18915487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * @return An integer in which each bit set to 1 represents a pressed modifier key. 18925487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * @see #getMetaState 18935487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown */ 18945487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown public final int getModifiers() { 18955487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown return normalizeMetaState(mMetaState) & META_MODIFIER_MASK; 18965487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown } 18975487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown 18985487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown /** 18999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the flags for this key event. 19009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #FLAG_WOKE_HERE 19029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getFlags() { 19049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFlags; 19059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 190728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Mask of all modifier key meta states. Specifically excludes locked keys like caps lock. 190828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static final int META_MODIFIER_MASK = 190928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_SHIFT_ON | META_SHIFT_LEFT_ON | META_SHIFT_RIGHT_ON 191028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown | META_ALT_ON | META_ALT_LEFT_ON | META_ALT_RIGHT_ON 191128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown | META_CTRL_ON | META_CTRL_LEFT_ON | META_CTRL_RIGHT_ON 191228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown | META_META_ON | META_META_LEFT_ON | META_META_RIGHT_ON 191328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown | META_SYM_ON | META_FUNCTION_ON; 191428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 191528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Mask of all lock key meta states. 191628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static final int META_LOCK_MASK = 191728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_CAPS_LOCK_ON | META_NUM_LOCK_ON | META_SCROLL_LOCK_ON; 191828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 191928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Mask of all valid meta states. 192028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static final int META_ALL_MASK = META_MODIFIER_MASK | META_LOCK_MASK; 192128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 192228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Mask of all synthetic meta states that are reserved for API compatibility with 192328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // historical uses in MetaKeyKeyListener. 192428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static final int META_SYNTHETIC_MASK = 192528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_CAP_LOCKED | META_ALT_LOCKED | META_SYM_LOCKED | META_SELECTING; 192628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 192728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Mask of all meta states that are not valid use in specifying a modifier key. 192828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // These bits are known to be used for purposes other than specifying modifiers. 192928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static final int META_INVALID_MODIFIER_MASK = 193028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_LOCK_MASK | META_SYNTHETIC_MASK; 193128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 193228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 193328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Gets a mask that includes all valid modifier key meta state bits. 193428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 193528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 193628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 193728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, the mask specifically excludes 193828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 193928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 194028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 194128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return The modifier meta state mask which is a combination of 194228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SHIFT_ON}, {@link #META_SHIFT_LEFT_ON}, {@link #META_SHIFT_RIGHT_ON}, 194328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_ALT_ON}, {@link #META_ALT_LEFT_ON}, {@link #META_ALT_RIGHT_ON}, 194428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CTRL_ON}, {@link #META_CTRL_LEFT_ON}, {@link #META_CTRL_RIGHT_ON}, 194528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_META_ON}, {@link #META_META_LEFT_ON}, {@link #META_META_RIGHT_ON}, 194628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SYM_ON}, {@link #META_FUNCTION_ON}. 194728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 194828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public static int getModifierMetaStateMask() { 194928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return META_MODIFIER_MASK; 195028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 195128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 19529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if this key code is a modifier key. 195428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 195528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 195628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 195728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, this function return false 195828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * for those keys. 195928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 196128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return True if the key code is one of 19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #KEYCODE_SHIFT_LEFT} {@link #KEYCODE_SHIFT_RIGHT}, 1963497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * {@link #KEYCODE_ALT_LEFT}, {@link #KEYCODE_ALT_RIGHT}, 1964497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * {@link #KEYCODE_CTRL_LEFT}, {@link #KEYCODE_CTRL_RIGHT}, 196528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_META_LEFT}, or {@link #KEYCODE_META_RIGHT}, 196628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SYM}, {@link #KEYCODE_NUM}, {@link #KEYCODE_FUNCTION}. 19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean isModifierKey(int keyCode) { 1969497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown switch (keyCode) { 1970497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_SHIFT_LEFT: 1971497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_SHIFT_RIGHT: 1972497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_ALT_LEFT: 1973497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_ALT_RIGHT: 1974497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_CTRL_LEFT: 1975497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_CTRL_RIGHT: 1976497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_META_LEFT: 1977497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_META_RIGHT: 197828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown case KEYCODE_SYM: 197928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown case KEYCODE_NUM: 198028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown case KEYCODE_FUNCTION: 1981497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return true; 1982497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown default: 1983497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return false; 1984497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 198828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Normalizes the specified meta state. 198928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 199028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * The meta state is normalized such that if either the left or right modifier meta state 199128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * bits are set then the result will also include the universal bit for that modifier. 199228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 199328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified meta state contains {@link #META_ALT_LEFT_ON} then 199428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * the result will also contain {@link #META_ALT_ON} in addition to {@link #META_ALT_LEFT_ON} 199528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * and the other bits that were specified in the input. The same is process is 199628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * performed for shift, control and meta. 199728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 199828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified meta state contains synthetic meta states defined by 199928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link MetaKeyKeyListener}, then those states are translated here and the original 200028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * synthetic meta states are removed from the result. 200128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link MetaKeyKeyListener#META_CAP_LOCKED} is translated to {@link #META_CAPS_LOCK_ON}. 200228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link MetaKeyKeyListener#META_ALT_LOCKED} is translated to {@link #META_ALT_ON}. 200328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link MetaKeyKeyListener#META_SYM_LOCKED} is translated to {@link #META_SYM_ON}. 200428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 200528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Undefined meta state bits are removed. 200628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 200728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 200828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @param metaState The meta state. 200928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return The normalized meta state. 201028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 201128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public static int normalizeMetaState(int metaState) { 201228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & (META_SHIFT_LEFT_ON | META_SHIFT_RIGHT_ON)) != 0) { 201328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_SHIFT_ON; 201428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 201528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & (META_ALT_LEFT_ON | META_ALT_RIGHT_ON)) != 0) { 201628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_ALT_ON; 201728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 201828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & (META_CTRL_LEFT_ON | META_CTRL_RIGHT_ON)) != 0) { 201928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_CTRL_ON; 202028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 202128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & (META_META_LEFT_ON | META_META_RIGHT_ON)) != 0) { 202228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_META_ON; 202328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 202428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & MetaKeyKeyListener.META_CAP_LOCKED) != 0) { 202528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_CAPS_LOCK_ON; 202628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 202728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & MetaKeyKeyListener.META_ALT_LOCKED) != 0) { 202828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_ALT_ON; 202928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 203028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & MetaKeyKeyListener.META_SYM_LOCKED) != 0) { 203128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_SYM_ON; 203228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 203328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaState & META_ALL_MASK; 203428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 203528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 203628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 203728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Returns true if no modifiers keys are pressed according to the specified meta state. 203828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 203928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 204028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 204128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, this function ignores 204228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 204328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 204428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * The meta state is normalized prior to comparison using {@link #normalizeMetaState(int)}. 204528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 204628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 204728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @param metaState The meta state to consider. 204828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return True if no modifier keys are pressed. 204928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @see #hasNoModifiers() 205028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 205128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public static boolean metaStateHasNoModifiers(int metaState) { 205228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return (normalizeMetaState(metaState) & META_MODIFIER_MASK) == 0; 205328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 205428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 205528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 205628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Returns true if only the specified modifier keys are pressed according to 205728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * the specified meta state. Returns false if a different combination of modifier 205828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * keys are pressed. 205928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 206028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 206128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 206228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, this function ignores 206328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 206428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 206528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes directional modifiers, such as 206628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SHIFT_LEFT_ON}, then this method ensures that the 206728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * modifier is pressed on that side. 206828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes non-directional modifiers, such as 206928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SHIFT_ON}, then this method ensures that the modifier 207028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * is pressed on either side. 207128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes both directional and non-directional modifiers 207228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * for the same type of key, such as {@link #META_SHIFT_ON} and {@link #META_SHIFT_LEFT_ON}, 207328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * then this method throws an illegal argument exception. 207428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 207528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 207628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @param metaState The meta state to consider. 207728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @param modifiers The meta state of the modifier keys to check. May be a combination 207828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * of modifier meta states as defined by {@link #getModifierMetaStateMask()}. May be 0 to 207928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * ensure that no modifier keys are pressed. 208028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return True if only the specified modifier keys are pressed. 208128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @throws IllegalArgumentException if the modifiers parameter contains invalid modifiers 208228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @see #hasModifiers 208328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 208428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public static boolean metaStateHasModifiers(int metaState, int modifiers) { 208528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Note: For forward compatibility, we allow the parameter to contain meta states 208628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // that we do not recognize but we explicitly disallow meta states that 208728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // are not valid modifiers. 208828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((modifiers & META_INVALID_MODIFIER_MASK) != 0) { 208928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown throw new IllegalArgumentException("modifiers must not contain " 209028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown + "META_CAPS_LOCK_ON, META_NUM_LOCK_ON, META_SCROLL_LOCK_ON, " 209128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown + "META_CAP_LOCKED, META_ALT_LOCKED, META_SYM_LOCKED, " 209228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown + "or META_SELECTING"); 209328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 209428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 209528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState = normalizeMetaState(metaState) & META_MODIFIER_MASK; 209628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState = metaStateFilterDirectionalModifiers(metaState, modifiers, 209728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_SHIFT_ON, META_SHIFT_LEFT_ON, META_SHIFT_RIGHT_ON); 209828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState = metaStateFilterDirectionalModifiers(metaState, modifiers, 209928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_ALT_ON, META_ALT_LEFT_ON, META_ALT_RIGHT_ON); 210028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState = metaStateFilterDirectionalModifiers(metaState, modifiers, 210128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_CTRL_ON, META_CTRL_LEFT_ON, META_CTRL_RIGHT_ON); 210228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState = metaStateFilterDirectionalModifiers(metaState, modifiers, 210328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_META_ON, META_META_LEFT_ON, META_META_RIGHT_ON); 210428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaState == modifiers; 210528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 210628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 210728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static int metaStateFilterDirectionalModifiers(int metaState, 210828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown int modifiers, int basic, int left, int right) { 210928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown final boolean wantBasic = (modifiers & basic) != 0; 211028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown final int directional = left | right; 211128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown final boolean wantLeftOrRight = (modifiers & directional) != 0; 211228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 211328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if (wantBasic) { 211428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if (wantLeftOrRight) { 211528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown throw new IllegalArgumentException("modifiers must not contain " 211628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown + metaStateToString(basic) + " combined with " 211728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown + metaStateToString(left) + " or " + metaStateToString(right)); 211828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 211928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaState & ~directional; 212028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } else if (wantLeftOrRight) { 212128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaState & ~basic; 212228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } else { 212328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaState; 212428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 212528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 212628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 212728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 212828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Returns true if no modifier keys are pressed. 212928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 213028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 213128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 213228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, this function ignores 213328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 213428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 213528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * The meta state is normalized prior to comparison using {@link #normalizeMetaState(int)}. 213628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 213728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 213828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return True if no modifier keys are pressed. 213928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @see #metaStateHasNoModifiers 214028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 214128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public final boolean hasNoModifiers() { 214228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaStateHasNoModifiers(mMetaState); 214328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 214428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 214528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 214628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Returns true if only the specified modifiers keys are pressed. 214728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Returns false if a different combination of modifier keys are pressed. 214828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 214928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 215028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 215128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, this function ignores 215228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 215328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 215428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes directional modifiers, such as 215528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SHIFT_LEFT_ON}, then this method ensures that the 215628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * modifier is pressed on that side. 215728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes non-directional modifiers, such as 215828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SHIFT_ON}, then this method ensures that the modifier 215928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * is pressed on either side. 216028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes both directional and non-directional modifiers 216128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * for the same type of key, such as {@link #META_SHIFT_ON} and {@link #META_SHIFT_LEFT_ON}, 216228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * then this method throws an illegal argument exception. 216328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 216428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 216528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @param modifiers The meta state of the modifier keys to check. May be a combination 216628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * of modifier meta states as defined by {@link #getModifierMetaStateMask()}. May be 0 to 216728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * ensure that no modifier keys are pressed. 216828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return True if only the specified modifier keys are pressed. 216928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @throws IllegalArgumentException if the modifiers parameter contains invalid modifiers 217028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @see #metaStateHasModifiers 217128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 217228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public final boolean hasModifiers(int modifiers) { 217328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaStateHasModifiers(mMetaState, modifiers); 217428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 217528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 217628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 21779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Returns the pressed state of the ALT meta key.</p> 21789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the ALT key is pressed, false otherwise 21809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_LEFT 21829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_RIGHT 21839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_ALT_ON 21849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isAltPressed() { 21869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (mMetaState & META_ALT_ON) != 0; 21879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Returns the pressed state of the SHIFT meta key.</p> 21919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the SHIFT key is pressed, false otherwise 21939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_LEFT 21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_RIGHT 21969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_SHIFT_ON 21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isShiftPressed() { 21999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (mMetaState & META_SHIFT_ON) != 0; 22009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Returns the pressed state of the SYM meta key.</p> 22049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the SYM key is pressed, false otherwise 22069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SYM 22089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_SYM_ON 22099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isSymPressed() { 22119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (mMetaState & META_SYM_ON) != 0; 22129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2215497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>Returns the pressed state of the CTRL meta key.</p> 2216497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2217497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return true if the CTRL key is pressed, false otherwise 2218497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2219497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_LEFT 2220497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_RIGHT 2221497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_CTRL_ON 2222497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2223497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public final boolean isCtrlPressed() { 2224497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return (mMetaState & META_CTRL_ON) != 0; 2225497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2226497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2227497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 2228497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>Returns the pressed state of the META meta key.</p> 2229497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2230497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return true if the META key is pressed, false otherwise 2231497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2232497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_LEFT 2233497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_RIGHT 2234497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_META_ON 2235497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2236497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public final boolean isMetaPressed() { 2237497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return (mMetaState & META_META_ON) != 0; 2238497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2239497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2240497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 2241497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>Returns the pressed state of the FUNCTION meta key.</p> 2242497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2243497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return true if the FUNCTION key is pressed, false otherwise 2244497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2245497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_FUNCTION 2246497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_FUNCTION_ON 2247497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2248497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public final boolean isFunctionPressed() { 2249497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return (mMetaState & META_FUNCTION_ON) != 0; 2250497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2251497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2252497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 225351e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>Returns the locked state of the CAPS LOCK meta key.</p> 2254497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 225551e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @return true if the CAPS LOCK key is on, false otherwise 2256497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2257497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CAPS_LOCK 225851e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_CAPS_LOCK_ON 2259497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 226051e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public final boolean isCapsLockOn() { 226151e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown return (mMetaState & META_CAPS_LOCK_ON) != 0; 2262497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2263497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2264497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 226551e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>Returns the locked state of the NUM LOCK meta key.</p> 2266497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 226751e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @return true if the NUM LOCK key is on, false otherwise 2268497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2269497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_NUM_LOCK 227051e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_NUM_LOCK_ON 2271497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 227251e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public final boolean isNumLockOn() { 227351e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown return (mMetaState & META_NUM_LOCK_ON) != 0; 2274497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2275497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2276497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 227751e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>Returns the locked state of the SCROLL LOCK meta key.</p> 2278497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 227951e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @return true if the SCROLL LOCK key is on, false otherwise 2280497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2281497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_SCROLL_LOCK 228251e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_SCROLL_LOCK_ON 2283497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 228451e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public final boolean isScrollLockOn() { 228551e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown return (mMetaState & META_SCROLL_LOCK_ON) != 0; 2286497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2287497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2288497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 22899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the action of this key event. May be either 22909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 22919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The event action: ACTION_DOWN, ACTION_UP, or ACTION_MULTIPLE. 22939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getAction() { 22959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAction; 22969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2299ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * For {@link #ACTION_UP} events, indicates that the event has been 2300ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * canceled as per {@link #FLAG_CANCELED}. 2301ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn */ 2302ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn public final boolean isCanceled() { 2303ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn return (mFlags&FLAG_CANCELED) != 0; 2304ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn } 2305ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn 2306ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn /** 230783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Call this during {@link Callback#onKeyDown} to have the system track 230883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the key through its final up (possibly including a long press). Note 230983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * that only one key can be tracked at a time -- if another key down 231083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * event is received while a previous one is being tracked, tracking is 231183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * stopped on the previous event. 231283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 231383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public final void startTracking() { 231483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mFlags |= FLAG_START_TRACKING; 231583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 231683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 231783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 231883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * For {@link #ACTION_UP} events, indicates that the event is still being 231983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * tracked from its initial down event as per 232083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * {@link #FLAG_TRACKING}. 232183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 232283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public final boolean isTracking() { 232383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return (mFlags&FLAG_TRACKING) != 0; 232483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 232583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 232683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 232783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * For {@link #ACTION_DOWN} events, indicates that the event has been 232883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * canceled as per {@link #FLAG_LONG_PRESS}. 232983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 233083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public final boolean isLongPress() { 233183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return (mFlags&FLAG_LONG_PRESS) != 0; 233283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 233383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 233483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 23359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the key code of the key event. This is the physical key that 23369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * was pressed, <em>not</em> the Unicode character. 23379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The key code of the event. 23399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getKeyCode() { 23419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mKeyCode; 23429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For the special case of a {@link #ACTION_MULTIPLE} event with key 23469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * code of {@link #KEYCODE_UNKNOWN}, this is a raw string of characters 23479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with the event. In all other cases it is null. 23489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a String of 1 or more characters associated with 23509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event. 23519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final String getCharacters() { 23539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCharacters; 23549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the hardware key id of this key event. These values are not 23589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reliable and vary from device to device. 23599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@more} 23619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Mostly this is here for debugging purposes. 23629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getScanCode() { 236446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown return mScanCode; 23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the repeat count of the event. For both key up and key down 23699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events, this is the number of times the key has repeated with the first 23709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * down starting at 0 and counting up from there. For multiple key 23719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events, this is the number of down/up pairs that have occurred. 23729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of times the key has repeated. 23749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getRepeatCount() { 23769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mRepeatCount; 23779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the time of the most recent key down event, 23819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the {@link android.os.SystemClock#uptimeMillis} time base. If this 23829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is a down event, this will be the same as {@link #getEventTime()}. 23839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that when chording keys, this value is the down time of the 23849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * most recently pressed key, which may <em>not</em> be the same physical 23859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key of this event. 23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the most recent key down time, in the 23889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.os.SystemClock#uptimeMillis} time base 23899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getDownTime() { 23919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDownTime; 23929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2395b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * Retrieve the time this event occurred, 23969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the {@link android.os.SystemClock#uptimeMillis} time base. 2397b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * 23989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the time this event occurred, 23999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the {@link android.os.SystemClock#uptimeMillis} time base. 24009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2401b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown @Override 24029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getEventTime() { 24039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mEventTime; 24049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2406b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown /** 2407b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * Retrieve the time this event occurred, 2408b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * in the {@link android.os.SystemClock#uptimeMillis} time base but with 2409b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * nanosecond (instead of millisecond) precision. 2410b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * <p> 2411b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * The value is in nanosecond precision but it may not have nanosecond accuracy. 2412b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * </p> 2413b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * 2414b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * @return Returns the time this event occurred, 2415b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * in the {@link android.os.SystemClock#uptimeMillis} time base but with 2416b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * nanosecond (instead of millisecond) precision. 2417b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * 2418b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * @hide 2419b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown */ 24204e91a180be46c0c7c3bf398d4df4cbe2404216b5Jeff Brown @Override 24214e91a180be46c0c7c3bf398d4df4cbe2404216b5Jeff Brown public final long getEventTimeNano() { 24224e91a180be46c0c7c3bf398d4df4cbe2404216b5Jeff Brown return mEventTime * 1000000L; 24234e91a180be46c0c7c3bf398d4df4cbe2404216b5Jeff Brown } 24244e91a180be46c0c7c3bf398d4df4cbe2404216b5Jeff Brown 24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Renamed to {@link #getDeviceId}. 24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 24296b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @deprecated use {@link #getDeviceId()} instead. 24309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24316b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown @Deprecated 24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getKeyboardDevice() { 24339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDeviceId; 24349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24376b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the {@link KeyCharacterMap} associated with the keyboard device. 24386b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 24396b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The associated key character map. 24408ab3dc7a3e430cc69975091b962758f49bc84ef2Andrew Sapperstein * @throws {@link KeyCharacterMap.UnavailableException} if the key character map 24416b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * could not be loaded because it was malformed or the default key character map 24426b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * is missing from the system. 24436b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 24448ab3dc7a3e430cc69975091b962758f49bc84ef2Andrew Sapperstein * @see KeyCharacterMap#load 24456b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown */ 24466b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown public final KeyCharacterMap getKeyCharacterMap() { 24476b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return KeyCharacterMap.load(mDeviceId); 24486b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown } 24496b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 24506b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /** 24516b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the primary character for this key. 24526b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * In other words, the label that is physically printed on it. 24536b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 24546b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The display label character, or 0 if none (eg. for non-printing keys). 24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public char getDisplayLabel() { 24576b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().getDisplayLabel(mKeyCode); 24589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24616b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the Unicode character generated by the specified key and meta 24626b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * key state combination. 24639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 24646b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Returns the Unicode character that the specified key would produce 24656b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * when the specified meta bits (see {@link MetaKeyKeyListener}) 24666b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * were active. 24679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p><p> 24689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns 0 if the key is not one that is used to type Unicode 24699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * characters. 24709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p><p> 24716b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * If the return value has bit {@link KeyCharacterMap#COMBINING_ACCENT} set, the 24726b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * key is a "dead key" that should be combined with another to 24736b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * actually produce a character -- see {@link KeyCharacterMap#getDeadChar} -- 24746b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * after masking with {@link KeyCharacterMap#COMBINING_ACCENT_MASK}. 24759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 24766b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 24776b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The associated character or combining accent, or 0 if none. 24789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getUnicodeChar() { 24809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getUnicodeChar(mMetaState); 24819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24846b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the Unicode character generated by the specified key and meta 24856b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * key state combination. 24869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 24876b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Returns the Unicode character that the specified key would produce 24886b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * when the specified meta bits (see {@link MetaKeyKeyListener}) 24896b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * were active. 24909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p><p> 24919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns 0 if the key is not one that is used to type Unicode 24929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * characters. 24939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p><p> 24946b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * If the return value has bit {@link KeyCharacterMap#COMBINING_ACCENT} set, the 24956b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * key is a "dead key" that should be combined with another to 24966b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * actually produce a character -- see {@link KeyCharacterMap#getDeadChar} -- 24976b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * after masking with {@link KeyCharacterMap#COMBINING_ACCENT_MASK}. 24989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 24996b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 25006b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @param metaState The meta key modifier state. 25016b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The associated character or combining accent, or 0 if none. 25029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25036b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown public int getUnicodeChar(int metaState) { 25046b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().get(mKeyCode, metaState); 25059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25086b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Get the character conversion data for a given key code. 25099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25106b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @param results A {@link KeyCharacterMap.KeyData} instance that will be 25116b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * filled with the results. 25126b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return True if the key was mapped. If the key was not mapped, results is not modified. 25139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25146b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @deprecated instead use {@link #getDisplayLabel()}, 25156b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * {@link #getNumber()} or {@link #getUnicodeChar(int)}. 25169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25176b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown @Deprecated 25189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getKeyData(KeyData results) { 25196b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().getKeyData(mKeyCode, results); 25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25236b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the first character in the character array that can be generated 25246b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * by the specified key code. 25256b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * <p> 25266b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * This is a convenience function that returns the same value as 25276b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * {@link #getMatch(char[],int) getMatch(chars, 0)}. 25286b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * </p> 25296b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 25306b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @param chars The array of matching characters to consider. 25316b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The matching associated character, or 0 if none. 25329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public char getMatch(char[] chars) { 25349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getMatch(chars, 0); 25359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25386b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the first character in the character array that can be generated 25396b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * by the specified key code. If there are multiple choices, prefers 25406b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * the one that would be generated with the specified meta key modifier state. 25416b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 25426b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @param chars The array of matching characters to consider. 25436b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @param metaState The preferred meta key modifier state. 25446b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The matching associated character, or 0 if none. 25459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25466b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown public char getMatch(char[] chars, int metaState) { 25476b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().getMatch(mKeyCode, chars, metaState); 25489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25516b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the number or symbol associated with the key. 25526b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * <p> 25536b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * The character value is returned, not the numeric value. 25546b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * If the key is not a number, but is a symbol, the symbol is retuned. 25556b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * </p><p> 25566b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * This method is intended to to support dial pads and other numeric or 25576b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * symbolic entry on keyboards where certain keys serve dual function 25586b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * as alphabetic and symbolic keys. This method returns the number 25596b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * or symbol associated with the key independent of whether the user 25606b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * has pressed the required modifier. 25616b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * </p><p> 25626b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * For example, on one particular keyboard the keys on the top QWERTY row generate 25636b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * numbers when ALT is pressed such that ALT-Q maps to '1'. So for that keyboard 25646b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * when {@link #getNumber} is called with {@link KeyEvent#KEYCODE_Q} it returns '1' 25656b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * so that the user can type numbers without pressing ALT when it makes sense. 25666b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * </p> 25676b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 25686b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The associated numeric or symbolic character, or 0 if none. 25699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public char getNumber() { 25716b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().getNumber(mKeyCode); 25729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25756b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Returns true if this key produces a glyph. 25766b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 25776b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return True if the key is a printing key. 25789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isPrintingKey() { 25806b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().isPrintingKey(mKeyCode); 25819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 258483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @deprecated Use {@link #dispatch(Callback, DispatcherState, Object)} instead. 258583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 258683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn @Deprecated 258783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public final boolean dispatch(Callback receiver) { 258883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return dispatch(receiver, null, null); 258983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 259083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 259183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 25929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Deliver this key event to a {@link Callback} interface. If this is 25939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an ACTION_MULTIPLE event and it is not handled, then an attempt will 25949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be made to deliver a single normal event. 25959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param receiver The Callback that will be given the event. 259783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param state State information retained across events. 259883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param target The target of the dispatch, for use in tracking. 25999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The return value from the Callback method that was called. 26019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 260283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public final boolean dispatch(Callback receiver, DispatcherState state, 260383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn Object target) { 26049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mAction) { 260583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn case ACTION_DOWN: { 260683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mFlags &= ~FLAG_START_TRACKING; 26078d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Key down to " + target + " in " + state 26088d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn + ": " + this); 260983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn boolean res = receiver.onKeyDown(mKeyCode, this); 261083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (state != null) { 261183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (res && mRepeatCount == 0 && (mFlags&FLAG_START_TRACKING) != 0) { 26128d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, " Start tracking!"); 261383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn state.startTracking(this, target); 261483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } else if (isLongPress() && state.isTracking(this)) { 261583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn try { 261683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (receiver.onKeyLongPress(mKeyCode, this)) { 26178d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, " Clear from long press!"); 261883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn state.performedLongPress(this); 261983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn res = true; 262083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 262183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } catch (AbstractMethodError e) { 262283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 262383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 262483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 262583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return res; 262683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 26279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ACTION_UP: 26288d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Key up to " + target + " in " + state 26298d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn + ": " + this); 263083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (state != null) { 263183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn state.handleUpEvent(this); 263283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 26339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return receiver.onKeyUp(mKeyCode, this); 26349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ACTION_MULTIPLE: 26359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mRepeatCount; 26369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int code = mKeyCode; 26379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (receiver.onKeyMultiple(code, count, this)) { 26389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 26399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (code != KeyEvent.KEYCODE_UNKNOWN) { 26419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = ACTION_DOWN; 26429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = 0; 26439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean handled = receiver.onKeyDown(code, this); 26449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (handled) { 26459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = ACTION_UP; 26469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project receiver.onKeyUp(code, this); 26479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = ACTION_MULTIPLE; 26499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = count; 26509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return handled; 26519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 265283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return false; 26539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 26559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 265783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 265883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Use with {@link KeyEvent#dispatch(Callback, DispatcherState, Object)} 265983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * for more advanced key dispatching, such as long presses. 266083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 266183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static class DispatcherState { 266283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn int mDownKeyCode; 266383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn Object mDownTarget; 266483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn SparseIntArray mActiveLongPresses = new SparseIntArray(); 266583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 266683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 266783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Reset back to initial state. 266883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 266983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void reset() { 26708d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Reset: " + this); 267183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownKeyCode = 0; 267283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownTarget = null; 267383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mActiveLongPresses.clear(); 267483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 267583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 267683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 267783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Stop any tracking associated with this target. 267883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 267983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void reset(Object target) { 268083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (mDownTarget == target) { 26818d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Reset in " + target + ": " + this); 268283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownKeyCode = 0; 268383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownTarget = null; 268483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 268583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 268683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 268783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 268883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Start tracking the key code associated with the given event. This 268983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * can only be called on a key down. It will allow you to see any 269083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * long press associated with the key, and will result in 269183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * {@link KeyEvent#isTracking} return true on the long press and up 269283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * events. 269383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * 269483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>This is only needed if you are directly dispatching events, rather 269583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * than handling them in {@link Callback#onKeyDown}. 269683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 269783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void startTracking(KeyEvent event, Object target) { 269883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (event.getAction() != ACTION_DOWN) { 269983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn throw new IllegalArgumentException( 270083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn "Can only start tracking on a down event"); 270183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 27028d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Start trackingt in " + target + ": " + this); 270383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownKeyCode = event.getKeyCode(); 270483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownTarget = target; 270583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 270683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 270783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 270883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Return true if the key event is for a key code that is currently 270983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * being tracked by the dispatcher. 271083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 271183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public boolean isTracking(KeyEvent event) { 271283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return mDownKeyCode == event.getKeyCode(); 271383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 271483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 271583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 271683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Keep track of the given event's key code as having performed an 271783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * action with a long press, so no action should occur on the up. 271883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>This is only needed if you are directly dispatching events, rather 271983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * than handling them in {@link Callback#onKeyLongPress}. 272083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 272183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void performedLongPress(KeyEvent event) { 272283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mActiveLongPresses.put(event.getKeyCode(), 1); 272383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 272483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 272583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 272683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Handle key up event to stop tracking. This resets the dispatcher state, 272783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * and updates the key event state based on it. 272883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>This is only needed if you are directly dispatching events, rather 272983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * than handling them in {@link Callback#onKeyUp}. 273083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 273183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void handleUpEvent(KeyEvent event) { 273283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn final int keyCode = event.getKeyCode(); 27338d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Handle key up " + event + ": " + this); 273483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn int index = mActiveLongPresses.indexOfKey(keyCode); 273583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (index >= 0) { 27368d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, " Index: " + index); 273783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn event.mFlags |= FLAG_CANCELED | FLAG_CANCELED_LONG_PRESS; 273883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mActiveLongPresses.removeAt(index); 273983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 274083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (mDownKeyCode == keyCode) { 27418d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, " Tracking!"); 274283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn event.mFlags |= FLAG_TRACKING; 274383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownKeyCode = 0; 274483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownTarget = null; 274583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 274683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 274783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 2748497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2749497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown @Override 27509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 2751fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown StringBuilder msg = new StringBuilder(); 2752fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append("KeyEvent { action=").append(actionToString(mAction)); 2753fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", keyCode=").append(keyCodeToString(mKeyCode)); 2754fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", scanCode=").append(mScanCode); 2755fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown if (mCharacters != null) { 2756fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", characters=\"").append(mCharacters).append("\""); 2757fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown } 2758fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", metaState=").append(metaStateToString(mMetaState)); 2759fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", flags=0x").append(Integer.toHexString(mFlags)); 2760fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", repeatCount=").append(mRepeatCount); 2761fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", eventTime=").append(mEventTime); 2762fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", downTime=").append(mDownTime); 2763fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", deviceId=").append(mDeviceId); 2764fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", source=0x").append(Integer.toHexString(mSource)); 2765fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(" }"); 2766fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown return msg.toString(); 2767497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2768497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2769497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 2770497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Returns a string that represents the symbolic name of the specified action 27716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * such as "ACTION_DOWN", or an equivalent numeric constant such as "35" if unknown. 2772497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2773497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @param action The action. 2774497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return The symbolic name of the specified action. 2775497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 2776497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2777497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static String actionToString(int action) { 2778497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown switch (action) { 2779497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case ACTION_DOWN: 2780497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return "ACTION_DOWN"; 2781497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case ACTION_UP: 2782497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return "ACTION_UP"; 2783497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case ACTION_MULTIPLE: 2784497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return "ACTION_MULTIPLE"; 2785497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown default: 2786497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return Integer.toString(action); 2787497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2788497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2789497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2790497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 2791497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Returns a string that represents the symbolic name of the specified keycode 27926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * such as "KEYCODE_A", "KEYCODE_DPAD_UP", or an equivalent numeric constant 27936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * such as "1001" if unknown. 2794497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2795497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @param keyCode The key code. 2796497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return The symbolic name of the specified keycode. 2797497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2798497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see KeyCharacterMap#getDisplayLabel 2799497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2800497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static String keyCodeToString(int keyCode) { 28016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown String symbolicName = KEYCODE_SYMBOLIC_NAMES.get(keyCode); 28026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return symbolicName != null ? symbolicName : Integer.toString(keyCode); 2803497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2804497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2805497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 28066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets a keycode by its symbolic name such as "KEYCODE_A" or an equivalent 28076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * numeric constant such as "1001". 2808497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2809497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @param symbolicName The symbolic name of the keycode. 28106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The keycode or {@link #KEYCODE_UNKNOWN} if not found. 2811497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #keycodeToString 2812497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2813497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static int keyCodeFromString(String symbolicName) { 2814497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown if (symbolicName == null) { 2815497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown throw new IllegalArgumentException("symbolicName must not be null"); 2816497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2817497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 28186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown final int count = KEYCODE_SYMBOLIC_NAMES.size(); 2819497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown for (int i = 0; i < count; i++) { 28206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown if (symbolicName.equals(KEYCODE_SYMBOLIC_NAMES.valueAt(i))) { 2821497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return i; 2822497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2823497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2824497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2825497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown try { 28266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return Integer.parseInt(symbolicName, 10); 2827497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } catch (NumberFormatException ex) { 28286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return KEYCODE_UNKNOWN; 2829497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2830497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2831497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2832497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 2833497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Returns a string that represents the symbolic name of the specified combined meta 2834497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * key modifier state flags such as "0", "META_SHIFT_ON", 28356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * "META_ALT_ON|META_SHIFT_ON" or an equivalent numeric constant such as "0x10000000" 28366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * if unknown. 2837497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2838497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @param metaState The meta state. 2839497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return The symbolic name of the specified combined meta state flags. 2840497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 2841497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2842497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static String metaStateToString(int metaState) { 2843497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown if (metaState == 0) { 2844497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return "0"; 2845497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2846497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown StringBuilder result = null; 2847497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown int i = 0; 2848497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown while (metaState != 0) { 2849497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown final boolean isSet = (metaState & 1) != 0; 2850497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown metaState >>>= 1; // unsigned shift! 2851497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown if (isSet) { 2852497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown final String name = META_SYMBOLIC_NAMES[i]; 2853497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown if (result == null) { 2854497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown if (metaState == 0) { 2855497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return name; 2856497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2857497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown result = new StringBuilder(name); 2858497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } else { 2859497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown result.append('|'); 2860497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown result.append(name); 2861497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2862497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2863497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown i += 1; 2864497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2865497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return result.toString(); 28669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<KeyEvent> CREATOR 28699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<KeyEvent>() { 28709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent createFromParcel(Parcel in) { 28716ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown in.readInt(); // skip token, we already know this is a KeyEvent 28726ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown return KeyEvent.createFromParcelBody(in); 28739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent[] newArray(int size) { 28769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new KeyEvent[size]; 28779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 28796ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 28806ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown /** @hide */ 28816ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown public static KeyEvent createFromParcelBody(Parcel in) { 28826ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown return new KeyEvent(in); 28836ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown } 28846ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 28856ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown private KeyEvent(Parcel in) { 288691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown mDeviceId = in.readInt(); 288791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown mSource = in.readInt(); 28886ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mAction = in.readInt(); 28896ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mKeyCode = in.readInt(); 28906ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mRepeatCount = in.readInt(); 28916ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mMetaState = in.readInt(); 28926ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mScanCode = in.readInt(); 28936ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mFlags = in.readInt(); 28946ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mDownTime = in.readLong(); 28956ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mEventTime = in.readLong(); 28969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel out, int flags) { 28996ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown out.writeInt(PARCEL_TOKEN_KEY_EVENT); 290091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 290191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeInt(mDeviceId); 290291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeInt(mSource); 29039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mAction); 29049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mKeyCode); 29059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mRepeatCount); 29069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mMetaState); 290746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown out.writeInt(mScanCode); 29089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mFlags); 29099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeLong(mDownTime); 29109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeLong(mEventTime); 29119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29133c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn private native boolean native_isSystemKey(int keyCode); 29143c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn private native boolean native_hasDefaultAction(int keyCode); 29159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2916