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; 20ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErikimport android.hardware.input.InputDeviceIdentifier; 21ac14351e16e1258f1cb54e2bf772b8be004eb2b8Jeff Brownimport android.hardware.input.InputManager; 228d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.Parcel; 238d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.Parcelable; 24a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brownimport android.os.Vibrator; 25a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brownimport android.os.NullVibrator; 26efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 27efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brownimport java.util.ArrayList; 28efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brownimport java.util.List; 298d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 30c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown/** 31c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Describes the capabilities of a particular input device. 32c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * <p> 339df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Each input device may support multiple classes of input. For example, a multi-function 34c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * keyboard may compose the capabilities of a standard keyboard together with a track pad mouse 35c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * or other pointing device. 36c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p> 37dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Some input devices present multiple distinguishable sources of input. 38c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Applications can query the framework about the characteristics of each distinct source. 39c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p> 40c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * As a further wrinkle, different kinds of input sources uses different coordinate systems 41c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * to describe motion events. Refer to the comments on the input source constants for 42c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the appropriate interpretation. 436d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * </p> 44c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 458d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownpublic final class InputDevice implements Parcelable { 469f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mId; 47af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown private final int mGeneration; 48ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright private final int mControllerNumber; 499f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final String mName; 5054e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright private final int mVendorId; 5154e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright private final int mProductId; 529f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final String mDescriptor; 53ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik private final InputDeviceIdentifier mIdentifier; 54daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown private final boolean mIsExternal; 559f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mSources; 569f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mKeyboardType; 579f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final KeyCharacterMap mKeyCharacterMap; 58a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown private final boolean mHasVibrator; 5972285e5600fad17c42730d6f84164d8425d4d43cTim Kilbourn private final boolean mHasMicrophone; 607ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright private final boolean mHasButtonUnderPad; 61efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private final ArrayList<MotionRange> mMotionRanges = new ArrayList<MotionRange>(); 6291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 63a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown private Vibrator mVibrator; // guarded by mMotionRanges during initialization 64a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 65c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 66c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A mask for input source classes. 67ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 68c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Each distinct input source constant has one or more input source class bits set to 69c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * specify the desired interpretation for its input events. 70c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 71c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_MASK = 0x000000ff; 72e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright 73e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright /** 74e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * The input source has no class. 75e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * 76e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * It is up to the application to determine how to handle the device based on the device type. 77e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright */ 78e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright public static final int SOURCE_CLASS_NONE = 0x00000000; 79e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright 80c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 81c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source has buttons or keys. 82dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Examples: {@link #SOURCE_KEYBOARD}, {@link #SOURCE_DPAD}. 83ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 84c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link KeyEvent} should be interpreted as a button or key press. 85ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 866eb5ac9ceeb3ff67d38c7ead54b4247e762f278dJeff Brown * Use {@link #getKeyCharacterMap} to query the device's button and key mappings. 87c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 88c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_BUTTON = 0x00000001; 89ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 90c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 91c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a pointing device associated with a display. 92c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TOUCHSCREEN}, {@link #SOURCE_MOUSE}. 93ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 94c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 95c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * display units according to the {@link View} hierarchy. Pointer down/up indicated when 96c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the finger touches the display or when the selection button is pressed/released. 97ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 98c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of the pointing device. Some devices permit 99c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touches outside the display area so the effective range may be somewhat smaller or larger 100c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * than the actual display size. 101c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 102c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POINTER = 0x00000002; 103ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 104c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 105c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball navigation device. 106c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TRACKBALL}. 107ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 108c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as relative movements in device-specific 109c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * units used for navigation purposes. Pointer down/up indicates when the selection button 110c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * is pressed/released. 111ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 112c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of motion. 113c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 114c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_TRACKBALL = 0x00000004; 115ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 116c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 117c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is an absolute positioning device not associated with a display 118c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (unlike {@link #SOURCE_CLASS_POINTER}). 119ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 120c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 121c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * device-specific surface units. 122ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 123c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of positions. 124c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 125c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POSITION = 0x00000008; 126cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 127cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 128cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 129cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 130cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * A {@link MotionEvent} should be interpreted as absolute joystick movements. 131cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 132cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * Use {@link #getMotionRange} to query the range of positions. 133cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 134cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_CLASS_JOYSTICK = 0x00000010; 135cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 136c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 137c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is unknown. 138c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 139c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_UNKNOWN = 0x00000000; 140ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 141c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 142c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a keyboard. 1439df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 1449df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * This source indicates pretty much anything that has buttons. Use 1459df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * {@link #getKeyboardType()} to determine whether the keyboard has alphabetic keys 1469df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * and can be used to enter text. 1479df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 148c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 149c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 150c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_KEYBOARD = 0x00000100 | SOURCE_CLASS_BUTTON; 151ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 152c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 153c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a DPad. 154ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 155c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 156c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 157c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_DPAD = 0x00000200 | SOURCE_CLASS_BUTTON; 158cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 159cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 160cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a game pad. 161cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_JOYSTICK}). 162cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 163cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_BUTTON 164cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 165cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_GAMEPAD = 0x00000400 | SOURCE_CLASS_BUTTON; 166cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 167c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 168c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch screen pointing device. 169ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 170c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 171c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 172c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHSCREEN = 0x00001000 | SOURCE_CLASS_POINTER; 173ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 174c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 175c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a mouse pointing device. 176c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * This code is also used for other mouse-like pointing devices such as trackpads 177c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * and trackpoints. 178ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 179c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 180c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 181c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_MOUSE = 0x00002000 | SOURCE_CLASS_POINTER; 182fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 183fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown /** 184fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The input source is a stylus pointing device. 18500710e906bdafd58386ee7f81fa84addd218122fJeff Brown * <p> 18600710e906bdafd58386ee7f81fa84addd218122fJeff Brown * Note that this bit merely indicates that an input device is capable of obtaining 18700710e906bdafd58386ee7f81fa84addd218122fJeff Brown * input from a stylus. To determine whether a given touch event was produced 18800710e906bdafd58386ee7f81fa84addd218122fJeff Brown * by a stylus, examine the tool type returned by {@link MotionEvent#getToolType(int)} 18900710e906bdafd58386ee7f81fa84addd218122fJeff Brown * for each individual pointer. 19000710e906bdafd58386ee7f81fa84addd218122fJeff Brown * </p><p> 19100710e906bdafd58386ee7f81fa84addd218122fJeff Brown * A single touch event may multiple pointers with different tool types, 19200710e906bdafd58386ee7f81fa84addd218122fJeff Brown * such as an event that has one pointer with tool type 19300710e906bdafd58386ee7f81fa84addd218122fJeff Brown * {@link MotionEvent#TOOL_TYPE_FINGER} and another pointer with tool type 19400710e906bdafd58386ee7f81fa84addd218122fJeff Brown * {@link MotionEvent#TOOL_TYPE_STYLUS}. So it is important to examine 19500710e906bdafd58386ee7f81fa84addd218122fJeff Brown * the tool type of each pointer, regardless of the source reported 19600710e906bdafd58386ee7f81fa84addd218122fJeff Brown * by {@link MotionEvent#getSource()}. 19700710e906bdafd58386ee7f81fa84addd218122fJeff Brown * </p> 198fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * 199fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * @see #SOURCE_CLASS_POINTER 200fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown */ 201fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown public static final int SOURCE_STYLUS = 0x00004000 | SOURCE_CLASS_POINTER; 202fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 203c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 204f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * The input device is a Bluetooth stylus. 205f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * <p> 206f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * Note that this bit merely indicates that an input device is capable of 207f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * obtaining input from a Bluetooth stylus. To determine whether a given 208f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * touch event was produced by a stylus, examine the tool type returned by 209f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * {@link MotionEvent#getToolType(int)} for each individual pointer. 210f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * </p><p> 211f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * A single touch event may multiple pointers with different tool types, 212f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * such as an event that has one pointer with tool type 213f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * {@link MotionEvent#TOOL_TYPE_FINGER} and another pointer with tool type 214f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * {@link MotionEvent#TOOL_TYPE_STYLUS}. So it is important to examine 215f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * the tool type of each pointer, regardless of the source reported 216f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * by {@link MotionEvent#getSource()}. 217f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * </p><p> 218f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * A bluetooth stylus generally receives its pressure and button state 219f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * information from the stylus itself, and derives the rest from another 220f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * source. For example, a Bluetooth stylus used in conjunction with a 221f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * touchscreen would derive its contact position and pointer size from the 222f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * touchscreen and may not be any more accurate than other tools such as 223f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * fingers. 224f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * </p> 225f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * 226f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * @see #SOURCE_STYLUS 227f18920ba3182087938e245fab8e3e3008a39606bMichael Wright * @see #SOURCE_CLASS_POINTER 228f18920ba3182087938e245fab8e3e3008a39606bMichael Wright */ 229f18920ba3182087938e245fab8e3e3008a39606bMichael Wright public static final int SOURCE_BLUETOOTH_STYLUS = 230f18920ba3182087938e245fab8e3e3008a39606bMichael Wright 0x00008000 | SOURCE_STYLUS; 231f18920ba3182087938e245fab8e3e3008a39606bMichael Wright 232f18920ba3182087938e245fab8e3e3008a39606bMichael Wright /** 233c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball. 234ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 235c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_TRACKBALL 236c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 237c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TRACKBALL = 0x00010000 | SOURCE_CLASS_TRACKBALL; 238ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 239c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 240c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch pad or digitizer tablet that is not 241e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * associated with a display (unlike {@link #SOURCE_TOUCHSCREEN}). 242ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 243c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POSITION 244c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 245c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHPAD = 0x00100000 | SOURCE_CLASS_POSITION; 246cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 247cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 248e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * The input source is a touch device whose motions should be interpreted as navigation events. 249e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * 250e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * For example, an upward swipe should be as an upward focus traversal in the same manner as 251e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * pressing up on a D-Pad would be. Swipes to the left, right and down should be treated in a 252e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * similar manner. 253e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * 254e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * @see #SOURCE_CLASS_NONE 255e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright */ 256e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright public static final int SOURCE_TOUCH_NAVIGATION = 0x00200000 | SOURCE_CLASS_NONE; 257e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright 258e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright /** 25967322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani * The input source is a rotating encoder device whose motions should be interpreted as akin to 26067322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani * those of a scroll wheel. 26167322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani * 26267322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani * @see #SOURCE_CLASS_NONE 26367322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani * {@hide} 26467322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani */ 26567322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani public static final int SOURCE_ROTARY_ENCODER = 0x00400000 | SOURCE_CLASS_NONE; 26667322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani 26767322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani /** 268cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 269cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_GAMEPAD}). 270cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 271cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_JOYSTICK 272cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 273cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_JOYSTICK = 0x01000000 | SOURCE_CLASS_JOYSTICK; 274cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 2756d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 27696658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * The input source is a device connected through HDMI-based bus. 27796658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * 27896658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * The key comes in through HDMI-CEC or MHL signal line, and is treated as if it were 27996658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * generated by a locally connected DPAD or keyboard. 28096658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim */ 28196658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim public static final int SOURCE_HDMI = 0x02000000 | SOURCE_CLASS_BUTTON; 28296658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim 28396658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim /** 2846d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * A special input source constant that is used when filtering input devices 2856d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * to match devices that provide any type of input source. 2866d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2876d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int SOURCE_ANY = 0xffffff00; 288c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 289e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 29091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_X}. 291ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 292e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 29391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_X} instead. 294e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 29591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 29691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_X = MotionEvent.AXIS_X; 29791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 298e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 29991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_Y}. 300ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 301e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 30291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_Y} instead. 303e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 30491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 30591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_Y = MotionEvent.AXIS_Y; 30691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 307e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 30891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_PRESSURE}. 309ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 310e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 31191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_PRESSURE} instead. 312e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 31391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 31491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_PRESSURE = MotionEvent.AXIS_PRESSURE; 31591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 316e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 31791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_SIZE}. 318ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 319e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 32091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_SIZE} instead. 321e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 32291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 32391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_SIZE = MotionEvent.AXIS_SIZE; 32491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 325e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 32691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MAJOR}. 327ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 328e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 32991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MAJOR} instead. 330e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 33191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 33291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MAJOR = MotionEvent.AXIS_TOUCH_MAJOR; 33391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 334e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 33591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MINOR}. 336ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 337e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 33891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MINOR} instead. 339e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 34091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 34191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MINOR = MotionEvent.AXIS_TOUCH_MINOR; 34291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 343e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 34491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MAJOR}. 345ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 346e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 34791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MAJOR} instead. 348e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 34991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 35091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MAJOR = MotionEvent.AXIS_TOOL_MAJOR; 35191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 352e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 35391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MINOR}. 354ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 355e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 35691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MINOR} instead. 357e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 35891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 35991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MINOR = MotionEvent.AXIS_TOOL_MINOR; 36091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 361e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 36291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_ORIENTATION}. 363ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 364e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 36591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_ORIENTATION} instead. 366e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 36791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 36891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_ORIENTATION = MotionEvent.AXIS_ORIENTATION; 369ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 3706d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3716d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * There is no keyboard. 3726d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3736d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NONE = 0; 374ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 3756d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3766d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard is not fully alphabetic. It may be a numeric keypad or an assortment 3776d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * of buttons that are not mapped as alphabetic keys suitable for text input. 3786d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3796d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; 380ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 3816d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3826d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard supports a complement of alphabetic keys. 3836d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3846d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_ALPHABETIC = 2; 38591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 3869f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public static final Parcelable.Creator<InputDevice> CREATOR = 3879f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown new Parcelable.Creator<InputDevice>() { 3889f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public InputDevice createFromParcel(Parcel in) { 3899f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return new InputDevice(in); 3909f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3919f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public InputDevice[] newArray(int size) { 3929f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return new InputDevice[size]; 3939f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3949f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown }; 3959f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3968d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown // Called by native code. 39754e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright private InputDevice(int id, int generation, int controllerNumber, String name, int vendorId, 3986d85cf2bd7cba6890f1b2bb26073105c3b8fc432Tim Kilbourn int productId, String descriptor, boolean isExternal, int sources, int keyboardType, 39972285e5600fad17c42730d6f84164d8425d4d43cTim Kilbourn KeyCharacterMap keyCharacterMap, boolean hasVibrator, boolean hasMicrophone, 400415b450bf29a8ad28ecc5c1c1eea9bd61e49bf72Tim Kilbourn boolean hasButtonUnderPad) { 4019f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mId = id; 402af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown mGeneration = generation; 403ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright mControllerNumber = controllerNumber; 4049f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mName = name; 40554e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright mVendorId = vendorId; 40654e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright mProductId = productId; 4079f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDescriptor = descriptor; 408daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown mIsExternal = isExternal; 4099f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mSources = sources; 4109f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyboardType = keyboardType; 4119f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = keyCharacterMap; 412a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mHasVibrator = hasVibrator; 41372285e5600fad17c42730d6f84164d8425d4d43cTim Kilbourn mHasMicrophone = hasMicrophone; 4147ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright mHasButtonUnderPad = hasButtonUnderPad; 415ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik mIdentifier = new InputDeviceIdentifier(descriptor, vendorId, productId); 4169f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 4179f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 4189f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private InputDevice(Parcel in) { 4199f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mId = in.readInt(); 420af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown mGeneration = in.readInt(); 421ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright mControllerNumber = in.readInt(); 4229f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mName = in.readString(); 42354e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright mVendorId = in.readInt(); 42454e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright mProductId = in.readInt(); 4259f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDescriptor = in.readString(); 426daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown mIsExternal = in.readInt() != 0; 4279f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mSources = in.readInt(); 4289f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyboardType = in.readInt(); 4299f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = KeyCharacterMap.CREATOR.createFromParcel(in); 430a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mHasVibrator = in.readInt() != 0; 43172285e5600fad17c42730d6f84164d8425d4d43cTim Kilbourn mHasMicrophone = in.readInt() != 0; 4327ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright mHasButtonUnderPad = in.readInt() != 0; 433ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik mIdentifier = new InputDeviceIdentifier(mDescriptor, mVendorId, mProductId); 4349f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 4359f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown for (;;) { 4369f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int axis = in.readInt(); 4379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown if (axis < 0) { 4389f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown break; 4399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 440c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright addMotionRange(axis, in.readInt(), in.readFloat(), in.readFloat(), in.readFloat(), 441c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright in.readFloat(), in.readFloat()); 4429f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 4438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 444e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 445e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 446e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets information about the input device with the specified id. 447e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @param id The device id. 448e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The input device or null if not found. 449e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 450c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static InputDevice getDevice(int id) { 4519f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return InputManager.getInstance().getInputDevice(id); 4528d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 453ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 4548d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 4558d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the ids of all input devices in the system. 4568d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device ids. 4578d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 4588d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public static int[] getDeviceIds() { 4599f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return InputManager.getInstance().getInputDeviceIds(); 4608d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4619df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 4628d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 4638d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the input device id. 4649df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * <p> 4659df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Each input device receives a unique id when it is first configured 4669df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * by the system. The input device id may change when the system is restarted or if the 4679df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * input device is disconnected, reconnected or reconfigured at any time. 4689df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * If you require a stable identifier for a device that persists across 4699df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * boots and reconfigurations, use {@link #getDescriptor()}. 4709df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * </p> 4719df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 4728d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device id. 4738d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 4748d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int getId() { 4758d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mId; 476c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 4779df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 4789df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown /** 479ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright * The controller number for a given input device. 480ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright * <p> 48110fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * Each gamepad or joystick is given a unique, positive controller number when initially 48210fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * configured by the system. This number may change due to events such as device disconnects / 48310fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * reconnects or user initiated reassignment. Any change in number will trigger an event that 48410fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * can be observed by registering an {@link InputManager.InputDeviceListener}. 48510fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * </p> 48610fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * <p> 48710fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * All input devices which are not gamepads or joysticks will be assigned a controller number 488ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright * of 0. 489ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright * </p> 49010fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * 49110fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * @return The controller number of the device. 492ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright */ 493ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright public int getControllerNumber() { 494ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright return mControllerNumber; 495ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright } 496ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright 497ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright /** 498ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * The set of identifying information for type of input device. This 499ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * information can be used by the system to configure appropriate settings 500ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * for the device. 501ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 502ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * @return The identifier object for this device 503ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * @hide 504ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik */ 505ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik public InputDeviceIdentifier getIdentifier() { 506ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik return mIdentifier; 507ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik } 508ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 509ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik /** 510af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * Gets a generation number for this input device. 511af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * The generation number is incremented whenever the device is reconfigured and its 512af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * properties may have changed. 513af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * 514af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * @return The generation number. 515af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * 516af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * @hide 517af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown */ 518af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown public int getGeneration() { 519af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown return mGeneration; 520af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown } 521af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown 522af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown /** 52354e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * Gets the vendor id for the given device, if available. 52454e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * <p> 52554e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * A vendor id uniquely identifies the company who manufactured the device. A value of 0 will 52654e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * be assigned where a vendor id is not available. 52754e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * </p> 52854e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * 52954e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * @return The vendor id of a given device 53054e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright */ 53154e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright public int getVendorId() { 53254e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright return mVendorId; 53354e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright } 53454e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright 53554e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright /** 53654e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * Gets the product id for the given device, if available. 53754e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * <p> 53854e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * A product id uniquely identifies which product within the address space of a given vendor, 53954e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * identified by the device's vendor id. A value of 0 will be assigned where a product id is 54054e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * not available. 54154e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * </p> 54254e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * 54354e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * @return The product id of a given device 54454e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright */ 54554e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright public int getProductId() { 54654e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright return mProductId; 54754e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright } 54854e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright 54954e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright /** 5509df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Gets the input device descriptor, which is a stable identifier for an input device. 5519df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * <p> 5529df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * An input device descriptor uniquely identifies an input device. Its value 5539df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * is intended to be persistent across system restarts, and should not change even 5549df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * if the input device is disconnected, reconnected or reconfigured at any time. 555e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * </p><p> 556e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * It is possible for there to be multiple {@link InputDevice} instances that have the 557e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * same input device descriptor. This might happen in situations where a single 558e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * human input device registers multiple {@link InputDevice} instances (HID collections) 559e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * that describe separate features of the device, such as a keyboard that also 560e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * has a trackpad. Alternately, it may be that the input devices are simply 561e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * indistinguishable, such as two keyboards made by the same manufacturer. 562e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * </p><p> 563daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * The input device descriptor returned by {@link #getDescriptor} should only be 564e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * used when an application needs to remember settings associated with a particular 565e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * input device. For all other purposes when referring to a logical 566e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * {@link InputDevice} instance at runtime use the id returned by {@link #getId()}. 5679df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * </p> 5689df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 5699df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * @return The input device descriptor. 5709df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown */ 5719df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown public String getDescriptor() { 572e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown return mDescriptor; 5739df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown } 5749df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 575c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 5769f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Returns true if the device is a virtual input device rather than a real one, 5779f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * such as the virtual keyboard (see {@link KeyCharacterMap#VIRTUAL_KEYBOARD}). 5789f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * <p> 5799f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Virtual input devices are provided to implement system-level functionality 5809f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * and should not be seen or configured by users. 5819f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * </p> 5829f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 5839f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @return True if the device is virtual. 5849f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 5859f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @see KeyCharacterMap#VIRTUAL_KEYBOARD 5869f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */ 5879f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public boolean isVirtual() { 5889f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mId < 0; 5899f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 5909f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 5919f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown /** 592daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * Returns true if the device is external (connected to USB or Bluetooth or some other 593daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * peripheral bus), otherwise it is built-in. 594daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * 595daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * @return True if the device is external. 596daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * 597daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * @hide 598daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown */ 599daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown public boolean isExternal() { 600daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown return mIsExternal; 601daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown } 602daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown 603daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown /** 6047e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * Returns true if the device is a full keyboard. 6057e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * 6067e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * @return True if the device is a full keyboard. 6077e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * 6087e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * @hide 6097e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown */ 6107e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown public boolean isFullKeyboard() { 6117e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown return (mSources & SOURCE_KEYBOARD) == SOURCE_KEYBOARD 6127e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown && mKeyboardType == KEYBOARD_TYPE_ALPHABETIC; 6137e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown } 6147e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown 6157e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown /** 616c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the name of this input device. 617c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The input device name. 618c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 619c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public String getName() { 620c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mName; 621c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 622ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 623c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 624c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the input sources supported by this input device as a combined bitfield. 625c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The supported input sources. 626c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 627c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public int getSources() { 628c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mSources; 629c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 630ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 631c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 632d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * Determines whether the input device supports the given source or sources. 633d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * 634d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * @param source The input source or sources to check against. This can be a generic device 635d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * type such as {@link InputDevice#SOURCE_MOUSE}, a more generic device class, such as 636d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * {@link InputDevice#SOURCE_CLASS_POINTER}, or a combination of sources bitwise ORed together. 637d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * @return Whether the device can produce all of the given sources. 638d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright */ 639d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright public boolean supportsSource(int source) { 640d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright return (mSources & source) == source; 641d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright } 642d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright 643d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright /** 6446d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * Gets the keyboard type. 6456d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * @return The keyboard type. 6466d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 6476d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public int getKeyboardType() { 6486d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return mKeyboardType; 6496d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown } 650ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 6516d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 652c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the key character map associated with this input device. 653c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The key character map. 654c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 655c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyCharacterMap getKeyCharacterMap() { 6569f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mKeyCharacterMap; 6571e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown } 6581e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown 659e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 660b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright * Gets whether the device is capable of producing the list of keycodes. 661b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright * @param keys The list of android keycodes to check for. 662b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright * @return An array of booleans where each member specifies whether the device is capable of 663b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright * generating the keycode given by the corresponding value at the same index in the keys array. 664b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright */ 665b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright public boolean[] hasKeys(int... keys) { 666b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright return InputManager.getInstance().deviceHasKeys(mId, keys); 667b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright } 668b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright 669b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright /** 67091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis. 671efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 672efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. Returns information about the first axis found for any source. 673efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * To obtain information about the axis for a specific source, use 674efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * {@link #getMotionRange(int, int)}. 675efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 67691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @param axis The axis constant. 67791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @return The range of values, or null if the requested axis is not 678e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * supported by the device. 67991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 68091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_X 68191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_Y 682e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 68391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public MotionRange getMotionRange(int axis) { 684efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 685efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 686efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 687efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis) { 688efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 689efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 690efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 691efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 692c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 69391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 6946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown /** 695efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis 696efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * used by a particular source on the device. 697efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 698efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. 699efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 700efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param axis The axis constant. 701efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param source The source for which to return information. 702efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The range of values, or null if the requested axis is not 703efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * supported by the device. 7046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * 705efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_X 706efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_Y 707efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 708efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public MotionRange getMotionRange(int axis, int source) { 709efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 710efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 711efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 712efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis && range.mSource == source) { 713efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 7146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 7156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 716efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 7176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 7186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown 719efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 720efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the ranges for all axes supported by the device. 721efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The motion ranges for the device. 722efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 723efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see #getMotionRange(int, int) 724efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 725efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public List<MotionRange> getMotionRanges() { 726efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mMotionRanges; 727efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 728efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 7299f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // Called from native code. 730efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private void addMotionRange(int axis, int source, 731c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright float min, float max, float flat, float fuzz, float resolution) { 732c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright mMotionRanges.add(new MotionRange(axis, source, min, max, flat, fuzz, resolution)); 733c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 73491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 735e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 736a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Gets the vibrator service associated with the device, if there is one. 737a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Even if the device does not have a vibrator, the result is never null. 738a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Use {@link Vibrator#hasVibrator} to determine whether a vibrator is 739a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * present. 740a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * 741a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Note that the vibrator associated with the device may be different from 742a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * the system vibrator. To obtain an instance of the system vibrator instead, call 743a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * {@link Context#getSystemService} with {@link Context#VIBRATOR_SERVICE} as argument. 744a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * 745a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * @return The vibrator service associated with the device, never null. 746a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown */ 747a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown public Vibrator getVibrator() { 748a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown synchronized (mMotionRanges) { 749a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown if (mVibrator == null) { 750a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown if (mHasVibrator) { 751a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mVibrator = InputManager.getInstance().getInputDeviceVibrator(mId); 752a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } else { 753a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mVibrator = NullVibrator.getInstance(); 754a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 755a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 756a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown return mVibrator; 757a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 758a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 759a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 760a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown /** 7616d85cf2bd7cba6890f1b2bb26073105c3b8fc432Tim Kilbourn * Reports whether the device has a built-in microphone. 7626d85cf2bd7cba6890f1b2bb26073105c3b8fc432Tim Kilbourn * @return Whether the device has a built-in microphone. 7636d85cf2bd7cba6890f1b2bb26073105c3b8fc432Tim Kilbourn */ 76472285e5600fad17c42730d6f84164d8425d4d43cTim Kilbourn public boolean hasMicrophone() { 76572285e5600fad17c42730d6f84164d8425d4d43cTim Kilbourn return mHasMicrophone; 7666d85cf2bd7cba6890f1b2bb26073105c3b8fc432Tim Kilbourn } 7676d85cf2bd7cba6890f1b2bb26073105c3b8fc432Tim Kilbourn 7686d85cf2bd7cba6890f1b2bb26073105c3b8fc432Tim Kilbourn /** 7697ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright * Reports whether the device has a button under its touchpad 7707ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright * @return Whether the device has a button under its touchpad 7717ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright * @hide 7727ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright */ 7737ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright public boolean hasButtonUnderPad() { 7747ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright return mHasButtonUnderPad; 7757ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright } 7767ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright 7777ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright /** 778f9d9ce7705475874c82af04eb9b208a7fb556792Michael Wright * Sets the current pointer type. 779f9d9ce7705475874c82af04eb9b208a7fb556792Michael Wright * @param pointerType the type of the pointer icon. 7801db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai * @hide 7811db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai */ 782f9d9ce7705475874c82af04eb9b208a7fb556792Michael Wright public void setPointerType(int pointerType) { 783f9d9ce7705475874c82af04eb9b208a7fb556792Michael Wright InputManager.getInstance().setPointerIconType(pointerType); 7841db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai } 7851db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai 7861db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai /** 787d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai * Specifies the current custom pointer. 788d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai * @param icon the icon data. 789d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai * @hide 790d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai */ 791d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai public void setCustomPointerIcon(PointerIcon icon) { 792d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai InputManager.getInstance().setCustomPointerIcon(icon); 793d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai } 794d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai 795d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai /** 79691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Provides information about the range of values for a particular {@link MotionEvent} axis. 79791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 79891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see InputDevice#getMotionRange(int) 799e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 800c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final class MotionRange { 801efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mAxis; 802efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mSource; 8038d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMin; 8048d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMax; 8058d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFlat; 8068d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFuzz; 807c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright private float mResolution; 80891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 809c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright private MotionRange(int axis, int source, float min, float max, float flat, float fuzz, 810c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright float resolution) { 811efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mAxis = axis; 812efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mSource = source; 8138d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMin = min; 8148d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMax = max; 8158d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFlat = flat; 8168d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFuzz = fuzz; 817c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright mResolution = resolution; 8188d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 81991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 820e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 821efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the axis id. 822efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The axis id. 823efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 824efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getAxis() { 825efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mAxis; 826efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 827efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 828efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 829efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the source for which the axis is defined. 830efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The source. 831efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 832efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getSource() { 833efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mSource; 834efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 835efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 83674e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright 83774e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright /** 83874e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * Determines whether the event is from the given source. 83974e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * 84074e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * @param source The input source to check against. This can be a specific device type, 84174e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * such as {@link InputDevice#SOURCE_TOUCH_NAVIGATION}, or a more generic device class, 84274e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * such as {@link InputDevice#SOURCE_CLASS_POINTER}. 84374e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * @return Whether the event is from the given source. 84474e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright */ 84574e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright public boolean isFromSource(int source) { 84674e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright return (getSource() & source) == source; 84774e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright } 84874e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright 849efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 8506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive minimum value for the axis. 8516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive minimum value. 852e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 853e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMin() { 8548d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMin; 855e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 85691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 857e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 8586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive maximum value for the axis. 8596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive maximum value. 860e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 861e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMax() { 8628d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMax; 863e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 86491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 865e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 8666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the range of the axis (difference between maximum and minimum). 867e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The range of values. 868e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 869e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getRange() { 8706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return mMax - mMin; 871e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 87291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 873e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 87491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the extent of the center flat position with respect to this axis. 8756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 876e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a flat value of 8 means that the center position is between -8 and +8. 877dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * This value is mainly useful for calibrating self-centering devices. 8786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 879e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The extent of the center flat position. 880e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 881e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFlat() { 8828d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFlat; 883e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 88491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 885e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 88691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the error tolerance for input device measurements with respect to this axis. 8876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 888e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a value of 2 indicates that the measured value may be up to +/- 2 units 889e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * away from the actual value due to noise and device sensitivity limitations. 8906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 891e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The error tolerance. 892e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 893e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFuzz() { 8948d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFuzz; 8958d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 896c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright 897c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright /** 898c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright * Gets the resolution for input device measurements with respect to this axis. 899c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright * @return The resolution in units per millimeter, or units per radian for rotational axes. 900c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright */ 901c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright public float getResolution() { 902c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright return mResolution; 903c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright } 9048d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 90591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 9068d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 9078d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public void writeToParcel(Parcel out, int flags) { 9088d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mId); 909af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown out.writeInt(mGeneration); 910ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright out.writeInt(mControllerNumber); 9118d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeString(mName); 91254e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright out.writeInt(mVendorId); 91354e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright out.writeInt(mProductId); 914e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown out.writeString(mDescriptor); 915daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown out.writeInt(mIsExternal ? 1 : 0); 9168d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mSources); 9178d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mKeyboardType); 9189f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap.writeToParcel(out, flags); 919a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown out.writeInt(mHasVibrator ? 1 : 0); 92072285e5600fad17c42730d6f84164d8425d4d43cTim Kilbourn out.writeInt(mHasMicrophone ? 1 : 0); 9217ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright out.writeInt(mHasButtonUnderPad ? 1 : 0); 92291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 923efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 924efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 925efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 926efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mAxis); 927efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mSource); 92891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMin); 92991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMax); 93091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFlat); 93191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFuzz); 932c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright out.writeFloat(range.mResolution); 9338d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 9348d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(-1); 9358d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 93691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 9378d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 9388d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int describeContents() { 9398d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return 0; 9408d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 94191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 9428d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 9438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public String toString() { 9448d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown StringBuilder description = new StringBuilder(); 9458d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("Input Device ").append(mId).append(": ").append(mName).append("\n"); 946e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown description.append(" Descriptor: ").append(mDescriptor).append("\n"); 947af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown description.append(" Generation: ").append(mGeneration).append("\n"); 948daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown description.append(" Location: ").append(mIsExternal ? "external" : "built-in").append("\n"); 949e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown 9508d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" Keyboard Type: "); 9518d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown switch (mKeyboardType) { 9528d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NONE: 9538d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("none"); 9548d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 9558d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NON_ALPHABETIC: 9568d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("non-alphabetic"); 9578d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 9588d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_ALPHABETIC: 9598d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("alphabetic"); 9608d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 9618d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 9628d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("\n"); 96391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 964a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown description.append(" Has Vibrator: ").append(mHasVibrator).append("\n"); 965a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 96672285e5600fad17c42730d6f84164d8425d4d43cTim Kilbourn description.append(" Has mic: ").append(mHasMicrophone).append("\n"); 9676d85cf2bd7cba6890f1b2bb26073105c3b8fc432Tim Kilbourn 968efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" Sources: 0x").append(Integer.toHexString(mSources)).append(" ("); 9698d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_KEYBOARD, "keyboard"); 9708d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_DPAD, "dpad"); 9718d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHSCREEN, "touchscreen"); 9728d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_MOUSE, "mouse"); 973fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_STYLUS, "stylus"); 9748d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TRACKBALL, "trackball"); 9758d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHPAD, "touchpad"); 97691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_JOYSTICK, "joystick"); 97791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_GAMEPAD, "gamepad"); 97891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" )\n"); 97991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 98091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown final int numAxes = mMotionRanges.size(); 98191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown for (int i = 0; i < numAxes; i++) { 982efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 983efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" ").append(MotionEvent.axisToString(range.mAxis)); 984efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(": source=0x").append(Integer.toHexString(range.mSource)); 985efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" min=").append(range.mMin); 98691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" max=").append(range.mMax); 98791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" flat=").append(range.mFlat); 98891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" fuzz=").append(range.mFuzz); 989c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright description.append(" resolution=").append(range.mResolution); 99091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append("\n"); 99191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 9928d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return description.toString(); 9938d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 99491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 9958d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void appendSourceDescriptionIfApplicable(StringBuilder description, int source, 9968d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown String sourceName) { 9978d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if ((mSources & source) == source) { 9988d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" "); 9998d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(sourceName); 10008d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 10018d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 1002c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown} 1003