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 &egrave;.
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