InputDevice.java revision 9f25b7fdf216c9ef0bd2322cd223eeaf0d60f77f
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 19ac14351e16e1258f1cb54e2bf772b8be004eb2b8Jeff Brownimport android.hardware.input.InputManager; 208d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.Parcel; 218d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.Parcelable; 22efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 23efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brownimport java.util.ArrayList; 24efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brownimport java.util.List; 258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 26c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown/** 27c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Describes the capabilities of a particular input device. 28c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * <p> 299df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Each input device may support multiple classes of input. For example, a multi-function 30c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * keyboard may compose the capabilities of a standard keyboard together with a track pad mouse 31c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * or other pointing device. 32c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p> 33dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Some input devices present multiple distinguishable sources of input. 34c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Applications can query the framework about the characteristics of each distinct source. 35c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p> 36c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * As a further wrinkle, different kinds of input sources uses different coordinate systems 37c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * to describe motion events. Refer to the comments on the input source constants for 38c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the appropriate interpretation. 396d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * </p> 40c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 418d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownpublic final class InputDevice implements Parcelable { 429f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mId; 439f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final String mName; 449f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final String mDescriptor; 459f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mSources; 469f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final int mKeyboardType; 479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private final KeyCharacterMap mKeyCharacterMap; 48efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private final ArrayList<MotionRange> mMotionRanges = new ArrayList<MotionRange>(); 4991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 50c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 51c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A mask for input source classes. 52c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 53c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Each distinct input source constant has one or more input source class bits set to 54c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * specify the desired interpretation for its input events. 55c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 56c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_MASK = 0x000000ff; 57c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 58c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 59c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source has buttons or keys. 60dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Examples: {@link #SOURCE_KEYBOARD}, {@link #SOURCE_DPAD}. 61c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 62c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link KeyEvent} should be interpreted as a button or key press. 63c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 646eb5ac9ceeb3ff67d38c7ead54b4247e762f278dJeff Brown * Use {@link #getKeyCharacterMap} to query the device's button and key mappings. 65c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 66c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_BUTTON = 0x00000001; 67c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 68c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 69c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a pointing device associated with a display. 70c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TOUCHSCREEN}, {@link #SOURCE_MOUSE}. 71c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 72c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 73c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * display units according to the {@link View} hierarchy. Pointer down/up indicated when 74c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the finger touches the display or when the selection button is pressed/released. 75c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 76c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of the pointing device. Some devices permit 77c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touches outside the display area so the effective range may be somewhat smaller or larger 78c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * than the actual display size. 79c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 80c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POINTER = 0x00000002; 81c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 82c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 83c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball navigation device. 84c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TRACKBALL}. 85c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 86c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as relative movements in device-specific 87c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * units used for navigation purposes. Pointer down/up indicates when the selection button 88c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * is pressed/released. 89c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 90c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of motion. 91c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 92c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_TRACKBALL = 0x00000004; 93c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 94c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 95c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is an absolute positioning device not associated with a display 96c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (unlike {@link #SOURCE_CLASS_POINTER}). 97c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 98c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 99c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * device-specific surface units. 100c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 101c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of positions. 102c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 103c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POSITION = 0x00000008; 104cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 105cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 106cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 107cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 108cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * A {@link MotionEvent} should be interpreted as absolute joystick movements. 109cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 110cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * Use {@link #getMotionRange} to query the range of positions. 111cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 112cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_CLASS_JOYSTICK = 0x00000010; 113cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 114c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 115c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is unknown. 116c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 117c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_UNKNOWN = 0x00000000; 118c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 119c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 120c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a keyboard. 1219df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 1229df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * This source indicates pretty much anything that has buttons. Use 1239df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * {@link #getKeyboardType()} to determine whether the keyboard has alphabetic keys 1249df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * and can be used to enter text. 1259df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 126c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 127c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 128c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_KEYBOARD = 0x00000100 | SOURCE_CLASS_BUTTON; 129c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 130c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 131c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a DPad. 132c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 133c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 134c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 135c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_DPAD = 0x00000200 | SOURCE_CLASS_BUTTON; 136cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 137cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 138cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a game pad. 139cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_JOYSTICK}). 140cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 141cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_BUTTON 142cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 143cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_GAMEPAD = 0x00000400 | SOURCE_CLASS_BUTTON; 144cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 145c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 146c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch screen pointing device. 147c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 148c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 149c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 150c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHSCREEN = 0x00001000 | SOURCE_CLASS_POINTER; 151c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 152c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 153c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a mouse pointing device. 154c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * This code is also used for other mouse-like pointing devices such as trackpads 155c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * and trackpoints. 156c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 157c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 158c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 159c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_MOUSE = 0x00002000 | SOURCE_CLASS_POINTER; 160fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 161fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown /** 162fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The input source is a stylus pointing device. 163fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * 164fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * @see #SOURCE_CLASS_POINTER 165fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown */ 166fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown public static final int SOURCE_STYLUS = 0x00004000 | SOURCE_CLASS_POINTER; 167fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 168c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 169c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball. 170c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 171c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_TRACKBALL 172c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 173c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TRACKBALL = 0x00010000 | SOURCE_CLASS_TRACKBALL; 174c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 175c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 176c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch pad or digitizer tablet that is not 177e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * associated with a display (unlike {@link #SOURCE_TOUCHSCREEN}). 178c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 179c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POSITION 180c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 181c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHPAD = 0x00100000 | SOURCE_CLASS_POSITION; 182cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 183cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 184cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 185cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_GAMEPAD}). 186cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 187cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_JOYSTICK 188cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 189cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_JOYSTICK = 0x01000000 | SOURCE_CLASS_JOYSTICK; 190cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 1916d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 1926d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * A special input source constant that is used when filtering input devices 1936d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * to match devices that provide any type of input source. 1946d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 1956d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int SOURCE_ANY = 0xffffff00; 196c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 197e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 19891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_X}. 199e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 200e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 20191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_X} instead. 202e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 20391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 20491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_X = MotionEvent.AXIS_X; 20591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 206e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 20791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_Y}. 208e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 209e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 21091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_Y} instead. 211e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 21291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 21391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_Y = MotionEvent.AXIS_Y; 21491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 215e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 21691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_PRESSURE}. 217e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 218e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 21991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_PRESSURE} instead. 220e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 22191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 22291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_PRESSURE = MotionEvent.AXIS_PRESSURE; 22391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 224e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 22591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_SIZE}. 226e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 227e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 22891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_SIZE} instead. 229e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 23091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 23191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_SIZE = MotionEvent.AXIS_SIZE; 23291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 233e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 23491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MAJOR}. 235e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 236e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 23791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MAJOR} instead. 238e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 23991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 24091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MAJOR = MotionEvent.AXIS_TOUCH_MAJOR; 24191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 242e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 24391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MINOR}. 244e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 245e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 24691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MINOR} instead. 247e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 24891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 24991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MINOR = MotionEvent.AXIS_TOUCH_MINOR; 25091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 251e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 25291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MAJOR}. 253e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 254e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 25591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MAJOR} instead. 256e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 25791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 25891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MAJOR = MotionEvent.AXIS_TOOL_MAJOR; 25991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 260e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 26191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MINOR}. 262e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 263e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 26491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MINOR} instead. 265e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 26691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 26791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MINOR = MotionEvent.AXIS_TOOL_MINOR; 26891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 269e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 27091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_ORIENTATION}. 271e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 272e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 27391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_ORIENTATION} instead. 274e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 27591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 27691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_ORIENTATION = MotionEvent.AXIS_ORIENTATION; 2778d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 2786d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2796d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * There is no keyboard. 2806d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2816d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NONE = 0; 2826d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2836d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2846d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard is not fully alphabetic. It may be a numeric keypad or an assortment 2856d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * of buttons that are not mapped as alphabetic keys suitable for text input. 2866d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2876d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; 2886d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2896d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2906d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard supports a complement of alphabetic keys. 2916d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2926d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_ALPHABETIC = 2; 29391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 2949f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public static final Parcelable.Creator<InputDevice> CREATOR = 2959f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown new Parcelable.Creator<InputDevice>() { 2969f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public InputDevice createFromParcel(Parcel in) { 2979f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return new InputDevice(in); 2989f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 2999f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public InputDevice[] newArray(int size) { 3009f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return new InputDevice[size]; 3019f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3029f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown }; 3039f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3048d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown // Called by native code. 3059f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private InputDevice(int id, String name, String descriptor, int sources, 3069f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int keyboardType, KeyCharacterMap keyCharacterMap) { 3079f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mId = id; 3089f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mName = name; 3099f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDescriptor = descriptor; 3109f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mSources = sources; 3119f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyboardType = keyboardType; 3129f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = keyCharacterMap; 3139f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3149f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3159f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown private InputDevice(Parcel in) { 3169f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mId = in.readInt(); 3179f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mName = in.readString(); 3189f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mDescriptor = in.readString(); 3199f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mSources = in.readInt(); 3209f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyboardType = in.readInt(); 3219f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = KeyCharacterMap.CREATOR.createFromParcel(in); 3229f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 3239f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown for (;;) { 3249f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int axis = in.readInt(); 3259f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown if (axis < 0) { 3269f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown break; 3279f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3289f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown addMotionRange(axis, in.readInt(), 3299f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown in.readFloat(), in.readFloat(), in.readFloat(), in.readFloat()); 3309f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 3318d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 332e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 333e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 334e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets information about the input device with the specified id. 335e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @param id The device id. 336e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The input device or null if not found. 337e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 338c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static InputDevice getDevice(int id) { 3399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return InputManager.getInstance().getInputDevice(id); 3408d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3418d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 3428d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 3438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the ids of all input devices in the system. 3448d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device ids. 3458d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 3468d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public static int[] getDeviceIds() { 3479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return InputManager.getInstance().getInputDeviceIds(); 3488d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3499df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 3508d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 3518d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the input device id. 3529df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * <p> 3539df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Each input device receives a unique id when it is first configured 3549df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * by the system. The input device id may change when the system is restarted or if the 3559df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * input device is disconnected, reconnected or reconfigured at any time. 3569df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * If you require a stable identifier for a device that persists across 3579df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * boots and reconfigurations, use {@link #getDescriptor()}. 3589df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * </p> 3599df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 3608d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device id. 3618d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 3628d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int getId() { 3638d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mId; 364c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 3659df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 3669df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown /** 3679df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * Gets the input device descriptor, which is a stable identifier for an input device. 3689df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * <p> 3699df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * An input device descriptor uniquely identifies an input device. Its value 3709df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * is intended to be persistent across system restarts, and should not change even 3719df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * if the input device is disconnected, reconnected or reconfigured at any time. 372e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * </p><p> 373e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * It is possible for there to be multiple {@link InputDevice} instances that have the 374e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * same input device descriptor. This might happen in situations where a single 375e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * human input device registers multiple {@link InputDevice} instances (HID collections) 376e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * that describe separate features of the device, such as a keyboard that also 377e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * has a trackpad. Alternately, it may be that the input devices are simply 378e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * indistinguishable, such as two keyboards made by the same manufacturer. 379e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * </p><p> 380e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * The input device descriptor returned by {@link #getDescriptor} should only bt 381e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * used when an application needs to remember settings associated with a particular 382e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * input device. For all other purposes when referring to a logical 383e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown * {@link InputDevice} instance at runtime use the id returned by {@link #getId()}. 3849df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * </p> 3859df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * 3869df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown * @return The input device descriptor. 3879df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown */ 3889df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown public String getDescriptor() { 389e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown return mDescriptor; 3909df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown } 3919df6e7a926ce480baf70e97ee1b9ea387193f6adJeff Brown 392c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 3939f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Returns true if the device is a virtual input device rather than a real one, 3949f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * such as the virtual keyboard (see {@link KeyCharacterMap#VIRTUAL_KEYBOARD}). 3959f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * <p> 3969f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Virtual input devices are provided to implement system-level functionality 3979f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * and should not be seen or configured by users. 3989f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * </p> 3999f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 4009f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @return True if the device is virtual. 4019f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 4029f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @see KeyCharacterMap#VIRTUAL_KEYBOARD 4039f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */ 4049f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown public boolean isVirtual() { 4059f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mId < 0; 4069f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 4079f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 4089f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown /** 409c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the name of this input device. 410c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The input device name. 411c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 412c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public String getName() { 413c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mName; 414c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 415c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 416c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 417c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the input sources supported by this input device as a combined bitfield. 418c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The supported input sources. 419c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 420c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public int getSources() { 421c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mSources; 422c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 423c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 424c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 4256d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * Gets the keyboard type. 4266d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * @return The keyboard type. 4276d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 4286d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public int getKeyboardType() { 4296d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return mKeyboardType; 4306d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown } 4316d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 4326d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 433c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the key character map associated with this input device. 434c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The key character map. 435c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 436c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyCharacterMap getKeyCharacterMap() { 4379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mKeyCharacterMap; 4381e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown } 4391e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown 440e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 44191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis. 442efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 443efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. Returns information about the first axis found for any source. 444efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * To obtain information about the axis for a specific source, use 445efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * {@link #getMotionRange(int, int)}. 446efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 44791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @param axis The axis constant. 44891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @return The range of values, or null if the requested axis is not 449e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * supported by the device. 45091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 45191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_X 45291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_Y 4536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @see #getSupportedAxes() 454e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 45591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public MotionRange getMotionRange(int axis) { 456efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 457efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 458efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 459efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis) { 460efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 461efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 462efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 463efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 464c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 46591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 4666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown /** 467efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis 468efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * used by a particular source on the device. 469efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 470efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. 471efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 472efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param axis The axis constant. 473efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param source The source for which to return information. 474efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The range of values, or null if the requested axis is not 475efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * supported by the device. 4766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * 477efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_X 478efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_Y 479efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see #getSupportedAxes() 480efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 481efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public MotionRange getMotionRange(int axis, int source) { 482efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 483efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 484efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 485efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis && range.mSource == source) { 486efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 4876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 4886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 489efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 4906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 4916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown 492efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 493efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the ranges for all axes supported by the device. 494efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The motion ranges for the device. 495efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 496efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see #getMotionRange(int, int) 497efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 498efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public List<MotionRange> getMotionRanges() { 499efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mMotionRanges; 500efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 501efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 5029f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // Called from native code. 503efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private void addMotionRange(int axis, int source, 504efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown float min, float max, float flat, float fuzz) { 505efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mMotionRanges.add(new MotionRange(axis, source, min, max, flat, fuzz)); 506c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 50791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 508e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 50991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Provides information about the range of values for a particular {@link MotionEvent} axis. 51091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 51191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see InputDevice#getMotionRange(int) 512e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 513c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final class MotionRange { 514efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mAxis; 515efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mSource; 5168d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMin; 5178d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMax; 5188d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFlat; 5198d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFuzz; 52091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 521efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private MotionRange(int axis, int source, float min, float max, float flat, float fuzz) { 522efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mAxis = axis; 523efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mSource = source; 5248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMin = min; 5258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMax = max; 5268d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFlat = flat; 5278d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFuzz = fuzz; 5288d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 52991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 530e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 531efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the axis id. 532efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The axis id. 533efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 534efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getAxis() { 535efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mAxis; 536efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 537efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 538efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 539efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the source for which the axis is defined. 540efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The source. 541efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 542efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getSource() { 543efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mSource; 544efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 545efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 546efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 5476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive minimum value for the axis. 5486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive minimum value. 549e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 550e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMin() { 5518d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMin; 552e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 55391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 554e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 5556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive maximum value for the axis. 5566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive maximum value. 557e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 558e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMax() { 5598d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMax; 560e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 56191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 562e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 5636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the range of the axis (difference between maximum and minimum). 564e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The range of values. 565e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 566e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getRange() { 5676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return mMax - mMin; 568e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 56991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 570e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 57191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the extent of the center flat position with respect to this axis. 5726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 573e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a flat value of 8 means that the center position is between -8 and +8. 574dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * This value is mainly useful for calibrating self-centering devices. 5756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 576e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The extent of the center flat position. 577e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 578e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFlat() { 5798d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFlat; 580e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 58191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 582e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 58391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the error tolerance for input device measurements with respect to this axis. 5846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 585e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a value of 2 indicates that the measured value may be up to +/- 2 units 586e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * away from the actual value due to noise and device sensitivity limitations. 5876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 588e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The error tolerance. 589e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 590e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFuzz() { 5918d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFuzz; 5928d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5938d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 59491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 5958d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 5968d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public void writeToParcel(Parcel out, int flags) { 5978d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mId); 5988d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeString(mName); 599e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown out.writeString(mDescriptor); 6008d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mSources); 6018d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mKeyboardType); 6029f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap.writeToParcel(out, flags); 60391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 604efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 605efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 606efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 607efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mAxis); 608efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mSource); 60991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMin); 61091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMax); 61191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFlat); 61291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFuzz); 6138d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 6148d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(-1); 6158d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 61691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 6178d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 6188d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int describeContents() { 6198d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return 0; 6208d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 62191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 6228d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 6238d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public String toString() { 6248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown StringBuilder description = new StringBuilder(); 6258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("Input Device ").append(mId).append(": ").append(mName).append("\n"); 626e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown description.append(" Descriptor: ").append(mDescriptor).append("\n"); 627e38fdfae9196afd1bdc14c5ec6c12793af1e2550Jeff Brown 6288d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" Keyboard Type: "); 6298d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown switch (mKeyboardType) { 6308d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NONE: 6318d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("none"); 6328d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 6338d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NON_ALPHABETIC: 6348d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("non-alphabetic"); 6358d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 6368d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_ALPHABETIC: 6378d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("alphabetic"); 6388d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 6398d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 6408d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("\n"); 64191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 642efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" Sources: 0x").append(Integer.toHexString(mSources)).append(" ("); 6438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_KEYBOARD, "keyboard"); 6448d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_DPAD, "dpad"); 6458d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHSCREEN, "touchscreen"); 6468d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_MOUSE, "mouse"); 647fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_STYLUS, "stylus"); 6488d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TRACKBALL, "trackball"); 6498d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHPAD, "touchpad"); 65091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_JOYSTICK, "joystick"); 65191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_GAMEPAD, "gamepad"); 65291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" )\n"); 65391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 65491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown final int numAxes = mMotionRanges.size(); 65591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown for (int i = 0; i < numAxes; i++) { 656efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 657efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" ").append(MotionEvent.axisToString(range.mAxis)); 658efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(": source=0x").append(Integer.toHexString(range.mSource)); 659efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" min=").append(range.mMin); 66091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" max=").append(range.mMax); 66191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" flat=").append(range.mFlat); 66291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" fuzz=").append(range.mFuzz); 66391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append("\n"); 66491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 6658d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return description.toString(); 6668d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 66791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 6688d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void appendSourceDescriptionIfApplicable(StringBuilder description, int source, 6698d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown String sourceName) { 6708d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if ((mSources & source) == source) { 6718d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" "); 6728d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(sourceName); 6738d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 6748d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 675c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown} 676