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; 597ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright private final boolean mHasButtonUnderPad; 60efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private final ArrayList<MotionRange> mMotionRanges = new ArrayList<MotionRange>(); 6191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 62a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown private Vibrator mVibrator; // guarded by mMotionRanges during initialization 63a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 64c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 65c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A mask for input source classes. 66ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 67c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Each distinct input source constant has one or more input source class bits set to 68c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * specify the desired interpretation for its input events. 69c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 70c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_MASK = 0x000000ff; 71e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright 72e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright /** 73e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * The input source has no class. 74e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * 75e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * It is up to the application to determine how to handle the device based on the device type. 76e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright */ 77e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright public static final int SOURCE_CLASS_NONE = 0x00000000; 78e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright 79c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 80c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source has buttons or keys. 81dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Examples: {@link #SOURCE_KEYBOARD}, {@link #SOURCE_DPAD}. 82ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 83c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link KeyEvent} should be interpreted as a button or key press. 84ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 856eb5ac9ceeb3ff67d38c7ead54b4247e762f278dJeff Brown * Use {@link #getKeyCharacterMap} to query the device's button and key mappings. 86c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 87c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_BUTTON = 0x00000001; 88ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 89c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 90c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a pointing device associated with a display. 91c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TOUCHSCREEN}, {@link #SOURCE_MOUSE}. 92ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 93c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 94c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * display units according to the {@link View} hierarchy. Pointer down/up indicated when 95c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the finger touches the display or when the selection button is pressed/released. 96ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 97c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of the pointing device. Some devices permit 98c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touches outside the display area so the effective range may be somewhat smaller or larger 99c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * than the actual display size. 100c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 101c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POINTER = 0x00000002; 102ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 103c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 104c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball navigation device. 105c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TRACKBALL}. 106ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 107c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as relative movements in device-specific 108c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * units used for navigation purposes. Pointer down/up indicates when the selection button 109c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * is pressed/released. 110ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 111c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of motion. 112c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 113c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_TRACKBALL = 0x00000004; 114ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 115c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 116c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is an absolute positioning device not associated with a display 117c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (unlike {@link #SOURCE_CLASS_POINTER}). 118ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 119c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 120c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * device-specific surface units. 121ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 122c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of positions. 123c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 124c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POSITION = 0x00000008; 125cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 126cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 127cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 128cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 129cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * A {@link MotionEvent} should be interpreted as absolute joystick movements. 130cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 131cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * Use {@link #getMotionRange} to query the range of positions. 132cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 133cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_CLASS_JOYSTICK = 0x00000010; 134cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 135c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 136c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is unknown. 137c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 138c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_UNKNOWN = 0x00000000; 139ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 140c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 141c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a keyboard. 1429df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 1439df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * This source indicates pretty much anything that has buttons. Use 1449df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * {@link #getKeyboardType()} to determine whether the keyboard has alphabetic keys 1459df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * and can be used to enter text. 1469df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 147c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 148c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 149c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_KEYBOARD = 0x00000100 | SOURCE_CLASS_BUTTON; 150ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 151c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 152c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a DPad. 153ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 154c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 155c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 156c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_DPAD = 0x00000200 | SOURCE_CLASS_BUTTON; 157cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 158cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 159cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a game pad. 160cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_JOYSTICK}). 161cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 162cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_BUTTON 163cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 164cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_GAMEPAD = 0x00000400 | SOURCE_CLASS_BUTTON; 165cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 166c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 167c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch screen pointing device. 168ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 169c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 170c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 171c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHSCREEN = 0x00001000 | SOURCE_CLASS_POINTER; 172ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 173c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 174c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a mouse pointing device. 175c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * This code is also used for other mouse-like pointing devices such as trackpads 176c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * and trackpoints. 177ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 178c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 179c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 180c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_MOUSE = 0x00002000 | SOURCE_CLASS_POINTER; 181fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 182fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown /** 183fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The input source is a stylus pointing device. 18400710e906bdafd58386ee7f81fa84addd218122fJeff Brown * <p> 18500710e906bdafd58386ee7f81fa84addd218122fJeff Brown * Note that this bit merely indicates that an input device is capable of obtaining 18600710e906bdafd58386ee7f81fa84addd218122fJeff Brown * input from a stylus. To determine whether a given touch event was produced 18700710e906bdafd58386ee7f81fa84addd218122fJeff Brown * by a stylus, examine the tool type returned by {@link MotionEvent#getToolType(int)} 18800710e906bdafd58386ee7f81fa84addd218122fJeff Brown * for each individual pointer. 18900710e906bdafd58386ee7f81fa84addd218122fJeff Brown * </p><p> 19000710e906bdafd58386ee7f81fa84addd218122fJeff Brown * A single touch event may multiple pointers with different tool types, 19100710e906bdafd58386ee7f81fa84addd218122fJeff Brown * such as an event that has one pointer with tool type 19200710e906bdafd58386ee7f81fa84addd218122fJeff Brown * {@link MotionEvent#TOOL_TYPE_FINGER} and another pointer with tool type 19300710e906bdafd58386ee7f81fa84addd218122fJeff Brown * {@link MotionEvent#TOOL_TYPE_STYLUS}. So it is important to examine 19400710e906bdafd58386ee7f81fa84addd218122fJeff Brown * the tool type of each pointer, regardless of the source reported 19500710e906bdafd58386ee7f81fa84addd218122fJeff Brown * by {@link MotionEvent#getSource()}. 19600710e906bdafd58386ee7f81fa84addd218122fJeff Brown * </p> 197fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * 198fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * @see #SOURCE_CLASS_POINTER 199fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown */ 200fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown public static final int SOURCE_STYLUS = 0x00004000 | SOURCE_CLASS_POINTER; 201fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 202c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 203c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball. 204ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 205c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_TRACKBALL 206c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 207c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TRACKBALL = 0x00010000 | SOURCE_CLASS_TRACKBALL; 208ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 209c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 210c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch pad or digitizer tablet that is not 211e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * associated with a display (unlike {@link #SOURCE_TOUCHSCREEN}). 212ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 213c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POSITION 214c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 215c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHPAD = 0x00100000 | SOURCE_CLASS_POSITION; 216cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 217cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 218e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * The input source is a touch device whose motions should be interpreted as navigation events. 219e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * 220e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * For example, an upward swipe should be as an upward focus traversal in the same manner as 221e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * pressing up on a D-Pad would be. Swipes to the left, right and down should be treated in a 222e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * similar manner. 223e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * 224e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright * @see #SOURCE_CLASS_NONE 225e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright */ 226e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright public static final int SOURCE_TOUCH_NAVIGATION = 0x00200000 | SOURCE_CLASS_NONE; 227e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright 228e7a9ae8ba0fb7fc61960e3facd0c5534e9ffce1eMichael Wright /** 229cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 230cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_GAMEPAD}). 231cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 232cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_JOYSTICK 233cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 234cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_JOYSTICK = 0x01000000 | SOURCE_CLASS_JOYSTICK; 235cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 2366d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 23796658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * The input source is a device connected through HDMI-based bus. 23896658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * 23996658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * The key comes in through HDMI-CEC or MHL signal line, and is treated as if it were 24096658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim * generated by a locally connected DPAD or keyboard. 24196658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim */ 24296658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim public static final int SOURCE_HDMI = 0x02000000 | SOURCE_CLASS_BUTTON; 24396658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim 24496658f716779b4f2f5dd148cbf6df59d5a87ace4Jinsuk Kim /** 2456d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * A special input source constant that is used when filtering input devices 2466d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * to match devices that provide any type of input source. 2476d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2486d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int SOURCE_ANY = 0xffffff00; 249c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 250e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 25191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_X}. 252ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 253e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 25491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_X} instead. 255e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 25691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 25791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_X = MotionEvent.AXIS_X; 25891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 259e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 26091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_Y}. 261ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 262e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 26391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_Y} instead. 264e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 26591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 26691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_Y = MotionEvent.AXIS_Y; 26791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 268e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 26991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_PRESSURE}. 270ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 271e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 27291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_PRESSURE} instead. 273e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 27491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 27591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_PRESSURE = MotionEvent.AXIS_PRESSURE; 27691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 277e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 27891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_SIZE}. 279ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 280e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 28191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_SIZE} instead. 282e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 28391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 28491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_SIZE = MotionEvent.AXIS_SIZE; 28591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 286e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 28791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MAJOR}. 288ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 289e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 29091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MAJOR} instead. 291e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 29291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 29391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MAJOR = MotionEvent.AXIS_TOUCH_MAJOR; 29491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 295e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 29691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MINOR}. 297ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 298e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 29991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MINOR} instead. 300e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 30191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 30291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MINOR = MotionEvent.AXIS_TOUCH_MINOR; 30391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 304e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 30591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MAJOR}. 306ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 307e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 30891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MAJOR} instead. 309e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 31091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 31191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MAJOR = MotionEvent.AXIS_TOOL_MAJOR; 31291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 313e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 31491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MINOR}. 315ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 316e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 31791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MINOR} instead. 318e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 31991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 32091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MINOR = MotionEvent.AXIS_TOOL_MINOR; 32191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 322e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 32391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_ORIENTATION}. 324ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 325e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 32691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_ORIENTATION} instead. 327e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 32891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 32991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_ORIENTATION = MotionEvent.AXIS_ORIENTATION; 330ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 3316d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3326d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * There is no keyboard. 3336d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3346d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NONE = 0; 335ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 3366d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3376d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard is not fully alphabetic. It may be a numeric keypad or an assortment 3386d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * of buttons that are not mapped as alphabetic keys suitable for text input. 3396d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3406d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; 341ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 3426d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3436d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard supports a complement of alphabetic keys. 3446d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3456d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_ALPHABETIC = 2; 34691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 3479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public static final Parcelable.Creator<InputDevice> CREATOR = 3489f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown new Parcelable.Creator<InputDevice>() { 3499f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public InputDevice createFromParcel(Parcel in) { 3509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return new InputDevice(in); 3519f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3529f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public InputDevice[] newArray(int size) { 3539f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return new InputDevice[size]; 3549f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3559f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown }; 3569f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3578d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown // Called by native code. 35854e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright private InputDevice(int id, int generation, int controllerNumber, String name, int vendorId, 35954e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright int productId, String descriptor, boolean isExternal, int sources, int keyboardType, 360ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright KeyCharacterMap keyCharacterMap, boolean hasVibrator, boolean hasButtonUnderPad) { 3619f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mId = id; 362af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown mGeneration = generation; 363ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright mControllerNumber = controllerNumber; 3649f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mName = name; 36554e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright mVendorId = vendorId; 36654e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright mProductId = productId; 3679f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDescriptor = descriptor; 368daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown mIsExternal = isExternal; 3699f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mSources = sources; 3709f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyboardType = keyboardType; 3719f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = keyCharacterMap; 372a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mHasVibrator = hasVibrator; 3737ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright mHasButtonUnderPad = hasButtonUnderPad; 374ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik mIdentifier = new InputDeviceIdentifier(descriptor, vendorId, productId); 3759f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3769f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3779f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private InputDevice(Parcel in) { 3789f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mId = in.readInt(); 379af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown mGeneration = in.readInt(); 380ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright mControllerNumber = in.readInt(); 3819f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mName = in.readString(); 38254e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright mVendorId = in.readInt(); 38354e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright mProductId = in.readInt(); 3849f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDescriptor = in.readString(); 385daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown mIsExternal = in.readInt() != 0; 3869f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mSources = in.readInt(); 3879f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyboardType = in.readInt(); 3889f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = KeyCharacterMap.CREATOR.createFromParcel(in); 389a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mHasVibrator = in.readInt() != 0; 3907ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright mHasButtonUnderPad = in.readInt() != 0; 391ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik mIdentifier = new InputDeviceIdentifier(mDescriptor, mVendorId, mProductId); 3929f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3939f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown for (;;) { 3949f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int axis = in.readInt(); 3959f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown if (axis < 0) { 3969f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown break; 3979f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 398c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright addMotionRange(axis, in.readInt(), in.readFloat(), in.readFloat(), in.readFloat(), 399c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright in.readFloat(), in.readFloat()); 4009f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 4018d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 402e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 403e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 404e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets information about the input device with the specified id. 405e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @param id The device id. 406e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The input device or null if not found. 407e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 408c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static InputDevice getDevice(int id) { 4099f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return InputManager.getInstance().getInputDevice(id); 4108d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 411ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 4128d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 4138d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the ids of all input devices in the system. 4148d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device ids. 4158d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 4168d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public static int[] getDeviceIds() { 4179f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return InputManager.getInstance().getInputDeviceIds(); 4188d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4199df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 4208d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 4218d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the input device id. 4229df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * <p> 4239df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Each input device receives a unique id when it is first configured 4249df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * by the system. The input device id may change when the system is restarted or if the 4259df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * input device is disconnected, reconnected or reconfigured at any time. 4269df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * If you require a stable identifier for a device that persists across 4279df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * boots and reconfigurations, use {@link #getDescriptor()}. 4289df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * </p> 4299df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 4308d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device id. 4318d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 4328d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int getId() { 4338d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mId; 434c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 4359df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 4369df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown /** 437ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright * The controller number for a given input device. 438ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright * <p> 43910fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * Each gamepad or joystick is given a unique, positive controller number when initially 44010fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * configured by the system. This number may change due to events such as device disconnects / 44110fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * reconnects or user initiated reassignment. Any change in number will trigger an event that 44210fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * can be observed by registering an {@link InputManager.InputDeviceListener}. 44310fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * </p> 44410fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * <p> 44510fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * All input devices which are not gamepads or joysticks will be assigned a controller number 446ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright * of 0. 447ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright * </p> 44810fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * 44910fac45b6f620ac2ef242e983c3b4d6ad85eb223Michael Wright * @return The controller number of the device. 450ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright */ 451ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright public int getControllerNumber() { 452ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright return mControllerNumber; 453ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright } 454ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright 455ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright /** 456ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * The set of identifying information for type of input device. This 457ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * information can be used by the system to configure appropriate settings 458ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * for the device. 459ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * 460ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * @return The identifier object for this device 461ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik * @hide 462ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik */ 463ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik public InputDeviceIdentifier getIdentifier() { 464ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik return mIdentifier; 465ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik } 466ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 467ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik /** 468af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * Gets a generation number for this input device. 469af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * The generation number is incremented whenever the device is reconfigured and its 470af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * properties may have changed. 471af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * 472af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * @return The generation number. 473af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * 474af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * @hide 475af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown */ 476af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown public int getGeneration() { 477af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown return mGeneration; 478af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown } 479af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown 480af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown /** 48154e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * Gets the vendor id for the given device, if available. 48254e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * <p> 48354e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * A vendor id uniquely identifies the company who manufactured the device. A value of 0 will 48454e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * be assigned where a vendor id is not available. 48554e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * </p> 48654e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * 48754e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * @return The vendor id of a given device 48854e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright */ 48954e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright public int getVendorId() { 49054e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright return mVendorId; 49154e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright } 49254e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright 49354e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright /** 49454e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * Gets the product id for the given device, if available. 49554e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * <p> 49654e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * A product id uniquely identifies which product within the address space of a given vendor, 49754e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * identified by the device's vendor id. A value of 0 will be assigned where a product id is 49854e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * not available. 49954e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * </p> 50054e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * 50154e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright * @return The product id of a given device 50254e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright */ 50354e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright public int getProductId() { 50454e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright return mProductId; 50554e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright } 50654e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright 50754e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright /** 5089df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Gets the input device descriptor, which is a stable identifier for an input device. 5099df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * <p> 5109df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * An input device descriptor uniquely identifies an input device. Its value 5119df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * is intended to be persistent across system restarts, and should not change even 5129df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * if the input device is disconnected, reconnected or reconfigured at any time. 513e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * </p><p> 514e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * It is possible for there to be multiple {@link InputDevice} instances that have the 515e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * same input device descriptor. This might happen in situations where a single 516e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * human input device registers multiple {@link InputDevice} instances (HID collections) 517e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * that describe separate features of the device, such as a keyboard that also 518e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * has a trackpad. Alternately, it may be that the input devices are simply 519e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * indistinguishable, such as two keyboards made by the same manufacturer. 520e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * </p><p> 521daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * The input device descriptor returned by {@link #getDescriptor} should only be 522e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * used when an application needs to remember settings associated with a particular 523e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * input device. For all other purposes when referring to a logical 524e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * {@link InputDevice} instance at runtime use the id returned by {@link #getId()}. 5259df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * </p> 5269df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 5279df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * @return The input device descriptor. 5289df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown */ 5299df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown public String getDescriptor() { 530e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown return mDescriptor; 5319df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown } 5329df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 533c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 5349f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Returns true if the device is a virtual input device rather than a real one, 5359f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * such as the virtual keyboard (see {@link KeyCharacterMap#VIRTUAL_KEYBOARD}). 5369f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * <p> 5379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Virtual input devices are provided to implement system-level functionality 5389f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * and should not be seen or configured by users. 5399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * </p> 5409f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 5419f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @return True if the device is virtual. 5429f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 5439f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @see KeyCharacterMap#VIRTUAL_KEYBOARD 5449f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */ 5459f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public boolean isVirtual() { 5469f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mId < 0; 5479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 5489f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 5499f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown /** 550daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * Returns true if the device is external (connected to USB or Bluetooth or some other 551daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * peripheral bus), otherwise it is built-in. 552daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * 553daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * @return True if the device is external. 554daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * 555daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * @hide 556daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown */ 557daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown public boolean isExternal() { 558daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown return mIsExternal; 559daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown } 560daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown 561daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown /** 5627e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * Returns true if the device is a full keyboard. 5637e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * 5647e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * @return True if the device is a full keyboard. 5657e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * 5667e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * @hide 5677e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown */ 5687e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown public boolean isFullKeyboard() { 5697e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown return (mSources & SOURCE_KEYBOARD) == SOURCE_KEYBOARD 5707e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown && mKeyboardType == KEYBOARD_TYPE_ALPHABETIC; 5717e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown } 5727e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown 5737e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown /** 574c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the name of this input device. 575c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The input device name. 576c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 577c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public String getName() { 578c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mName; 579c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 580ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 581c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 582c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the input sources supported by this input device as a combined bitfield. 583c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The supported input sources. 584c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 585c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public int getSources() { 586c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mSources; 587c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 588ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 589c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 590d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * Determines whether the input device supports the given source or sources. 591d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * 592d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * @param source The input source or sources to check against. This can be a generic device 593d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * type such as {@link InputDevice#SOURCE_MOUSE}, a more generic device class, such as 594d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * {@link InputDevice#SOURCE_CLASS_POINTER}, or a combination of sources bitwise ORed together. 595d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright * @return Whether the device can produce all of the given sources. 596d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright */ 597d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright public boolean supportsSource(int source) { 598d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright return (mSources & source) == source; 599d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright } 600d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright 601d08c864784b5d416805aee502e5294b0188a7bd8Michael Wright /** 6026d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * Gets the keyboard type. 6036d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * @return The keyboard type. 6046d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 6056d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public int getKeyboardType() { 6066d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return mKeyboardType; 6076d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown } 608ca9eef6203b7cfb0084f8305d4dcc5d70a7a25cdRoboErik 6096d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 610c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the key character map associated with this input device. 611c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The key character map. 612c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 613c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyCharacterMap getKeyCharacterMap() { 6149f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mKeyCharacterMap; 6151e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown } 6161e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown 617e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 618b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright * Gets whether the device is capable of producing the list of keycodes. 619b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright * @param keys The list of android keycodes to check for. 620b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright * @return An array of booleans where each member specifies whether the device is capable of 621b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright * generating the keycode given by the corresponding value at the same index in the keys array. 622b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright */ 623b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright public boolean[] hasKeys(int... keys) { 624b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright return InputManager.getInstance().deviceHasKeys(mId, keys); 625b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright } 626b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright 627b7b2d4b490f5dd672e0b00ced579dc052e3637e9Michael Wright /** 62891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis. 629efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 630efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. Returns information about the first axis found for any source. 631efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * To obtain information about the axis for a specific source, use 632efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * {@link #getMotionRange(int, int)}. 633efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 63491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @param axis The axis constant. 63591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @return The range of values, or null if the requested axis is not 636e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * supported by the device. 63791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 63891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_X 63991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_Y 640e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 64191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public MotionRange getMotionRange(int axis) { 642efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 643efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 644efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 645efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis) { 646efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 647efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 648efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 649efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 650c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 65191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 6526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown /** 653efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis 654efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * used by a particular source on the device. 655efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 656efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. 657efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 658efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param axis The axis constant. 659efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param source The source for which to return information. 660efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The range of values, or null if the requested axis is not 661efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * supported by the device. 6626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * 663efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_X 664efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_Y 665efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 666efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public MotionRange getMotionRange(int axis, int source) { 667efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 668efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 669efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 670efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis && range.mSource == source) { 671efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 6726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 6736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 674efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 6756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 6766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown 677efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 678efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the ranges for all axes supported by the device. 679efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The motion ranges for the device. 680efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 681efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see #getMotionRange(int, int) 682efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 683efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public List<MotionRange> getMotionRanges() { 684efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mMotionRanges; 685efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 686efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 6879f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // Called from native code. 688efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private void addMotionRange(int axis, int source, 689c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright float min, float max, float flat, float fuzz, float resolution) { 690c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright mMotionRanges.add(new MotionRange(axis, source, min, max, flat, fuzz, resolution)); 691c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 69291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 693e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 694a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Gets the vibrator service associated with the device, if there is one. 695a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Even if the device does not have a vibrator, the result is never null. 696a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Use {@link Vibrator#hasVibrator} to determine whether a vibrator is 697a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * present. 698a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * 699a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Note that the vibrator associated with the device may be different from 700a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * the system vibrator. To obtain an instance of the system vibrator instead, call 701a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * {@link Context#getSystemService} with {@link Context#VIBRATOR_SERVICE} as argument. 702a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * 703a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * @return The vibrator service associated with the device, never null. 704a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown */ 705a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown public Vibrator getVibrator() { 706a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown synchronized (mMotionRanges) { 707a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown if (mVibrator == null) { 708a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown if (mHasVibrator) { 709a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mVibrator = InputManager.getInstance().getInputDeviceVibrator(mId); 710a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } else { 711a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mVibrator = NullVibrator.getInstance(); 712a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 713a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 714a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown return mVibrator; 715a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 716a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 717a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 718a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown /** 7197ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright * Reports whether the device has a button under its touchpad 7207ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright * @return Whether the device has a button under its touchpad 7217ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright * @hide 7227ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright */ 7237ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright public boolean hasButtonUnderPad() { 7247ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright return mHasButtonUnderPad; 7257ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright } 7267ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright 7277ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright /** 72891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Provides information about the range of values for a particular {@link MotionEvent} axis. 72991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 73091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see InputDevice#getMotionRange(int) 731e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 732c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final class MotionRange { 733efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mAxis; 734efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mSource; 7358d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMin; 7368d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMax; 7378d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFlat; 7388d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFuzz; 739c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright private float mResolution; 74091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 741c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright private MotionRange(int axis, int source, float min, float max, float flat, float fuzz, 742c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright float resolution) { 743efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mAxis = axis; 744efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mSource = source; 7458d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMin = min; 7468d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMax = max; 7478d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFlat = flat; 7488d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFuzz = fuzz; 749c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright mResolution = resolution; 7508d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 75191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 752e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 753efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the axis id. 754efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The axis id. 755efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 756efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getAxis() { 757efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mAxis; 758efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 759efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 760efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 761efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the source for which the axis is defined. 762efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The source. 763efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 764efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getSource() { 765efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mSource; 766efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 767efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 76874e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright 76974e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright /** 77074e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * Determines whether the event is from the given source. 77174e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * 77274e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * @param source The input source to check against. This can be a specific device type, 77374e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * such as {@link InputDevice#SOURCE_TOUCH_NAVIGATION}, or a more generic device class, 77474e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * such as {@link InputDevice#SOURCE_CLASS_POINTER}. 77574e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright * @return Whether the event is from the given source. 77674e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright */ 77774e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright public boolean isFromSource(int source) { 77874e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright return (getSource() & source) == source; 77974e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright } 78074e4156e5c62392c37f4a70358de30dcfff4956fMichael Wright 781efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 7826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive minimum value for the axis. 7836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive minimum value. 784e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 785e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMin() { 7868d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMin; 787e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 78891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 789e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 7906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive maximum value for the axis. 7916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive maximum value. 792e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 793e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMax() { 7948d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMax; 795e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 79691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 797e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 7986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the range of the axis (difference between maximum and minimum). 799e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The range of values. 800e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 801e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getRange() { 8026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return mMax - mMin; 803e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 80491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 805e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 80691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the extent of the center flat position with respect to this axis. 8076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 808e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a flat value of 8 means that the center position is between -8 and +8. 809dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * This value is mainly useful for calibrating self-centering devices. 8106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 811e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The extent of the center flat position. 812e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 813e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFlat() { 8148d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFlat; 815e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 81691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 817e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 81891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the error tolerance for input device measurements with respect to this axis. 8196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 820e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a value of 2 indicates that the measured value may be up to +/- 2 units 821e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * away from the actual value due to noise and device sensitivity limitations. 8226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 823e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The error tolerance. 824e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 825e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFuzz() { 8268d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFuzz; 8278d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 828c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright 829c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright /** 830c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright * Gets the resolution for input device measurements with respect to this axis. 831c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright * @return The resolution in units per millimeter, or units per radian for rotational axes. 832c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright */ 833c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright public float getResolution() { 834c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright return mResolution; 835c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright } 8368d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 83791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 8388d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 8398d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public void writeToParcel(Parcel out, int flags) { 8408d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mId); 841af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown out.writeInt(mGeneration); 842ac6c78b6eef49f5c1ab2a346d90ccb99ccec18f4Michael Wright out.writeInt(mControllerNumber); 8438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeString(mName); 84454e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright out.writeInt(mVendorId); 84554e56946d1aa3586e7b27fb63dfb7d3c1238c61dMichael Wright out.writeInt(mProductId); 846e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown out.writeString(mDescriptor); 847daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown out.writeInt(mIsExternal ? 1 : 0); 8488d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mSources); 8498d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mKeyboardType); 8509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap.writeToParcel(out, flags); 851a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown out.writeInt(mHasVibrator ? 1 : 0); 8527ddd11035b25b0a2dbf09f9d9efd3fca701f0a79Michael Wright out.writeInt(mHasButtonUnderPad ? 1 : 0); 85391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 854efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 855efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 856efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 857efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mAxis); 858efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mSource); 85991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMin); 86091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMax); 86191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFlat); 86291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFuzz); 863c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright out.writeFloat(range.mResolution); 8648d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 8658d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(-1); 8668d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 86791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 8688d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 8698d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int describeContents() { 8708d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return 0; 8718d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 87291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 8738d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 8748d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public String toString() { 8758d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown StringBuilder description = new StringBuilder(); 8768d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("Input Device ").append(mId).append(": ").append(mName).append("\n"); 877e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown description.append(" Descriptor: ").append(mDescriptor).append("\n"); 878af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown description.append(" Generation: ").append(mGeneration).append("\n"); 879daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown description.append(" Location: ").append(mIsExternal ? "external" : "built-in").append("\n"); 880e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown 8818d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" Keyboard Type: "); 8828d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown switch (mKeyboardType) { 8838d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NONE: 8848d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("none"); 8858d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 8868d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NON_ALPHABETIC: 8878d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("non-alphabetic"); 8888d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 8898d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_ALPHABETIC: 8908d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("alphabetic"); 8918d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 8928d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 8938d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("\n"); 89491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 895a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown description.append(" Has Vibrator: ").append(mHasVibrator).append("\n"); 896a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 897efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" Sources: 0x").append(Integer.toHexString(mSources)).append(" ("); 8988d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_KEYBOARD, "keyboard"); 8998d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_DPAD, "dpad"); 9008d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHSCREEN, "touchscreen"); 9018d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_MOUSE, "mouse"); 902fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_STYLUS, "stylus"); 9038d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TRACKBALL, "trackball"); 9048d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHPAD, "touchpad"); 90591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_JOYSTICK, "joystick"); 90691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_GAMEPAD, "gamepad"); 90791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" )\n"); 90891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 90991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown final int numAxes = mMotionRanges.size(); 91091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown for (int i = 0; i < numAxes; i++) { 911efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 912efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" ").append(MotionEvent.axisToString(range.mAxis)); 913efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(": source=0x").append(Integer.toHexString(range.mSource)); 914efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" min=").append(range.mMin); 91591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" max=").append(range.mMax); 91691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" flat=").append(range.mFlat); 91791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" fuzz=").append(range.mFuzz); 918c6091c64c90e9557ea58e0d7cf75915aea7c6c3eMichael Wright description.append(" resolution=").append(range.mResolution); 91991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append("\n"); 92091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 9218d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return description.toString(); 9228d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 92391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 9248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void appendSourceDescriptionIfApplicable(StringBuilder description, int source, 9258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown String sourceName) { 9268d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if ((mSources & source) == source) { 9278d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" "); 9288d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(sourceName); 9298d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 9308d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 931c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown} 932