InputDevice.java revision 8d60866e2100db70ecf0502c14768a384514d7e9
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 198d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.Parcel; 208d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.Parcelable; 218d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.RemoteException; 228d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.os.ServiceManager; 238d60866e2100db70ecf0502c14768a384514d7e9Jeff Brownimport android.util.Log; 248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 25c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown/** 26c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Describes the capabilities of a particular input device. 27c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * <p> 28c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Each input device may support multiple classes of input. For example, a multifunction 29c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * keyboard may compose the capabilities of a standard keyboard together with a track pad mouse 30c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * or other pointing device. 31c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p> 32c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Some input devices present multiple distinguishable sources of input. For example, a 33c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * game pad may have two analog joysticks, a directional pad and a full complement of buttons. 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 { 42c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown private int mId; 43c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown private String mName; 44c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown private int mSources; 456d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown private int mKeyboardType; 46c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 478d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private MotionRange[] mMotionRanges; 488d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 49c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 50c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A mask for input source classes. 51c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 52c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Each distinct input source constant has one or more input source class bits set to 53c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * specify the desired interpretation for its input events. 54c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 55c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_MASK = 0x000000ff; 56c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 57c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 58c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source has buttons or keys. 59c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_KEYBOARD}, {@link #SOURCE_GAMEPAD}, {@link #SOURCE_DPAD}. 60c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 61c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link KeyEvent} should be interpreted as a button or key press. 62c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 63e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Use {@link #hasKey} to query whether the device supports a particular button or key. 64c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 65c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_BUTTON = 0x00000001; 66c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 67c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 68c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a pointing device associated with a display. 69c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TOUCHSCREEN}, {@link #SOURCE_MOUSE}. 70c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 71c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 72c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * display units according to the {@link View} hierarchy. Pointer down/up indicated when 73c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the finger touches the display or when the selection button is pressed/released. 74c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 75c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of the pointing device. Some devices permit 76c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touches outside the display area so the effective range may be somewhat smaller or larger 77c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * than the actual display size. 78c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 79c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POINTER = 0x00000002; 80c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 81c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 82c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball navigation device. 83c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Examples: {@link #SOURCE_TRACKBALL}. 84c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 85c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as relative movements in device-specific 86c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * units used for navigation purposes. Pointer down/up indicates when the selection button 87c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * is pressed/released. 88c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 89c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of motion. 90c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 91c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_TRACKBALL = 0x00000004; 92c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 93c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 94c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is an absolute positioning device not associated with a display 95c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (unlike {@link #SOURCE_CLASS_POINTER}). 96c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 97c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted as absolute coordinates in 98c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * device-specific surface units. 99c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 100c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range of positions. 101c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 102c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_POSITION = 0x00000008; 103c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 104c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 105c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a joystick. 106c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 107c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link KeyEvent} should be interpreted as a joystick button press. 108c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 109c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A {@link MotionEvent} should be interpreted in absolute coordinates as a joystick 110c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * position in normalized device-specific units nominally between -1.0 and 1.0. 111c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 112c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Use {@link #getMotionRange} to query the range and precision of motion. 113c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 114c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_CLASS_JOYSTICK = 0x00000010; 115c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 116c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 117c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is unknown. 118c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 119c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_UNKNOWN = 0x00000000; 120c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 121c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 122c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a keyboard. 123c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 124c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 125c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 126c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_KEYBOARD = 0x00000100 | SOURCE_CLASS_BUTTON; 127c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 128c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 129c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a DPad. 130c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 131c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 132c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 133c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_DPAD = 0x00000200 | SOURCE_CLASS_BUTTON; 134c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 135c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 136c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a gamepad. 137c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 138c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 139c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 140c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_GAMEPAD = 0x00000400 | SOURCE_CLASS_BUTTON; 141c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 142c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 143c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch screen pointing device. 144c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 145c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 146c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 147c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHSCREEN = 0x00001000 | SOURCE_CLASS_POINTER; 148c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 149c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 150c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a mouse pointing device. 151c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * This code is also used for other mouse-like pointing devices such as trackpads 152c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * and trackpoints. 153c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 154c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 155c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 156c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_MOUSE = 0x00002000 | SOURCE_CLASS_POINTER; 157c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 158c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 159c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball. 160c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 161c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_TRACKBALL 162c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 163c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TRACKBALL = 0x00010000 | SOURCE_CLASS_TRACKBALL; 164c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 165c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 166c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch pad or digitizer tablet that is not 167e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * associated with a display (unlike {@link #SOURCE_TOUCHSCREEN}). 168c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 169c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POSITION 170c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 171c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHPAD = 0x00100000 | SOURCE_CLASS_POSITION; 172c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 173c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 174c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a joystick mounted on the left or is a standalone joystick. 175c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 176c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_JOYSTICK 177c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 178c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_JOYSTICK_LEFT = 0x01000000 | SOURCE_CLASS_JOYSTICK; 179c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 180c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 181c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a joystick mounted on the right. 182c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 183c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_JOYSTICK 184c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 185c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_JOYSTICK_RIGHT = 0x02000000 | SOURCE_CLASS_JOYSTICK; 1866d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 1876d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 1886d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * A special input source constant that is used when filtering input devices 1896d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * to match devices that provide any type of input source. 1906d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 1916d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int SOURCE_ANY = 0xffffff00; 192c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 193e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 194e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#x}. 195e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 196e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 197e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 198c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int MOTION_RANGE_X = 0; 199e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 200e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 201e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#y}. 202e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 203e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 204e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 205c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int MOTION_RANGE_Y = 1; 206e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 207e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 208e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#pressure}. 209e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 210e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 211e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 212c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int MOTION_RANGE_PRESSURE = 2; 213e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 214e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 215e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#size}. 216e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 217e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 218e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 219c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int MOTION_RANGE_SIZE = 3; 220e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 221e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 222e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#touchMajor}. 223e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 224e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 225e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 226c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int MOTION_RANGE_TOUCH_MAJOR = 4; 227e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 228e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 229e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#touchMinor}. 230e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 231e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 232e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 233c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int MOTION_RANGE_TOUCH_MINOR = 5; 234e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 235e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 236e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#toolMajor}. 237e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 238e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 239e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 240c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int MOTION_RANGE_TOOL_MAJOR = 6; 241e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 242e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 243e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#toolMinor}. 244e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 245e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 246e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 247c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int MOTION_RANGE_TOOL_MINOR = 7; 248c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 249e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 250e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Constant for retrieving the range of values for 251e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * {@link MotionEvent.PointerCoords#orientation}. 252e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 253e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 254e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 255e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public static final int MOTION_RANGE_ORIENTATION = 8; 2566d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2578d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private static final int MOTION_RANGE_LAST = MOTION_RANGE_ORIENTATION; 2588d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 2596d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2606d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * There is no keyboard. 2616d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2626d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NONE = 0; 2636d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2646d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2656d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard is not fully alphabetic. It may be a numeric keypad or an assortment 2666d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * of buttons that are not mapped as alphabetic keys suitable for text input. 2676d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2686d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; 2696d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2706d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2716d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard supports a complement of alphabetic keys. 2726d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2736d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_ALPHABETIC = 2; 2748d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 2758d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown // Called by native code. 2768d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private InputDevice() { 2778d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMotionRanges = new MotionRange[MOTION_RANGE_LAST + 1]; 2788d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 279e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 280e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 281e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets information about the input device with the specified id. 282e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @param id The device id. 283e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The input device or null if not found. 284e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 285c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static InputDevice getDevice(int id) { 2868d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService("window")); 2878d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown try { 2888d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return wm.getInputDevice(id); 2898d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } catch (RemoteException ex) { 2908d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown throw new RuntimeException( 2918d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown "Could not get input device information from Window Manager.", ex); 2928d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 2938d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 2948d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 2958d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 2968d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the ids of all input devices in the system. 2978d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device ids. 2988d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 2998d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public static int[] getDeviceIds() { 3008d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService("window")); 3018d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown try { 3028d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return wm.getInputDeviceIds(); 3038d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } catch (RemoteException ex) { 3048d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown throw new RuntimeException( 3058d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown "Could not get input device ids from Window Manager.", ex); 3068d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3078d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3088d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 3098d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 3108d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the input device id. 3118d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device id. 3128d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 3138d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int getId() { 3148d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mId; 315c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 316c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 317c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 318c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the name of this input device. 319c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The input device name. 320c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 321c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public String getName() { 322c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mName; 323c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 324c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 325c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 326c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the input sources supported by this input device as a combined bitfield. 327c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The supported input sources. 328c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 329c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public int getSources() { 330c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mSources; 331c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 332c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 333c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 3346d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * Gets the keyboard type. 3356d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * @return The keyboard type. 3366d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3376d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public int getKeyboardType() { 3386d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return mKeyboardType; 3396d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown } 3406d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 3416d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 342c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the key character map associated with this input device. 343c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The key character map. 344c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 345c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyCharacterMap getKeyCharacterMap() { 346c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return KeyCharacterMap.load(mId); 347c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 348c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 349e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 350e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} 351e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * coordinate. 3528d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @param rangeType The motion range constant. 353e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The range of values, or null if the requested coordinate is not 354e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * supported by the device. 355e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 3568d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public MotionRange getMotionRange(int rangeType) { 3578d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if (rangeType < 0 || rangeType > MOTION_RANGE_LAST) { 3588d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown throw new IllegalArgumentException("Requested range is out of bounds."); 3598d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3608d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 3618d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMotionRanges[rangeType]; 362c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 363c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 3648d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void addMotionRange(int rangeType, float min, float max, float flat, float fuzz) { 3658d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if (rangeType >= 0 && rangeType <= MOTION_RANGE_LAST) { 3668d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown MotionRange range = new MotionRange(min, max, flat, fuzz); 3678d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMotionRanges[rangeType] = range; 3688d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 369c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 370c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 371e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 372e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Provides information about the range of values for a particular {@link MotionEvent} 373e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * coordinate. 374e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 375c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final class MotionRange { 3768d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMin; 3778d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMax; 3788d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFlat; 3798d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFuzz; 3808d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 3818d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private MotionRange(float min, float max, float flat, float fuzz) { 3828d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMin = min; 3838d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMax = max; 3848d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFlat = flat; 3858d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFuzz = fuzz; 3868d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3878d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 388e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 389e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets the minimum value for the coordinate. 390e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The minimum value. 391e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 392e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMin() { 3938d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMin; 394e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 395e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 396e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 397e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets the maximum value for the coordinate. 398e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The minimum value. 399e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 400e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMax() { 4018d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMax; 402e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 403e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 404e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 405e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets the range of the coordinate (difference between maximum and minimum). 406e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The range of values. 407e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 408e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getRange() { 4098d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMax - mMin; 410e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 411e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 412e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 413e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets the extent of the center flat position with respect to this coordinate. 414e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a flat value of 8 means that the center position is between -8 and +8. 415e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * This value is mainly useful for calibrating joysticks. 416e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The extent of the center flat position. 417e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 418e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFlat() { 4198d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFlat; 420e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 421e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 422e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 423e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets the error tolerance for input device measurements with respect to this coordinate. 424e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a value of 2 indicates that the measured value may be up to +/- 2 units 425e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * away from the actual value due to noise and device sensitivity limitations. 426e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The error tolerance. 427e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 428e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFuzz() { 4298d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFuzz; 4308d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4318d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4328d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 4338d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public static final Parcelable.Creator<InputDevice> CREATOR 4348d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown = new Parcelable.Creator<InputDevice>() { 4358d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public InputDevice createFromParcel(Parcel in) { 4368d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown InputDevice result = new InputDevice(); 4378d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown result.readFromParcel(in); 4388d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return result; 4398d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4408d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 4418d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public InputDevice[] newArray(int size) { 4428d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return new InputDevice[size]; 4438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4448d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown }; 4458d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 4468d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void readFromParcel(Parcel in) { 4478d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mId = in.readInt(); 4488d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mName = in.readString(); 4498d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mSources = in.readInt(); 4508d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mKeyboardType = in.readInt(); 4518d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 4528d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown for (;;) { 4538d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown int rangeType = in.readInt(); 4548d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if (rangeType < 0) { 4558d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 4568d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4578d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 4588d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown addMotionRange(rangeType, 4598d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown in.readFloat(), in.readFloat(), in.readFloat(), in.readFloat()); 4608d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4618d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4628d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 4638d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 4648d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public void writeToParcel(Parcel out, int flags) { 4658d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mId); 4668d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeString(mName); 4678d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mSources); 4688d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mKeyboardType); 4698d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 4708d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown for (int i = 0; i <= MOTION_RANGE_LAST; i++) { 4718d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown MotionRange range = mMotionRanges[i]; 4728d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if (range != null) { 4738d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(i); 4748d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeFloat(range.mMin); 4758d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeFloat(range.mMax); 4768d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeFloat(range.mFlat); 4778d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeFloat(range.mFuzz); 4788d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4798d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4808d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(-1); 4818d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4828d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 4838d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 4848d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int describeContents() { 4858d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return 0; 4868d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 4878d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 4888d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 4898d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public String toString() { 4908d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown StringBuilder description = new StringBuilder(); 4918d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("Input Device ").append(mId).append(": ").append(mName).append("\n"); 4928d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 4938d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" Keyboard Type: "); 4948d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown switch (mKeyboardType) { 4958d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NONE: 4968d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("none"); 4978d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 4988d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NON_ALPHABETIC: 4998d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("non-alphabetic"); 5008d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 5018d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_ALPHABETIC: 5028d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("alphabetic"); 5038d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 5048d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5058d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("\n"); 5068d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 5078d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" Sources:"); 5088d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_KEYBOARD, "keyboard"); 5098d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_DPAD, "dpad"); 5108d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_GAMEPAD, "gamepad"); 5118d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHSCREEN, "touchscreen"); 5128d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_MOUSE, "mouse"); 5138d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TRACKBALL, "trackball"); 5148d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHPAD, "touchpad"); 5158d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_JOYSTICK_LEFT, "joystick_left"); 5168d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_JOYSTICK_RIGHT, "joystick_right"); 5178d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("\n"); 5188d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 5198d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendRangeDescriptionIfApplicable(description, MOTION_RANGE_X, "x"); 5208d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendRangeDescriptionIfApplicable(description, MOTION_RANGE_Y, "y"); 5218d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendRangeDescriptionIfApplicable(description, MOTION_RANGE_PRESSURE, "pressure"); 5228d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendRangeDescriptionIfApplicable(description, MOTION_RANGE_SIZE, "size"); 5238d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendRangeDescriptionIfApplicable(description, MOTION_RANGE_TOUCH_MAJOR, "touchMajor"); 5248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendRangeDescriptionIfApplicable(description, MOTION_RANGE_TOUCH_MINOR, "touchMinor"); 5258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendRangeDescriptionIfApplicable(description, MOTION_RANGE_TOOL_MAJOR, "toolMajor"); 5268d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendRangeDescriptionIfApplicable(description, MOTION_RANGE_TOOL_MINOR, "toolMinor"); 5278d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendRangeDescriptionIfApplicable(description, MOTION_RANGE_ORIENTATION, "orientation"); 5288d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 5298d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return description.toString(); 5308d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5318d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 5328d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void appendSourceDescriptionIfApplicable(StringBuilder description, int source, 5338d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown String sourceName) { 5348d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if ((mSources & source) == source) { 5358d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" "); 5368d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(sourceName); 5378d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5388d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5398d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 5408d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void appendRangeDescriptionIfApplicable(StringBuilder description, 5418d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown int rangeType, String rangeName) { 5428d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown MotionRange range = mMotionRanges[rangeType]; 5438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if (range != null) { 5448d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" Range[").append(rangeName); 5458d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("]: min=").append(range.mMin); 5468d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" max=").append(range.mMax); 5478d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" flat=").append(range.mFlat); 5488d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" fuzz=").append(range.mFuzz); 5498d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("\n"); 550e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 551e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 552c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown} 553