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; 2383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackbornimport android.util.SparseIntArray; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyCharacterMap.KeyData; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 27dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Object used to report key and button events. 28dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * <p> 29dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Each key press is described by a sequence of key events. A key press 30dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * starts with a key event with {@link #ACTION_DOWN}. If the key is held 31dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * sufficiently long that it repeats, then the initial down is followed 32dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * additional key events with {@link #ACTION_DOWN} and a non-zero value for 33dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * {@link #getRepeatCount()}. The last key event is a {@link #ACTION_UP} 34dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * for the key up. If the key press is canceled, the key up event will have the 35dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * {@link #FLAG_CANCELED} flag set. 36dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p> 37dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Key events are generally accompanied by a key code ({@link #getKeyCode()}), 38dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * scan code ({@link #getScanCode()}) and meta state ({@link #getMetaState()}). 39dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Key code constants are defined in this class. Scan code constants are raw 40dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * device-specific codes obtained from the OS and so are not generally meaningful 41dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * to applications unless interpreted using the {@link KeyCharacterMap}. 42dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Meta states describe the pressed state of key modifiers 43dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * such as {@link #META_SHIFT_ON} or {@link #META_ALT_ON}. 44dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p> 45497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Key codes typically correspond one-to-one with individual keys on an input device. 46497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Many keys and key combinations serve quite different functions on different 47497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * input devices so care must be taken when interpreting them. Always use the 48497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * {@link KeyCharacterMap} associated with the input device when mapping keys 49497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * to characters. Be aware that there may be multiple key input devices active 50497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * at the same time and each will have its own key character map. 51497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * </p><p> 52405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * As soft input methods can use multiple and inventive ways of inputting text, 53405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * there is no guarantee that any key press on a soft keyboard will generate a key 54405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * event: this is left to the IME's discretion, and in fact sending such events is 55405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * discouraged. You should never rely on receiving KeyEvents for any key on a soft 56405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * input method. In particular, the default software keyboard will never send any 57405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * key event to any application targetting Jelly Bean or later, and will only send 58405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * events for some presses of the delete and return keys to applications targetting 59405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * Ice Cream Sandwich or earlier. Be aware that other software input methods may 60405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * never send key events regardless of the version. Consider using editor actions 61405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * like {@link android.view.inputmethod.EditorInfo#IME_ACTION_DONE} if you need 62405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * specific interaction with the software keyboard, as it gives more visibility to 63405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * the user as to how your application will react to key presses. 64405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard * </p><p> 65dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * When interacting with an IME, the framework may deliver key events 66dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * with the special action {@link #ACTION_MULTIPLE} that either specifies 67dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * that single repeated key code or a sequence of characters to insert. 68dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p> 69b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * In general, the framework cannot guarantee that the key events it delivers 70b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * to a view always constitute complete key sequences since some events may be dropped 71b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * or modified by containing views before they are delivered. The view implementation 72b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * should be prepared to handle {@link #FLAG_CANCELED} and should tolerate anomalous 73b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * situations such as receiving a new {@link #ACTION_DOWN} without first having 74b699726018a0049665d8ad6b90dbc5af0e18f135Jeff Brown * received an {@link #ACTION_UP} for the prior key press. 75dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p> 76dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Refer to {@link InputDevice} for more information about how different kinds of 77dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * input devices and sources represent keys and buttons. 78dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p> 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 80c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brownpublic class KeyEvent extends InputEvent implements Parcelable { 81dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Unknown key code. */ 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_UNKNOWN = 0; 83dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Soft Left key. 84dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Usually situated below the display on phones and used as a multi-function 85dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * feature key for selecting a software defined function shown on the bottom left 86dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * of the display. */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SOFT_LEFT = 1; 88dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Soft Right key. 89dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Usually situated below the display on phones and used as a multi-function 90dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * feature key for selecting a software defined function shown on the bottom right 91dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * of the display. */ 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SOFT_RIGHT = 2; 93dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Home key. 94dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * This key is handled by the framework and is never delivered to applications. */ 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_HOME = 3; 96dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Back key. */ 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_BACK = 4; 98dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Call key. */ 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_CALL = 5; 100dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: End Call key. */ 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_ENDCALL = 6; 102dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '0' key. */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_0 = 7; 104dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '1' key. */ 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_1 = 8; 106dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '2' key. */ 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_2 = 9; 108dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '3' key. */ 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_3 = 10; 110dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '4' key. */ 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_4 = 11; 112dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '5' key. */ 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_5 = 12; 114dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '6' key. */ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_6 = 13; 116dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '7' key. */ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_7 = 14; 118dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '8' key. */ 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_8 = 15; 120dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '9' key. */ 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_9 = 16; 122dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '*' key. */ 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_STAR = 17; 124dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '#' key. */ 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_POUND = 18; 126dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Directional Pad Up key. 127dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * May also be synthesized from trackball motions. */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DPAD_UP = 19; 129dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Directional Pad Down key. 130dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * May also be synthesized from trackball motions. */ 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DPAD_DOWN = 20; 132dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Directional Pad Left key. 133dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * May also be synthesized from trackball motions. */ 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DPAD_LEFT = 21; 135dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Directional Pad Right key. 136dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * May also be synthesized from trackball motions. */ 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DPAD_RIGHT = 22; 138dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Directional Pad Center key. 139dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * May also be synthesized from trackball motions. */ 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DPAD_CENTER = 23; 141b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown /** Key code constant: Volume Up key. 142b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * Adjusts the speaker volume up. */ 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_VOLUME_UP = 24; 144b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown /** Key code constant: Volume Down key. 145b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * Adjusts the speaker volume down. */ 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_VOLUME_DOWN = 25; 147dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Power key. */ 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_POWER = 26; 149dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Camera key. 150dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to launch a camera application or take pictures. */ 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_CAMERA = 27; 152dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Clear key. */ 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_CLEAR = 28; 154dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'A' key. */ 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_A = 29; 156dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'B' key. */ 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_B = 30; 158dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'C' key. */ 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_C = 31; 160dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'D' key. */ 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_D = 32; 162dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'E' key. */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_E = 33; 164dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'F' key. */ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_F = 34; 166dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'G' key. */ 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_G = 35; 168dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'H' key. */ 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_H = 36; 170dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'I' key. */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_I = 37; 172dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'J' key. */ 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_J = 38; 174dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'K' key. */ 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_K = 39; 176dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'L' key. */ 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_L = 40; 178dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'M' key. */ 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_M = 41; 180dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'N' key. */ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_N = 42; 182dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'O' key. */ 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_O = 43; 184dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'P' key. */ 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_P = 44; 186dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'Q' key. */ 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_Q = 45; 188dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'R' key. */ 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_R = 46; 190dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'S' key. */ 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_S = 47; 192dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'T' key. */ 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_T = 48; 194dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'U' key. */ 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_U = 49; 196dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'V' key. */ 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_V = 50; 198dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'W' key. */ 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_W = 51; 200dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'X' key. */ 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_X = 52; 202dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'Y' key. */ 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_Y = 53; 204dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: 'Z' key. */ 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_Z = 54; 206dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: ',' key. */ 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_COMMA = 55; 208dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '.' key. */ 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_PERIOD = 56; 210dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Left Alt modifier key. */ 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_ALT_LEFT = 57; 212dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Right Alt modifier key. */ 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_ALT_RIGHT = 58; 214dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Left Shift modifier key. */ 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SHIFT_LEFT = 59; 216dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Right Shift modifier key. */ 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SHIFT_RIGHT = 60; 218dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Tab key. */ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_TAB = 61; 220dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Space key. */ 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SPACE = 62; 222224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown /** Key code constant: Symbol modifier key. 223224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown * Used to enter alternate symbols. */ 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SYM = 63; 225dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Explorer special function key. 226dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to launch a browser application. */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_EXPLORER = 64; 228dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Envelope special function key. 229dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to launch a mail application. */ 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_ENVELOPE = 65; 231dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Enter key. */ 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_ENTER = 66; 233224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown /** Key code constant: Backspace key. 234497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Deletes characters before the insertion point, unlike {@link #KEYCODE_FORWARD_DEL}. */ 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_DEL = 67; 236dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '`' (backtick) key. */ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_GRAVE = 68; 238dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '-'. */ 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_MINUS = 69; 240dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '=' key. */ 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_EQUALS = 70; 242dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '[' key. */ 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_LEFT_BRACKET = 71; 244dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: ']' key. */ 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_RIGHT_BRACKET = 72; 246dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '\' key. */ 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_BACKSLASH = 73; 248dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: ';' key. */ 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SEMICOLON = 74; 250dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: ''' (apostrophe) key. */ 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_APOSTROPHE = 75; 252dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '/' key. */ 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SLASH = 76; 254dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '@' key. */ 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_AT = 77; 256224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown /** Key code constant: Number modifier key. 257224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown * Used to enter numeric symbols. 258224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown * This key is not Num Lock; it is more like {@link #KEYCODE_ALT_LEFT} and is 259224d4a15353656182939aaf4be8cbbf5ab7c63c5Jeff Brown * interpreted as an ALT key by {@link android.text.method.MetaKeyKeyListener}. */ 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_NUM = 78; 261dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Headset Hook key. 262dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to hang up calls and stop media. */ 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_HEADSETHOOK = 79; 264dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Camera Focus key. 265dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to focus the camera. */ 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_FOCUS = 80; // *Camera* focus 267dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: '+' key. */ 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_PLUS = 81; 269dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Menu key. */ 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_MENU = 82; 271dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Notification key. */ 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_NOTIFICATION = 83; 273dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Search key. */ 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_SEARCH = 84; 275dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Play/Pause media key. */ 276935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_PLAY_PAUSE= 85; 277dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Stop media key. */ 278935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_STOP = 86; 279dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Play Next media key. */ 280935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_NEXT = 87; 281dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Play Previous media key. */ 282935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_PREVIOUS = 88; 283dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Rewind media key. */ 284935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_REWIND = 89; 285dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Fast Forward media key. */ 286935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn public static final int KEYCODE_MEDIA_FAST_FORWARD = 90; 287b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown /** Key code constant: Mute key. 288b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * Mutes the microphone, unlike {@link #KEYCODE_VOLUME_MUTE}. */ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int KEYCODE_MUTE = 91; 290dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Page Up key. */ 2914fedd80c1d3997d62073518973b1fe09862ebaa5Chih-Wei Huang public static final int KEYCODE_PAGE_UP = 92; 292dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Page Down key. */ 2934fedd80c1d3997d62073518973b1fe09862ebaa5Chih-Wei Huang public static final int KEYCODE_PAGE_DOWN = 93; 294dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Picture Symbols modifier key. 295dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to switch symbol sets (Emoji, Kao-moji). */ 296b032bc037399110f41cfdb838a792b3c65756323mogimo public static final int KEYCODE_PICTSYMBOLS = 94; // switch symbol-sets (Emoji,Kao-moji) 297dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Switch Charset modifier key. 298dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Used to switch character sets (Kanji, Katakana). */ 299b032bc037399110f41cfdb838a792b3c65756323mogimo public static final int KEYCODE_SWITCH_CHARSET = 95; // switch char-sets (Kanji,Katakana) 300dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: A Button key. 301dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the A button should be either the button labeled A 3026b57bde221c593b46daf020d03f938924ea1ef28Michael Wright * or the first button on the bottom row of controller buttons. */ 303fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_A = 96; 304dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: B Button key. 305dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the B button should be either the button labeled B 3066b57bde221c593b46daf020d03f938924ea1ef28Michael Wright * or the second button on the bottom row of controller buttons. */ 307fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_B = 97; 308dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: C Button key. 309dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the C button should be either the button labeled C 3106b57bde221c593b46daf020d03f938924ea1ef28Michael Wright * or the third button on the bottom row of controller buttons. */ 311fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_C = 98; 312dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: X Button key. 313dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the X button should be either the button labeled X 3146b57bde221c593b46daf020d03f938924ea1ef28Michael Wright * or the first button on the upper row of controller buttons. */ 315fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_X = 99; 316dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Y Button key. 317dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the Y button should be either the button labeled Y 3186b57bde221c593b46daf020d03f938924ea1ef28Michael Wright * or the second button on the upper row of controller buttons. */ 319fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_Y = 100; 320dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Z Button key. 321dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the Z button should be either the button labeled Z 3226b57bde221c593b46daf020d03f938924ea1ef28Michael Wright * or the third button on the upper row of controller buttons. */ 323fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_Z = 101; 324dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: L1 Button key. 325dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the L1 button should be either the button labeled L1 (or L) 326dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the top left trigger button. */ 327fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_L1 = 102; 328dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: R1 Button key. 329dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the R1 button should be either the button labeled R1 (or R) 330dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the top right trigger button. */ 331fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_R1 = 103; 332dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: L2 Button key. 333dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the L2 button should be either the button labeled L2 334dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the bottom left trigger button. */ 335fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_L2 = 104; 336dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: R2 Button key. 337dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the R2 button should be either the button labeled R2 338dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * or the bottom right trigger button. */ 339fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_R2 = 105; 340dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Left Thumb Button key. 341dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the left thumb button indicates that the left (or only) 342dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * joystick is pressed. */ 343fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_THUMBL = 106; 344dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Right Thumb Button key. 345dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the right thumb button indicates that the right 346dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * joystick is pressed. */ 347fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_THUMBR = 107; 348dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Start Button key. 349dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the button labeled Start. */ 350fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_START = 108; 351dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Select Button key. 352dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the button labeled Select. */ 353fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_SELECT = 109; 354dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown /** Key code constant: Mode Button key. 355dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * On a game controller, the button labeled Mode. */ 356fd03582995e0fce963dd0fa0669e3211b74c0dd7Jeff Brown public static final int KEYCODE_BUTTON_MODE = 110; 357497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Escape key. */ 358497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_ESCAPE = 111; 359497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Forward Delete key. 360497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Deletes characters ahead of the insertion point, unlike {@link #KEYCODE_DEL}. */ 361497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_FORWARD_DEL = 112; 362497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Left Control modifier key. */ 363497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_CTRL_LEFT = 113; 364497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Right Control modifier key. */ 365497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_CTRL_RIGHT = 114; 36628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** Key code constant: Caps Lock key. */ 367497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_CAPS_LOCK = 115; 368497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Scroll Lock key. */ 369497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_SCROLL_LOCK = 116; 370497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Left Meta modifier key. */ 371497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_META_LEFT = 117; 372497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Right Meta modifier key. */ 373497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_META_RIGHT = 118; 374497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Function modifier key. */ 375497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_FUNCTION = 119; 376497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: System Request / Print Screen key. */ 377497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_SYSRQ = 120; 378497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Break / Pause key. */ 379497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_BREAK = 121; 380497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Home Movement key. 381497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Used for scrolling or moving the cursor around to the start of a line 382497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * or to the top of a list. */ 383497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MOVE_HOME = 122; 384497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: End Movement key. 385497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Used for scrolling or moving the cursor around to the end of a line 386497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * or to the bottom of a list. */ 387497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MOVE_END = 123; 388497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Insert key. 389497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Toggles insert / overwrite edit mode. */ 390497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_INSERT = 124; 391497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Forward key. 392497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Navigates forward in the history stack. Complement of {@link #KEYCODE_BACK}. */ 393497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_FORWARD = 125; 394497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Play media key. */ 395497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MEDIA_PLAY = 126; 396497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Pause media key. */ 397497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MEDIA_PAUSE = 127; 398497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Close media key. 399497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * May be used to close a CD tray, for example. */ 400497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MEDIA_CLOSE = 128; 401497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Eject media key. 402497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * May be used to eject a CD tray, for example. */ 403497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MEDIA_EJECT = 129; 404497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Record media key. */ 405497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_MEDIA_RECORD = 130; 406497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F1 key. */ 407497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F1 = 131; 408497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F2 key. */ 409497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F2 = 132; 410497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F3 key. */ 411497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F3 = 133; 412497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F4 key. */ 413497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F4 = 134; 414497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F5 key. */ 415497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F5 = 135; 416497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F6 key. */ 417497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F6 = 136; 418497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F7 key. */ 419497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F7 = 137; 420497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F8 key. */ 421497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F8 = 138; 422497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F9 key. */ 423497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F9 = 139; 424497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F10 key. */ 425497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F10 = 140; 426497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F11 key. */ 427497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F11 = 141; 428497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: F12 key. */ 429497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_F12 = 142; 43028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** Key code constant: Num Lock key. 431497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * This is the Num Lock key; it is different from {@link #KEYCODE_NUM}. 43228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * This key alters the behavior of other keys on the numeric keypad. */ 433497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUM_LOCK = 143; 434497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '0' key. */ 435497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_0 = 144; 436497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '1' key. */ 437497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_1 = 145; 438497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '2' key. */ 439497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_2 = 146; 440497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '3' key. */ 441497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_3 = 147; 442497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '4' key. */ 443497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_4 = 148; 444497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '5' key. */ 445497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_5 = 149; 446497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '6' key. */ 447497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_6 = 150; 448497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '7' key. */ 449497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_7 = 151; 450497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '8' key. */ 451497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_8 = 152; 452497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '9' key. */ 453497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_9 = 153; 454497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '/' key (for division). */ 455497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_DIVIDE = 154; 456497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '*' key (for multiplication). */ 457497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_MULTIPLY = 155; 458497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '-' key (for subtraction). */ 459497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_SUBTRACT = 156; 460497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '+' key (for addition). */ 461497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_ADD = 157; 462497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '.' key (for decimals or digit grouping). */ 463497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_DOT = 158; 464497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad ',' key (for decimals or digit grouping). */ 465497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_COMMA = 159; 466497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad Enter key. */ 467497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_ENTER = 160; 468497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '=' key. */ 469497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_EQUALS = 161; 470497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad '(' key. */ 471497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_LEFT_PAREN = 162; 472497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** Key code constant: Numeric keypad ')' key. */ 473497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int KEYCODE_NUMPAD_RIGHT_PAREN = 163; 474b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown /** Key code constant: Volume Mute key. 475b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * Mutes the speaker, unlike {@link #KEYCODE_MUTE}. 476b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * This key should normally be implemented as a toggle such that the first press 477b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown * mutes the speaker and the second press restores the original volume. */ 478b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown public static final int KEYCODE_VOLUME_MUTE = 164; 4793adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Info key. 4803adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * Common on TV remotes to show additional information related to what is 4813adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * currently being viewed. */ 4823adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_INFO = 165; 4833adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Channel up key. 4843adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, increments the television channel. */ 4853adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_CHANNEL_UP = 166; 4863adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Channel down key. 4873adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, decrements the television channel. */ 4883adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_CHANNEL_DOWN = 167; 4893adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Zoom in key. */ 4903adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_ZOOM_IN = 168; 4913adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Zoom out key. */ 4923adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_ZOOM_OUT = 169; 4933adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: TV key. 4943adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, switches to viewing live TV. */ 4953adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_TV = 170; 4963adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Window key. 49703d4a6586507e7f230e83163b12b9863a47fadf0Julius D'souza * On TV remotes, toggles picture-in-picture mode or other windowing functions. 49803d4a6586507e7f230e83163b12b9863a47fadf0Julius D'souza * On Android Wear devices, triggers a display offset. */ 4993adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_WINDOW = 171; 5003adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Guide key. 5013adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, shows a programming guide. */ 5023adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_GUIDE = 172; 5033adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: DVR key. 5043adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On some TV remotes, switches to a DVR mode for recorded shows. */ 5053adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_DVR = 173; 5063adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Bookmark key. 5073adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On some TV remotes, bookmarks content or web pages. */ 5083adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_BOOKMARK = 174; 5093adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Toggle captions key. 5103adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * Switches the mode for closed-captioning text, for example during television shows. */ 5113adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_CAPTIONS = 175; 5123adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Settings key. 5133adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * Starts the system settings activity. */ 5143adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_SETTINGS = 176; 5153adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: TV power key. 5163adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, toggles the power on a television screen. */ 5173adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_TV_POWER = 177; 5183adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: TV input key. 5193adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, switches the input on a television screen. */ 5203adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_TV_INPUT = 178; 5213adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Set-top-box power key. 5223adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, toggles the power on an external Set-top-box. */ 5233adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_STB_POWER = 179; 5243adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Set-top-box input key. 5253adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, switches the input mode on an external Set-top-box. */ 5263adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_STB_INPUT = 180; 5273adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: A/V Receiver power key. 5283adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, toggles the power on an external A/V Receiver. */ 5293adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_AVR_POWER = 181; 5303adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: A/V Receiver input key. 5313adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, switches the input mode on an external A/V Receiver. */ 5323adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_AVR_INPUT = 182; 5333adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Red "programmable" key. 5343adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, acts as a contextual/programmable key. */ 5353adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_PROG_RED = 183; 5363adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Green "programmable" key. 5373adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, actsas a contextual/programmable key. */ 5383adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_PROG_GREEN = 184; 5393adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Yellow "programmable" key. 5403adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, acts as a contextual/programmable key. */ 5413adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_PROG_YELLOW = 185; 5423adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer /** Key code constant: Blue "programmable" key. 5433adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer * On TV remotes, acts as a contextual/programmable key. */ 5443adf490a5aaa2e87676c8985b566fcb0dfeb74b9Jason Bayer public static final int KEYCODE_PROG_BLUE = 186; 54549ed71db425c5054e3ad9526496a7e116c89556bJeff Brown /** Key code constant: App switch key. 54649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * Should bring up the application switcher dialog. */ 54749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown public static final int KEYCODE_APP_SWITCH = 187; 548cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #1.*/ 549cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_1 = 188; 550cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #2.*/ 551cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_2 = 189; 552cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #3.*/ 553cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_3 = 190; 554cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #4.*/ 555cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_4 = 191; 556cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #5.*/ 557cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_5 = 192; 558cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #6.*/ 559cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_6 = 193; 560cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #7.*/ 561cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_7 = 194; 562cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #8.*/ 563cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_8 = 195; 564cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #9.*/ 565cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_9 = 196; 566cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #10.*/ 567cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_10 = 197; 568cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #11.*/ 569cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_11 = 198; 570cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #12.*/ 571cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_12 = 199; 572cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #13.*/ 573cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_13 = 200; 574cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #14.*/ 575cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_14 = 201; 576cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #15.*/ 577cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_15 = 202; 578cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** Key code constant: Generic Game Pad Button #16.*/ 579cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int KEYCODE_BUTTON_16 = 203; 5809812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown /** Key code constant: Language Switch key. 5819812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * Toggles the current input language such as switching between English and Japanese on 5829812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * a QWERTY keyboard. On some devices, the same function may be performed by 5839812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * pressing Shift+Spacebar. */ 5849812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown public static final int KEYCODE_LANGUAGE_SWITCH = 204; 5859812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown /** Key code constant: Manner Mode key. 5869812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * Toggles silent or vibrate mode on and off to make the device behave more politely 5879812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * in certain settings such as on a crowded train. On some devices, the key may only 5889812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * operate when long-pressed. */ 5899812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown public static final int KEYCODE_MANNER_MODE = 205; 5909812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown /** Key code constant: 3D Mode key. 5919812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown * Toggles the display between 2D and 3D mode. */ 5929812aed2765c671e6c3f5255ac1b8a2fe0e72ef6Jeff Brown public static final int KEYCODE_3D_MODE = 206; 5936651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown /** Key code constant: Contacts special function key. 5946651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown * Used to launch an address book application. */ 5956651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown public static final int KEYCODE_CONTACTS = 207; 5966651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown /** Key code constant: Calendar special function key. 5976651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown * Used to launch a calendar application. */ 5986651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown public static final int KEYCODE_CALENDAR = 208; 5996651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown /** Key code constant: Music special function key. 6006651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown * Used to launch a music player application. */ 6016651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown public static final int KEYCODE_MUSIC = 209; 6026651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown /** Key code constant: Calculator special function key. 6036651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown * Used to launch a calculator application. */ 6046651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown public static final int KEYCODE_CALCULATOR = 210; 6057511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese full-width / half-width key. */ 6067511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_ZENKAKU_HANKAKU = 211; 6077511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese alphanumeric key. */ 6087511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_EISU = 212; 6097511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese non-conversion key. */ 6107511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_MUHENKAN = 213; 6117511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese conversion key. */ 6127511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_HENKAN = 214; 6137511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese katakana / hiragana key. */ 6147511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_KATAKANA_HIRAGANA = 215; 6157511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese Yen key. */ 6167511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_YEN = 216; 6177511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese Ro key. */ 6187511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_RO = 217; 6197511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang /** Key code constant: Japanese kana key. */ 6207511f9cd2ff39075ff56c2558c785caffc8b4383Yang Chuang public static final int KEYCODE_KANA = 218; 621de7a8ead2467a4a152a5a9b2416c8048f1b48bbbJeff Brown /** Key code constant: Assist key. 622de7a8ead2467a4a152a5a9b2416c8048f1b48bbbJeff Brown * Launches the global assist activity. Not delivered to applications. */ 623de7a8ead2467a4a152a5a9b2416c8048f1b48bbbJeff Brown public static final int KEYCODE_ASSIST = 219; 6241df477acf60538f9de18bd597e090d075fa83509Michael Wright /** Key code constant: Brightness Down key. 6251df477acf60538f9de18bd597e090d075fa83509Michael Wright * Adjusts the screen brightness down. */ 6261df477acf60538f9de18bd597e090d075fa83509Michael Wright public static final int KEYCODE_BRIGHTNESS_DOWN = 220; 6271df477acf60538f9de18bd597e090d075fa83509Michael Wright /** Key code constant: Brightness Up key. 6281df477acf60538f9de18bd597e090d075fa83509Michael Wright * Adjusts the screen brightness up. */ 6291df477acf60538f9de18bd597e090d075fa83509Michael Wright public static final int KEYCODE_BRIGHTNESS_UP = 221; 6306212a49a9475768316a999596ffc4dd0f4ce96e5Jeff Brown /** Key code constant: Audio Track key. 631bfdad8ecad06f855c8facf72177b0f01919ff629Jaekyun Seok * Switches the audio tracks. */ 632bfdad8ecad06f855c8facf72177b0f01919ff629Jaekyun Seok public static final int KEYCODE_MEDIA_AUDIO_TRACK = 222; 6336212a49a9475768316a999596ffc4dd0f4ce96e5Jeff Brown /** Key code constant: Sleep key. 6346212a49a9475768316a999596ffc4dd0f4ce96e5Jeff Brown * Puts the device to sleep. Behaves somewhat like {@link #KEYCODE_POWER} but it 6356212a49a9475768316a999596ffc4dd0f4ce96e5Jeff Brown * has no effect if the device is already asleep. */ 6366212a49a9475768316a999596ffc4dd0f4ce96e5Jeff Brown public static final int KEYCODE_SLEEP = 223; 6376212a49a9475768316a999596ffc4dd0f4ce96e5Jeff Brown /** Key code constant: Wakeup key. 6386212a49a9475768316a999596ffc4dd0f4ce96e5Jeff Brown * Wakes up the device. Behaves somewhat like {@link #KEYCODE_POWER} but it 6396212a49a9475768316a999596ffc4dd0f4ce96e5Jeff Brown * has no effect if the device is already awake. */ 6406212a49a9475768316a999596ffc4dd0f4ce96e5Jeff Brown public static final int KEYCODE_WAKEUP = 224; 64187cd0dc425201d56f1b07fa710d4f44fff4131bcTim Kilbourn /** Key code constant: Pairing key. 64287cd0dc425201d56f1b07fa710d4f44fff4131bcTim Kilbourn * Initiates peripheral pairing mode. Useful for pairing remote control 64387cd0dc425201d56f1b07fa710d4f44fff4131bcTim Kilbourn * devices or game controllers, especially if no other input mode is 64487cd0dc425201d56f1b07fa710d4f44fff4131bcTim Kilbourn * available. */ 64587cd0dc425201d56f1b07fa710d4f44fff4131bcTim Kilbourn public static final int KEYCODE_PAIRING = 225; 64696658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim /** Key code constant: Media Top Menu key. 64796658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * Goes to the top of media menu. */ 64896658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim public static final int KEYCODE_MEDIA_TOP_MENU = 226; 64996658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim /** Key code constant: '11' key. */ 65096658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim public static final int KEYCODE_11 = 227; 65196658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim /** Key code constant: '12' key. */ 65296658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim public static final int KEYCODE_12 = 228; 65396658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim /** Key code constant: Last Channel key. 65496658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * Goes to the last viewed channel. */ 65596658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim public static final int KEYCODE_LAST_CHANNEL = 229; 65696658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim /** Key code constant: TV data service key. 65796658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * Displays data services like weather, sports. */ 65896658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim public static final int KEYCODE_TV_DATA_SERVICE = 230; 659dc63f7b91c1632ca9e3f8725ae5ed43e7f7dcd8bMichael Wright /** Key code constant: Voice Assist key. 660dc63f7b91c1632ca9e3f8725ae5ed43e7f7dcd8bMichael Wright * Launches the global voice assist activity. Not delivered to applications. */ 661dc63f7b91c1632ca9e3f8725ae5ed43e7f7dcd8bMichael Wright public static final int KEYCODE_VOICE_ASSIST = 231; 662dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Radio key. 663dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Toggles TV service / Radio service. */ 664dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_RADIO_SERVICE = 232; 665dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Teletext key. 666dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Displays Teletext service. */ 667dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_TELETEXT = 233; 668dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Number entry key. 669dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Initiates to enter multi-digit channel nubmber when each digit key is assigned 670dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * for selecting separate channel. Corresponds to Number Entry Mode (0x1D) of CEC 671dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * User Control Code. */ 672dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_NUMBER_ENTRY = 234; 673dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Analog Terrestrial key. 674dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to analog terrestrial broadcast service. */ 675dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_TERRESTRIAL_ANALOG = 235; 676dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Digital Terrestrial key. 677dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to digital terrestrial broadcast service. */ 678dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_TERRESTRIAL_DIGITAL = 236; 679dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Satellite key. 680dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to digital satellite broadcast service. */ 681dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_SATELLITE = 237; 682dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: BS key. 683dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to BS digital satellite broadcasting service available in Japan. */ 684dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_SATELLITE_BS = 238; 685dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: CS key. 686dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to CS digital satellite broadcasting service available in Japan. */ 687dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_SATELLITE_CS = 239; 688dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: BS/CS key. 689dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Toggles between BS and CS digital satellite services. */ 690dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_SATELLITE_SERVICE = 240; 691dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Toggle Network key. 692dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Toggles selecting broacast services. */ 693dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_NETWORK = 241; 694dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Antenna/Cable key. 695dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Toggles broadcast input source between antenna and cable. */ 696dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_ANTENNA_CABLE = 242; 697dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: HDMI #1 key. 698dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to HDMI input #1. */ 699dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_INPUT_HDMI_1 = 243; 700dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: HDMI #2 key. 701dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to HDMI input #2. */ 702dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_INPUT_HDMI_2 = 244; 703dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: HDMI #3 key. 704dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to HDMI input #3. */ 705dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_INPUT_HDMI_3 = 245; 706dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: HDMI #4 key. 707dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to HDMI input #4. */ 708dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_INPUT_HDMI_4 = 246; 709dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Composite #1 key. 710dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to composite video input #1. */ 711dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_INPUT_COMPOSITE_1 = 247; 712dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Composite #2 key. 713dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to composite video input #2. */ 714dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_INPUT_COMPOSITE_2 = 248; 715dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Component #1 key. 716dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to component video input #1. */ 717dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_INPUT_COMPONENT_1 = 249; 718dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Component #2 key. 719dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to component video input #2. */ 720dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_INPUT_COMPONENT_2 = 250; 721dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: VGA #1 key. 722dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Switches to VGA (analog RGB) input #1. */ 723dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_INPUT_VGA_1 = 251; 724dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Audio description key. 725dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Toggles audio description off / on. */ 726dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_AUDIO_DESCRIPTION = 252; 727dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Audio description mixing volume up key. 728dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Louden audio description volume as compared with normal audio volume. */ 729dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253; 730dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Audio description mixing volume down key. 731dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Lessen audio description volume as compared with normal audio volume. */ 732dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254; 733dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Zoom mode key. 734dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Changes Zoom mode (Normal, Full, Zoom, Wide-zoom, etc.) */ 735dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_ZOOM_MODE = 255; 736dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Contents menu key. 737dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Goes to the title list. Corresponds to Contents Menu (0x0B) of CEC User Control 738dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Code */ 739dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_CONTENTS_MENU = 256; 740dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Media context menu key. 741dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Goes to the context menu of media contents. Corresponds to Media Context-sensitive 742dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Menu (0x11) of CEC User Control Code. */ 743dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_MEDIA_CONTEXT_MENU = 257; 744dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Timer programming key. 745dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * Goes to the timer recording menu. Corresponds to Timer Programming (0x54) of 746dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki * CEC User Control Code. */ 747dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_TV_TIMER_PROGRAMMING = 258; 748dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki /** Key code constant: Help key. */ 749dbd6abaf5fb83b3d34978ad498839a9163f81173ASAZU, Hideki public static final int KEYCODE_HELP = 259; 750962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright /** Key code constant: Navigate to previous key. 75155b9ed42d3e1f61794d23cd0f4a04d01c51eab14Joseph Cooper * Goes backward by one item in an ordered collection of items. */ 75255b9ed42d3e1f61794d23cd0f4a04d01c51eab14Joseph Cooper public static final int KEYCODE_NAVIGATE_PREVIOUS = 260; 753962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright /** Key code constant: Navigate to next key. 75455b9ed42d3e1f61794d23cd0f4a04d01c51eab14Joseph Cooper * Advances to the next item in an ordered collection of items. */ 75555b9ed42d3e1f61794d23cd0f4a04d01c51eab14Joseph Cooper public static final int KEYCODE_NAVIGATE_NEXT = 261; 75655b9ed42d3e1f61794d23cd0f4a04d01c51eab14Joseph Cooper /** Key code constant: Navigate in key. 757962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright * Activates the item that currently has focus or expands to the next level of a navigation 75855b9ed42d3e1f61794d23cd0f4a04d01c51eab14Joseph Cooper * hierarchy. */ 75955b9ed42d3e1f61794d23cd0f4a04d01c51eab14Joseph Cooper public static final int KEYCODE_NAVIGATE_IN = 262; 76055b9ed42d3e1f61794d23cd0f4a04d01c51eab14Joseph Cooper /** Key code constant: Navigate out key. 761962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright * Backs out one level of a navigation hierarchy or collapses the item that currently has 76255b9ed42d3e1f61794d23cd0f4a04d01c51eab14Joseph Cooper * focus. */ 76355b9ed42d3e1f61794d23cd0f4a04d01c51eab14Joseph Cooper public static final int KEYCODE_NAVIGATE_OUT = 263; 7649d826681a5836dd5ce8d3bce862cfeb083da1e7bAnthony Hugh /** Key code constant: Primary stem key for Wear 7659d826681a5836dd5ce8d3bce862cfeb083da1e7bAnthony Hugh * Main power/reset button on watch. */ 7669d826681a5836dd5ce8d3bce862cfeb083da1e7bAnthony Hugh public static final int KEYCODE_STEM_PRIMARY = 264; 7679d826681a5836dd5ce8d3bce862cfeb083da1e7bAnthony Hugh /** Key code constant: Generic stem key 1 for Wear */ 7689d826681a5836dd5ce8d3bce862cfeb083da1e7bAnthony Hugh public static final int KEYCODE_STEM_1 = 265; 7699d826681a5836dd5ce8d3bce862cfeb083da1e7bAnthony Hugh /** Key code constant: Generic stem key 2 for Wear */ 7709d826681a5836dd5ce8d3bce862cfeb083da1e7bAnthony Hugh public static final int KEYCODE_STEM_2 = 266; 7719d826681a5836dd5ce8d3bce862cfeb083da1e7bAnthony Hugh /** Key code constant: Generic stem key 3 for Wear */ 7729d826681a5836dd5ce8d3bce862cfeb083da1e7bAnthony Hugh public static final int KEYCODE_STEM_3 = 267; 773a487f0cbe22f35959fa2ff3e7cb97bf9e221e538David Stevens /** Key code constant: Directional Pad Up-Left */ 774a487f0cbe22f35959fa2ff3e7cb97bf9e221e538David Stevens public static final int KEYCODE_DPAD_UP_LEFT = 268; 775a487f0cbe22f35959fa2ff3e7cb97bf9e221e538David Stevens /** Key code constant: Directional Pad Down-Left */ 776a487f0cbe22f35959fa2ff3e7cb97bf9e221e538David Stevens public static final int KEYCODE_DPAD_DOWN_LEFT = 269; 777a487f0cbe22f35959fa2ff3e7cb97bf9e221e538David Stevens /** Key code constant: Directional Pad Up-Right */ 778a487f0cbe22f35959fa2ff3e7cb97bf9e221e538David Stevens public static final int KEYCODE_DPAD_UP_RIGHT = 270; 779a487f0cbe22f35959fa2ff3e7cb97bf9e221e538David Stevens /** Key code constant: Directional Pad Down-Right */ 780a487f0cbe22f35959fa2ff3e7cb97bf9e221e538David Stevens public static final int KEYCODE_DPAD_DOWN_RIGHT = 271; 781962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright /** Key code constant: Skip forward media key. */ 782962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright public static final int KEYCODE_MEDIA_SKIP_FORWARD = 272; 783962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright /** Key code constant: Skip backward media key. */ 784962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright public static final int KEYCODE_MEDIA_SKIP_BACKWARD = 273; 785962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright /** Key code constant: Step forward media key. 786962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright * Steps media forward, one frame at a time. */ 787962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright public static final int KEYCODE_MEDIA_STEP_FORWARD = 274; 788962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright /** Key code constant: Step backward media key. 789962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright * Steps media backward, one frame at a time. */ 790962c9532a19be0add1aa377b8e93e54dd578a3fcMichael Wright public static final int KEYCODE_MEDIA_STEP_BACKWARD = 275; 7913a5a8c741b5e6e4bb6f6729409f409f341cdb2bbNick Armstrong-Crews /** Key code constant: put device to sleep unless a wakelock is held. */ 79256ecfcce6c88fc80cf509effcebb124bbe0c79f8Nick Armstrong-Crews public static final int KEYCODE_SOFT_SLEEP = 276; 793ea84cff8fd9f5efbe42bf0f07b2adfeeb4352fb6Michael Wright /** Key code constant: Cut key. */ 794ea84cff8fd9f5efbe42bf0f07b2adfeeb4352fb6Michael Wright public static final int KEYCODE_CUT = 277; 795ea84cff8fd9f5efbe42bf0f07b2adfeeb4352fb6Michael Wright /** Key code constant: Copy key. */ 796ea84cff8fd9f5efbe42bf0f07b2adfeeb4352fb6Michael Wright public static final int KEYCODE_COPY = 278; 797ea84cff8fd9f5efbe42bf0f07b2adfeeb4352fb6Michael Wright /** Key code constant: Paste key. */ 798ea84cff8fd9f5efbe42bf0f07b2adfeeb4352fb6Michael Wright public static final int KEYCODE_PASTE = 279; 79907e0384a4e931bc94550c108ddd9b9514100161eJim Miller /** Key code constant: Consumed by the system for navigation up */ 80007e0384a4e931bc94550c108ddd9b9514100161eJim Miller public static final int KEYCODE_SYSTEM_NAVIGATION_UP = 280; 80107e0384a4e931bc94550c108ddd9b9514100161eJim Miller /** Key code constant: Consumed by the system for navigation down */ 80207e0384a4e931bc94550c108ddd9b9514100161eJim Miller public static final int KEYCODE_SYSTEM_NAVIGATION_DOWN = 281; 80307e0384a4e931bc94550c108ddd9b9514100161eJim Miller /** Key code constant: Consumed by the system for navigation left*/ 80407e0384a4e931bc94550c108ddd9b9514100161eJim Miller public static final int KEYCODE_SYSTEM_NAVIGATION_LEFT = 282; 80507e0384a4e931bc94550c108ddd9b9514100161eJim Miller /** Key code constant: Consumed by the system for navigation right */ 80607e0384a4e931bc94550c108ddd9b9514100161eJim Miller public static final int KEYCODE_SYSTEM_NAVIGATION_RIGHT = 283; 807497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 80807e0384a4e931bc94550c108ddd9b9514100161eJim Miller private static final int LAST_KEYCODE = KEYCODE_SYSTEM_NAVIGATION_RIGHT; 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // NOTE: If you add a new keycode here you must also add it to: 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // isSystem() 812dc63f7b91c1632ca9e3f8725ae5ed43e7f7dcd8bMichael Wright // isWakeKey() 81361c37ae7cad456a6cc337b0a05aeb6b3091cf10eChirayu Desai // frameworks/native/include/android/keycodes.h 81496658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim // frameworks/native/include/input/InputEventLabels.h 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // frameworks/base/core/res/res/values/attrs.xml 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // emulator? 8176651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown // LAST_KEYCODE 818935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // 819935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // Also Android currently does not reserve code ranges for vendor- 820935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // specific key codes. If you have new key codes to have, you 821935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // MUST contribute a patch to the open source project to define 822935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // those new codes. This is intended to maintain a consistent 823935ae463d495d41155e27feb849768ad2b8b16dbDianne Hackborn // set of key code definitions across all Android devices. 824497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 825497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown // Symbolic names of all metakeys in bit order from least significant to most significant. 826497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown // Accordingly there are exactly 32 values in this table. 827497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown private static final String[] META_SYMBOLIC_NAMES = new String[] { 828497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_SHIFT_ON", 829497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_ALT_ON", 830497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_SYM_ON", 831497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_FUNCTION_ON", 832497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_ALT_LEFT_ON", 833497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_ALT_RIGHT_ON", 834497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_SHIFT_LEFT_ON", 835497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_SHIFT_RIGHT_ON", 836497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_CAP_LOCKED", 837497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_ALT_LOCKED", 838497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_SYM_LOCKED", 839497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x00000800", 840497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_CTRL_ON", 841497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_CTRL_LEFT_ON", 842497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_CTRL_RIGHT_ON", 843497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x00008000", 844497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_META_ON", 845497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_META_LEFT_ON", 846497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "META_META_RIGHT_ON", 847497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x00080000", 84851e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown "META_CAPS_LOCK_ON", 84951e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown "META_NUM_LOCK_ON", 85051e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown "META_SCROLL_LOCK_ON", 851497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x00800000", 852497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x01000000", 853497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x02000000", 854497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x04000000", 855497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x08000000", 856497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x10000000", 857497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x20000000", 858497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x40000000", 859497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown "0x80000000", 860497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown }; 861497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 862337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright private static final String LABEL_PREFIX = "KEYCODE_"; 863337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated There are now more than MAX_KEYCODE keycodes. 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use {@link #getMaxKeyCode()} instead. 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Deprecated 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MAX_KEYCODE = 84; 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getAction} value: the key has been pressed down. 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_DOWN = 0; 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getAction} value: the key has been released. 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_UP = 1; 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getAction} value: multiple duplicate key events have 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * occurred in a row, or a complex string is being delivered. If the 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key code is not {#link {@link #KEYCODE_UNKNOWN} then the 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {#link {@link #getRepeatCount()} method returns the number of times 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the given key code should be executed. 88546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * Otherwise, if the key code is {@link #KEYCODE_UNKNOWN}, then 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this is a sequence of characters as returned by {@link #getCharacters}. 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_MULTIPLE = 2; 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 891497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * SHIFT key locked in CAPS mode. 892497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Reserved for use by {@link MetaKeyKeyListener} for a published constant in its API. 893497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 894497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 895497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_CAP_LOCKED = 0x100; 896497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 897497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 898497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * ALT key locked. 899497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Reserved for use by {@link MetaKeyKeyListener} for a published constant in its API. 900497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 901497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 902497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_ALT_LOCKED = 0x200; 903497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 904497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 905497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * SYM key locked. 906497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Reserved for use by {@link MetaKeyKeyListener} for a published constant in its API. 907497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 908497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 909497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_SYM_LOCKED = 0x400; 910497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 911497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 912497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Text is in selection mode. 913497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Reserved for use by {@link MetaKeyKeyListener} for a private unpublished constant 914497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * in its API that is currently being retained for legacy reasons. 915497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 916497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 917497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_SELECTING = 0x800; 918497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 919497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether one of the ALT meta keys is pressed.</p> 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isAltPressed() 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_LEFT 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_RIGHT 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_ALT_ON = 0x02; 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether the left ALT meta key is pressed.</p> 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isAltPressed() 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_LEFT 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_ALT_LEFT_ON = 0x10; 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether the right the ALT meta key is pressed.</p> 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isAltPressed() 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_RIGHT 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_ALT_RIGHT_ON = 0x20; 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether one of the SHIFT meta keys is pressed.</p> 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isShiftPressed() 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_LEFT 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_RIGHT 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_SHIFT_ON = 0x1; 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether the left SHIFT meta key is pressed.</p> 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isShiftPressed() 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_LEFT 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_SHIFT_LEFT_ON = 0x40; 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether the right SHIFT meta key is pressed.</p> 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isShiftPressed() 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_RIGHT 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_SHIFT_RIGHT_ON = 0x80; 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This mask is used to check whether the SYM meta key is pressed.</p> 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isSymPressed() 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getMetaState() 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int META_SYM_ON = 0x4; 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 984497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether the FUNCTION meta key is pressed.</p> 985497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 986497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isFunctionPressed() 987497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 988497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 989497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_FUNCTION_ON = 0x8; 990497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 991497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 992497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether one of the CTRL meta keys is pressed.</p> 993497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 994497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isCtrlPressed() 995497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 996497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_LEFT 997497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_RIGHT 998497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 999497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_CTRL_ON = 0x1000; 1000497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1001497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1002497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether the left CTRL meta key is pressed.</p> 1003497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1004497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isCtrlPressed() 1005497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1006497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_LEFT 1007497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1008497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_CTRL_LEFT_ON = 0x2000; 1009497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1010497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1011497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether the right CTRL meta key is pressed.</p> 1012497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1013497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isCtrlPressed() 1014497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1015497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_RIGHT 1016497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1017497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_CTRL_RIGHT_ON = 0x4000; 1018497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1019497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1020497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether one of the META meta keys is pressed.</p> 1021497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1022497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isMetaPressed() 1023497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1024497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_LEFT 1025497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_RIGHT 1026497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1027497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_META_ON = 0x10000; 1028497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1029497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1030497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether the left META meta key is pressed.</p> 1031497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1032497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isMetaPressed() 1033497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1034497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_LEFT 1035497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1036497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_META_LEFT_ON = 0x20000; 1037497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1038497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 1039497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>This mask is used to check whether the right META meta key is pressed.</p> 1040497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 1041497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isMetaPressed() 1042497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1043497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_RIGHT 1044497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 1045497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static final int META_META_RIGHT_ON = 0x40000; 1046497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1047497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 104851e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>This mask is used to check whether the CAPS LOCK meta key is on.</p> 1049497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 105051e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isCapsLockOn() 1051497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1052497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CAPS_LOCK 1053497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 105451e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public static final int META_CAPS_LOCK_ON = 0x100000; 1055497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1056497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 105751e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>This mask is used to check whether the NUM LOCK meta key is on.</p> 1058497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 105951e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isNumLockOn() 1060497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1061497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_NUM_LOCK 1062497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 106351e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public static final int META_NUM_LOCK_ON = 0x200000; 1064497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 1065497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 106651e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>This mask is used to check whether the SCROLL LOCK meta key is on.</p> 1067497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 106851e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isScrollLockOn() 1069497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #getMetaState() 1070497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_SCROLL_LOCK 1071497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 107251e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public static final int META_SCROLL_LOCK_ON = 0x400000; 1073497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 107464da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 107564da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * This mask is a combination of {@link #META_SHIFT_ON}, {@link #META_SHIFT_LEFT_ON} 107664da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * and {@link #META_SHIFT_RIGHT_ON}. 107764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 1078c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown public static final int META_SHIFT_MASK = META_SHIFT_ON 1079c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown | META_SHIFT_LEFT_ON | META_SHIFT_RIGHT_ON; 1080c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown 108164da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 108264da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * This mask is a combination of {@link #META_ALT_ON}, {@link #META_ALT_LEFT_ON} 108364da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * and {@link #META_ALT_RIGHT_ON}. 108464da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 1085c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown public static final int META_ALT_MASK = META_ALT_ON 1086c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown | META_ALT_LEFT_ON | META_ALT_RIGHT_ON; 1087c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown 108864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 108964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * This mask is a combination of {@link #META_CTRL_ON}, {@link #META_CTRL_LEFT_ON} 109064da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * and {@link #META_CTRL_RIGHT_ON}. 109164da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 1092c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown public static final int META_CTRL_MASK = META_CTRL_ON 1093c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown | META_CTRL_LEFT_ON | META_CTRL_RIGHT_ON; 1094c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown 109564da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 109664da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * This mask is a combination of {@link #META_META_ON}, {@link #META_META_LEFT_ON} 109764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * and {@link #META_META_RIGHT_ON}. 109864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 109964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown public static final int META_META_MASK = META_META_ON 1100c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown | META_META_LEFT_ON | META_META_RIGHT_ON; 1101c1df907e3950fd8d2efac110edd72ea07b3b441eJeff Brown 1102497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This mask is set if the device woke because of this key event. 1104037c33eae74bee2774897d969d48947f9abe254fJeff Brown * 1105037c33eae74bee2774897d969d48947f9abe254fJeff Brown * @deprecated This flag will never be set by the system since the system 1106037c33eae74bee2774897d969d48947f9abe254fJeff Brown * consumes all wake keys itself. 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1108037c33eae74bee2774897d969d48947f9abe254fJeff Brown @Deprecated 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_WOKE_HERE = 0x1; 111001fe661ae5da3739215d93922412df4b24c859a2RoboErik 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This mask is set if the key event was generated by a software keyboard. 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_SOFT_KEYBOARD = 0x2; 111501fe661ae5da3739215d93922412df4b24c859a2RoboErik 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This mask is set if we don't want the key event to cause us to leave 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * touch mode. 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_KEEP_TOUCH_MODE = 0x4; 112101fe661ae5da3739215d93922412df4b24c859a2RoboErik 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1123105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * This mask is set if an event was known to come from a trusted part 1124105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * of the system. That is, the event is known to come from the user, 1125105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * and could not have been spoofed by a third party component. 1126105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1127105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public static final int FLAG_FROM_SYSTEM = 0x8; 112801fe661ae5da3739215d93922412df4b24c859a2RoboErik 1129105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 1130105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * This mask is used for compatibility, to identify enter keys that are 1131105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * coming from an IME whose enter key has been auto-labelled "next" or 1132105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * "done". This allows TextView to dispatch these as normal enter keys 1133105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * for old applications, but still do the appropriate action when 1134105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * receiving them. 1135105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1136105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public static final int FLAG_EDITOR_ACTION = 0x10; 113701fe661ae5da3739215d93922412df4b24c859a2RoboErik 1138105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 1139ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * When associated with up key events, this indicates that the key press 1140ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * has been canceled. Typically this is used with virtual touch screen 1141ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * keys, where the user can slide from the virtual key area on to the 1142ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * display: in that case, the application will receive a canceled up 1143ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * event and should not perform the action normally associated with the 1144ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * key. Note that for this to work, the application can not perform an 1145ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * action for a key until it receives an up or the long press timeout has 114601fe661ae5da3739215d93922412df4b24c859a2RoboErik * expired. 1147ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn */ 1148ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn public static final int FLAG_CANCELED = 0x20; 114901fe661ae5da3739215d93922412df4b24c859a2RoboErik 1150ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn /** 1151ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * This key event was generated by a virtual (on-screen) hard key area. 1152ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * Typically this is an area of the touchscreen, outside of the regular 1153ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * display, dedicated to "hardware" buttons. 1154ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn */ 1155ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn public static final int FLAG_VIRTUAL_HARD_KEY = 0x40; 115601fe661ae5da3739215d93922412df4b24c859a2RoboErik 1157ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn /** 115883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * This flag is set for the first key repeat that occurs after the 115983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * long press timeout. 116083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 116183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static final int FLAG_LONG_PRESS = 0x80; 116201fe661ae5da3739215d93922412df4b24c859a2RoboErik 116383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 116483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Set when a key event has {@link #FLAG_CANCELED} set because a long 116501fe661ae5da3739215d93922412df4b24c859a2RoboErik * press action was executed while it was down. 116683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 116783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static final int FLAG_CANCELED_LONG_PRESS = 0x100; 116801fe661ae5da3739215d93922412df4b24c859a2RoboErik 116983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 117083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Set for {@link #ACTION_UP} when this event's key code is still being 117183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * tracked from its initial down. That is, somebody requested that tracking 117283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * started on the key down and a long press has not caused 117383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the tracking to be canceled. 117483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 117583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static final int FLAG_TRACKING = 0x200; 117649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 117749ed71db425c5054e3ad9526496a7e116c89556bJeff Brown /** 117849ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * Set when a key event has been synthesized to implement default behavior 117949ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * for an event that the application did not handle. 118049ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * Fallback key events are generated by unhandled trackball motions 118149ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * (to emulate a directional keypad) and by certain unhandled key presses 118249ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * that are declared in the key map (such as special function numeric keypad 118349ed71db425c5054e3ad9526496a7e116c89556bJeff Brown * keys when numlock is off). 118449ed71db425c5054e3ad9526496a7e116c89556bJeff Brown */ 118549ed71db425c5054e3ad9526496a7e116c89556bJeff Brown public static final int FLAG_FALLBACK = 0x400; 118649ed71db425c5054e3ad9526496a7e116c89556bJeff Brown 118783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 1188a44dd26a75e24cc021802288fb81f4761e47be6bMichael Wright * Signifies that the key is being predispatched. 1189a44dd26a75e24cc021802288fb81f4761e47be6bMichael Wright * @hide 1190a44dd26a75e24cc021802288fb81f4761e47be6bMichael Wright */ 1191a44dd26a75e24cc021802288fb81f4761e47be6bMichael Wright public static final int FLAG_PREDISPATCH = 0x20000000; 1192a44dd26a75e24cc021802288fb81f4761e47be6bMichael Wright 1193a44dd26a75e24cc021802288fb81f4761e47be6bMichael Wright /** 119483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Private control to determine when an app is tracking a key sequence. 119583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @hide 119683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 119783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static final int FLAG_START_TRACKING = 0x40000000; 119821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 119921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown /** 120021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * Private flag that indicates when the system has detected that this key event 120121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * may be inconsistent with respect to the sequence of previously delivered key events, 120221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * such as when a key up event is sent but the key was not down. 120321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * 120421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * @hide 120521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * @see #isTainted 120621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * @see #setTainted 120721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown */ 120821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown public static final int FLAG_TAINTED = 0x80000000; 120921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 121083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the maximum keycode. 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getMaxKeyCode() { 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return LAST_KEYCODE; 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the character that is produced by putting accent on the character 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * c. 12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For example, getDeadChar('`', 'e') returns è. 12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getDeadChar(int accent, int c) { 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return KeyCharacterMap.getDeadChar(accent, c); 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 122501fe661ae5da3739215d93922412df4b24c859a2RoboErik 12268d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn static final boolean DEBUG = false; 12278d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn static final String TAG = "KeyEvent"; 12281f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 12291f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private static final int MAX_RECYCLED = 10; 12301f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private static final Object gRecyclerLock = new Object(); 12311f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private static int gRecyclerUsed; 12321f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private static KeyEvent gRecyclerTop; 12331f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 12341f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private KeyEvent mNext; 12351f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 123691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown private int mDeviceId; 123791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown private int mSource; 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mMetaState; 12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mAction; 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mKeyCode; 124146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown private int mScanCode; 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mRepeatCount; 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mFlags; 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long mDownTime; 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long mEventTime; 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mCharacters; 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface Callback { 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 125083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Called when a key down event has occurred. If you return true, 125183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * you can first call {@link KeyEvent#startTracking() 125283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * KeyEvent.startTracking()} to have the framework track the event 125383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * through its {@link #onKeyUp(int, KeyEvent)} and also call your 125483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * {@link #onKeyLongPress(int, KeyEvent)} if it occurs. 125501fe661ae5da3739215d93922412df4b24c859a2RoboErik * 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param keyCode The value in event.getKeyCode(). 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event Description of the key event. 125801fe661ae5da3739215d93922412df4b24c859a2RoboErik * 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If you handled the event, return true. If you want to allow 12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event to be handled by the next receiver, return false. 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean onKeyDown(int keyCode, KeyEvent event); 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 126583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Called when a long press has occurred. If you return true, 126683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the final key up will have {@link KeyEvent#FLAG_CANCELED} and 126783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * {@link KeyEvent#FLAG_CANCELED_LONG_PRESS} set. Note that in 126883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * order to receive this callback, someone in the event change 126983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <em>must</em> return true from {@link #onKeyDown} <em>and</em> 127083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * call {@link KeyEvent#startTracking()} on the event. 127101fe661ae5da3739215d93922412df4b24c859a2RoboErik * 127283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param keyCode The value in event.getKeyCode(). 127383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param event Description of the key event. 127401fe661ae5da3739215d93922412df4b24c859a2RoboErik * 127583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @return If you handled the event, return true. If you want to allow 127683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the event to be handled by the next receiver, return false. 127783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 127883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn boolean onKeyLongPress(int keyCode, KeyEvent event); 127983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 128083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a key up event has occurred. 128201fe661ae5da3739215d93922412df4b24c859a2RoboErik * 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param keyCode The value in event.getKeyCode(). 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event Description of the key event. 128501fe661ae5da3739215d93922412df4b24c859a2RoboErik * 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If you handled the event, return true. If you want to allow 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event to be handled by the next receiver, return false. 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean onKeyUp(int keyCode, KeyEvent event); 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1292b248b1f689b416294c1d9180eda795a1a0de2e30Kevin Hufnagle * Called when a user's interaction with an analog control, such as 1293b248b1f689b416294c1d9180eda795a1a0de2e30Kevin Hufnagle * flinging a trackball, generates simulated down/up events for the same 1294b248b1f689b416294c1d9180eda795a1a0de2e30Kevin Hufnagle * key multiple times in quick succession. 129501fe661ae5da3739215d93922412df4b24c859a2RoboErik * 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param keyCode The value in event.getKeyCode(). 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param count Number of pairs as returned by event.getRepeatCount(). 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event Description of the key event. 129901fe661ae5da3739215d93922412df4b24c859a2RoboErik * 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If you handled the event, return true. If you want to allow 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event to be handled by the next receiver, return false. 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean onKeyMultiple(int keyCode, int count, KeyEvent event); 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1306337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright private static native String nativeKeyCodeToString(int keyCode); 1307337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright private static native int nativeKeyCodeFromString(String keyCode); 1308497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 13091f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private KeyEvent() { 13101f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 13111f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event. 131401fe661ae5da3739215d93922412df4b24c859a2RoboErik * 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Action code: either {@link #ACTION_DOWN}, 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param code The key code. 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(int action, int code) { 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = code; 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = 0; 13236b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown mDeviceId = KeyCharacterMap.VIRTUAL_KEYBOARD; 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event. 132801fe661ae5da3739215d93922412df4b24c859a2RoboErik * 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis}) 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this key code originally went down. 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis}) 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this event happened. 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Action code: either {@link #ACTION_DOWN}, 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param code The key code. 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param repeat A repeat count for down events (> 0 if this is after the 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * initial down) or event count for multiple events. 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(long downTime, long eventTime, int action, 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int code, int repeat) { 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = downTime; 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = eventTime; 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = code; 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = repeat; 13466b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown mDeviceId = KeyCharacterMap.VIRTUAL_KEYBOARD; 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event. 135101fe661ae5da3739215d93922412df4b24c859a2RoboErik * 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis}) 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this key code originally went down. 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis}) 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this event happened. 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Action code: either {@link #ACTION_DOWN}, 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param code The key code. 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param repeat A repeat count for down events (> 0 if this is after the 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * initial down) or event count for multiple events. 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState Flags indicating which meta keys are currently pressed. 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(long downTime, long eventTime, int action, 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int code, int repeat, int metaState) { 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = downTime; 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = eventTime; 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = code; 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = repeat; 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = metaState; 13716b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown mDeviceId = KeyCharacterMap.VIRTUAL_KEYBOARD; 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event. 137601fe661ae5da3739215d93922412df4b24c859a2RoboErik * 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis}) 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this key code originally went down. 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis}) 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this event happened. 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Action code: either {@link #ACTION_DOWN}, 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param code The key code. 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param repeat A repeat count for down events (> 0 if this is after the 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * initial down) or event count for multiple events. 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState Flags indicating which meta keys are currently pressed. 1387c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param deviceId The device ID that generated the key event. 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param scancode Raw device scan code of the event. 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(long downTime, long eventTime, int action, 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int code, int repeat, int metaState, 1392c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int deviceId, int scancode) { 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = downTime; 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = eventTime; 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = code; 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = repeat; 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = metaState; 1399c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDeviceId = deviceId; 140046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = scancode; 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event. 140501fe661ae5da3739215d93922412df4b24c859a2RoboErik * 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis}) 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this key code originally went down. 14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis}) 14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this event happened. 14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Action code: either {@link #ACTION_DOWN}, 14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param code The key code. 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param repeat A repeat count for down events (> 0 if this is after the 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * initial down) or event count for multiple events. 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState Flags indicating which meta keys are currently pressed. 1416c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param deviceId The device ID that generated the key event. 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param scancode Raw device scan code of the event. 14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags The flags for this key event 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(long downTime, long eventTime, int action, 14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int code, int repeat, int metaState, 1422c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int deviceId, int scancode, int flags) { 14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = downTime; 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = eventTime; 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = code; 14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = repeat; 14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = metaState; 1429c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDeviceId = deviceId; 143046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = scancode; 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags = flags; 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1435c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Create a new key event. 143601fe661ae5da3739215d93922412df4b24c859a2RoboErik * 1437c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis}) 1438c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * at which this key code originally went down. 1439c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis}) 1440c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * at which this event happened. 1441c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param action Action code: either {@link #ACTION_DOWN}, 1442c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 1443c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param code The key code. 1444c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param repeat A repeat count for down events (> 0 if this is after the 1445c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * initial down) or event count for multiple events. 1446c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param metaState Flags indicating which meta keys are currently pressed. 1447c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param deviceId The device ID that generated the key event. 1448c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param scancode Raw device scan code of the event. 1449c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param flags The flags for this key event 1450c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param source The input source such as {@link InputDevice#SOURCE_KEYBOARD}. 1451c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1452c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyEvent(long downTime, long eventTime, int action, 1453c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int code, int repeat, int metaState, 1454c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int deviceId, int scancode, int flags, int source) { 1455c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDownTime = downTime; 1456c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mEventTime = eventTime; 1457c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mAction = action; 1458c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mKeyCode = code; 1459c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mRepeatCount = repeat; 1460c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mMetaState = metaState; 1461c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDeviceId = deviceId; 1462c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mScanCode = scancode; 1463c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mFlags = flags; 1464c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = source; 1465c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1466c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1467c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new key event for a string of characters. The key code, 1469c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * action, repeat count and source will automatically be set to 1470c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #KEYCODE_UNKNOWN}, {@link #ACTION_MULTIPLE}, 0, and 1471c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link InputDevice#SOURCE_KEYBOARD} for you. 147201fe661ae5da3739215d93922412df4b24c859a2RoboErik * 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param time The time (in {@link android.os.SystemClock#uptimeMillis}) 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at which this event occured. 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param characters The string of characters. 1476c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param deviceId The device ID that generated the key event. 14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags The flags for this key event 14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1479c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyEvent(long time, String characters, int deviceId, int flags) { 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = time; 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = time; 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCharacters = characters; 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = ACTION_MULTIPLE; 14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = KEYCODE_UNKNOWN; 14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = 0; 1486c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDeviceId = deviceId; 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags = flags; 1488c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = InputDevice.SOURCE_KEYBOARD; 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1492105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Make an exact copy of an existing key event. 1493105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1494105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public KeyEvent(KeyEvent origEvent) { 1495105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mDownTime = origEvent.mDownTime; 1496105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mEventTime = origEvent.mEventTime; 1497105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mAction = origEvent.mAction; 1498105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mKeyCode = origEvent.mKeyCode; 1499105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mRepeatCount = origEvent.mRepeatCount; 1500105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mMetaState = origEvent.mMetaState; 1501105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mDeviceId = origEvent.mDeviceId; 1502c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = origEvent.mSource; 150346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = origEvent.mScanCode; 1504105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mFlags = origEvent.mFlags; 1505105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mCharacters = origEvent.mCharacters; 1506105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 1507105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1508105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copy an existing key event, modifying its time and repeat count. 151001fe661ae5da3739215d93922412df4b24c859a2RoboErik * 151183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @deprecated Use {@link #changeTimeRepeat(KeyEvent, long, int)} 151283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * instead. 151301fe661ae5da3739215d93922412df4b24c859a2RoboErik * 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param origEvent The existing event to be copied. 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param eventTime The new event time 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (in {@link android.os.SystemClock#uptimeMillis}) of the event. 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newRepeat The new repeat count of the event. 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 151983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn @Deprecated 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent(KeyEvent origEvent, long eventTime, int newRepeat) { 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = origEvent.mDownTime; 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = eventTime; 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = origEvent.mAction; 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = origEvent.mKeyCode; 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = newRepeat; 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = origEvent.mMetaState; 15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDeviceId = origEvent.mDeviceId; 1528c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = origEvent.mSource; 152946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = origEvent.mScanCode; 15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags = origEvent.mFlags; 15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCharacters = origEvent.mCharacters; 15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15341f2451007c660091b7b090c1ea332f9044515d2dJeff Brown private static KeyEvent obtain() { 15351f2451007c660091b7b090c1ea332f9044515d2dJeff Brown final KeyEvent ev; 15361f2451007c660091b7b090c1ea332f9044515d2dJeff Brown synchronized (gRecyclerLock) { 15371f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev = gRecyclerTop; 15381f2451007c660091b7b090c1ea332f9044515d2dJeff Brown if (ev == null) { 15391f2451007c660091b7b090c1ea332f9044515d2dJeff Brown return new KeyEvent(); 15401f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 15411f2451007c660091b7b090c1ea332f9044515d2dJeff Brown gRecyclerTop = ev.mNext; 15421f2451007c660091b7b090c1ea332f9044515d2dJeff Brown gRecyclerUsed -= 1; 15431f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 15441f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mNext = null; 154532cbc3855c2a971aa5a801fd339fb6a37db91a1aJeff Brown ev.prepareForReuse(); 15461f2451007c660091b7b090c1ea332f9044515d2dJeff Brown return ev; 15471f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 15481f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 15491f2451007c660091b7b090c1ea332f9044515d2dJeff Brown /** 15501f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * Obtains a (potentially recycled) key event. 15511f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * 15521f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * @hide 15531f2451007c660091b7b090c1ea332f9044515d2dJeff Brown */ 15541f2451007c660091b7b090c1ea332f9044515d2dJeff Brown public static KeyEvent obtain(long downTime, long eventTime, int action, 15551f2451007c660091b7b090c1ea332f9044515d2dJeff Brown int code, int repeat, int metaState, 15561f2451007c660091b7b090c1ea332f9044515d2dJeff Brown int deviceId, int scancode, int flags, int source, String characters) { 15571f2451007c660091b7b090c1ea332f9044515d2dJeff Brown KeyEvent ev = obtain(); 15581f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mDownTime = downTime; 15591f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mEventTime = eventTime; 15601f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mAction = action; 15611f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mKeyCode = code; 15621f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mRepeatCount = repeat; 15631f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mMetaState = metaState; 15641f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mDeviceId = deviceId; 15651f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mScanCode = scancode; 15661f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mFlags = flags; 15671f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mSource = source; 15681f2451007c660091b7b090c1ea332f9044515d2dJeff Brown ev.mCharacters = characters; 15691f2451007c660091b7b090c1ea332f9044515d2dJeff Brown return ev; 15701f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 15711f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 15721f2451007c660091b7b090c1ea332f9044515d2dJeff Brown /** 157321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * Obtains a (potentially recycled) copy of another key event. 157421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * 157521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown * @hide 157621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown */ 157721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown public static KeyEvent obtain(KeyEvent other) { 157821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown KeyEvent ev = obtain(); 157921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mDownTime = other.mDownTime; 158021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mEventTime = other.mEventTime; 158121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mAction = other.mAction; 158221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mKeyCode = other.mKeyCode; 158321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mRepeatCount = other.mRepeatCount; 158421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mMetaState = other.mMetaState; 158521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mDeviceId = other.mDeviceId; 158621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mScanCode = other.mScanCode; 158721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mFlags = other.mFlags; 158821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mSource = other.mSource; 158921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown ev.mCharacters = other.mCharacters; 159021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown return ev; 159121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown } 159221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 159321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown /** @hide */ 159421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown @Override 159521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown public KeyEvent copy() { 159621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown return obtain(this); 159721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown } 159821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 159921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown /** 16001f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * Recycles a key event. 16011f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * Key events should only be recycled if they are owned by the system since user 16021f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * code expects them to be essentially immutable, "tracking" notwithstanding. 16031f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * 16041f2451007c660091b7b090c1ea332f9044515d2dJeff Brown * @hide 16051f2451007c660091b7b090c1ea332f9044515d2dJeff Brown */ 160692cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown @Override 16071f2451007c660091b7b090c1ea332f9044515d2dJeff Brown public final void recycle() { 160832cbc3855c2a971aa5a801fd339fb6a37db91a1aJeff Brown super.recycle(); 16091f2451007c660091b7b090c1ea332f9044515d2dJeff Brown mCharacters = null; 16101f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 16111f2451007c660091b7b090c1ea332f9044515d2dJeff Brown synchronized (gRecyclerLock) { 16121f2451007c660091b7b090c1ea332f9044515d2dJeff Brown if (gRecyclerUsed < MAX_RECYCLED) { 16131f2451007c660091b7b090c1ea332f9044515d2dJeff Brown gRecyclerUsed++; 16141f2451007c660091b7b090c1ea332f9044515d2dJeff Brown mNext = gRecyclerTop; 16151f2451007c660091b7b090c1ea332f9044515d2dJeff Brown gRecyclerTop = this; 16161f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 16171f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 16181f2451007c660091b7b090c1ea332f9044515d2dJeff Brown } 16191f2451007c660091b7b090c1ea332f9044515d2dJeff Brown 162092cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown /** @hide */ 162192cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown @Override 162292cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown public final void recycleIfNeededAfterDispatch() { 162392cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown // Do nothing. 162492cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown } 162592cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown 16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1627105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Create a new key event that is the same as the given one, but whose 1628105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * event time and repeat count are replaced with the given value. 162901fe661ae5da3739215d93922412df4b24c859a2RoboErik * 1630105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param event The existing event to be copied. This is not modified. 1631105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param eventTime The new event time 1632105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * (in {@link android.os.SystemClock#uptimeMillis}) of the event. 1633105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param newRepeat The new repeat count of the event. 1634105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1635105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public static KeyEvent changeTimeRepeat(KeyEvent event, long eventTime, 1636105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project int newRepeat) { 1637105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project return new KeyEvent(event, eventTime, newRepeat); 1638105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 163901fe661ae5da3739215d93922412df4b24c859a2RoboErik 1640105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 164183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Create a new key event that is the same as the given one, but whose 164283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * event time and repeat count are replaced with the given value. 164301fe661ae5da3739215d93922412df4b24c859a2RoboErik * 164483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param event The existing event to be copied. This is not modified. 164583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param eventTime The new event time 164683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * (in {@link android.os.SystemClock#uptimeMillis}) of the event. 164783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param newRepeat The new repeat count of the event. 164883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param newFlags New flags for the event, replacing the entire value 164983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * in the original event. 165083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 165183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static KeyEvent changeTimeRepeat(KeyEvent event, long eventTime, 165283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn int newRepeat, int newFlags) { 165383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn KeyEvent ret = new KeyEvent(event); 165483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn ret.mEventTime = eventTime; 165583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn ret.mRepeatCount = newRepeat; 165683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn ret.mFlags = newFlags; 165783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return ret; 165883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 165901fe661ae5da3739215d93922412df4b24c859a2RoboErik 166083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copy an existing key event, modifying its action. 166201fe661ae5da3739215d93922412df4b24c859a2RoboErik * 16639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param origEvent The existing event to be copied. 16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action The new action code of the event. 16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1666105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project private KeyEvent(KeyEvent origEvent, int action) { 16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = origEvent.mDownTime; 16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEventTime = origEvent.mEventTime; 16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mKeyCode = origEvent.mKeyCode; 16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = origEvent.mRepeatCount; 16729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = origEvent.mMetaState; 16739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDeviceId = origEvent.mDeviceId; 1674c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mSource = origEvent.mSource; 167546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mScanCode = origEvent.mScanCode; 16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags = origEvent.mFlags; 16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Don't copy mCharacters, since one way or the other we'll lose it 16789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // when changing the action. 16799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1682105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Create a new key event that is the same as the given one, but whose 1683105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * action is replaced with the given value. 168401fe661ae5da3739215d93922412df4b24c859a2RoboErik * 1685105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param event The existing event to be copied. This is not modified. 1686105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param action The new action code of the event. 1687105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1688105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public static KeyEvent changeAction(KeyEvent event, int action) { 1689105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project return new KeyEvent(event, action); 1690105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 169101fe661ae5da3739215d93922412df4b24c859a2RoboErik 1692105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 1693105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Create a new key event that is the same as the given one, but whose 1694105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * flags are replaced with the given value. 169501fe661ae5da3739215d93922412df4b24c859a2RoboErik * 1696105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param event The existing event to be copied. This is not modified. 1697105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * @param flags The new flags constant. 1698105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1699105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public static KeyEvent changeFlags(KeyEvent event, int flags) { 1700105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project event = new KeyEvent(event); 1701105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project event.mFlags = flags; 1702105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project return event; 1703105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 170421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 170521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown /** @hide */ 170621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown @Override 170721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown public final boolean isTainted() { 170821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown return (mFlags & FLAG_TAINTED) != 0; 170921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown } 171021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 171121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown /** @hide */ 171221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown @Override 171321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown public final void setTainted(boolean tainted) { 171421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown mFlags = tainted ? mFlags | FLAG_TAINTED : mFlags & ~FLAG_TAINTED; 171521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown } 171621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown 1717105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Don't use in new code, instead explicitly check 17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getAction()}. 172001fe661ae5da3739215d93922412df4b24c859a2RoboErik * 17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If the action is ACTION_DOWN, returns true; else false. 17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated 17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Deprecated public final boolean isDown() { 17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAction == ACTION_DOWN; 17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1730337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright /** Is this a system key? System keys can not be used for menu shortcuts. 17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isSystem() { 1733337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright return isSystemKey(mKeyCode); 17343c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn } 17353c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 17363c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn /** @hide */ 1737337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright public final boolean isWakeKey() { 1738337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright return isWakeKey(mKeyCode); 17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown /** 17426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Returns true if the specified keycode is a gamepad button. 17436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return True if the keycode is a gamepad button, such as {@link #KEYCODE_BUTTON_A}. 17446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown */ 17456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown public static final boolean isGamepadButton(int keyCode) { 17466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown switch (keyCode) { 17476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_A: 17486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_B: 17496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_C: 17506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_X: 17516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_Y: 17526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_Z: 17536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_L1: 17546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_R1: 17556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_L2: 17566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_R2: 17576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_THUMBL: 17586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_THUMBR: 17596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_START: 17606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_SELECT: 17616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_MODE: 17626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_1: 17636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_2: 17646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_3: 17656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_4: 17666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_5: 17676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_6: 17686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_7: 17696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_8: 17706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_9: 17716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_10: 17726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_11: 17736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_12: 17746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_13: 17756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_14: 17766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_15: 17776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown case KeyEvent.KEYCODE_BUTTON_16: 17786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return true; 17796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown default: 17806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return false; 17816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 17826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 17836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown 178425b0c3096131e532e57f5aac48769430dca42c75Michael Wright /** Whether key will, by default, trigger a click on the focused view. 178525b0c3096131e532e57f5aac48769430dca42c75Michael Wright * @hide 178625b0c3096131e532e57f5aac48769430dca42c75Michael Wright */ 178725b0c3096131e532e57f5aac48769430dca42c75Michael Wright public static final boolean isConfirmKey(int keyCode) { 178825b0c3096131e532e57f5aac48769430dca42c75Michael Wright switch (keyCode) { 178925b0c3096131e532e57f5aac48769430dca42c75Michael Wright case KeyEvent.KEYCODE_DPAD_CENTER: 179025b0c3096131e532e57f5aac48769430dca42c75Michael Wright case KeyEvent.KEYCODE_ENTER: 1791aa1a94daaa59e98303fdeb1c3066b60a58755dffMichael Wright case KeyEvent.KEYCODE_SPACE: 1792ce2bd0fac7d4f59310061a71ab3b82b96fcc95f8Selim Cinek case KeyEvent.KEYCODE_NUMPAD_ENTER: 179325b0c3096131e532e57f5aac48769430dca42c75Michael Wright return true; 179425b0c3096131e532e57f5aac48769430dca42c75Michael Wright default: 179525b0c3096131e532e57f5aac48769430dca42c75Michael Wright return false; 179625b0c3096131e532e57f5aac48769430dca42c75Michael Wright } 179725b0c3096131e532e57f5aac48769430dca42c75Michael Wright } 179825b0c3096131e532e57f5aac48769430dca42c75Michael Wright 179901fe661ae5da3739215d93922412df4b24c859a2RoboErik /** 180001fe661ae5da3739215d93922412df4b24c859a2RoboErik * Whether this key is a media key, which can be send to apps that are 180101fe661ae5da3739215d93922412df4b24c859a2RoboErik * interested in media key events. 180201fe661ae5da3739215d93922412df4b24c859a2RoboErik * 180301fe661ae5da3739215d93922412df4b24c859a2RoboErik * @hide 180401fe661ae5da3739215d93922412df4b24c859a2RoboErik */ 180501fe661ae5da3739215d93922412df4b24c859a2RoboErik public static final boolean isMediaKey(int keyCode) { 180601fe661ae5da3739215d93922412df4b24c859a2RoboErik switch (keyCode) { 180701fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_MEDIA_PLAY: 180801fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_MEDIA_PAUSE: 180901fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: 181001fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_MUTE: 181101fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_HEADSETHOOK: 181201fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_MEDIA_STOP: 181301fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_MEDIA_NEXT: 181401fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_MEDIA_PREVIOUS: 181501fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_MEDIA_REWIND: 181601fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_MEDIA_RECORD: 181701fe661ae5da3739215d93922412df4b24c859a2RoboErik case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: 181801fe661ae5da3739215d93922412df4b24c859a2RoboErik return true; 181901fe661ae5da3739215d93922412df4b24c859a2RoboErik } 182001fe661ae5da3739215d93922412df4b24c859a2RoboErik return false; 182101fe661ae5da3739215d93922412df4b24c859a2RoboErik } 182201fe661ae5da3739215d93922412df4b24c859a2RoboErik 1823337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright 1824337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright /** Is this a system key? System keys can not be used for menu shortcuts. 1825337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright * @hide 1826337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright */ 1827337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright public static final boolean isSystemKey(int keyCode) { 1828337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright switch (keyCode) { 1829337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MENU: 1830337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_SOFT_RIGHT: 1831337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_HOME: 1832337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_BACK: 1833337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_CALL: 1834337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_ENDCALL: 1835337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_VOLUME_UP: 1836337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_VOLUME_DOWN: 1837337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_VOLUME_MUTE: 1838337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MUTE: 1839337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_POWER: 1840337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_HEADSETHOOK: 1841337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MEDIA_PLAY: 1842337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MEDIA_PAUSE: 1843337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: 1844337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MEDIA_STOP: 1845337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MEDIA_NEXT: 1846337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MEDIA_PREVIOUS: 1847337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MEDIA_REWIND: 1848337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MEDIA_RECORD: 1849337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: 1850337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_CAMERA: 1851337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_FOCUS: 1852337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_SEARCH: 1853337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_BRIGHTNESS_DOWN: 1854337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_BRIGHTNESS_UP: 1855337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK: 185607e0384a4e931bc94550c108ddd9b9514100161eJim Miller case KeyEvent.KEYCODE_SYSTEM_NAVIGATION_UP: 185707e0384a4e931bc94550c108ddd9b9514100161eJim Miller case KeyEvent.KEYCODE_SYSTEM_NAVIGATION_DOWN: 185807e0384a4e931bc94550c108ddd9b9514100161eJim Miller case KeyEvent.KEYCODE_SYSTEM_NAVIGATION_LEFT: 185907e0384a4e931bc94550c108ddd9b9514100161eJim Miller case KeyEvent.KEYCODE_SYSTEM_NAVIGATION_RIGHT: 1860337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright return true; 1861337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright } 1862337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright 1863337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright return false; 1864337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright } 1865337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright 1866337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright /** @hide */ 1867337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright public static final boolean isWakeKey(int keyCode) { 1868337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright switch (keyCode) { 1869337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_BACK: 1870337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_MENU: 1871337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright case KeyEvent.KEYCODE_WAKEUP: 18728ac485a3030a2103365e261e555c6b4fb3613eacMichael Wright case KeyEvent.KEYCODE_PAIRING: 1873bad498f7fd4e3d9ddb9f4d995ab6110b4aa36171Chenjie Luo case KeyEvent.KEYCODE_STEM_1: 1874bad498f7fd4e3d9ddb9f4d995ab6110b4aa36171Chenjie Luo case KeyEvent.KEYCODE_STEM_2: 1875bad498f7fd4e3d9ddb9f4d995ab6110b4aa36171Chenjie Luo case KeyEvent.KEYCODE_STEM_3: 1876337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright return true; 1877337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright } 1878337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright return false; 1879337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright } 1880337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright 1881ce0c13a169931e757b98d0f40239c508caa237bdMichael Wright /** @hide */ 1882ce0c13a169931e757b98d0f40239c508caa237bdMichael Wright public static final boolean isMetaKey(int keyCode) { 1883ce0c13a169931e757b98d0f40239c508caa237bdMichael Wright return keyCode == KeyEvent.KEYCODE_META_LEFT || keyCode == KeyEvent.KEYCODE_META_RIGHT; 1884ce0c13a169931e757b98d0f40239c508caa237bdMichael Wright } 1885ce0c13a169931e757b98d0f40239c508caa237bdMichael Wright 1886112d05678b7de53da8948f62dd2e968274f62244Andrii Kulian /** @hide */ 1887112d05678b7de53da8948f62dd2e968274f62244Andrii Kulian public static final boolean isAltKey(int keyCode) { 1888112d05678b7de53da8948f62dd2e968274f62244Andrii Kulian return keyCode == KeyEvent.KEYCODE_ALT_LEFT || keyCode == KeyEvent.KEYCODE_ALT_RIGHT; 1889112d05678b7de53da8948f62dd2e968274f62244Andrii Kulian } 1890112d05678b7de53da8948f62dd2e968274f62244Andrii Kulian 189191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown /** {@inheritDoc} */ 189291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Override 189391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public final int getDeviceId() { 189491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown return mDeviceId; 189591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 189691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 189791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown /** {@inheritDoc} */ 189891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Override 189991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public final int getSource() { 190091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown return mSource; 190191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 190291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 190391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown /** {@inheritDoc} */ 190491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Override 190591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public final void setSource(int source) { 190691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown mSource = source; 190791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 19089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Returns the state of the meta keys.</p> 19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return an integer in which each bit set to 1 represents a pressed 19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * meta key 19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isAltPressed() 19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isShiftPressed() 19179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isSymPressed() 1918497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isCtrlPressed() 1919497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isMetaPressed() 1920497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #isFunctionPressed() 192151e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isCapsLockOn() 192251e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isNumLockOn() 192351e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #isScrollLockOn() 19249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_ALT_ON 1925497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_ALT_LEFT_ON 1926497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_ALT_RIGHT_ON 19279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_SHIFT_ON 1928497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_SHIFT_LEFT_ON 1929497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_SHIFT_RIGHT_ON 19309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_SYM_ON 1931497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_FUNCTION_ON 1932497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_CTRL_ON 1933497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_CTRL_LEFT_ON 1934497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_CTRL_RIGHT_ON 1935497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_META_ON 1936497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_META_LEFT_ON 1937497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_META_RIGHT_ON 193851e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_CAPS_LOCK_ON 193951e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_NUM_LOCK_ON 194051e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_SCROLL_LOCK_ON 19415487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * @see #getModifiers 19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getMetaState() { 19449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMetaState; 19459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19485487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * Returns the state of the modifier keys. 19495487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * <p> 19505487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 19515487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 19525487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * not considered modifier keys. Consequently, this function specifically masks out 19535487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 19545487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * </p><p> 19555487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * The value returned consists of the meta state (from {@link #getMetaState}) 19565487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * normalized using {@link #normalizeMetaState(int)} and then masked with 19575487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * {@link #getModifierMetaStateMask} so that only valid modifier bits are retained. 19585487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * </p> 19595487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * 19605487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * @return An integer in which each bit set to 1 represents a pressed modifier key. 19615487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown * @see #getMetaState 19625487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown */ 19635487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown public final int getModifiers() { 19645487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown return normalizeMetaState(mMetaState) & META_MODIFIER_MASK; 19655487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown } 19665487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown 19675487500cf3d9f6d7703ce0704cb91837aa95d716Jeff Brown /** 19689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the flags for this key event. 19699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #FLAG_WOKE_HERE 19719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getFlags() { 19739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFlags; 19749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 197628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Mask of all modifier key meta states. Specifically excludes locked keys like caps lock. 197728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static final int META_MODIFIER_MASK = 197828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_SHIFT_ON | META_SHIFT_LEFT_ON | META_SHIFT_RIGHT_ON 197928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown | META_ALT_ON | META_ALT_LEFT_ON | META_ALT_RIGHT_ON 198028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown | META_CTRL_ON | META_CTRL_LEFT_ON | META_CTRL_RIGHT_ON 198128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown | META_META_ON | META_META_LEFT_ON | META_META_RIGHT_ON 198228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown | META_SYM_ON | META_FUNCTION_ON; 198328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 198428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Mask of all lock key meta states. 198528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static final int META_LOCK_MASK = 198628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_CAPS_LOCK_ON | META_NUM_LOCK_ON | META_SCROLL_LOCK_ON; 198728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 198828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Mask of all valid meta states. 198928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static final int META_ALL_MASK = META_MODIFIER_MASK | META_LOCK_MASK; 199028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 199128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Mask of all synthetic meta states that are reserved for API compatibility with 199228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // historical uses in MetaKeyKeyListener. 199328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static final int META_SYNTHETIC_MASK = 199428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_CAP_LOCKED | META_ALT_LOCKED | META_SYM_LOCKED | META_SELECTING; 199528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 199628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Mask of all meta states that are not valid use in specifying a modifier key. 199728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // These bits are known to be used for purposes other than specifying modifiers. 199828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static final int META_INVALID_MODIFIER_MASK = 199928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_LOCK_MASK | META_SYNTHETIC_MASK; 200028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 200128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 200228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Gets a mask that includes all valid modifier key meta state bits. 200328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 200428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 200528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 200628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, the mask specifically excludes 200728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 200828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 200928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 201028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return The modifier meta state mask which is a combination of 201128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SHIFT_ON}, {@link #META_SHIFT_LEFT_ON}, {@link #META_SHIFT_RIGHT_ON}, 201228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_ALT_ON}, {@link #META_ALT_LEFT_ON}, {@link #META_ALT_RIGHT_ON}, 201328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CTRL_ON}, {@link #META_CTRL_LEFT_ON}, {@link #META_CTRL_RIGHT_ON}, 201428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_META_ON}, {@link #META_META_LEFT_ON}, {@link #META_META_RIGHT_ON}, 201528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SYM_ON}, {@link #META_FUNCTION_ON}. 201628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 201728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public static int getModifierMetaStateMask() { 201828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return META_MODIFIER_MASK; 201928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 202028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 20219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if this key code is a modifier key. 202328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 202428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 202528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 202628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, this function return false 202728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * for those keys. 202828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 20299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 203028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return True if the key code is one of 20319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #KEYCODE_SHIFT_LEFT} {@link #KEYCODE_SHIFT_RIGHT}, 2032497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * {@link #KEYCODE_ALT_LEFT}, {@link #KEYCODE_ALT_RIGHT}, 2033497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * {@link #KEYCODE_CTRL_LEFT}, {@link #KEYCODE_CTRL_RIGHT}, 203428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_META_LEFT}, or {@link #KEYCODE_META_RIGHT}, 203528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SYM}, {@link #KEYCODE_NUM}, {@link #KEYCODE_FUNCTION}. 20369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean isModifierKey(int keyCode) { 2038497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown switch (keyCode) { 2039497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_SHIFT_LEFT: 2040497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_SHIFT_RIGHT: 2041497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_ALT_LEFT: 2042497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_ALT_RIGHT: 2043497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_CTRL_LEFT: 2044497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_CTRL_RIGHT: 2045497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_META_LEFT: 2046497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case KEYCODE_META_RIGHT: 204728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown case KEYCODE_SYM: 204828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown case KEYCODE_NUM: 204928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown case KEYCODE_FUNCTION: 2050497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return true; 2051497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown default: 2052497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return false; 2053497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 20549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 205728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Normalizes the specified meta state. 205828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 205928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * The meta state is normalized such that if either the left or right modifier meta state 206028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * bits are set then the result will also include the universal bit for that modifier. 206128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 206228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified meta state contains {@link #META_ALT_LEFT_ON} then 206328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * the result will also contain {@link #META_ALT_ON} in addition to {@link #META_ALT_LEFT_ON} 206428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * and the other bits that were specified in the input. The same is process is 206528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * performed for shift, control and meta. 206628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 206728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified meta state contains synthetic meta states defined by 206828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link MetaKeyKeyListener}, then those states are translated here and the original 206928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * synthetic meta states are removed from the result. 207028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link MetaKeyKeyListener#META_CAP_LOCKED} is translated to {@link #META_CAPS_LOCK_ON}. 207128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link MetaKeyKeyListener#META_ALT_LOCKED} is translated to {@link #META_ALT_ON}. 207228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link MetaKeyKeyListener#META_SYM_LOCKED} is translated to {@link #META_SYM_ON}. 207328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 207428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Undefined meta state bits are removed. 207528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 207628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 207728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @param metaState The meta state. 207828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return The normalized meta state. 207928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 208028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public static int normalizeMetaState(int metaState) { 208128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & (META_SHIFT_LEFT_ON | META_SHIFT_RIGHT_ON)) != 0) { 208228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_SHIFT_ON; 208328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 208428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & (META_ALT_LEFT_ON | META_ALT_RIGHT_ON)) != 0) { 208528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_ALT_ON; 208628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 208728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & (META_CTRL_LEFT_ON | META_CTRL_RIGHT_ON)) != 0) { 208828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_CTRL_ON; 208928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 209028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & (META_META_LEFT_ON | META_META_RIGHT_ON)) != 0) { 209128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_META_ON; 209228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 209328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & MetaKeyKeyListener.META_CAP_LOCKED) != 0) { 209428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_CAPS_LOCK_ON; 209528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 209628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & MetaKeyKeyListener.META_ALT_LOCKED) != 0) { 209728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_ALT_ON; 209828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 209928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((metaState & MetaKeyKeyListener.META_SYM_LOCKED) != 0) { 210028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState |= META_SYM_ON; 210128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 210228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaState & META_ALL_MASK; 210328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 210428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 210528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 210628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Returns true if no modifiers keys are pressed according to the specified meta state. 210728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 210828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 210928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 211028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, this function ignores 211128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 211228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 211328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * The meta state is normalized prior to comparison using {@link #normalizeMetaState(int)}. 211428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 211528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 211628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @param metaState The meta state to consider. 211728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return True if no modifier keys are pressed. 211828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @see #hasNoModifiers() 211928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 212028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public static boolean metaStateHasNoModifiers(int metaState) { 212128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return (normalizeMetaState(metaState) & META_MODIFIER_MASK) == 0; 212228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 212328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 212428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 212528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Returns true if only the specified modifier keys are pressed according to 212628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * the specified meta state. Returns false if a different combination of modifier 212728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * keys are pressed. 212828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 212928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 213028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 213128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, this function ignores 213228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 213328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 213428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes directional modifiers, such as 213528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SHIFT_LEFT_ON}, then this method ensures that the 213628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * modifier is pressed on that side. 213728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes non-directional modifiers, such as 213828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SHIFT_ON}, then this method ensures that the modifier 213928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * is pressed on either side. 214028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes both directional and non-directional modifiers 214128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * for the same type of key, such as {@link #META_SHIFT_ON} and {@link #META_SHIFT_LEFT_ON}, 214228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * then this method throws an illegal argument exception. 214328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 214428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 214528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @param metaState The meta state to consider. 214628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @param modifiers The meta state of the modifier keys to check. May be a combination 214728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * of modifier meta states as defined by {@link #getModifierMetaStateMask()}. May be 0 to 214828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * ensure that no modifier keys are pressed. 214928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return True if only the specified modifier keys are pressed. 215028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @throws IllegalArgumentException if the modifiers parameter contains invalid modifiers 215128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @see #hasModifiers 215228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 215328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public static boolean metaStateHasModifiers(int metaState, int modifiers) { 215428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // Note: For forward compatibility, we allow the parameter to contain meta states 215528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // that we do not recognize but we explicitly disallow meta states that 215628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown // are not valid modifiers. 215728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if ((modifiers & META_INVALID_MODIFIER_MASK) != 0) { 215828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown throw new IllegalArgumentException("modifiers must not contain " 215928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown + "META_CAPS_LOCK_ON, META_NUM_LOCK_ON, META_SCROLL_LOCK_ON, " 216028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown + "META_CAP_LOCKED, META_ALT_LOCKED, META_SYM_LOCKED, " 216128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown + "or META_SELECTING"); 216228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 216328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 216428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState = normalizeMetaState(metaState) & META_MODIFIER_MASK; 216528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState = metaStateFilterDirectionalModifiers(metaState, modifiers, 216628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_SHIFT_ON, META_SHIFT_LEFT_ON, META_SHIFT_RIGHT_ON); 216728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState = metaStateFilterDirectionalModifiers(metaState, modifiers, 216828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_ALT_ON, META_ALT_LEFT_ON, META_ALT_RIGHT_ON); 216928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState = metaStateFilterDirectionalModifiers(metaState, modifiers, 217028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_CTRL_ON, META_CTRL_LEFT_ON, META_CTRL_RIGHT_ON); 217128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown metaState = metaStateFilterDirectionalModifiers(metaState, modifiers, 217228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown META_META_ON, META_META_LEFT_ON, META_META_RIGHT_ON); 217328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaState == modifiers; 217428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 217528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 217628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown private static int metaStateFilterDirectionalModifiers(int metaState, 217728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown int modifiers, int basic, int left, int right) { 217828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown final boolean wantBasic = (modifiers & basic) != 0; 217928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown final int directional = left | right; 218028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown final boolean wantLeftOrRight = (modifiers & directional) != 0; 218128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 218228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if (wantBasic) { 218328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown if (wantLeftOrRight) { 218428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown throw new IllegalArgumentException("modifiers must not contain " 218528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown + metaStateToString(basic) + " combined with " 218628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown + metaStateToString(left) + " or " + metaStateToString(right)); 218728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 218828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaState & ~directional; 218928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } else if (wantLeftOrRight) { 219028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaState & ~basic; 219128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } else { 219228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaState; 219328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 219428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 219528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 219628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 219728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Returns true if no modifier keys are pressed. 219828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 219928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 220028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 220128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, this function ignores 220228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 220328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 220428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * The meta state is normalized prior to comparison using {@link #normalizeMetaState(int)}. 220528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 220628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 220728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return True if no modifier keys are pressed. 220828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @see #metaStateHasNoModifiers 220928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 221028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public final boolean hasNoModifiers() { 221128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaStateHasNoModifiers(mMetaState); 221228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 221328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 221428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 221528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Returns true if only the specified modifiers keys are pressed. 221628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * Returns false if a different combination of modifier keys are pressed. 221728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * <p> 221828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK}, 221928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are 222028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * not considered modifier keys. Consequently, this function ignores 222128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}. 222228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p><p> 222328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes directional modifiers, such as 222428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SHIFT_LEFT_ON}, then this method ensures that the 222528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * modifier is pressed on that side. 222628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes non-directional modifiers, such as 222728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * {@link #META_SHIFT_ON}, then this method ensures that the modifier 222828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * is pressed on either side. 222928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * If the specified modifier mask includes both directional and non-directional modifiers 223028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * for the same type of key, such as {@link #META_SHIFT_ON} and {@link #META_SHIFT_LEFT_ON}, 223128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * then this method throws an illegal argument exception. 223228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * </p> 223328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * 223428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @param modifiers The meta state of the modifier keys to check. May be a combination 223528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * of modifier meta states as defined by {@link #getModifierMetaStateMask()}. May be 0 to 223628cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * ensure that no modifier keys are pressed. 223728cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @return True if only the specified modifier keys are pressed. 223828cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @throws IllegalArgumentException if the modifiers parameter contains invalid modifiers 223928cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown * @see #metaStateHasModifiers 224028cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown */ 224128cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown public final boolean hasModifiers(int modifiers) { 224228cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown return metaStateHasModifiers(mMetaState, modifiers); 224328cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown } 224428cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown 224528cbf4bd5c204f0493a6fa448a259ec056dcc29eJeff Brown /** 22469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Returns the pressed state of the ALT meta key.</p> 22479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the ALT key is pressed, false otherwise 22499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_LEFT 22519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_ALT_RIGHT 22529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_ALT_ON 22539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isAltPressed() { 22559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (mMetaState & META_ALT_ON) != 0; 22569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Returns the pressed state of the SHIFT meta key.</p> 22609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the SHIFT key is pressed, false otherwise 22629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_LEFT 22649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SHIFT_RIGHT 22659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_SHIFT_ON 22669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isShiftPressed() { 22689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (mMetaState & META_SHIFT_ON) != 0; 22699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Returns the pressed state of the SYM meta key.</p> 22739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the SYM key is pressed, false otherwise 22759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #KEYCODE_SYM 22779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #META_SYM_ON 22789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isSymPressed() { 22809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (mMetaState & META_SYM_ON) != 0; 22819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2284497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>Returns the pressed state of the CTRL meta key.</p> 2285497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2286497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return true if the CTRL key is pressed, false otherwise 2287497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2288497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_LEFT 2289497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CTRL_RIGHT 2290497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_CTRL_ON 2291497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2292497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public final boolean isCtrlPressed() { 2293497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return (mMetaState & META_CTRL_ON) != 0; 2294497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2295497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2296497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 2297497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>Returns the pressed state of the META meta key.</p> 2298497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2299497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return true if the META key is pressed, false otherwise 2300497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2301497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_LEFT 2302497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_META_RIGHT 2303497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_META_ON 2304497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2305497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public final boolean isMetaPressed() { 2306497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return (mMetaState & META_META_ON) != 0; 2307497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2308497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2309497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 2310497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * <p>Returns the pressed state of the FUNCTION meta key.</p> 2311497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2312497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return true if the FUNCTION key is pressed, false otherwise 2313497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2314497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_FUNCTION 2315497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #META_FUNCTION_ON 2316497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2317497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public final boolean isFunctionPressed() { 2318497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return (mMetaState & META_FUNCTION_ON) != 0; 2319497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2320497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2321497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 232251e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>Returns the locked state of the CAPS LOCK meta key.</p> 2323497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 232451e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @return true if the CAPS LOCK key is on, false otherwise 2325497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2326497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_CAPS_LOCK 232751e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_CAPS_LOCK_ON 2328497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 232951e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public final boolean isCapsLockOn() { 233051e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown return (mMetaState & META_CAPS_LOCK_ON) != 0; 2331497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2332497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2333497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 233451e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>Returns the locked state of the NUM LOCK meta key.</p> 2335497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 233651e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @return true if the NUM LOCK key is on, false otherwise 2337497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2338497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_NUM_LOCK 233951e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_NUM_LOCK_ON 2340497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 234151e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public final boolean isNumLockOn() { 234251e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown return (mMetaState & META_NUM_LOCK_ON) != 0; 2343497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2344497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2345497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 234651e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * <p>Returns the locked state of the SCROLL LOCK meta key.</p> 2347497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 234851e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @return true if the SCROLL LOCK key is on, false otherwise 2349497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2350497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see #KEYCODE_SCROLL_LOCK 235151e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown * @see #META_SCROLL_LOCK_ON 2352497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 235351e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown public final boolean isScrollLockOn() { 235451e7fe7545e3509ebb5c31c10440acd31cec89a2Jeff Brown return (mMetaState & META_SCROLL_LOCK_ON) != 0; 2355497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2356497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2357497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 23589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the action of this key event. May be either 23599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}. 236001fe661ae5da3739215d93922412df4b24c859a2RoboErik * 23619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The event action: ACTION_DOWN, ACTION_UP, or ACTION_MULTIPLE. 23629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getAction() { 23649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAction; 23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2368ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * For {@link #ACTION_UP} events, indicates that the event has been 2369ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn * canceled as per {@link #FLAG_CANCELED}. 2370ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn */ 2371ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn public final boolean isCanceled() { 2372ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn return (mFlags&FLAG_CANCELED) != 0; 2373ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn } 237401fe661ae5da3739215d93922412df4b24c859a2RoboErik 2375ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn /** 2376c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale * Set {@link #FLAG_CANCELED} flag for the key event. 2377c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale * 2378c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale * @hide 2379c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale */ 2380c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale @Override 2381c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale public final void cancel() { 2382c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale mFlags |= FLAG_CANCELED; 2383c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale } 2384c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale 2385c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale /** 238683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Call this during {@link Callback#onKeyDown} to have the system track 238783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the key through its final up (possibly including a long press). Note 238883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * that only one key can be tracked at a time -- if another key down 238983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * event is received while a previous one is being tracked, tracking is 239083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * stopped on the previous event. 239183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 239283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public final void startTracking() { 239383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mFlags |= FLAG_START_TRACKING; 239483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 239501fe661ae5da3739215d93922412df4b24c859a2RoboErik 239683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 239783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * For {@link #ACTION_UP} events, indicates that the event is still being 239883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * tracked from its initial down event as per 239983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * {@link #FLAG_TRACKING}. 240083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 240183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public final boolean isTracking() { 240283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return (mFlags&FLAG_TRACKING) != 0; 240383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 240401fe661ae5da3739215d93922412df4b24c859a2RoboErik 240583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 240683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * For {@link #ACTION_DOWN} events, indicates that the event has been 240783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * canceled as per {@link #FLAG_LONG_PRESS}. 240883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 240983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public final boolean isLongPress() { 241083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return (mFlags&FLAG_LONG_PRESS) != 0; 241183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 241201fe661ae5da3739215d93922412df4b24c859a2RoboErik 241383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the key code of the key event. This is the physical key that 24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * was pressed, <em>not</em> the Unicode character. 241601fe661ae5da3739215d93922412df4b24c859a2RoboErik * 24179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The key code of the event. 24189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getKeyCode() { 24209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mKeyCode; 24219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For the special case of a {@link #ACTION_MULTIPLE} event with key 24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * code of {@link #KEYCODE_UNKNOWN}, this is a raw string of characters 24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with the event. In all other cases it is null. 242701fe661ae5da3739215d93922412df4b24c859a2RoboErik * 24289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a String of 1 or more characters associated with 24299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event. 24309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final String getCharacters() { 24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCharacters; 24339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 243401fe661ae5da3739215d93922412df4b24c859a2RoboErik 24359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the hardware key id of this key event. These values are not 24379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reliable and vary from device to device. 24389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@more} 24409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Mostly this is here for debugging purposes. 24419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getScanCode() { 244346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown return mScanCode; 24449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the repeat count of the event. For both key up and key down 24489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events, this is the number of times the key has repeated with the first 24499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * down starting at 0 and counting up from there. For multiple key 24509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events, this is the number of down/up pairs that have occurred. 245101fe661ae5da3739215d93922412df4b24c859a2RoboErik * 24529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of times the key has repeated. 24539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getRepeatCount() { 24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mRepeatCount; 24569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the time of the most recent key down event, 24609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the {@link android.os.SystemClock#uptimeMillis} time base. If this 24619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is a down event, this will be the same as {@link #getEventTime()}. 24629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that when chording keys, this value is the down time of the 24639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * most recently pressed key, which may <em>not</em> be the same physical 24649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key of this event. 246501fe661ae5da3739215d93922412df4b24c859a2RoboErik * 24669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the most recent key down time, in the 24679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.os.SystemClock#uptimeMillis} time base 24689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getDownTime() { 24709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDownTime; 24719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2474b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * Retrieve the time this event occurred, 24759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the {@link android.os.SystemClock#uptimeMillis} time base. 2476b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * 247701fe661ae5da3739215d93922412df4b24c859a2RoboErik * @return Returns the time this event occurred, 24789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the {@link android.os.SystemClock#uptimeMillis} time base. 24799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2480b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown @Override 24819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getEventTime() { 24829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mEventTime; 24839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2485b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown /** 2486b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * Retrieve the time this event occurred, 2487b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * in the {@link android.os.SystemClock#uptimeMillis} time base but with 2488b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * nanosecond (instead of millisecond) precision. 2489b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * <p> 2490b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * The value is in nanosecond precision but it may not have nanosecond accuracy. 2491b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * </p> 2492b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * 2493b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * @return Returns the time this event occurred, 2494b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * in the {@link android.os.SystemClock#uptimeMillis} time base but with 2495b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * nanosecond (instead of millisecond) precision. 2496b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * 2497b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown * @hide 2498b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown */ 24994e91a180be46c0c7c3bf398d4df4cbe2404216b5Jeff Brown @Override 25004e91a180be46c0c7c3bf398d4df4cbe2404216b5Jeff Brown public final long getEventTimeNano() { 25014e91a180be46c0c7c3bf398d4df4cbe2404216b5Jeff Brown return mEventTime * 1000000L; 25024e91a180be46c0c7c3bf398d4df4cbe2404216b5Jeff Brown } 25034e91a180be46c0c7c3bf398d4df4cbe2404216b5Jeff Brown 25049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Renamed to {@link #getDeviceId}. 250601fe661ae5da3739215d93922412df4b24c859a2RoboErik * 25079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 25086b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @deprecated use {@link #getDeviceId()} instead. 25099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25106b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown @Deprecated 25119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getKeyboardDevice() { 25129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDeviceId; 25139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25166b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the {@link KeyCharacterMap} associated with the keyboard device. 25176b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 25186b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The associated key character map. 25198ab3dc7a3e430cc69975091b962758f49bc84ef2Andrew Sapperstein * @throws {@link KeyCharacterMap.UnavailableException} if the key character map 25206b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * could not be loaded because it was malformed or the default key character map 25216b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * is missing from the system. 25226b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 25238ab3dc7a3e430cc69975091b962758f49bc84ef2Andrew Sapperstein * @see KeyCharacterMap#load 25246b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown */ 25256b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown public final KeyCharacterMap getKeyCharacterMap() { 25266b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return KeyCharacterMap.load(mDeviceId); 25276b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown } 25286b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown 25296b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown /** 25306b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the primary character for this key. 25316b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * In other words, the label that is physically printed on it. 25326b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 25336b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The display label character, or 0 if none (eg. for non-printing keys). 25349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public char getDisplayLabel() { 25366b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().getDisplayLabel(mKeyCode); 25379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 253801fe661ae5da3739215d93922412df4b24c859a2RoboErik 25399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25406b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the Unicode character generated by the specified key and meta 25416b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * key state combination. 25429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 25436b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Returns the Unicode character that the specified key would produce 25446b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * when the specified meta bits (see {@link MetaKeyKeyListener}) 25456b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * were active. 25469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p><p> 25479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns 0 if the key is not one that is used to type Unicode 25489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * characters. 25499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p><p> 25506b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * If the return value has bit {@link KeyCharacterMap#COMBINING_ACCENT} set, the 25516b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * key is a "dead key" that should be combined with another to 25526b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * actually produce a character -- see {@link KeyCharacterMap#getDeadChar} -- 25536b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * after masking with {@link KeyCharacterMap#COMBINING_ACCENT_MASK}. 25549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 25556b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 25566b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The associated character or combining accent, or 0 if none. 25579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getUnicodeChar() { 25599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getUnicodeChar(mMetaState); 25609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 256101fe661ae5da3739215d93922412df4b24c859a2RoboErik 25629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25636b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the Unicode character generated by the specified key and meta 25646b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * key state combination. 25659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 25666b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Returns the Unicode character that the specified key would produce 25676b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * when the specified meta bits (see {@link MetaKeyKeyListener}) 25686b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * were active. 25699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p><p> 25709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns 0 if the key is not one that is used to type Unicode 25719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * characters. 25729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p><p> 25736b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * If the return value has bit {@link KeyCharacterMap#COMBINING_ACCENT} set, the 25746b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * key is a "dead key" that should be combined with another to 25756b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * actually produce a character -- see {@link KeyCharacterMap#getDeadChar} -- 25766b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * after masking with {@link KeyCharacterMap#COMBINING_ACCENT_MASK}. 25779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 25786b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 25796b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @param metaState The meta key modifier state. 25806b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The associated character or combining accent, or 0 if none. 25819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25826b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown public int getUnicodeChar(int metaState) { 25836b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().get(mKeyCode, metaState); 25849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 258501fe661ae5da3739215d93922412df4b24c859a2RoboErik 25869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25876b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Get the character conversion data for a given key code. 25889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25896b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @param results A {@link KeyCharacterMap.KeyData} instance that will be 25906b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * filled with the results. 25916b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return True if the key was mapped. If the key was not mapped, results is not modified. 25929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25936b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @deprecated instead use {@link #getDisplayLabel()}, 25946b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * {@link #getNumber()} or {@link #getUnicodeChar(int)}. 25959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25966b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown @Deprecated 25979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getKeyData(KeyData results) { 25986b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().getKeyData(mKeyCode, results); 25999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 260001fe661ae5da3739215d93922412df4b24c859a2RoboErik 26019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26026b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the first character in the character array that can be generated 26036b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * by the specified key code. 26046b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * <p> 26056b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * This is a convenience function that returns the same value as 26066b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * {@link #getMatch(char[],int) getMatch(chars, 0)}. 26076b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * </p> 26086b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 26096b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @param chars The array of matching characters to consider. 26106b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The matching associated character, or 0 if none. 26119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public char getMatch(char[] chars) { 26139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getMatch(chars, 0); 26149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 261501fe661ae5da3739215d93922412df4b24c859a2RoboErik 26169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26176b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the first character in the character array that can be generated 26186b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * by the specified key code. If there are multiple choices, prefers 26196b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * the one that would be generated with the specified meta key modifier state. 26206b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 26216b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @param chars The array of matching characters to consider. 26226b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @param metaState The preferred meta key modifier state. 26236b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The matching associated character, or 0 if none. 26249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26256b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown public char getMatch(char[] chars, int metaState) { 26266b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().getMatch(mKeyCode, chars, metaState); 26279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 262801fe661ae5da3739215d93922412df4b24c859a2RoboErik 26299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26306b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Gets the number or symbol associated with the key. 26316b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * <p> 26326b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * The character value is returned, not the numeric value. 26336b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * If the key is not a number, but is a symbol, the symbol is retuned. 26346b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * </p><p> 26356b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * This method is intended to to support dial pads and other numeric or 26366b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * symbolic entry on keyboards where certain keys serve dual function 26376b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * as alphabetic and symbolic keys. This method returns the number 26386b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * or symbol associated with the key independent of whether the user 26396b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * has pressed the required modifier. 26406b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * </p><p> 26416b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * For example, on one particular keyboard the keys on the top QWERTY row generate 26426b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * numbers when ALT is pressed such that ALT-Q maps to '1'. So for that keyboard 26436b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * when {@link #getNumber} is called with {@link KeyEvent#KEYCODE_Q} it returns '1' 26446b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * so that the user can type numbers without pressing ALT when it makes sense. 26456b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * </p> 26466b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 26476b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return The associated numeric or symbolic character, or 0 if none. 26489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public char getNumber() { 26506b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().getNumber(mKeyCode); 26519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 265201fe661ae5da3739215d93922412df4b24c859a2RoboErik 26539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26546b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * Returns true if this key produces a glyph. 26556b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * 26566b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown * @return True if the key is a printing key. 26579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isPrintingKey() { 26596b53e8daa69cba1a2a5a7c95a01e37ce9c53226cJeff Brown return getKeyCharacterMap().isPrintingKey(mKeyCode); 26609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 266101fe661ae5da3739215d93922412df4b24c859a2RoboErik 26629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 266383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @deprecated Use {@link #dispatch(Callback, DispatcherState, Object)} instead. 266483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 266583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn @Deprecated 266683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public final boolean dispatch(Callback receiver) { 266783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return dispatch(receiver, null, null); 266883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 266901fe661ae5da3739215d93922412df4b24c859a2RoboErik 267083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 26719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Deliver this key event to a {@link Callback} interface. If this is 26729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an ACTION_MULTIPLE event and it is not handled, then an attempt will 26739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be made to deliver a single normal event. 267401fe661ae5da3739215d93922412df4b24c859a2RoboErik * 26759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param receiver The Callback that will be given the event. 267683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param state State information retained across events. 267783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * @param target The target of the dispatch, for use in tracking. 267801fe661ae5da3739215d93922412df4b24c859a2RoboErik * 26799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The return value from the Callback method that was called. 26809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 268183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public final boolean dispatch(Callback receiver, DispatcherState state, 268283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn Object target) { 26839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mAction) { 268483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn case ACTION_DOWN: { 268583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mFlags &= ~FLAG_START_TRACKING; 26868d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Key down to " + target + " in " + state 26878d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn + ": " + this); 268883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn boolean res = receiver.onKeyDown(mKeyCode, this); 268983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (state != null) { 269083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (res && mRepeatCount == 0 && (mFlags&FLAG_START_TRACKING) != 0) { 26918d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, " Start tracking!"); 269283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn state.startTracking(this, target); 269383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } else if (isLongPress() && state.isTracking(this)) { 269483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn try { 269583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (receiver.onKeyLongPress(mKeyCode, this)) { 26968d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, " Clear from long press!"); 269783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn state.performedLongPress(this); 269883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn res = true; 269983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 270083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } catch (AbstractMethodError e) { 270183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 270283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 270383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 270483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return res; 270583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 27069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ACTION_UP: 27078d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Key up to " + target + " in " + state 27088d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn + ": " + this); 270983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (state != null) { 271083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn state.handleUpEvent(this); 271183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 27129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return receiver.onKeyUp(mKeyCode, this); 27139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ACTION_MULTIPLE: 27149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mRepeatCount; 27159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int code = mKeyCode; 27169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (receiver.onKeyMultiple(code, count, this)) { 27179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 27189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (code != KeyEvent.KEYCODE_UNKNOWN) { 27209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = ACTION_DOWN; 27219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = 0; 27229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean handled = receiver.onKeyDown(code, this); 27239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (handled) { 27249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = ACTION_UP; 27259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project receiver.onKeyUp(code, this); 27269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = ACTION_MULTIPLE; 27289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRepeatCount = count; 27299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return handled; 27309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 273183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return false; 27329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 27349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 273683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 273783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Use with {@link KeyEvent#dispatch(Callback, DispatcherState, Object)} 273883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * for more advanced key dispatching, such as long presses. 273983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 274083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public static class DispatcherState { 274183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn int mDownKeyCode; 274283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn Object mDownTarget; 274383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn SparseIntArray mActiveLongPresses = new SparseIntArray(); 274401fe661ae5da3739215d93922412df4b24c859a2RoboErik 274583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 274683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Reset back to initial state. 274783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 274883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void reset() { 27498d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Reset: " + this); 275083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownKeyCode = 0; 275183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownTarget = null; 275283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mActiveLongPresses.clear(); 275383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 275401fe661ae5da3739215d93922412df4b24c859a2RoboErik 275583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 275683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Stop any tracking associated with this target. 275783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 275883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void reset(Object target) { 275983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (mDownTarget == target) { 27608d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Reset in " + target + ": " + this); 276183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownKeyCode = 0; 276283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownTarget = null; 276383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 276483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 276501fe661ae5da3739215d93922412df4b24c859a2RoboErik 276683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 276783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Start tracking the key code associated with the given event. This 276883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * can only be called on a key down. It will allow you to see any 276983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * long press associated with the key, and will result in 277083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * {@link KeyEvent#isTracking} return true on the long press and up 277183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * events. 277201fe661ae5da3739215d93922412df4b24c859a2RoboErik * 277383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>This is only needed if you are directly dispatching events, rather 277483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * than handling them in {@link Callback#onKeyDown}. 277583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 277683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void startTracking(KeyEvent event, Object target) { 277783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (event.getAction() != ACTION_DOWN) { 277883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn throw new IllegalArgumentException( 277983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn "Can only start tracking on a down event"); 278083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 27818d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Start trackingt in " + target + ": " + this); 278283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownKeyCode = event.getKeyCode(); 278383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownTarget = target; 278483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 278501fe661ae5da3739215d93922412df4b24c859a2RoboErik 278683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 278783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Return true if the key event is for a key code that is currently 278883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * being tracked by the dispatcher. 278983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 279083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public boolean isTracking(KeyEvent event) { 279183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return mDownKeyCode == event.getKeyCode(); 279283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 279301fe661ae5da3739215d93922412df4b24c859a2RoboErik 279483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 279583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Keep track of the given event's key code as having performed an 279683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * action with a long press, so no action should occur on the up. 279783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>This is only needed if you are directly dispatching events, rather 279883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * than handling them in {@link Callback#onKeyLongPress}. 279983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 280083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void performedLongPress(KeyEvent event) { 280183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mActiveLongPresses.put(event.getKeyCode(), 1); 280283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 280301fe661ae5da3739215d93922412df4b24c859a2RoboErik 280483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 280583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Handle key up event to stop tracking. This resets the dispatcher state, 280683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * and updates the key event state based on it. 280783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>This is only needed if you are directly dispatching events, rather 280883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * than handling them in {@link Callback#onKeyUp}. 280983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 281083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void handleUpEvent(KeyEvent event) { 281183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn final int keyCode = event.getKeyCode(); 28128d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, "Handle key up " + event + ": " + this); 281383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn int index = mActiveLongPresses.indexOfKey(keyCode); 281483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (index >= 0) { 28158d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, " Index: " + index); 281683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn event.mFlags |= FLAG_CANCELED | FLAG_CANCELED_LONG_PRESS; 281783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mActiveLongPresses.removeAt(index); 281883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 281983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (mDownKeyCode == keyCode) { 28208d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (DEBUG) Log.v(TAG, " Tracking!"); 282183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn event.mFlags |= FLAG_TRACKING; 282283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownKeyCode = 0; 282383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn mDownTarget = null; 282483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 282583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 282683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 2827497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2828497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown @Override 28299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 2830fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown StringBuilder msg = new StringBuilder(); 2831fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append("KeyEvent { action=").append(actionToString(mAction)); 2832fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", keyCode=").append(keyCodeToString(mKeyCode)); 2833fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", scanCode=").append(mScanCode); 2834fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown if (mCharacters != null) { 2835fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", characters=\"").append(mCharacters).append("\""); 2836fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown } 2837fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", metaState=").append(metaStateToString(mMetaState)); 2838fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", flags=0x").append(Integer.toHexString(mFlags)); 2839fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", repeatCount=").append(mRepeatCount); 2840fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", eventTime=").append(mEventTime); 2841fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", downTime=").append(mDownTime); 2842fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", deviceId=").append(mDeviceId); 2843fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(", source=0x").append(Integer.toHexString(mSource)); 2844fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown msg.append(" }"); 2845fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown return msg.toString(); 2846497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2847497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2848497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 2849497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Returns a string that represents the symbolic name of the specified action 28506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * such as "ACTION_DOWN", or an equivalent numeric constant such as "35" if unknown. 2851497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2852497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @param action The action. 2853497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return The symbolic name of the specified action. 2854497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 2855497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2856497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static String actionToString(int action) { 2857497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown switch (action) { 2858497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case ACTION_DOWN: 2859497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return "ACTION_DOWN"; 2860497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case ACTION_UP: 2861497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return "ACTION_UP"; 2862497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown case ACTION_MULTIPLE: 2863497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return "ACTION_MULTIPLE"; 2864497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown default: 2865497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return Integer.toString(action); 2866497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2867497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2868497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2869497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 2870497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Returns a string that represents the symbolic name of the specified keycode 28716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * such as "KEYCODE_A", "KEYCODE_DPAD_UP", or an equivalent numeric constant 28726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * such as "1001" if unknown. 2873497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2874497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @param keyCode The key code. 2875497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return The symbolic name of the specified keycode. 2876497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2877497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @see KeyCharacterMap#getDisplayLabel 2878497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2879497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static String keyCodeToString(int keyCode) { 2880337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright String symbolicName = nativeKeyCodeToString(keyCode); 2881337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright return symbolicName != null ? LABEL_PREFIX + symbolicName : Integer.toString(keyCode); 2882497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2883497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2884497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 28856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets a keycode by its symbolic name such as "KEYCODE_A" or an equivalent 28866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * numeric constant such as "1001". 2887497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2888497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @param symbolicName The symbolic name of the keycode. 28896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The keycode or {@link #KEYCODE_UNKNOWN} if not found. 2890072137c80a9ce30a1c79cc416932a24bd2e4dccbMichael Wright * @see #keycodeToString(int) 2891497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2892497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static int keyCodeFromString(String symbolicName) { 2893337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright if (symbolicName.startsWith(LABEL_PREFIX)) { 2894337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright symbolicName = symbolicName.substring(LABEL_PREFIX.length()); 2895973efa0813260c24390d46b07e524de605630180Michael Wright int keyCode = nativeKeyCodeFromString(symbolicName); 2896973efa0813260c24390d46b07e524de605630180Michael Wright if (keyCode > 0) { 2897973efa0813260c24390d46b07e524de605630180Michael Wright return keyCode; 2898973efa0813260c24390d46b07e524de605630180Michael Wright } 2899497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2900497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown try { 29016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return Integer.parseInt(symbolicName, 10); 2902497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } catch (NumberFormatException ex) { 29036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return KEYCODE_UNKNOWN; 2904497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2905497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2906497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown 2907497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown /** 2908497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * Returns a string that represents the symbolic name of the specified combined meta 2909497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * key modifier state flags such as "0", "META_SHIFT_ON", 29106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * "META_ALT_ON|META_SHIFT_ON" or an equivalent numeric constant such as "0x10000000" 29116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * if unknown. 2912497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * 2913497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @param metaState The meta state. 2914497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @return The symbolic name of the specified combined meta state flags. 2915497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown * @hide 2916497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown */ 2917497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown public static String metaStateToString(int metaState) { 2918497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown if (metaState == 0) { 2919497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return "0"; 2920497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2921497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown StringBuilder result = null; 2922497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown int i = 0; 2923497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown while (metaState != 0) { 2924497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown final boolean isSet = (metaState & 1) != 0; 2925497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown metaState >>>= 1; // unsigned shift! 2926497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown if (isSet) { 2927497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown final String name = META_SYMBOLIC_NAMES[i]; 2928497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown if (result == null) { 2929497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown if (metaState == 0) { 2930497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return name; 2931497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2932497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown result = new StringBuilder(name); 2933497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } else { 2934497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown result.append('|'); 2935497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown result.append(name); 2936497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2937497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2938497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown i += 1; 2939497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown } 2940497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown return result.toString(); 29419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<KeyEvent> CREATOR 29449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<KeyEvent>() { 294507e0384a4e931bc94550c108ddd9b9514100161eJim Miller @Override 29469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent createFromParcel(Parcel in) { 29476ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown in.readInt(); // skip token, we already know this is a KeyEvent 29486ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown return KeyEvent.createFromParcelBody(in); 29499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 295107e0384a4e931bc94550c108ddd9b9514100161eJim Miller @Override 29529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyEvent[] newArray(int size) { 29539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new KeyEvent[size]; 29549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 295601fe661ae5da3739215d93922412df4b24c859a2RoboErik 29576ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown /** @hide */ 29586ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown public static KeyEvent createFromParcelBody(Parcel in) { 29596ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown return new KeyEvent(in); 29606ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown } 296101fe661ae5da3739215d93922412df4b24c859a2RoboErik 29626ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown private KeyEvent(Parcel in) { 296391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown mDeviceId = in.readInt(); 296491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown mSource = in.readInt(); 29656ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mAction = in.readInt(); 29666ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mKeyCode = in.readInt(); 29676ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mRepeatCount = in.readInt(); 29686ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mMetaState = in.readInt(); 29696ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mScanCode = in.readInt(); 29706ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mFlags = in.readInt(); 29716ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mDownTime = in.readLong(); 29726ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown mEventTime = in.readLong(); 29739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 297507e0384a4e931bc94550c108ddd9b9514100161eJim Miller @Override 29769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel out, int flags) { 29776ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown out.writeInt(PARCEL_TOKEN_KEY_EVENT); 297891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 297991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeInt(mDeviceId); 298091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeInt(mSource); 29819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mAction); 29829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mKeyCode); 29839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mRepeatCount); 29849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mMetaState); 298546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown out.writeInt(mScanCode); 29869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mFlags); 29879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeLong(mDownTime); 29889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeLong(mEventTime); 29899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2991