InputDevice.java revision e33348ba54cd68d6936cffd4507037c14d4b10c2
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
19c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown/**
20c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Describes the capabilities of a particular input device.
21c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * <p>
22c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Each input device may support multiple classes of input.  For example, a multifunction
23c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * keyboard may compose the capabilities of a standard keyboard together with a track pad mouse
24c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * or other pointing device.
25c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p>
26c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Some input devices present multiple distinguishable sources of input.  For example, a
27c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * game pad may have two analog joysticks, a directional pad and a full complement of buttons.
28c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Applications can query the framework about the characteristics of each distinct source.
29c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * </p><p>
30c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * As a further wrinkle, different kinds of input sources uses different coordinate systems
31c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * to describe motion events.  Refer to the comments on the input source constants for
32c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the appropriate interpretation.
33c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */
34c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brownpublic final class InputDevice {
35c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    private int mId;
36c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    private String mName;
37c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    private int mSources;
38c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
39c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
40c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * A mask for input source classes.
41c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
42c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Each distinct input source constant has one or more input source class bits set to
43c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * specify the desired interpretation for its input events.
44c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
45c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_CLASS_MASK = 0x000000ff;
46c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
47c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
48c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source has buttons or keys.
49c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Examples: {@link #SOURCE_KEYBOARD}, {@link #SOURCE_GAMEPAD}, {@link #SOURCE_DPAD}.
50c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
51c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * A {@link KeyEvent} should be interpreted as a button or key press.
52c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
53e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Use {@link #hasKey} to query whether the device supports a particular button or key.
54c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
55c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_CLASS_BUTTON = 0x00000001;
56c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
57c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
58c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a pointing device associated with a display.
59c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Examples: {@link #SOURCE_TOUCHSCREEN}, {@link #SOURCE_MOUSE}.
60c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
61c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * A {@link MotionEvent} should be interpreted as absolute coordinates in
62c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * display units according to the {@link View} hierarchy.  Pointer down/up indicated when
63c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * the finger touches the display or when the selection button is pressed/released.
64c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
65c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Use {@link #getMotionRange} to query the range of the pointing device.  Some devices permit
66c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * touches outside the display area so the effective range may be somewhat smaller or larger
67c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * than the actual display size.
68c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
69c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_CLASS_POINTER = 0x00000002;
70c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
71c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
72c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a trackball navigation device.
73c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Examples: {@link #SOURCE_TRACKBALL}.
74c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
75c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * A {@link MotionEvent} should be interpreted as relative movements in device-specific
76c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * units used for navigation purposes.  Pointer down/up indicates when the selection button
77c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * is pressed/released.
78c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
79c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Use {@link #getMotionRange} to query the range of motion.
80c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
81c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_CLASS_TRACKBALL = 0x00000004;
82c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
83c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
84c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is an absolute positioning device not associated with a display
85c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (unlike {@link #SOURCE_CLASS_POINTER}).
86c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
87c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * A {@link MotionEvent} should be interpreted as absolute coordinates in
88c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * device-specific surface units.
89c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
90c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Use {@link #getMotionRange} to query the range of positions.
91c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
92c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_CLASS_POSITION = 0x00000008;
93c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
94c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
95c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a joystick.
96c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
97c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * A {@link KeyEvent} should be interpreted as a joystick button press.
98c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
99c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * A {@link MotionEvent} should be interpreted in absolute coordinates as a joystick
100c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * position in normalized device-specific units nominally between -1.0 and 1.0.
101c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
102c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Use {@link #getMotionRange} to query the range and precision of motion.
103c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
104c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_CLASS_JOYSTICK = 0x00000010;
105c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
106c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
107c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is unknown.
108c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
109c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_UNKNOWN = 0x00000000;
110c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
111c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
112c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a keyboard.
113c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
114c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #SOURCE_CLASS_BUTTON
115c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
116c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_KEYBOARD = 0x00000100 | SOURCE_CLASS_BUTTON;
117c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
118c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
119c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a DPad.
120c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
121c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #SOURCE_CLASS_BUTTON
122c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
123c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_DPAD = 0x00000200 | SOURCE_CLASS_BUTTON;
124c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
125c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
126c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a gamepad.
127c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
128c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #SOURCE_CLASS_BUTTON
129c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
130c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_GAMEPAD = 0x00000400 | SOURCE_CLASS_BUTTON;
131c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
132c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
133c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a touch screen pointing device.
134c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
135c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #SOURCE_CLASS_POINTER
136c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
137c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_TOUCHSCREEN = 0x00001000 | SOURCE_CLASS_POINTER;
138c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
139c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
140c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a mouse pointing device.
141c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * This code is also used for other mouse-like pointing devices such as trackpads
142c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * and trackpoints.
143c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
144c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #SOURCE_CLASS_POINTER
145c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
146c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_MOUSE = 0x00002000 | SOURCE_CLASS_POINTER;
147c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
148c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
149c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a trackball.
150c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
151c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #SOURCE_CLASS_TRACKBALL
152c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
153c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_TRACKBALL = 0x00010000 | SOURCE_CLASS_TRACKBALL;
154c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
155c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
156c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a touch pad or digitizer tablet that is not
157e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * associated with a display (unlike {@link #SOURCE_TOUCHSCREEN}).
158c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
159c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #SOURCE_CLASS_POSITION
160c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
161c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_TOUCHPAD = 0x00100000 | SOURCE_CLASS_POSITION;
162c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
163c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
164c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a joystick mounted on the left or is a standalone joystick.
165c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
166c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #SOURCE_CLASS_JOYSTICK
167c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
168c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_JOYSTICK_LEFT = 0x01000000 | SOURCE_CLASS_JOYSTICK;
169c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
170c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
171c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The input source is a joystick mounted on the right.
172c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
173c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #SOURCE_CLASS_JOYSTICK
174c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
175c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int SOURCE_JOYSTICK_RIGHT = 0x02000000 | SOURCE_CLASS_JOYSTICK;
176c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
177e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
178e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#x}.
179e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     *
180e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @see #getMotionRange
181e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
182c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int MOTION_RANGE_X = 0;
183e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
184e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
185e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#y}.
186e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     *
187e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @see #getMotionRange
188e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
189c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int MOTION_RANGE_Y = 1;
190e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
191e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
192e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#pressure}.
193e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     *
194e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @see #getMotionRange
195e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
196c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int MOTION_RANGE_PRESSURE = 2;
197e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
198e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
199e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#size}.
200e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     *
201e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @see #getMotionRange
202e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
203c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int MOTION_RANGE_SIZE = 3;
204e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
205e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
206e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#touchMajor}.
207e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     *
208e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @see #getMotionRange
209e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
210c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int MOTION_RANGE_TOUCH_MAJOR = 4;
211e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
212e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
213e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#touchMinor}.
214e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     *
215e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @see #getMotionRange
216e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
217c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int MOTION_RANGE_TOUCH_MINOR = 5;
218e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
219e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
220e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#toolMajor}.
221e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     *
222e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @see #getMotionRange
223e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
224c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int MOTION_RANGE_TOOL_MAJOR = 6;
225e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
226e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
227e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#toolMinor}.
228e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     *
229e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @see #getMotionRange
230e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
231c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final int MOTION_RANGE_TOOL_MINOR = 7;
232c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
233e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
234e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Constant for retrieving the range of values for
235e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * {@link MotionEvent.PointerCoords#orientation}.
236e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     *
237e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @see #getMotionRange
238e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
239e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    public static final int MOTION_RANGE_ORIENTATION = 8;
240e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
241e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
242e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Gets information about the input device with the specified id.
243e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @param id The device id.
244e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @return The input device or null if not found.
245e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
246c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static InputDevice getDevice(int id) {
247e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        // TODO
248e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        return null;
249c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
250c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
251c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
252c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Gets the name of this input device.
253c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @return The input device name.
254c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
255c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public String getName() {
256c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        return mName;
257c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
258c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
259c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
260c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Gets the input sources supported by this input device as a combined bitfield.
261c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @return The supported input sources.
262c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
263c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public int getSources() {
264c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        return mSources;
265c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
266c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
267c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
268c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Gets the key character map associated with this input device.
269c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @return The key character map.
270c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
271c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public KeyCharacterMap getKeyCharacterMap() {
272c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        return KeyCharacterMap.load(mId);
273c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
274c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
275e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
276e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Gets information about the range of values for a particular {@link MotionEvent}
277e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * coordinate.
278e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @param range The motion range constant.
279e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @return The range of values, or null if the requested coordinate is not
280e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * supported by the device.
281e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
282c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public MotionRange getMotionRange(int range) {
283e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        // TODO
284e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        return null;
285c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
286c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
287e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
288e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Returns true if the device supports a particular button or key.
289e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @param keyCode The key code.
290e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * @return True if the device supports the key.
291e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
292e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    public boolean hasKey(int keyCode) {
293e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        // TODO
294e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        return false;
295c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
296c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
297e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    /**
298e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * Provides information about the range of values for a particular {@link MotionEvent}
299e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     * coordinate.
300e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown     */
301c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final class MotionRange {
302e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        /**
303e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * Gets the minimum value for the coordinate.
304e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * @return The minimum value.
305e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         */
306e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        public float getMin() {
307e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown            // TODO
308e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown            return 0;
309e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        }
310e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
311e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        /**
312e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * Gets the maximum value for the coordinate.
313e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * @return The minimum value.
314e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         */
315e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        public float getMax() {
316e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown            // TODO
317e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown            return 0;
318e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        }
319e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
320e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        /**
321e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * Gets the range of the coordinate (difference between maximum and minimum).
322e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * @return The range of values.
323e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         */
324e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        public float getRange() {
325e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown            // TODO
326e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown            return 0;
327e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        }
328e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
329e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        /**
330e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * Gets the extent of the center flat position with respect to this coordinate.
331e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * For example, a flat value of 8 means that the center position is between -8 and +8.
332e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * This value is mainly useful for calibrating joysticks.
333e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * @return The extent of the center flat position.
334e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         */
335e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        public float getFlat() {
336e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown            // TODO
337e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown            return 0;
338e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        }
339e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown
340e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        /**
341e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * Gets the error tolerance for input device measurements with respect to this coordinate.
342e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * For example, a value of 2 indicates that the measured value may be up to +/- 2 units
343e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * away from the actual value due to noise and device sensitivity limitations.
344e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         * @return The error tolerance.
345e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown         */
346e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        public float getFuzz() {
347e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown            // TODO
348e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown            return 0;
349e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown        }
350e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown    }
351c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown}
352