1c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown/* 2c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Copyright (C) 2010 The Android Open Source Project 3c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 4c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * you may not use this file except in compliance with the License. 6c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * You may obtain a copy of the License at 7c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 8c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 10c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Unless required by applicable law or agreed to in writing, software 11c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * See the License for the specific language governing permissions and 14c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * limitations under the License. 15c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 16c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 17c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brownpackage android.view; 18c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 19a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brownimport android.content.Context; 20ac14351e16e1258f1cb54e2bf772b8be004eb2b8Jeff Brownimport android.hardware.input.InputManager; 218d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.Parcel; 228d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.Parcelable; 23a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brownimport android.os.Vibrator; 24a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brownimport android.os.NullVibrator; 25efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 26efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brownimport java.util.ArrayList; 27efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brownimport java.util.List; 288d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 29c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown/** 30c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Describes the capabilities of a particular input device. 31c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * <p> 329df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Each input device may support multiple classes of input. For example, a multi-function 33c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * keyboard may compose the capabilities of a standard keyboard together with a track pad mouse 34c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * or other pointing device. 35c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p> 36dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Some input devices present multiple distinguishable sources of input. 37c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Applications can query the framework about the characteristics of each distinct source. 38c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p> 39c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * As a further wrinkle, different kinds of input sources uses different coordinate systems 40c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * to describe motion events. Refer to the comments on the input source constants for 41c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the appropriate interpretation. 426d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * </p> 43c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 448d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownpublic final class InputDevice implements Parcelable { 459f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mId; 46af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown private final int mGeneration; 479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final String mName; 489f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final String mDescriptor; 49daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown private final boolean mIsExternal; 509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mSources; 519f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mKeyboardType; 529f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final KeyCharacterMap mKeyCharacterMap; 53a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown private final boolean mHasVibrator; 54efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private final ArrayList<MotionRange> mMotionRanges = new ArrayList<MotionRange>(); 5591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 56a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown private Vibrator mVibrator; // guarded by mMotionRanges during initialization 57a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 58c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 59c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A mask for input source classes. 60c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 61c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Each distinct input source constant has one or more input source class bits set to 62c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * specify the desired interpretation for its input events. 63c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 64c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_MASK = 0x000000ff; 65c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 66c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 67c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source has buttons or keys. 68dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Examples: {@link #SOURCE_KEYBOARD}, {@link #SOURCE_DPAD}. 69c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 70c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link KeyEvent} should be interpreted as a button or key press. 71c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 726eb5ac9ceeb3ff67d38c7ead54b4247e762f278dJeff Brown * Use {@link #getKeyCharacterMap} to query the device's button and key mappings. 73c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 74c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_BUTTON = 0x00000001; 75c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 76c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 77c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a pointing device associated with a display. 78c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TOUCHSCREEN}, {@link #SOURCE_MOUSE}. 79c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 80c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 81c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * display units according to the {@link View} hierarchy. Pointer down/up indicated when 82c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the finger touches the display or when the selection button is pressed/released. 83c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 84c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of the pointing device. Some devices permit 85c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touches outside the display area so the effective range may be somewhat smaller or larger 86c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * than the actual display size. 87c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 88c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POINTER = 0x00000002; 89c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 90c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 91c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball navigation device. 92c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TRACKBALL}. 93c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 94c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as relative movements in device-specific 95c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * units used for navigation purposes. Pointer down/up indicates when the selection button 96c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * is pressed/released. 97c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 98c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of motion. 99c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 100c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_TRACKBALL = 0x00000004; 101c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 102c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 103c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is an absolute positioning device not associated with a display 104c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (unlike {@link #SOURCE_CLASS_POINTER}). 105c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 106c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 107c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * device-specific surface units. 108c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 109c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of positions. 110c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 111c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POSITION = 0x00000008; 112cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 113cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 114cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 115cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 116cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * A {@link MotionEvent} should be interpreted as absolute joystick movements. 117cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 118cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * Use {@link #getMotionRange} to query the range of positions. 119cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 120cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_CLASS_JOYSTICK = 0x00000010; 121cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 122c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 123c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is unknown. 124c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 125c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_UNKNOWN = 0x00000000; 126c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 127c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 128c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a keyboard. 1299df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 1309df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * This source indicates pretty much anything that has buttons. Use 1319df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * {@link #getKeyboardType()} to determine whether the keyboard has alphabetic keys 1329df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * and can be used to enter text. 1339df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 134c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 135c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 136c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_KEYBOARD = 0x00000100 | SOURCE_CLASS_BUTTON; 137c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 138c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 139c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a DPad. 140c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 141c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 142c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 143c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_DPAD = 0x00000200 | SOURCE_CLASS_BUTTON; 144cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 145cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 146cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a game pad. 147cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_JOYSTICK}). 148cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 149cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_BUTTON 150cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 151cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_GAMEPAD = 0x00000400 | SOURCE_CLASS_BUTTON; 152cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 153c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 154c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch screen pointing device. 155c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 156c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 157c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 158c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHSCREEN = 0x00001000 | SOURCE_CLASS_POINTER; 159c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 160c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 161c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a mouse pointing device. 162c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * This code is also used for other mouse-like pointing devices such as trackpads 163c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * and trackpoints. 164c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 165c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 166c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 167c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_MOUSE = 0x00002000 | SOURCE_CLASS_POINTER; 168fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 169fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown /** 170fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The input source is a stylus pointing device. 17100710e906bdafd58386ee7f81fa84addd218122fJeff Brown * <p> 17200710e906bdafd58386ee7f81fa84addd218122fJeff Brown * Note that this bit merely indicates that an input device is capable of obtaining 17300710e906bdafd58386ee7f81fa84addd218122fJeff Brown * input from a stylus. To determine whether a given touch event was produced 17400710e906bdafd58386ee7f81fa84addd218122fJeff Brown * by a stylus, examine the tool type returned by {@link MotionEvent#getToolType(int)} 17500710e906bdafd58386ee7f81fa84addd218122fJeff Brown * for each individual pointer. 17600710e906bdafd58386ee7f81fa84addd218122fJeff Brown * </p><p> 17700710e906bdafd58386ee7f81fa84addd218122fJeff Brown * A single touch event may multiple pointers with different tool types, 17800710e906bdafd58386ee7f81fa84addd218122fJeff Brown * such as an event that has one pointer with tool type 17900710e906bdafd58386ee7f81fa84addd218122fJeff Brown * {@link MotionEvent#TOOL_TYPE_FINGER} and another pointer with tool type 18000710e906bdafd58386ee7f81fa84addd218122fJeff Brown * {@link MotionEvent#TOOL_TYPE_STYLUS}. So it is important to examine 18100710e906bdafd58386ee7f81fa84addd218122fJeff Brown * the tool type of each pointer, regardless of the source reported 18200710e906bdafd58386ee7f81fa84addd218122fJeff Brown * by {@link MotionEvent#getSource()}. 18300710e906bdafd58386ee7f81fa84addd218122fJeff Brown * </p> 184fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * 185fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * @see #SOURCE_CLASS_POINTER 186fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown */ 187fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown public static final int SOURCE_STYLUS = 0x00004000 | SOURCE_CLASS_POINTER; 188fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 189c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 190c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball. 191c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 192c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_TRACKBALL 193c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 194c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TRACKBALL = 0x00010000 | SOURCE_CLASS_TRACKBALL; 195c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 196c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 197c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch pad or digitizer tablet that is not 198e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * associated with a display (unlike {@link #SOURCE_TOUCHSCREEN}). 199c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 200c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POSITION 201c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 202c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHPAD = 0x00100000 | SOURCE_CLASS_POSITION; 203cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 204cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 205cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 206cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_GAMEPAD}). 207cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 208cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_JOYSTICK 209cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 210cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_JOYSTICK = 0x01000000 | SOURCE_CLASS_JOYSTICK; 211cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 2126d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2136d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * A special input source constant that is used when filtering input devices 2146d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * to match devices that provide any type of input source. 2156d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2166d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int SOURCE_ANY = 0xffffff00; 217c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 218e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 21991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_X}. 220e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 221e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 22291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_X} instead. 223e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 22491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 22591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_X = MotionEvent.AXIS_X; 22691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 227e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 22891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_Y}. 229e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 230e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 23191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_Y} instead. 232e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 23391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 23491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_Y = MotionEvent.AXIS_Y; 23591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 236e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 23791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_PRESSURE}. 238e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 239e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 24091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_PRESSURE} instead. 241e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 24291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 24391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_PRESSURE = MotionEvent.AXIS_PRESSURE; 24491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 245e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 24691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_SIZE}. 247e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 248e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 24991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_SIZE} instead. 250e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 25191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 25291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_SIZE = MotionEvent.AXIS_SIZE; 25391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 254e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 25591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MAJOR}. 256e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 257e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 25891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MAJOR} instead. 259e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 26091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 26191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MAJOR = MotionEvent.AXIS_TOUCH_MAJOR; 26291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 263e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 26491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MINOR}. 265e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 266e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 26791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MINOR} instead. 268e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 26991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 27091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MINOR = MotionEvent.AXIS_TOUCH_MINOR; 27191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 272e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 27391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MAJOR}. 274e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 275e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 27691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MAJOR} instead. 277e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 27891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 27991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MAJOR = MotionEvent.AXIS_TOOL_MAJOR; 28091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 281e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 28291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MINOR}. 283e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 284e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 28591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MINOR} instead. 286e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 28791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 28891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MINOR = MotionEvent.AXIS_TOOL_MINOR; 28991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 290e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 29191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_ORIENTATION}. 292e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 293e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 29491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_ORIENTATION} instead. 295e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 29691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 29791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_ORIENTATION = MotionEvent.AXIS_ORIENTATION; 2988d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 2996d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3006d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * There is no keyboard. 3016d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3026d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NONE = 0; 3036d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 3046d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3056d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard is not fully alphabetic. It may be a numeric keypad or an assortment 3066d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * of buttons that are not mapped as alphabetic keys suitable for text input. 3076d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3086d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; 3096d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 3106d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 3116d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard supports a complement of alphabetic keys. 3126d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3136d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_ALPHABETIC = 2; 31491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 3159f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public static final Parcelable.Creator<InputDevice> CREATOR = 3169f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown new Parcelable.Creator<InputDevice>() { 3179f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public InputDevice createFromParcel(Parcel in) { 3189f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return new InputDevice(in); 3199f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3209f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public InputDevice[] newArray(int size) { 3219f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return new InputDevice[size]; 3229f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3239f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown }; 3249f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown // Called by native code. 326daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown private InputDevice(int id, int generation, String name, String descriptor, 327daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown boolean isExternal, int sources, 328a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown int keyboardType, KeyCharacterMap keyCharacterMap, boolean hasVibrator) { 3299f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mId = id; 330af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown mGeneration = generation; 3319f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mName = name; 3329f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDescriptor = descriptor; 333daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown mIsExternal = isExternal; 3349f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mSources = sources; 3359f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyboardType = keyboardType; 3369f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = keyCharacterMap; 337a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mHasVibrator = hasVibrator; 3389f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3409f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private InputDevice(Parcel in) { 3419f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mId = in.readInt(); 342af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown mGeneration = in.readInt(); 3439f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mName = in.readString(); 3449f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDescriptor = in.readString(); 345daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown mIsExternal = in.readInt() != 0; 3469f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mSources = in.readInt(); 3479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyboardType = in.readInt(); 3489f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = KeyCharacterMap.CREATOR.createFromParcel(in); 349a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mHasVibrator = in.readInt() != 0; 3509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3519f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown for (;;) { 3529f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int axis = in.readInt(); 3539f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown if (axis < 0) { 3549f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown break; 3559f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3569f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown addMotionRange(axis, in.readInt(), 3579f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown in.readFloat(), in.readFloat(), in.readFloat(), in.readFloat()); 3589f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3598d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 360e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 361e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 362e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets information about the input device with the specified id. 363e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @param id The device id. 364e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The input device or null if not found. 365e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 366c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static InputDevice getDevice(int id) { 3679f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return InputManager.getInstance().getInputDevice(id); 3688d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3698d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 3708d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 3718d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the ids of all input devices in the system. 3728d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device ids. 3738d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 3748d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public static int[] getDeviceIds() { 3759f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return InputManager.getInstance().getInputDeviceIds(); 3768d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3779df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 3788d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 3798d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the input device id. 3809df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * <p> 3819df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Each input device receives a unique id when it is first configured 3829df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * by the system. The input device id may change when the system is restarted or if the 3839df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * input device is disconnected, reconnected or reconfigured at any time. 3849df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * If you require a stable identifier for a device that persists across 3859df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * boots and reconfigurations, use {@link #getDescriptor()}. 3869df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * </p> 3879df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 3888d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device id. 3898d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 3908d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int getId() { 3918d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mId; 392c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 3939df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 3949df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown /** 395af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * Gets a generation number for this input device. 396af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * The generation number is incremented whenever the device is reconfigured and its 397af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * properties may have changed. 398af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * 399af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * @return The generation number. 400af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * 401af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown * @hide 402af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown */ 403af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown public int getGeneration() { 404af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown return mGeneration; 405af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown } 406af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown 407af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown /** 4089df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Gets the input device descriptor, which is a stable identifier for an input device. 4099df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * <p> 4109df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * An input device descriptor uniquely identifies an input device. Its value 4119df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * is intended to be persistent across system restarts, and should not change even 4129df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * if the input device is disconnected, reconnected or reconfigured at any time. 413e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * </p><p> 414e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * It is possible for there to be multiple {@link InputDevice} instances that have the 415e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * same input device descriptor. This might happen in situations where a single 416e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * human input device registers multiple {@link InputDevice} instances (HID collections) 417e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * that describe separate features of the device, such as a keyboard that also 418e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * has a trackpad. Alternately, it may be that the input devices are simply 419e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * indistinguishable, such as two keyboards made by the same manufacturer. 420e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * </p><p> 421daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * The input device descriptor returned by {@link #getDescriptor} should only be 422e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * used when an application needs to remember settings associated with a particular 423e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * input device. For all other purposes when referring to a logical 424e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * {@link InputDevice} instance at runtime use the id returned by {@link #getId()}. 4259df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * </p> 4269df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 4279df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * @return The input device descriptor. 4289df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown */ 4299df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown public String getDescriptor() { 430e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown return mDescriptor; 4319df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown } 4329df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 433c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 4349f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Returns true if the device is a virtual input device rather than a real one, 4359f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * such as the virtual keyboard (see {@link KeyCharacterMap#VIRTUAL_KEYBOARD}). 4369f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * <p> 4379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Virtual input devices are provided to implement system-level functionality 4389f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * and should not be seen or configured by users. 4399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * </p> 4409f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 4419f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @return True if the device is virtual. 4429f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 4439f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @see KeyCharacterMap#VIRTUAL_KEYBOARD 4449f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */ 4459f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public boolean isVirtual() { 4469f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mId < 0; 4479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 4489f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 4499f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown /** 450daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * Returns true if the device is external (connected to USB or Bluetooth or some other 451daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * peripheral bus), otherwise it is built-in. 452daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * 453daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * @return True if the device is external. 454daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * 455daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown * @hide 456daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown */ 457daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown public boolean isExternal() { 458daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown return mIsExternal; 459daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown } 460daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown 461daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown /** 4627e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * Returns true if the device is a full keyboard. 4637e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * 4647e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * @return True if the device is a full keyboard. 4657e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * 4667e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown * @hide 4677e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown */ 4687e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown public boolean isFullKeyboard() { 4697e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown return (mSources & SOURCE_KEYBOARD) == SOURCE_KEYBOARD 4707e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown && mKeyboardType == KEYBOARD_TYPE_ALPHABETIC; 4717e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown } 4727e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown 4737e4ff4b986d626493afb676dd4824d2b3663260aJeff Brown /** 474c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the name of this input device. 475c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The input device name. 476c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 477c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public String getName() { 478c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mName; 479c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 480c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 481c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 482c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the input sources supported by this input device as a combined bitfield. 483c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The supported input sources. 484c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 485c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public int getSources() { 486c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mSources; 487c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 488c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 489c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 4906d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * Gets the keyboard type. 4916d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * @return The keyboard type. 4926d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 4936d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public int getKeyboardType() { 4946d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return mKeyboardType; 4956d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown } 4966d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 4976d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 498c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the key character map associated with this input device. 499c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The key character map. 500c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 501c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyCharacterMap getKeyCharacterMap() { 5029f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mKeyCharacterMap; 5031e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown } 5041e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown 505e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 50691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis. 507efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 508efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. Returns information about the first axis found for any source. 509efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * To obtain information about the axis for a specific source, use 510efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * {@link #getMotionRange(int, int)}. 511efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 51291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @param axis The axis constant. 51391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @return The range of values, or null if the requested axis is not 514e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * supported by the device. 51591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 51691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_X 51791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_Y 5186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @see #getSupportedAxes() 519e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 52091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public MotionRange getMotionRange(int axis) { 521efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 522efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 523efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 524efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis) { 525efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 526efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 527efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 528efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 529c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 53091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 5316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown /** 532efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis 533efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * used by a particular source on the device. 534efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 535efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. 536efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 537efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param axis The axis constant. 538efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param source The source for which to return information. 539efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The range of values, or null if the requested axis is not 540efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * supported by the device. 5416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * 542efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_X 543efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_Y 544efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see #getSupportedAxes() 545efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 546efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public MotionRange getMotionRange(int axis, int source) { 547efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 548efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 549efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 550efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis && range.mSource == source) { 551efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 5526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 5536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 554efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 5556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 5566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown 557efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 558efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the ranges for all axes supported by the device. 559efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The motion ranges for the device. 560efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 561efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see #getMotionRange(int, int) 562efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 563efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public List<MotionRange> getMotionRanges() { 564efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mMotionRanges; 565efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 566efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 5679f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // Called from native code. 568efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private void addMotionRange(int axis, int source, 569efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown float min, float max, float flat, float fuzz) { 570efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mMotionRanges.add(new MotionRange(axis, source, min, max, flat, fuzz)); 571c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 57291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 573e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 574a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Gets the vibrator service associated with the device, if there is one. 575a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Even if the device does not have a vibrator, the result is never null. 576a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Use {@link Vibrator#hasVibrator} to determine whether a vibrator is 577a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * present. 578a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * 579a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * Note that the vibrator associated with the device may be different from 580a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * the system vibrator. To obtain an instance of the system vibrator instead, call 581a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * {@link Context#getSystemService} with {@link Context#VIBRATOR_SERVICE} as argument. 582a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * 583a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown * @return The vibrator service associated with the device, never null. 584a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown */ 585a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown public Vibrator getVibrator() { 586a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown synchronized (mMotionRanges) { 587a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown if (mVibrator == null) { 588a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown if (mHasVibrator) { 589a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mVibrator = InputManager.getInstance().getInputDeviceVibrator(mId); 590a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } else { 591a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown mVibrator = NullVibrator.getInstance(); 592a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 593a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 594a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown return mVibrator; 595a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 596a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown } 597a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 598a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown /** 59991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Provides information about the range of values for a particular {@link MotionEvent} axis. 60091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 60191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see InputDevice#getMotionRange(int) 602e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 603c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final class MotionRange { 604efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mAxis; 605efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mSource; 6068d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMin; 6078d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMax; 6088d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFlat; 6098d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFuzz; 61091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 611efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private MotionRange(int axis, int source, float min, float max, float flat, float fuzz) { 612efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mAxis = axis; 613efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mSource = source; 6148d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMin = min; 6158d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMax = max; 6168d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFlat = flat; 6178d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFuzz = fuzz; 6188d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 61991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 620e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 621efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the axis id. 622efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The axis id. 623efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 624efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getAxis() { 625efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mAxis; 626efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 627efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 628efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 629efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the source for which the axis is defined. 630efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The source. 631efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 632efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getSource() { 633efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mSource; 634efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 635efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 636efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 6376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive minimum value for the axis. 6386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive minimum value. 639e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 640e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMin() { 6418d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMin; 642e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 64391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 644e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 6456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive maximum value for the axis. 6466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive maximum value. 647e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 648e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMax() { 6498d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMax; 650e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 65191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 652e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 6536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the range of the axis (difference between maximum and minimum). 654e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The range of values. 655e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 656e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getRange() { 6576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return mMax - mMin; 658e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 65991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 660e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 66191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the extent of the center flat position with respect to this axis. 6626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 663e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a flat value of 8 means that the center position is between -8 and +8. 664dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * This value is mainly useful for calibrating self-centering devices. 6656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 666e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The extent of the center flat position. 667e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 668e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFlat() { 6698d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFlat; 670e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 67191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 672e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 67391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the error tolerance for input device measurements with respect to this axis. 6746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 675e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a value of 2 indicates that the measured value may be up to +/- 2 units 676e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * away from the actual value due to noise and device sensitivity limitations. 6776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 678e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The error tolerance. 679e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 680e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFuzz() { 6818d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFuzz; 6828d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 6838d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 68491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 6858d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 6868d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public void writeToParcel(Parcel out, int flags) { 6878d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mId); 688af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown out.writeInt(mGeneration); 6898d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeString(mName); 690e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown out.writeString(mDescriptor); 691daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown out.writeInt(mIsExternal ? 1 : 0); 6928d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mSources); 6938d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mKeyboardType); 6949f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap.writeToParcel(out, flags); 695a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown out.writeInt(mHasVibrator ? 1 : 0); 69691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 697efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 698efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 699efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 700efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mAxis); 701efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mSource); 70291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMin); 70391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMax); 70491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFlat); 70591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFuzz); 7068d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 7078d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(-1); 7088d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 70991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 7108d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 7118d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int describeContents() { 7128d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return 0; 7138d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 71491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 7158d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 7168d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public String toString() { 7178d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown StringBuilder description = new StringBuilder(); 7188d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("Input Device ").append(mId).append(": ").append(mName).append("\n"); 719e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown description.append(" Descriptor: ").append(mDescriptor).append("\n"); 720af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown description.append(" Generation: ").append(mGeneration).append("\n"); 721daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown description.append(" Location: ").append(mIsExternal ? "external" : "built-in").append("\n"); 722e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown 7238d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" Keyboard Type: "); 7248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown switch (mKeyboardType) { 7258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NONE: 7268d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("none"); 7278d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 7288d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NON_ALPHABETIC: 7298d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("non-alphabetic"); 7308d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 7318d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_ALPHABETIC: 7328d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("alphabetic"); 7338d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 7348d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 7358d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("\n"); 73691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 737a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown description.append(" Has Vibrator: ").append(mHasVibrator).append("\n"); 738a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 739efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" Sources: 0x").append(Integer.toHexString(mSources)).append(" ("); 7408d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_KEYBOARD, "keyboard"); 7418d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_DPAD, "dpad"); 7428d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHSCREEN, "touchscreen"); 7438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_MOUSE, "mouse"); 744fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_STYLUS, "stylus"); 7458d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TRACKBALL, "trackball"); 7468d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHPAD, "touchpad"); 74791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_JOYSTICK, "joystick"); 74891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_GAMEPAD, "gamepad"); 74991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" )\n"); 75091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 75191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown final int numAxes = mMotionRanges.size(); 75291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown for (int i = 0; i < numAxes; i++) { 753efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 754efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" ").append(MotionEvent.axisToString(range.mAxis)); 755efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(": source=0x").append(Integer.toHexString(range.mSource)); 756efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" min=").append(range.mMin); 75791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" max=").append(range.mMax); 75891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" flat=").append(range.mFlat); 75991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" fuzz=").append(range.mFuzz); 76091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append("\n"); 76191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 7628d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return description.toString(); 7638d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 76491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 7658d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void appendSourceDescriptionIfApplicable(StringBuilder description, int source, 7668d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown String sourceName) { 7678d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if ((mSources & source) == source) { 7688d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" "); 7698d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(sourceName); 7708d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 7718d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 772c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown} 773