InputDevice.java revision e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1e
1c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown/* 2c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Copyright (C) 2010 The Android Open Source Project 3c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 4c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * you may not use this file except in compliance with the License. 6c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * You may obtain a copy of the License at 7c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 8c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 10c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Unless required by applicable law or agreed to in writing, software 11c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * See the License for the specific language governing permissions and 14c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * limitations under the License. 15c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 16c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 17c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brownpackage android.view; 18c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 19a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brownimport android.content.Context; 20ac14351e16e1258f1cb54e2bf772b8be004eb2b8Jeff Brownimport android.hardware.input.InputManager; 218d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.Parcel; 228d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.Parcelable; 23a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brownimport android.os.Vibrator; 24a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brownimport android.os.NullVibrator; 25efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 26efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brownimport java.util.ArrayList; 27efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brownimport java.util.List; 288d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 29c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown/** 30c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Describes the capabilities of a particular input device. 31c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * <p> 329df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Each input device may support multiple classes of input. For example, a multi-function 33c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * keyboard may compose the capabilities of a standard keyboard together with a track pad mouse 34c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * or other pointing device. 35c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p> 36dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Some input devices present multiple distinguishable sources of input. 37c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Applications can query the framework about the characteristics of each distinct source. 38c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p> 39c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * As a further wrinkle, different kinds of input sources uses different coordinate systems 40c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * to describe motion events. Refer to the comments on the input source constants for 41c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the appropriate interpretation. 426d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * </p> 43c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 448d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownpublic final class InputDevice implements Parcelable { 459f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mId; 46af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown private final int mGeneration; 479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final String mName; 489f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final String mDescriptor; 49daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown private final boolean mIsExternal; 509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mSources; 519f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mKeyboardType; 529f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final KeyCharacterMap mKeyCharacterMap; 53a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown private final boolean mHasVibrator; 54efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private final ArrayList<MotionRange> mMotionRanges = new ArrayList<MotionRange>(); 5591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 56a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown private Vibrator mVibrator; // guarded by mMotionRanges during initialization 57a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 58c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 59c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A mask for input source classes. 60c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 61c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Each distinct input source constant has one or more input source class bits set to 62c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * specify the desired interpretation for its input events. 63c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 64c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_MASK = 0x000000ff; 65e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright 66e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright /** 67e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * The input source has no class. 68e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * 69e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * It is up to the application to determine how to handle the device based on the device type. 70e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright */ 71e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright public static final int SOURCE_CLASS_NONE = 0x00000000; 72e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright 73c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 74c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source has buttons or keys. 75dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Examples: {@link #SOURCE_KEYBOARD}, {@link #SOURCE_DPAD}. 76c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 77c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link KeyEvent} should be interpreted as a button or key press. 78c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 796eb5ac9ceeb3ff67d38c7ead54b4247e762f278dJeff Brown * Use {@link #getKeyCharacterMap} to query the device's button and key mappings. 80c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 81c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_BUTTON = 0x00000001; 82c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 83c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 84c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a pointing device associated with a display. 85c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TOUCHSCREEN}, {@link #SOURCE_MOUSE}. 86c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 87c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 88c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * display units according to the {@link View} hierarchy. Pointer down/up indicated when 89c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the finger touches the display or when the selection button is pressed/released. 90c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 91c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of the pointing device. Some devices permit 92c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touches outside the display area so the effective range may be somewhat smaller or larger 93c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * than the actual display size. 94c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 95c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POINTER = 0x00000002; 96c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 97c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 98c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball navigation device. 99c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TRACKBALL}. 100c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 101c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as relative movements in device-specific 102c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * units used for navigation purposes. Pointer down/up indicates when the selection button 103c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * is pressed/released. 104c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 105c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of motion. 106c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 107c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_TRACKBALL = 0x00000004; 108c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 109c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 110c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is an absolute positioning device not associated with a display 111c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (unlike {@link #SOURCE_CLASS_POINTER}). 112c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 113c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 114c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * device-specific surface units. 115c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 116c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of positions. 117c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 118c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POSITION = 0x00000008; 119cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 120cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 121cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 122cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 123cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * A {@link MotionEvent} should be interpreted as absolute joystick movements. 124cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 125cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * Use {@link #getMotionRange} to query the range of positions. 126cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 127cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_CLASS_JOYSTICK = 0x00000010; 128cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 129c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 130c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is unknown. 131c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 132c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_UNKNOWN = 0x00000000; 133c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 134c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 135c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a keyboard. 1369df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 1379df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * This source indicates pretty much anything that has buttons. Use 1389df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * {@link #getKeyboardType()} to determine whether the keyboard has alphabetic keys 1399df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * and can be used to enter text. 1409df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 141c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 142c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 143c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_KEYBOARD = 0x00000100 | SOURCE_CLASS_BUTTON; 144c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 145c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 146c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a DPad. 147c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 148c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 149c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 150c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_DPAD = 0x00000200 | SOURCE_CLASS_BUTTON; 151cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 152cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 153cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a game pad. 154cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_JOYSTICK}). 155cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 156cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_BUTTON 157cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 158cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_GAMEPAD = 0x00000400 | SOURCE_CLASS_BUTTON; 159cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 160c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 161c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch screen pointing device. 162c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 163c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 164c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 165c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHSCREEN = 0x00001000 | SOURCE_CLASS_POINTER; 166c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 167c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 168c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a mouse pointing device. 169c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * This code is also used for other mouse-like pointing devices such as trackpads 170c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * and trackpoints. 171c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 172c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 173c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 174c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_MOUSE = 0x00002000 | SOURCE_CLASS_POINTER; 175fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 176fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown /** 177fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The input source is a stylus pointing device. 17800710e906bdafd58386ee7f81fa84addd218122fJeff Brown * <p> 17900710e906bdafd58386ee7f81fa84addd218122fJeff Brown * Note that this bit merely indicates that an input device is capable of obtaining 18000710e906bdafd58386ee7f81fa84addd218122fJeff Brown * input from a stylus. To determine whether a given touch event was produced 18100710e906bdafd58386ee7f81fa84addd218122fJeff Brown * by a stylus, examine the tool type returned by {@link MotionEvent#getToolType(int)} 18200710e906bdafd58386ee7f81fa84addd218122fJeff Brown * for each individual pointer. 18300710e906bdafd58386ee7f81fa84addd218122fJeff Brown * </p><p> 18400710e906bdafd58386ee7f81fa84addd218122fJeff Brown * A single touch event may multiple pointers with different tool types, 18500710e906bdafd58386ee7f81fa84addd218122fJeff Brown * such as an event that has one pointer with tool type 18600710e906bdafd58386ee7f81fa84addd218122fJeff Brown * {@link MotionEvent#TOOL_TYPE_FINGER} and another pointer with tool type 18700710e906bdafd58386ee7f81fa84addd218122fJeff Brown * {@link MotionEvent#TOOL_TYPE_STYLUS}. So it is important to examine 18800710e906bdafd58386ee7f81fa84addd218122fJeff Brown * the tool type of each pointer, regardless of the source reported 18900710e906bdafd58386ee7f81fa84addd218122fJeff Brown * by {@link MotionEvent#getSource()}. 19000710e906bdafd58386ee7f81fa84addd218122fJeff Brown * </p> 191fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * 192fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * @see #SOURCE_CLASS_POINTER 193fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown */ 194fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown public static final int SOURCE_STYLUS = 0x00004000 | SOURCE_CLASS_POINTER; 195fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 196c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 197c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball. 198c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 199c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_TRACKBALL 200c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 201c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TRACKBALL = 0x00010000 | SOURCE_CLASS_TRACKBALL; 202c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 203c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 204c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch pad or digitizer tablet that is not 205e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * associated with a display (unlike {@link #SOURCE_TOUCHSCREEN}). 206c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 207c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POSITION 208c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 209c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHPAD = 0x00100000 | SOURCE_CLASS_POSITION; 210cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 211cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 212e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * The input source is a touch device whose motions should be interpreted as navigation events. 213e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * 214e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * For example, an upward swipe should be as an upward focus traversal in the same manner as 215e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * pressing up on a D-Pad would be. Swipes to the left, right and down should be treated in a 216e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * similar manner. 217e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * 218e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * @see #SOURCE_CLASS_NONE 219e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright */ 220e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright public static final int SOURCE_TOUCH_NAVIGATION = 0x00200000 | SOURCE_CLASS_NONE; 221e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright 222e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright /** 223cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 224cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_GAMEPAD}). 225cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 226cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_JOYSTICK 227cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 228cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_JOYSTICK = 0x01000000 | SOURCE_CLASS_JOYSTICK; 229cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 2306d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2316d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * A special input source constant that is used when filtering input devices 2326d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * to match devices that provide any type of input source. 2336d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2346d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int SOURCE_ANY = 0xffffff00; 235c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 236e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 23791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_X}. 238e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 239e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 24091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_X} instead. 241e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 24291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 24391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_X = MotionEvent.AXIS_X; 24491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 245e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 24691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_Y}. 247e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 248e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 24991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_Y} instead. 250e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 25191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 25291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_Y = MotionEvent.AXIS_Y; 25391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 254e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 25591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_PRESSURE}. 256e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 257e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 25891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_PRESSURE} instead. 259e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 26091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 26191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_PRESSURE = MotionEvent.AXIS_PRESSURE; 26291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 263e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 26491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_SIZE}. 265e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 266e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 26791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_SIZE} instead. 268e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 26991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 27091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_SIZE = MotionEvent.AXIS_SIZE; 27191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 272e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 27391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MAJOR}. 274e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 275e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 27691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MAJOR} instead. 277e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 27891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 27991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MAJOR = MotionEvent.AXIS_TOUCH_MAJOR; 28091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 281e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 28291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MINOR}. 283e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 284e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 28591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MINOR} instead. 286e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 28791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 28891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MINOR = MotionEvent.AXIS_TOUCH_MINOR; 28991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 290e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 29191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MAJOR}. 292e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 293e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 29491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MAJOR} instead. 295e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 29691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 29791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MAJOR = MotionEvent.AXIS_TOOL_MAJOR; 29891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 299e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 30091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MINOR}. 301e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 302e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 30391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MINOR} instead. 304e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 30591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 30691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MINOR = MotionEvent.AXIS_TOOL_MINOR; 30791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 308e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 30991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_ORIENTATION}. 310e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 311e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 31291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_ORIENTATION} instead. 313e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 31491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 31591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_ORIENTATION = MotionEvent.AXIS_ORIENTATION; 3168d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 3176d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3186d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * There is no keyboard. 3196d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3206d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NONE = 0; 3216d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 3226d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3236d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard is not fully alphabetic. It may be a numeric keypad or an assortment 3246d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * of buttons that are not mapped as alphabetic keys suitable for text input. 3256d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3266d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; 3276d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 3286d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3296d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard supports a complement of alphabetic keys. 3306d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3316d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_ALPHABETIC = 2; 33291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 3339f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public static final Parcelable.Creator<InputDevice> CREATOR = 3349f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown new Parcelable.Creator<InputDevice>() { 3359f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public InputDevice createFromParcel(Parcel in) { 3369f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return new InputDevice(in); 3379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3389f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public InputDevice[] newArray(int size) { 3399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return new InputDevice[size]; 3409f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3419f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown }; 3429f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown // Called by native code. 344daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown private InputDevice(int id, int generation, String name, String descriptor, 345daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown boolean isExternal, int sources, 346a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown int keyboardType, KeyCharacterMap keyCharacterMap, boolean hasVibrator) { 3479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mId = id; 348af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown mGeneration = generation; 3499f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mName = name; 3509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDescriptor = descriptor; 351daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown mIsExternal = isExternal; 3529f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mSources = sources; 3539f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyboardType = keyboardType; 3549f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = keyCharacterMap; 355a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mHasVibrator = hasVibrator; 3569f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3579f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3589f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private InputDevice(Parcel in) { 3599f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mId = in.readInt(); 360af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown mGeneration = in.readInt(); 3619f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mName = in.readString(); 3629f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDescriptor = in.readString(); 363daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown mIsExternal = in.readInt() != 0; 3649f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mSources = in.readInt(); 3659f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyboardType = in.readInt(); 3669f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = KeyCharacterMap.CREATOR.createFromParcel(in); 367a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mHasVibrator = in.readInt() != 0; 3689f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3699f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown for (;;) { 3709f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int axis = in.readInt(); 3719f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown if (axis < 0) { 3729f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown break; 3739f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3749f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown addMotionRange(axis, in.readInt(), 3759f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown in.readFloat(), in.readFloat(), in.readFloat(), in.readFloat()); 3769f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3778d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 378e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 379e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 380e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets information about the input device with the specified id. 381e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @param id The device id. 382e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The input device or null if not found. 383e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 384c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static InputDevice getDevice(int id) { 3859f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return InputManager.getInstance().getInputDevice(id); 3868d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3878d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 3888d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 3898d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the ids of all input devices in the system. 3908d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device ids. 3918d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 3928d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public static int[] getDeviceIds() { 3939f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return InputManager.getInstance().getInputDeviceIds(); 3948d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3959df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 3968d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 3978d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the input device id. 3989df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * <p> 3999df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Each input device receives a unique id when it is first configured 4009df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * by the system. The input device id may change when the system is restarted or if the 4019df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * input device is disconnected, reconnected or reconfigured at any time. 4029df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * If you require a stable identifier for a device that persists across 4039df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * boots and reconfigurations, use {@link #getDescriptor()}. 4049df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * </p> 4059df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 4068d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device id. 4078d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 4088d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int getId() { 4098d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mId; 410c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 4119df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 4129df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown /** 413af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * Gets a generation number for this input device. 414af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * The generation number is incremented whenever the device is reconfigured and its 415af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * properties may have changed. 416af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * 417af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * @return The generation number. 418af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * 419af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * @hide 420af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown */ 421af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown public int getGeneration() { 422af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown return mGeneration; 423af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown } 424af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown 425af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown /** 4269df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Gets the input device descriptor, which is a stable identifier for an input device. 4279df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * <p> 4289df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * An input device descriptor uniquely identifies an input device. Its value 4299df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * is intended to be persistent across system restarts, and should not change even 4309df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * if the input device is disconnected, reconnected or reconfigured at any time. 431e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * </p><p> 432e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * It is possible for there to be multiple {@link InputDevice} instances that have the 433e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * same input device descriptor. This might happen in situations where a single 434e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * human input device registers multiple {@link InputDevice} instances (HID collections) 435e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * that describe separate features of the device, such as a keyboard that also 436e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * has a trackpad. Alternately, it may be that the input devices are simply 437e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * indistinguishable, such as two keyboards made by the same manufacturer. 438e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * </p><p> 439daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * The input device descriptor returned by {@link #getDescriptor} should only be 440e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * used when an application needs to remember settings associated with a particular 441e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * input device. For all other purposes when referring to a logical 442e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * {@link InputDevice} instance at runtime use the id returned by {@link #getId()}. 4439df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * </p> 4449df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 4459df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * @return The input device descriptor. 4469df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown */ 4479df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown public String getDescriptor() { 448e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown return mDescriptor; 4499df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown } 4509df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 451c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 4529f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Returns true if the device is a virtual input device rather than a real one, 4539f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * such as the virtual keyboard (see {@link KeyCharacterMap#VIRTUAL_KEYBOARD}). 4549f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * <p> 4559f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Virtual input devices are provided to implement system-level functionality 4569f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * and should not be seen or configured by users. 4579f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * </p> 4589f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 4599f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @return True if the device is virtual. 4609f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 4619f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @see KeyCharacterMap#VIRTUAL_KEYBOARD 4629f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */ 4639f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public boolean isVirtual() { 4649f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mId < 0; 4659f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 4669f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 4679f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown /** 468daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * Returns true if the device is external (connected to USB or Bluetooth or some other 469daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * peripheral bus), otherwise it is built-in. 470daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * 471daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * @return True if the device is external. 472daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * 473daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * @hide 474daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown */ 475daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown public boolean isExternal() { 476daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown return mIsExternal; 477daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown } 478daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown 479daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown /** 4807e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * Returns true if the device is a full keyboard. 4817e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * 4827e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * @return True if the device is a full keyboard. 4837e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * 4847e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * @hide 4857e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown */ 4867e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown public boolean isFullKeyboard() { 4877e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown return (mSources & SOURCE_KEYBOARD) == SOURCE_KEYBOARD 4887e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown && mKeyboardType == KEYBOARD_TYPE_ALPHABETIC; 4897e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown } 4907e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown 4917e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown /** 492c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the name of this input device. 493c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The input device name. 494c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 495c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public String getName() { 496c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mName; 497c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 498c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 499c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 500c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the input sources supported by this input device as a combined bitfield. 501c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The supported input sources. 502c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 503c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public int getSources() { 504c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mSources; 505c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 506c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 507c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 5086d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * Gets the keyboard type. 5096d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * @return The keyboard type. 5106d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 5116d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public int getKeyboardType() { 5126d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return mKeyboardType; 5136d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown } 5146d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 5156d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 516c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the key character map associated with this input device. 517c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The key character map. 518c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 519c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyCharacterMap getKeyCharacterMap() { 5209f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mKeyCharacterMap; 5211e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown } 5221e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown 523e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 52491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis. 525efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 526efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. Returns information about the first axis found for any source. 527efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * To obtain information about the axis for a specific source, use 528efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * {@link #getMotionRange(int, int)}. 529efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 53091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @param axis The axis constant. 53191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @return The range of values, or null if the requested axis is not 532e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * supported by the device. 53391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 53491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_X 53591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_Y 5366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @see #getSupportedAxes() 537e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 53891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public MotionRange getMotionRange(int axis) { 539efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 540efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 541efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 542efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis) { 543efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 544efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 545efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 546efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 547c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 54891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 5496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown /** 550efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis 551efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * used by a particular source on the device. 552efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 553efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. 554efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 555efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param axis The axis constant. 556efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param source The source for which to return information. 557efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The range of values, or null if the requested axis is not 558efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * supported by the device. 5596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * 560efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_X 561efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_Y 562efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see #getSupportedAxes() 563efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 564efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public MotionRange getMotionRange(int axis, int source) { 565efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 566efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 567efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 568efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis && range.mSource == source) { 569efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 5706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 5716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 572efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 5736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 5746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown 575efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 576efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the ranges for all axes supported by the device. 577efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The motion ranges for the device. 578efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 579efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see #getMotionRange(int, int) 580efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 581efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public List<MotionRange> getMotionRanges() { 582efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mMotionRanges; 583efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 584efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 5859f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // Called from native code. 586efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private void addMotionRange(int axis, int source, 587efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown float min, float max, float flat, float fuzz) { 588efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mMotionRanges.add(new MotionRange(axis, source, min, max, flat, fuzz)); 589c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 59091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 591e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 592a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Gets the vibrator service associated with the device, if there is one. 593a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Even if the device does not have a vibrator, the result is never null. 594a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Use {@link Vibrator#hasVibrator} to determine whether a vibrator is 595a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * present. 596a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * 597a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Note that the vibrator associated with the device may be different from 598a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * the system vibrator. To obtain an instance of the system vibrator instead, call 599a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * {@link Context#getSystemService} with {@link Context#VIBRATOR_SERVICE} as argument. 600a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * 601a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * @return The vibrator service associated with the device, never null. 602a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown */ 603a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown public Vibrator getVibrator() { 604a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown synchronized (mMotionRanges) { 605a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown if (mVibrator == null) { 606a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown if (mHasVibrator) { 607a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mVibrator = InputManager.getInstance().getInputDeviceVibrator(mId); 608a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } else { 609a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mVibrator = NullVibrator.getInstance(); 610a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 611a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 612a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown return mVibrator; 613a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 614a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 615a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 616a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown /** 61791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Provides information about the range of values for a particular {@link MotionEvent} axis. 61891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 61991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see InputDevice#getMotionRange(int) 620e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 621c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final class MotionRange { 622efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mAxis; 623efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mSource; 6248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMin; 6258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMax; 6268d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFlat; 6278d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFuzz; 62891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 629efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private MotionRange(int axis, int source, float min, float max, float flat, float fuzz) { 630efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mAxis = axis; 631efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mSource = source; 6328d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMin = min; 6338d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMax = max; 6348d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFlat = flat; 6358d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFuzz = fuzz; 6368d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 63791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 638e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 639efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the axis id. 640efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The axis id. 641efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 642efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getAxis() { 643efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mAxis; 644efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 645efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 646efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 647efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the source for which the axis is defined. 648efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The source. 649efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 650efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getSource() { 651efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mSource; 652efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 653efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 65474e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright 65574e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright /** 65674e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * Determines whether the event is from the given source. 65774e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * 65874e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * @param source The input source to check against. This can be a specific device type, 65974e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * such as {@link InputDevice#SOURCE_TOUCH_NAVIGATION}, or a more generic device class, 66074e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * such as {@link InputDevice#SOURCE_CLASS_POINTER}. 66174e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * @return Whether the event is from the given source. 66274e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright */ 66374e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright public boolean isFromSource(int source) { 66474e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright return (getSource() & source) == source; 66574e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright } 66674e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright 667efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 6686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive minimum value for the axis. 6696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive minimum value. 670e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 671e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMin() { 6728d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMin; 673e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 67491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 675e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 6766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive maximum value for the axis. 6776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive maximum value. 678e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 679e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMax() { 6808d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMax; 681e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 68291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 683e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 6846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the range of the axis (difference between maximum and minimum). 685e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The range of values. 686e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 687e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getRange() { 6886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return mMax - mMin; 689e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 69091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 691e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 69291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the extent of the center flat position with respect to this axis. 6936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 694e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a flat value of 8 means that the center position is between -8 and +8. 695dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * This value is mainly useful for calibrating self-centering devices. 6966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 697e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The extent of the center flat position. 698e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 699e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFlat() { 7008d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFlat; 701e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 70291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 703e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 70491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the error tolerance for input device measurements with respect to this axis. 7056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 706e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a value of 2 indicates that the measured value may be up to +/- 2 units 707e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * away from the actual value due to noise and device sensitivity limitations. 7086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 709e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The error tolerance. 710e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 711e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFuzz() { 7128d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFuzz; 7138d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 7148d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 71591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 7168d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 7178d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public void writeToParcel(Parcel out, int flags) { 7188d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mId); 719af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown out.writeInt(mGeneration); 7208d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeString(mName); 721e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown out.writeString(mDescriptor); 722daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown out.writeInt(mIsExternal ? 1 : 0); 7238d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mSources); 7248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mKeyboardType); 7259f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap.writeToParcel(out, flags); 726a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown out.writeInt(mHasVibrator ? 1 : 0); 72791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 728efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 729efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 730efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 731efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mAxis); 732efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mSource); 73391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMin); 73491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMax); 73591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFlat); 73691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFuzz); 7378d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 7388d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(-1); 7398d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 74091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 7418d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 7428d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int describeContents() { 7438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return 0; 7448d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 74591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 7468d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 7478d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public String toString() { 7488d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown StringBuilder description = new StringBuilder(); 7498d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("Input Device ").append(mId).append(": ").append(mName).append("\n"); 750e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown description.append(" Descriptor: ").append(mDescriptor).append("\n"); 751af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown description.append(" Generation: ").append(mGeneration).append("\n"); 752daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown description.append(" Location: ").append(mIsExternal ? "external" : "built-in").append("\n"); 753e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown 7548d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" Keyboard Type: "); 7558d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown switch (mKeyboardType) { 7568d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NONE: 7578d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("none"); 7588d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 7598d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NON_ALPHABETIC: 7608d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("non-alphabetic"); 7618d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 7628d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_ALPHABETIC: 7638d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("alphabetic"); 7648d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 7658d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 7668d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("\n"); 76791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 768a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown description.append(" Has Vibrator: ").append(mHasVibrator).append("\n"); 769a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 770efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" Sources: 0x").append(Integer.toHexString(mSources)).append(" ("); 7718d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_KEYBOARD, "keyboard"); 7728d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_DPAD, "dpad"); 7738d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHSCREEN, "touchscreen"); 7748d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_MOUSE, "mouse"); 775fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_STYLUS, "stylus"); 7768d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TRACKBALL, "trackball"); 7778d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHPAD, "touchpad"); 77891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_JOYSTICK, "joystick"); 77991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_GAMEPAD, "gamepad"); 78091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" )\n"); 78191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 78291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown final int numAxes = mMotionRanges.size(); 78391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown for (int i = 0; i < numAxes; i++) { 784efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 785efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" ").append(MotionEvent.axisToString(range.mAxis)); 786efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(": source=0x").append(Integer.toHexString(range.mSource)); 787efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" min=").append(range.mMin); 78891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" max=").append(range.mMax); 78991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" flat=").append(range.mFlat); 79091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" fuzz=").append(range.mFuzz); 79191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append("\n"); 79291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 7938d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return description.toString(); 7948d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 79591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 7968d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void appendSourceDescriptionIfApplicable(StringBuilder description, int source, 7978d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown String sourceName) { 7988d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if ((mSources & source) == source) { 7998d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" "); 8008d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(sourceName); 8018d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 8028d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 803c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown} 804