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; 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> 29c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Each input device may support multiple classes of input. For example, a multifunction 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 { 42c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown private int mId; 43c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown private String mName; 44c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown private int mSources; 456d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown private int mKeyboardType; 461e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown private String mKeyCharacterMapFile; 4791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 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. 121c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 122c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 123c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 124c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_KEYBOARD = 0x00000100 | SOURCE_CLASS_BUTTON; 125c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 126c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 127c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a DPad. 128c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 129c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_BUTTON 130c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 131c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_DPAD = 0x00000200 | SOURCE_CLASS_BUTTON; 132cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 133cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 134cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a game pad. 135cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_JOYSTICK}). 136cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 137cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_BUTTON 138cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 139cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_GAMEPAD = 0x00000400 | SOURCE_CLASS_BUTTON; 140cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 141c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 142c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch screen pointing device. 143c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 144c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 145c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 146c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHSCREEN = 0x00001000 | SOURCE_CLASS_POINTER; 147c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 148c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 149c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a mouse pointing device. 150c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * This code is also used for other mouse-like pointing devices such as trackpads 151c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * and trackpoints. 152c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 153c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POINTER 154c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 155c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_MOUSE = 0x00002000 | SOURCE_CLASS_POINTER; 156fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 157fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown /** 158fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The input source is a stylus pointing device. 159fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * 160fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * @see #SOURCE_CLASS_POINTER 161fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown */ 162fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown public static final int SOURCE_STYLUS = 0x00004000 | SOURCE_CLASS_POINTER; 163fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown 164c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 165c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a trackball. 166c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 167c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_TRACKBALL 168c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 169c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TRACKBALL = 0x00010000 | SOURCE_CLASS_TRACKBALL; 170c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 171c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 172c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The input source is a touch pad or digitizer tablet that is not 173e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * associated with a display (unlike {@link #SOURCE_TOUCHSCREEN}). 174c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 175c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #SOURCE_CLASS_POSITION 176c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 177c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final int SOURCE_TOUCHPAD = 0x00100000 | SOURCE_CLASS_POSITION; 178cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 179cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 180cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The input source is a joystick. 181cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * (It may also be a {@link #SOURCE_GAMEPAD}). 182cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 183cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @see #SOURCE_CLASS_JOYSTICK 184cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 185cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public static final int SOURCE_JOYSTICK = 0x01000000 | SOURCE_CLASS_JOYSTICK; 186cb1404e45639d20439d7700b06d57ca1a1aad1faJeff 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 /** 19491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_X}. 195e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 196e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 19791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_X} instead. 198e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 19991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 20091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_X = MotionEvent.AXIS_X; 20191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 202e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 20391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_Y}. 204e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 205e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 20691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_Y} instead. 207e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 20891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 20991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_Y = MotionEvent.AXIS_Y; 21091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 211e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 21291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_PRESSURE}. 213e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 214e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 21591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_PRESSURE} instead. 216e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 21791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 21891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_PRESSURE = MotionEvent.AXIS_PRESSURE; 21991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 220e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 22191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_SIZE}. 222e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 223e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 22491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_SIZE} instead. 225e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 22691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 22791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_SIZE = MotionEvent.AXIS_SIZE; 22891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 229e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 23091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MAJOR}. 231e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 232e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 23391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MAJOR} instead. 234e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 23591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 23691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MAJOR = MotionEvent.AXIS_TOUCH_MAJOR; 23791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 238e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 23991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOUCH_MINOR}. 240e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 241e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 24291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOUCH_MINOR} instead. 243e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 24491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 24591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOUCH_MINOR = MotionEvent.AXIS_TOUCH_MINOR; 24691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 247e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 24891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MAJOR}. 249e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 250e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 25191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MAJOR} instead. 252e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 25391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 25491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MAJOR = MotionEvent.AXIS_TOOL_MAJOR; 25591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 256e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 25791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_TOOL_MINOR}. 258e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 259e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 26091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_TOOL_MINOR} instead. 261e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 26291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 26391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_TOOL_MINOR = MotionEvent.AXIS_TOOL_MINOR; 26491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 265e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 26691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Constant for retrieving the range of values for {@link MotionEvent#AXIS_ORIENTATION}. 267e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * 268e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @see #getMotionRange 26991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @deprecated Use {@link MotionEvent#AXIS_ORIENTATION} instead. 270e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 27191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown @Deprecated 27291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public static final int MOTION_RANGE_ORIENTATION = MotionEvent.AXIS_ORIENTATION; 2738d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 2746d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2756d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * There is no keyboard. 2766d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2776d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NONE = 0; 2786d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2796d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2806d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard is not fully alphabetic. It may be a numeric keypad or an assortment 2816d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * of buttons that are not mapped as alphabetic keys suitable for text input. 2826d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2836d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; 2846d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 2856d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 2866d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The keyboard supports a complement of alphabetic keys. 2876d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 2886d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public static final int KEYBOARD_TYPE_ALPHABETIC = 2; 28991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 2908d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown // Called by native code. 2918d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private InputDevice() { 2928d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 293e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown 294e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 295e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Gets information about the input device with the specified id. 296e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @param id The device id. 297e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The input device or null if not found. 298e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 299c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static InputDevice getDevice(int id) { 30044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn IWindowManager wm = Display.getWindowManager(); 3018d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown try { 3028d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return wm.getInputDevice(id); 3038d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } catch (RemoteException ex) { 3048d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown throw new RuntimeException( 3058d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown "Could not get input device information from Window Manager.", ex); 3068d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3078d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3088d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 3098d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 3108d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the ids of all input devices in the system. 3118d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device ids. 3128d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 3138d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public static int[] getDeviceIds() { 31444bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn IWindowManager wm = Display.getWindowManager(); 3158d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown try { 3168d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return wm.getInputDeviceIds(); 3178d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } catch (RemoteException ex) { 3188d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown throw new RuntimeException( 3198d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown "Could not get input device ids from Window Manager.", ex); 3208d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3218d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 3228d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 3238d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown /** 3248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * Gets the input device id. 3258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown * @return The input device id. 3268d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown */ 3278d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int getId() { 3288d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mId; 329c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 330c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 331c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 332c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the name of this input device. 333c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The input device name. 334c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 335c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public String getName() { 336c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mName; 337c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 338c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 339c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 340c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the input sources supported by this input device as a combined bitfield. 341c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The supported input sources. 342c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 343c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public int getSources() { 344c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mSources; 345c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 346c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 347c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 3486d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * Gets the keyboard type. 3496d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * @return The keyboard type. 3506d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown */ 3516d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown public int getKeyboardType() { 3526d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return mKeyboardType; 3536d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown } 3546d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown 3556d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown /** 356c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Gets the key character map associated with this input device. 357c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @return The key character map. 358c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 359c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public KeyCharacterMap getKeyCharacterMap() { 360c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return KeyCharacterMap.load(mId); 361c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 36291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 3631e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown String getKeyCharacterMapFile() { 3641e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown return mKeyCharacterMapFile; 3651e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown } 3661e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown 367e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 36891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis. 369efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 370efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. Returns information about the first axis found for any source. 371efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * To obtain information about the axis for a specific source, use 372efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * {@link #getMotionRange(int, int)}. 373efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 37491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @param axis The axis constant. 37591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @return The range of values, or null if the requested axis is not 376e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * supported by the device. 37791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 37891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_X 37991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see MotionEvent#AXIS_Y 3806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @see #getSupportedAxes() 381e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 38291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown public MotionRange getMotionRange(int axis) { 383efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 384efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 385efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 386efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis) { 387efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 388efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 389efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 390efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 391c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 39291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 3936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown /** 394efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets information about the range of values for a particular {@link MotionEvent} axis 395efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * used by a particular source on the device. 396efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * If the device supports multiple sources, the same axis may have different meanings 397efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * for each source. 398efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 399efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param axis The axis constant. 400efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @param source The source for which to return information. 401efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The range of values, or null if the requested axis is not 402efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * supported by the device. 4036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * 404efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_X 405efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see MotionEvent#AXIS_Y 406efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see #getSupportedAxes() 407efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 408efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public MotionRange getMotionRange(int axis, int source) { 409efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 410efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 411efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final MotionRange range = mMotionRanges.get(i); 412efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown if (range.mAxis == axis && range.mSource == source) { 413efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return range; 4146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 4156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 416efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return null; 4176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown } 4186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown 419efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 420efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the ranges for all axes supported by the device. 421efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The motion ranges for the device. 422efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * 423efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @see #getMotionRange(int, int) 424efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 425efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public List<MotionRange> getMotionRanges() { 426efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mMotionRanges; 427efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 428efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 429efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private void addMotionRange(int axis, int source, 430efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown float min, float max, float flat, float fuzz) { 431efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mMotionRanges.add(new MotionRange(axis, source, min, max, flat, fuzz)); 432c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 43391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 434e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 43591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Provides information about the range of values for a particular {@link MotionEvent} axis. 43691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * 43791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * @see InputDevice#getMotionRange(int) 438e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 439c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final class MotionRange { 440efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mAxis; 441efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private int mSource; 4428d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMin; 4438d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mMax; 4448d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFlat; 4458d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private float mFuzz; 44691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 447efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown private MotionRange(int axis, int source, float min, float max, float flat, float fuzz) { 448efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mAxis = axis; 449efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown mSource = source; 4508d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMin = min; 4518d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mMax = max; 4528d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFlat = flat; 4538d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mFuzz = fuzz; 4548d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 45591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 456e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 457efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the axis id. 458efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The axis id. 459efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 460efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getAxis() { 461efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mAxis; 462efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 463efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 464efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 465efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * Gets the source for which the axis is defined. 466efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown * @return The source. 467efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown */ 468efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown public int getSource() { 469efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown return mSource; 470efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown } 471efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown 472efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown /** 4736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive minimum value for the axis. 4746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive minimum value. 475e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 476e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMin() { 4778d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMin; 478e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 47991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 480e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 4816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the inclusive maximum value for the axis. 4826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * @return The inclusive maximum value. 483e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 484e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getMax() { 4858d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mMax; 486e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 48791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 488e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 4896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * Gets the range of the axis (difference between maximum and minimum). 490e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The range of values. 491e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 492e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getRange() { 4936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown return mMax - mMin; 494e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 49591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 496e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 49791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the extent of the center flat position with respect to this axis. 4986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 499e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a flat value of 8 means that the center position is between -8 and +8. 500dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * This value is mainly useful for calibrating self-centering devices. 5016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 502e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The extent of the center flat position. 503e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 504e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFlat() { 5058d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFlat; 506e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown } 50791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 508e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown /** 50991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown * Gets the error tolerance for input device measurements with respect to this axis. 5106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * <p> 511e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * For example, a value of 2 indicates that the measured value may be up to +/- 2 units 512e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * away from the actual value due to noise and device sensitivity limitations. 5136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown * </p> 514e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * @return The error tolerance. 515e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown */ 516e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown public float getFuzz() { 5178d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return mFuzz; 5188d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5198d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 52091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 5218d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public static final Parcelable.Creator<InputDevice> CREATOR 5228d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown = new Parcelable.Creator<InputDevice>() { 5238d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public InputDevice createFromParcel(Parcel in) { 5248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown InputDevice result = new InputDevice(); 5258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown result.readFromParcel(in); 5268d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return result; 5278d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5288d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 5298d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public InputDevice[] newArray(int size) { 5308d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return new InputDevice[size]; 5318d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5328d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown }; 5338d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 5348d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void readFromParcel(Parcel in) { 5358d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mId = in.readInt(); 5368d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mName = in.readString(); 5378d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mSources = in.readInt(); 5388d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown mKeyboardType = in.readInt(); 5391e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown mKeyCharacterMapFile = in.readString(); 54091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 5418d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown for (;;) { 54291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown int axis = in.readInt(); 54391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown if (axis < 0) { 5448d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 5458d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 546efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown addMotionRange(axis, in.readInt(), 547efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown in.readFloat(), in.readFloat(), in.readFloat(), in.readFloat()); 5488d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5498d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5508d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 5518d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 5528d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public void writeToParcel(Parcel out, int flags) { 5538d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mId); 5548d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeString(mName); 5558d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mSources); 5568d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(mKeyboardType); 5571e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown out.writeString(mKeyCharacterMapFile); 55891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 559efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown final int numRanges = mMotionRanges.size(); 560efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown for (int i = 0; i < numRanges; i++) { 561efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 562efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mAxis); 563efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown out.writeInt(range.mSource); 56491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMin); 56591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mMax); 56691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFlat); 56791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown out.writeFloat(range.mFuzz); 5688d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5698d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown out.writeInt(-1); 5708d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 57191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 5728d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 5738d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public int describeContents() { 5748d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return 0; 5758d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 57691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 5778d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown @Override 5788d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown public String toString() { 5798d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown StringBuilder description = new StringBuilder(); 5808d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("Input Device ").append(mId).append(": ").append(mName).append("\n"); 5818d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown 5828d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" Keyboard Type: "); 5838d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown switch (mKeyboardType) { 5848d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NONE: 5858d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("none"); 5868d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 5878d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_NON_ALPHABETIC: 5888d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("non-alphabetic"); 5898d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 5908d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown case KEYBOARD_TYPE_ALPHABETIC: 5918d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("alphabetic"); 5928d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown break; 5938d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 5948d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append("\n"); 59591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 5961e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown description.append(" Key Character Map: ").append(mKeyCharacterMapFile).append("\n"); 5971e08fe90df18930691b0c2ec22e5db25d7fcb4cfJeff Brown 598efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" Sources: 0x").append(Integer.toHexString(mSources)).append(" ("); 5998d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_KEYBOARD, "keyboard"); 6008d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_DPAD, "dpad"); 6018d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHSCREEN, "touchscreen"); 6028d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_MOUSE, "mouse"); 603fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_STYLUS, "stylus"); 6048d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TRACKBALL, "trackball"); 6058d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_TOUCHPAD, "touchpad"); 60691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_JOYSTICK, "joystick"); 60791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown appendSourceDescriptionIfApplicable(description, SOURCE_GAMEPAD, "gamepad"); 60891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" )\n"); 60991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 61091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown final int numAxes = mMotionRanges.size(); 61191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown for (int i = 0; i < numAxes; i++) { 612efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown MotionRange range = mMotionRanges.get(i); 613efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" ").append(MotionEvent.axisToString(range.mAxis)); 614efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(": source=0x").append(Integer.toHexString(range.mSource)); 615efd3266b719eed5f1b217021c0a9e76e4b274b06Jeff Brown description.append(" min=").append(range.mMin); 61691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" max=").append(range.mMax); 61791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" flat=").append(range.mFlat); 61891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append(" fuzz=").append(range.mFuzz); 61991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown description.append("\n"); 62091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown } 6218d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown return description.toString(); 6228d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 62391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown 6248d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown private void appendSourceDescriptionIfApplicable(StringBuilder description, int source, 6258d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown String sourceName) { 6268d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown if ((mSources & source) == source) { 6278d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(" "); 6288d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown description.append(sourceName); 6298d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 6308d60866e2100db70ecf0502c14768a384514d7e9Jeff Brown } 631c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown} 632