MotionEvent.java revision 9d3bdbd6b8f9eda5f67212b06185cd59adcda6c8
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.view;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1920e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brownimport android.graphics.Matrix;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemClock;
236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brownimport android.util.SparseArray;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
26fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Object used to report movement (mouse, pen, finger, trackball) events.
27fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Motion events may hold either absolute or relative movements and other data,
28fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * depending on the type of device.
29fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown *
30fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * <h3>Overview</h3>
31dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * <p>
32fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Motion events describe movements in terms of an action code and a set of axis values.
33fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The action code specifies the state change that occurred such as a pointer going
34fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * down or up.  The axis values describe the position and other movement properties.
35dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p>
36fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * For example, when the user first touches the screen, the system delivers a touch
37fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * event to the appropriate {@link View} with the action code {@link #ACTION_DOWN}
38fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * and a set of axis values that include the X and Y coordinates of the touch and
39fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * information about the pressure, size and orientation of the contact area.
4033bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * </p><p>
41fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Some devices can report multiple movement traces at the same time.  Multi-touch
42fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * screens emit one movement trace for each finger.  The individual fingers or
43fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * other objects that generate movement traces are referred to as <em>pointers</em>.
44fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Motion events contain information about all of the pointers that are currently active
45fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * even if some of them have not moved since the last event was delivered.
46dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p>
47fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The number of pointers only ever changes by one as individual pointers go up and down,
48dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * except when the gesture is canceled.
49dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p>
50fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Each pointer has a unique id that is assigned when it first goes down
51fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * (indicated by {@link #ACTION_DOWN} or {@link #ACTION_POINTER_DOWN}).  A pointer id
52fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * remains valid until the pointer eventually goes up (indicated by {@link #ACTION_UP}
53fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * or {@link #ACTION_POINTER_UP}) or when the gesture is canceled (indicated by
54fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * {@link #ACTION_CANCEL}).
55fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * </p><p>
56fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The MotionEvent class provides many methods to query the position and other properties of
57fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * pointers, such as {@link #getX(int)}, {@link #getY(int)}, {@link #getAxisValue},
58fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * {@link #getPointerId(int)}, {@link #getToolType(int)}, and many others.  Most of these
59fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * methods accept the pointer index as a parameter rather than the pointer id.
60fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The pointer index of each pointer in the event ranges from 0 to one less than the value
61fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * returned by {@link #getPointerCount()}.
62dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p>
63fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The order in which individual pointers appear within a motion event is undefined.
64fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Thus the pointer index of a pointer can change from one event to the next but
65fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * the pointer id of a pointer is guaranteed to remain constant as long as the pointer
66fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * remains active.  Use the {@link #getPointerId(int)} method to obtain the
67fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * pointer id of a pointer to track it across all subsequent motion events in a gesture.
68fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Then for successive motion events, use the {@link #findPointerIndex(int)} method
69fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * to obtain the pointer index for a given pointer id in that motion event.
70fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * </p><p>
71fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Mouse and stylus buttons can be retrieved using {@link #getButtonState()}.  It is a
72fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * good idea to check the button state while handling {@link #ACTION_DOWN} as part
73fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * of a touch event.  The application may choose to perform some different action
74fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * if the touch event starts due to a secondary button click, such as presenting a
75fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * context menu.
76fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * </p>
77fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown *
78fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * <h3>Batching</h3>
79fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * <p>
80dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * For efficiency, motion events with {@link #ACTION_MOVE} may batch together
81dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * multiple movement samples within a single object.  The most current
82dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * pointer coordinates are available using {@link #getX(int)} and {@link #getY(int)}.
83dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Earlier coordinates within the batch are accessed using {@link #getHistoricalX(int, int)}
84dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * and {@link #getHistoricalY(int, int)}.  The coordinates are "historical" only
85dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * insofar as they are older than the current coordinates in the batch; however,
86dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * they are still distinct from any other coordinates reported in prior motion events.
87dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * To process all coordinates in the batch in time order, first consume the historical
88dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * coordinates then consume the current coordinates.
89dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p>
90dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Example: Consuming all samples for all pointers in a motion event in time order.
91dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p><pre><code>
92dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * void printSamples(MotionEvent ev) {
93dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *     final int historySize = ev.getHistorySize();
94dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *     final int pointerCount = ev.getPointerCount();
95dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *     for (int h = 0; h &lt; historySize; h++) {
96dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *         System.out.printf("At time %d:", ev.getHistoricalEventTime(h));
97dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *         for (int p = 0; p &lt; pointerCount; p++) {
98dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *             System.out.printf("  pointer %d: (%f,%f)",
99dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *                 ev.getPointerId(p), ev.getHistoricalX(p, h), ev.getHistoricalY(p, h));
100dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *         }
101dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *     }
102dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *     System.out.printf("At time %d:", ev.getEventTime());
103dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *     for (int p = 0; p &lt; pointerCount; p++) {
104dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *         System.out.printf("  pointer %d: (%f,%f)",
105dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *             ev.getPointerId(p), ev.getX(p), ev.getY(p));
106dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown *     }
107dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * }
108fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * </code></pre></p>
109fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown *
110fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * <h3>Device Types</h3>
111fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * <p>
112fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The interpretation of the contents of a MotionEvent varies significantly depending
113fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * on the source class of the device.
114fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * </p><p>
115fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * On pointing devices with source class {@link InputDevice#SOURCE_CLASS_POINTER}
116fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * such as touch screens, the pointer coordinates specify absolute
117fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * positions such as view X/Y coordinates.  Each complete gesture is represented
118fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * by a sequence of motion events with actions that describe pointer state transitions
119fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * and movements.  A gesture starts with a motion event with {@link #ACTION_DOWN}
120fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * that provides the location of the first pointer down.  As each additional
121fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * pointer that goes down or up, the framework will generate a motion event with
122fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * {@link #ACTION_POINTER_DOWN} or {@link #ACTION_POINTER_UP} accordingly.
123fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Pointer movements are described by motion events with {@link #ACTION_MOVE}.
124fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Finally, a gesture end either when the final pointer goes up as represented
125fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * by a motion event with {@link #ACTION_UP} or when gesture is canceled
126fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * with {@link #ACTION_CANCEL}.
127fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * </p><p>
128fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Some pointing devices such as mice may support vertical and/or horizontal scrolling.
129fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * A scroll event is reported as a generic motion event with {@link #ACTION_SCROLL} that
130fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * includes the relative scroll offset in the {@link #AXIS_VSCROLL} and
131fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * {@link #AXIS_HSCROLL} axes.  See {@link #getAxisValue(int)} for information
132fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * about retrieving these additional axes.
133fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * </p><p>
134fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * On trackball devices with source class {@link InputDevice#SOURCE_CLASS_TRACKBALL},
135fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * the pointer coordinates specify relative movements as X/Y deltas.
136fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * A trackball gesture consists of a sequence of movements described by motion
137fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * events with {@link #ACTION_MOVE} interspersed with occasional {@link #ACTION_DOWN}
138fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * or {@link #ACTION_UP} motion events when the trackball button is pressed or released.
139fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * </p><p>
140fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * On joystick devices with source class {@link InputDevice#SOURCE_CLASS_JOYSTICK},
141fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * the pointer coordinates specify the absolute position of the joystick axes.
142fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * The joystick axis values are normalized to a range of -1.0 to 1.0 where 0.0 corresponds
143fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * to the center position.  More information about the set of available axes and the
144fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * range of motion can be obtained using {@link InputDevice#getMotionRange}.
145fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Some common joystick axes are {@link #AXIS_X}, {@link #AXIS_Y},
146fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * {@link #AXIS_HAT_X}, {@link #AXIS_HAT_Y}, {@link #AXIS_Z} and {@link #AXIS_RZ}.
147dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p><p>
148dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * Refer to {@link InputDevice} for more information about how different kinds of
149c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * input devices and sources represent pointer coordinates.
150dc1ab4b5cc274b7d744c11a939bb5910becec5e0Jeff Brown * </p>
151fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown *
152fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * <h3>Consistency Guarantees</h3>
153fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * <p>
154fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * Motion events are always delivered to views as a consistent stream of events.
155fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * What constitutes a consistent stream varies depending on the type of device.
156fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * For touch events, consistency implies that pointers go down one at a time,
157fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * move around as a group and then go up one at a time or are canceled.
158fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * </p><p>
159fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * While the framework tries to deliver consistent streams of motion events to
160fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * views, it cannot guarantee it.  Some events may be dropped or modified by
161fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * containing views in the application before they are delivered thereby making
162fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * the stream of events inconsistent.  Views should always be prepared to
163fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * handle {@link #ACTION_CANCEL} and should tolerate anomalous
164fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * situations such as receiving a new {@link #ACTION_DOWN} without first having
165fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * received an {@link #ACTION_UP} for the prior gesture.
166fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown * </p>
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
168c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brownpublic final class MotionEvent extends InputEvent implements Parcelable {
16991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static final long NS_PER_MS = 1000000;
170fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
171fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
172fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * An invalid pointer id.
173fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
174fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * This value (-1) can be used as a placeholder to indicate that a pointer id
175fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * has not been assigned or is not available.  It cannot appear as
176fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * a pointer id inside a {@link MotionEvent}.
177fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
178fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int INVALID_POINTER_ID = -1;
179fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1819822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * Bit mask of the parts of the action code that are the action itself.
1829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
1839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public static final int ACTION_MASK             = 0xff;
1849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
1859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
186fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A pressed gesture has started, the
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * motion contains the initial starting location.
188fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
189fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * This is also a good time to check the button state to distinguish
190fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * secondary and tertiary button clicks and handle them appropriately.
191fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Use {@link #getButtonState} to retrieve the button state.
192fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACTION_DOWN             = 0;
1959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
197fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A pressed gesture has finished, the
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * motion contains the final release location as well as any intermediate
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * points since the last down or move event.
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACTION_UP               = 1;
2029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
204fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A change has happened during a
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * press gesture (between {@link #ACTION_DOWN} and {@link #ACTION_UP}).
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The motion contains the most recent point, as well as any intermediate
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * points since the last down or move event.
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACTION_MOVE             = 2;
2109822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
212fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: The current gesture has been aborted.
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * You will not receive any more points in it.  You should treat this as
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * an up event, but not perform any action that you normally would.
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACTION_CANCEL           = 3;
2179822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
219fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A movement has happened outside of the
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * normal bounds of the UI element.  This does not provide a full gesture,
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * but only the initial location of the movement/touch.
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACTION_OUTSIDE          = 4;
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
226fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A non-primary pointer has gone down.
227fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
228fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Use {@link #getActionIndex} to retrieve the index of the pointer that changed.
229fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p><p>
230fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * The index is encoded in the {@link #ACTION_POINTER_INDEX_MASK} bits of the
231fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * unmasked action returned by {@link #getAction}.
232fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
2339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
2349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public static final int ACTION_POINTER_DOWN     = 5;
2359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
2369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
237fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A non-primary pointer has gone up.
238fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
239fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Use {@link #getActionIndex} to retrieve the index of the pointer that changed.
240fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p><p>
241fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * The index is encoded in the {@link #ACTION_POINTER_INDEX_MASK} bits of the
242fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * unmasked action returned by {@link #getAction}.
243fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
2449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
245b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_UP       = 6;
246cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown
247cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown    /**
248fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A change happened but the pointer
249cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * is not down (unlike {@link #ACTION_MOVE}).  The motion contains the most
250cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * recent point, as well as any intermediate points since the last
251cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * hover move event.
25233bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * <p>
253a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is always delivered to the window or view under the pointer.
254a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * </p><p>
25533bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * This action is not a touch event so it is delivered to
25633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * {@link View#onGenericMotionEvent(MotionEvent)} rather than
25733bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * {@link View#onTouchEvent(MotionEvent)}.
25833bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * </p>
259cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     */
260cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown    public static final int ACTION_HOVER_MOVE       = 7;
261cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown
2629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
263fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: The motion event contains relative
26433bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * vertical and/or horizontal scroll offsets.  Use {@link #getAxisValue(int)}
26533bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * to retrieve the information from {@link #AXIS_VSCROLL} and {@link #AXIS_HSCROLL}.
26633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * The pointer may or may not be down when this event is dispatched.
267fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
268a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is always delivered to the window or view under the pointer, which
269a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * may not be the window or view currently touched.
270fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p><p>
27133bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * This action is not a touch event so it is delivered to
27233bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * {@link View#onGenericMotionEvent(MotionEvent)} rather than
27333bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * {@link View#onTouchEvent(MotionEvent)}.
27433bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * </p>
27533bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     */
27633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown    public static final int ACTION_SCROLL           = 8;
27733bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown
27833bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown    /**
279fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: The pointer is not down but has entered the
280a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * boundaries of a window or view.
281a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * <p>
282a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is always delivered to the window or view under the pointer.
283a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * </p><p>
284a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is not a touch event so it is delivered to
285a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * {@link View#onGenericMotionEvent(MotionEvent)} rather than
286a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * {@link View#onTouchEvent(MotionEvent)}.
287a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * </p>
288a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     */
289a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown    public static final int ACTION_HOVER_ENTER      = 9;
290a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown
291a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown    /**
292fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: The pointer is not down but has exited the
293a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * boundaries of a window or view.
294a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * <p>
295a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is always delivered to the window or view that was previously under the pointer.
296a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * </p><p>
297a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is not a touch event so it is delivered to
298a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * {@link View#onGenericMotionEvent(MotionEvent)} rather than
299a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * {@link View#onTouchEvent(MotionEvent)}.
300a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * </p>
301a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     */
302a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown    public static final int ACTION_HOVER_EXIT       = 10;
303a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown
304a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown    /**
305b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * Bits in the action code that represent a pointer index, used with
306b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * {@link #ACTION_POINTER_DOWN} and {@link #ACTION_POINTER_UP}.  Shifting
307b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * down by {@link #ACTION_POINTER_INDEX_SHIFT} provides the actual pointer
308b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * index where the data for the pointer going up or down can be found; you can
309b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * get its identifier with {@link #getPointerId(int)} and the actual
310b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data with {@link #getX(int)} etc.
311fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
312fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getActionIndex
3139822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
314b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_INDEX_MASK  = 0xff00;
3159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3169822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
317b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * Bit shift for the action bits holding the pointer index as
318b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * defined by {@link #ACTION_POINTER_INDEX_MASK}.
319fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
320fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getActionIndex
3219822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
322b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_INDEX_SHIFT = 8;
323fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3249822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
325b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
326b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_DOWN}.
3279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
328b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
329b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_1_DOWN   = ACTION_POINTER_DOWN | 0x0000;
330b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn
331b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    /**
332b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
333b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_DOWN}.
334b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     */
335b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
336b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_2_DOWN   = ACTION_POINTER_DOWN | 0x0100;
3379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3389822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
339b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
340b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_DOWN}.
3419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
342b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
343b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_3_DOWN   = ACTION_POINTER_DOWN | 0x0200;
344b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn
345b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    /**
346b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
347b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_UP}.
348b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     */
349b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
3509822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public static final int ACTION_POINTER_1_UP     = ACTION_POINTER_UP | 0x0000;
3519822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3529822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
353b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
354b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_UP}.
3559822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
356b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
3579822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public static final int ACTION_POINTER_2_UP     = ACTION_POINTER_UP | 0x0100;
3589822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
360b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
361b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_UP}.
3629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
363b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
3649822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public static final int ACTION_POINTER_3_UP     = ACTION_POINTER_UP | 0x0200;
3659822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3669822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
367b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Renamed to {@link #ACTION_POINTER_INDEX_MASK} to match
368b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * the actual data contained in these bits.
3699822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
370b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
3710dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public static final int ACTION_POINTER_ID_MASK  = 0xff00;
3729822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3739822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
374b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Renamed to {@link #ACTION_POINTER_INDEX_SHIFT} to match
375b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * the actual data contained in these bits.
3769822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
377b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
3780dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public static final int ACTION_POINTER_ID_SHIFT = 8;
3799822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
38085a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown    /**
38185a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * This flag indicates that the window that received this motion event is partly
38285a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * or wholly obscured by another visible window above it.  This flag is set to true
38385a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * even if the event did not directly pass through the obscured area.
38485a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * A security sensitive application can check this flag to identify situations in which
38585a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * a malicious application may have covered up part of its content for the purpose
38685a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * of misleading the user or hijacking touches.  An appropriate response might be
38785a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * to drop the suspect touches or to take additional precautions to confirm the user's
38885a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * actual intent.
38985a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     */
39085a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown    public static final int FLAG_WINDOW_IS_OBSCURED = 0x1;
391cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
39321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * Private flag that indicates when the system has detected that this motion event
39421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * may be inconsistent with respect to the sequence of previously delivered motion events,
39521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * such as when a pointer move event is sent but the pointer is not down.
39621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     *
39721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * @hide
39821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * @see #isTainted
39921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * @see #setTainted
40021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     */
40121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    public static final int FLAG_TAINTED = 0x80000000;
40221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown
40321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    /**
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag indicating the motion event intersected the top edge of the screen.
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int EDGE_TOP = 0x00000001;
407cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag indicating the motion event intersected the bottom edge of the screen.
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int EDGE_BOTTOM = 0x00000002;
412cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag indicating the motion event intersected the left edge of the screen.
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int EDGE_LEFT = 0x00000004;
417cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag indicating the motion event intersected the right edge of the screen.
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int EDGE_RIGHT = 0x00000008;
422cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
42391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
424fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: X axis of a motion event.
4256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
4266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
4276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the absolute X screen position of the center of
4286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * the touch contact area.  The units are display pixels.
4296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the absolute X surface position of the center of the touch
430cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * contact area.  The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
431cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * to query the effective range of values.
4326f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a mouse, reports the absolute X screen position of the mouse pointer.
4336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are display pixels.
4346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a trackball, reports the relative horizontal displacement of the trackball.
4356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (left) to 1.0 (right).
4366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute X position of the joystick.
4376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (left) to 1.0 (right).
4386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
4396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
44091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
44191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getX(int)
44291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalX(int, int)
44391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#x
44491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
4459822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
44691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_X = 0;
44791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
44891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
449fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Y axis of a motion event.
4506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
4516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
4526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the absolute Y screen position of the center of
4536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * the touch contact area.  The units are display pixels.
4546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the absolute Y surface position of the center of the touch
4556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * contact area.  The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
4566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to query the effective range of values.
4576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a mouse, reports the absolute Y screen position of the mouse pointer.
4586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are display pixels.
4596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a trackball, reports the relative vertical displacement of the trackball.
4606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (up) to 1.0 (down).
4616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute Y position of the joystick.
4626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (up or far) to 1.0 (down or near).
4636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
4646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
46591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
46691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getY(int)
46791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalY(int, int)
46891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#y
46991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
470c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
47191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_Y = 1;
472c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
47391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
474fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Pressure axis of a motion event.
4756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
4766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
477cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * <li>For a touch screen or touch pad, reports the approximate pressure applied to the surface
4786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * by a finger or other tool.  The value is normalized to a range from
4796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * 0 (no pressure at all) to 1 (normal pressure), although values higher than 1
4806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * may be generated depending on the calibration of the input device.
4816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a trackball, the value is set to 1 if the trackball button is pressed
4826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * or 0 otherwise.
4836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a mouse, the value is set to 1 if the primary mouse button is pressed
4846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * or 0 otherwise.
4856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
4866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
48791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
48891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getPressure(int)
48991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalPressure(int, int)
49091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#pressure
49191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
492c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
49391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_PRESSURE = 2;
49491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
49591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
496fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Size axis of a motion event.
4976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
4986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
4996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen or touch pad, reports the approximate size of the contact area in
5006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * relation to the maximum detectable size for the device.  The value is normalized
5016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to a range from 0 (smallest detectable size) to 1 (largest detectable size),
502cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * although it is not a linear scale.  This value is of limited use.
5036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * To obtain calibrated size information, use
5046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * {@link #AXIS_TOUCH_MAJOR} or {@link #AXIS_TOOL_MAJOR}.
5056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
5066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
50791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
50891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getSize(int)
50991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalSize(int, int)
51091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#size
51191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
512c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
51391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_SIZE = 3;
514c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
51591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
516fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: TouchMajor axis of a motion event.
5176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
5186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
5196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the length of the major axis of an ellipse that
5206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the touch area at the point of contact.
5216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are display pixels.
5226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the length of the major axis of an ellipse that
5236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the touch area at the point of contact.
5246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
5256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to query the effective range of values.
5266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
5276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
52891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
52991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMajor(int)
53091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalTouchMajor(int, int)
53191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#touchMajor
53291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
533c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
53491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_TOUCH_MAJOR = 4;
53591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
53691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
537fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: TouchMinor axis of a motion event.
5386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
5396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
5406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the length of the minor axis of an ellipse that
5416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the touch area at the point of contact.
5426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are display pixels.
5436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the length of the minor axis of an ellipse that
5446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the touch area at the point of contact.
5456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
5466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to query the effective range of values.
5476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
5486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
5496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * When the touch is circular, the major and minor axis lengths will be equal to one another.
5506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
55191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
55291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMinor(int)
55391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalTouchMinor(int, int)
55491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#touchMinor
55591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
556c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
55791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_TOUCH_MINOR = 5;
558c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
55991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
560fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: ToolMajor axis of a motion event.
5616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
5626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
5636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the length of the major axis of an ellipse that
5646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the size of the approaching finger or tool used to make contact.
5656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the length of the major axis of an ellipse that
5666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the size of the approaching finger or tool used to make contact.
5676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
5686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to query the effective range of values.
5696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
5706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
5716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * When the touch is circular, the major and minor axis lengths will be equal to one another.
5726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
5736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The tool size may be larger than the touch size since the tool may not be fully
5746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * in contact with the touch sensor.
5756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
57691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
57791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMajor(int)
57891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalToolMajor(int, int)
57991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#toolMajor
58091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
5819822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
58291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_TOOL_MAJOR = 6;
58391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
58491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
585fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: ToolMinor axis of a motion event.
5866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
5876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
5886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the length of the minor axis of an ellipse that
5896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the size of the approaching finger or tool used to make contact.
5906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the length of the minor axis of an ellipse that
5916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the size of the approaching finger or tool used to make contact.
5926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
5936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to query the effective range of values.
5946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
5956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
5966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * When the touch is circular, the major and minor axis lengths will be equal to one another.
5976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
5986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The tool size may be larger than the touch size since the tool may not be fully
5996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * in contact with the touch sensor.
6006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
60191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
60291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMinor(int)
60391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalToolMinor(int, int)
60491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#toolMinor
60591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
6061e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn     */
60791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_TOOL_MINOR = 7;
60891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
60991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
610fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Orientation axis of a motion event.
6116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
6126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
6136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen or touch pad, reports the orientation of the finger
6146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * or tool in radians relative to the vertical plane of the device.
6156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * An angle of 0 radians indicates that the major axis of contact is oriented
61691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * upwards, is perfectly circular or is of unknown orientation.  A positive angle
61791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * indicates that the major axis of contact is oriented to the right.  A negative angle
61891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * indicates that the major axis of contact is oriented to the left.
61991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians
62091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * (finger pointing fully right).
62165fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * <li>For a stylus, the orientation indicates the direction in which the stylus
62265fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * is pointing in relation to the vertical axis of the current orientation of the screen.
62365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * The range is from -PI radians to PI radians, where 0 is pointing up,
62465fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * -PI/2 radians is pointing left, -PI or PI radians is pointing down, and PI/2 radians
62565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * is pointing right.  See also {@link #AXIS_TILT}.
6266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
6276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
62891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
62991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getOrientation(int)
63091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalOrientation(int, int)
63191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#orientation
63291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
6339e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown     */
63491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_ORIENTATION = 8;
63591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
6366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
637fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Vertical Scroll axis of a motion event.
6386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
6396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
640cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * <li>For a mouse, reports the relative movement of the vertical scroll wheel.
64133bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * The value is normalized to a range from -1.0 (down) to 1.0 (up).
6426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
6436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
6446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * This axis should be used to scroll views vertically.
6456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
6466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
6476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
6486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
6496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
6506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
6516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
6526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_VSCROLL = 9;
6536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
6546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
655fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Horizontal Scroll axis of a motion event.
6566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
6576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
658cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * <li>For a mouse, reports the relative movement of the horizontal scroll wheel.
6596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (left) to 1.0 (right).
6606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
6616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
6626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * This axis should be used to scroll views horizontally.
6636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
6646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
6656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
6666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
6676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
6686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
6696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
6706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_HSCROLL = 10;
6716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
6726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
673fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Z axis of a motion event.
6746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
6756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
6766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute Z position of the joystick.
6776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (high) to 1.0 (low).
6786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <em>On game pads with two analog joysticks, this axis is often reinterpreted
6796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to report the absolute X position of the second joystick instead.</em>
6806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
6816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
6826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
6836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
6846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
6856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
6866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
6876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
6886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_Z = 11;
6896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
6906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
691fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: X Rotation axis of a motion event.
6926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
6936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
6946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute rotation angle about the X axis.
6956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (counter-clockwise) to 1.0 (clockwise).
6966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
6976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
6986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
6996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_RX = 12;
7056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
707fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Y Rotation axis of a motion event.
7086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
7106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute rotation angle about the Y axis.
7116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (counter-clockwise) to 1.0 (clockwise).
7126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7166f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_RY = 13;
7216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
723fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Z Rotation axis of a motion event.
7246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
7266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute rotation angle about the Z axis.
7276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (counter-clockwise) to 1.0 (clockwise).
7286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <em>On game pads with two analog joysticks, this axis is often reinterpreted
7296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to report the absolute Y position of the second joystick instead.</em>
7306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7326f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_RZ = 14;
7396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
741fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Hat X axis of a motion event.
7426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
7446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute X position of the directional hat control.
7456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (left) to 1.0 (right).
7466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_HAT_X = 15;
7556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
757fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Hat Y axis of a motion event.
7586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
7606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute Y position of the directional hat control.
7616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (up) to 1.0 (down).
7626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_HAT_Y = 16;
7716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
773fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Left Trigger axis of a motion event.
7746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
7766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute position of the left trigger control.
7776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from 0.0 (released) to 1.0 (fully pressed).
7786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_LTRIGGER = 17;
7876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
789fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Right Trigger axis of a motion event.
7906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
7926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute position of the right trigger control.
7936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from 0.0 (released) to 1.0 (fully pressed).
7946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
8016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
8026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_RTRIGGER = 18;
8036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
8046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
805fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Throttle axis of a motion event.
8063a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <p>
8073a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <ul>
8083a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <li>For a joystick, reports the absolute position of the throttle control.
8093a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * The value is normalized to a range from 0.0 (fully open) to 1.0 (fully closed).
8103a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </ul>
8113a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </p>
8123a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     *
8133a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getAxisValue(int, int)
8143a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8153a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8163a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see InputDevice#getMotionRange
8173a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     */
8183a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    public static final int AXIS_THROTTLE = 19;
8193a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown
8203a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    /**
821fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Rudder axis of a motion event.
8223a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <p>
8233a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <ul>
8243a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <li>For a joystick, reports the absolute position of the rudder control.
8253a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * The value is normalized to a range from -1.0 (turn left) to 1.0 (turn right).
8263a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </ul>
8273a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </p>
8283a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     *
8293a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getAxisValue(int, int)
8303a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8313a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8323a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see InputDevice#getMotionRange
8333a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     */
8343a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    public static final int AXIS_RUDDER = 20;
8353a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown
8363a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    /**
837fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Wheel axis of a motion event.
8383a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <p>
8393a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <ul>
8403a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <li>For a joystick, reports the absolute position of the steering wheel control.
8413a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * The value is normalized to a range from -1.0 (turn left) to 1.0 (turn right).
8423a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </ul>
8433a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </p>
8443a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     *
8453a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getAxisValue(int, int)
8463a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8473a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8483a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see InputDevice#getMotionRange
8493a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     */
8503a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    public static final int AXIS_WHEEL = 21;
8513a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown
8523a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    /**
853fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Gas axis of a motion event.
8543a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <p>
8553a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <ul>
8563a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <li>For a joystick, reports the absolute position of the gas (accelerator) control.
8573a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * The value is normalized to a range from 0.0 (no acceleration)
8583a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * to 1.0 (maximum acceleration).
8593a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </ul>
8603a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </p>
8613a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     *
8623a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getAxisValue(int, int)
8633a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8643a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8653a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see InputDevice#getMotionRange
8663a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     */
8673a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    public static final int AXIS_GAS = 22;
8683a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown
8693a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    /**
870fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Brake axis of a motion event.
8713a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <p>
8723a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <ul>
8733a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <li>For a joystick, reports the absolute position of the brake control.
8743a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * The value is normalized to a range from 0.0 (no braking) to 1.0 (maximum braking).
8753a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </ul>
8763a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </p>
8773a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     *
8783a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getAxisValue(int, int)
8793a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8803a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8813a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see InputDevice#getMotionRange
8823a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     */
8833a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    public static final int AXIS_BRAKE = 23;
8843a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown
8853a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    /**
886fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Distance axis of a motion event.
887fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
888fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <ul>
889fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <li>For a stylus, reports the distance of the stylus from the screen.
89065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * A value of 0.0 indicates direct contact and larger values indicate increasing
89165fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * distance from the surface.
892fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </ul>
893fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
894fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
895fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getAxisValue(int, int)
896fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
897fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
898fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see InputDevice#getMotionRange
899fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
900fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int AXIS_DISTANCE = 24;
901fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
902fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
90365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * Axis constant: Tilt axis of a motion event.
90465fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * <p>
90565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * <ul>
90665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * <li>For a stylus, reports the tilt angle of the stylus in radians where
90765fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * 0 radians indicates that the stylus is being held perpendicular to the
90865fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * surface, and PI/2 radians indicates that the stylus is being held flat
90965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * against the surface.
91065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * </ul>
91165fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * </p>
91265fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     *
91365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * @see #getAxisValue(int, int)
91465fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
91565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int, int)
91665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * @see InputDevice#getMotionRange
91765fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     */
91865fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    public static final int AXIS_TILT = 25;
91965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
92065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    /**
921fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 1 axis of a motion event.
9226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
9236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
9246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
9256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
9266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
9276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
9286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
9296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_1 = 32;
9306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
9316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
932fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 2 axis of a motion event.
9336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
9346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
9356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
9366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
9376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
9386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
9396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
9406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_2 = 33;
9416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
9426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
943fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 3 axis of a motion event.
9446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
9456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
9466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
9476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
9486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
9496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
9506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
9516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_3 = 34;
9526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
9536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
954fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 4 axis of a motion event.
9556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
9566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
9576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
9586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
9596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
9606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
9616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
9626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_4 = 35;
9636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
9646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
965fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 5 axis of a motion event.
9666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
9676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
9686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
9696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
9706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
9716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
9726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
9736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_5 = 36;
9746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
9756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
976fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 6 axis of a motion event.
9776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
9786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
9796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
9806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
9816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
9826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
9836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
9846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_6 = 37;
9856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
9866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
987fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 7 axis of a motion event.
9886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
9896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
9906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
9916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
9926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
9936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
9946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
9956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_7 = 38;
9966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
9976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
998fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 8 axis of a motion event.
9996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_8 = 39;
10076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1009fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 9 axis of a motion event.
10106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10166f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_9 = 40;
10186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1020fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 10 axis of a motion event.
10216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_10 = 41;
10296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1031fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 11 axis of a motion event.
10326f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_11 = 42;
10406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1042fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 12 axis of a motion event.
10436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_12 = 43;
10516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1053fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 13 axis of a motion event.
10546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_13 = 44;
10626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1064fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 14 axis of a motion event.
10656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_14 = 45;
10736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1075fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 15 axis of a motion event.
10766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_15 = 46;
10846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1086fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 16 axis of a motion event.
10876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_16 = 47;
10956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    // NOTE: If you add a new axis here you must also add it to:
10976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    //  native/include/android/input.h
10986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    //  frameworks/base/include/ui/KeycodeLabels.h
10996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
11006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    // Symbolic names of all axes.
11016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    private static final SparseArray<String> AXIS_SYMBOLIC_NAMES = new SparseArray<String>();
1102fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    static {
11036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        SparseArray<String> names = AXIS_SYMBOLIC_NAMES;
11046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_X, "AXIS_X");
11056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_Y, "AXIS_Y");
11066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_PRESSURE, "AXIS_PRESSURE");
11076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_SIZE, "AXIS_SIZE");
11086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_TOUCH_MAJOR, "AXIS_TOUCH_MAJOR");
11096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_TOUCH_MINOR, "AXIS_TOUCH_MINOR");
11106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_TOOL_MAJOR, "AXIS_TOOL_MAJOR");
11116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_TOOL_MINOR, "AXIS_TOOL_MINOR");
11126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_ORIENTATION, "AXIS_ORIENTATION");
11136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_VSCROLL, "AXIS_VSCROLL");
11146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_HSCROLL, "AXIS_HSCROLL");
11156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_Z, "AXIS_Z");
11166f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_RX, "AXIS_RX");
11176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_RY, "AXIS_RY");
11186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_RZ, "AXIS_RZ");
11196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_HAT_X, "AXIS_HAT_X");
11206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_HAT_Y, "AXIS_HAT_Y");
11216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_LTRIGGER, "AXIS_LTRIGGER");
11226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_RTRIGGER, "AXIS_RTRIGGER");
11233a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown        names.append(AXIS_THROTTLE, "AXIS_THROTTLE");
11243a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown        names.append(AXIS_RUDDER, "AXIS_RUDDER");
11253a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown        names.append(AXIS_WHEEL, "AXIS_WHEEL");
11263a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown        names.append(AXIS_GAS, "AXIS_GAS");
11273a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown        names.append(AXIS_BRAKE, "AXIS_BRAKE");
1128fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        names.append(AXIS_DISTANCE, "AXIS_DISTANCE");
112965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown        names.append(AXIS_TILT, "AXIS_TILT");
11306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_1, "AXIS_GENERIC_1");
11316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_2, "AXIS_GENERIC_2");
11326f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_3, "AXIS_GENERIC_3");
11336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_4, "AXIS_GENERIC_4");
11346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_5, "AXIS_GENERIC_5");
11356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_6, "AXIS_GENERIC_6");
11366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_7, "AXIS_GENERIC_7");
11376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_8, "AXIS_GENERIC_8");
11386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_9, "AXIS_GENERIC_9");
11396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_10, "AXIS_GENERIC_10");
11406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_11, "AXIS_GENERIC_11");
11416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_12, "AXIS_GENERIC_12");
11426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_13, "AXIS_GENERIC_13");
11436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_14, "AXIS_GENERIC_14");
11446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_15, "AXIS_GENERIC_15");
11456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_16, "AXIS_GENERIC_16");
11466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    }
11476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
1148fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
114949754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * Button constant: Primary button (left mouse button).
115049754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     *
115149754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * This button constant is not set in response to simple touches with a finger
115249754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * or stylus tip.  The user must actually push a button.
1153fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1154fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getButtonState
1155fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1156fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int BUTTON_PRIMARY = 1 << 0;
1157fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1158fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
115953ca3f13e70fda98aa9f39bb0c15afaf435e3904Jeff Brown     * Button constant: Secondary button (right mouse button, stylus first button).
1160fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1161fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getButtonState
1162fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1163fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int BUTTON_SECONDARY = 1 << 1;
1164fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1165fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
116653ca3f13e70fda98aa9f39bb0c15afaf435e3904Jeff Brown     * Button constant: Tertiary button (middle mouse button, stylus second button).
1167fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1168fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getButtonState
1169fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1170fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int BUTTON_TERTIARY = 1 << 2;
1171fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1172fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
1173fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Button constant: Back button pressed (mouse back button).
1174fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
1175fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * The system may send a {@link KeyEvent#KEYCODE_BACK} key press to the application
1176fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * when this button is pressed.
1177fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
1178fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1179fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getButtonState
1180fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1181fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int BUTTON_BACK = 1 << 3;
1182fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1183fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
1184fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Button constant: Forward button pressed (mouse forward button).
1185fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
1186fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * The system may send a {@link KeyEvent#KEYCODE_FORWARD} key press to the application
1187fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * when this button is pressed.
1188fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
1189fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1190fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getButtonState
1191fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1192fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int BUTTON_FORWARD = 1 << 4;
1193fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1194fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    // NOTE: If you add a new axis here you must also add it to:
1195fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    //  native/include/android/input.h
1196fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1197fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    // Symbolic names of all button states in bit order from least significant
1198fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    // to most significant.
1199fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static final String[] BUTTON_SYMBOLIC_NAMES = new String[] {
1200fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "BUTTON_PRIMARY",
1201fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "BUTTON_SECONDARY",
1202fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "BUTTON_TERTIARY",
1203fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "BUTTON_BACK",
1204fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "BUTTON_FORWARD",
120553ca3f13e70fda98aa9f39bb0c15afaf435e3904Jeff Brown        "0x00000020",
1206fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000040",
1207fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000080",
1208fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000100",
1209fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000200",
1210fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000400",
1211fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000800",
1212fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00001000",
1213fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00002000",
1214fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00004000",
1215fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00008000",
1216fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00010000",
1217fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00020000",
1218fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00040000",
1219fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00080000",
1220fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00100000",
1221fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00200000",
1222fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00400000",
1223fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00800000",
1224fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x01000000",
1225fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x02000000",
1226fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x04000000",
1227fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x08000000",
1228fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x10000000",
1229fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x20000000",
1230fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x40000000",
1231fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x80000000",
1232fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    };
1233fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1234fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
1235fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Tool type constant: Unknown tool type.
1236fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * This constant is used when the tool type is not known or is not relevant,
1237fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * such as for a trackball or other non-pointing device.
1238fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1239fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getToolType
1240fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1241fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int TOOL_TYPE_UNKNOWN = 0;
1242fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1243fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
124449754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * Tool type constant: The tool is a finger.
1245fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1246fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getToolType
1247fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1248fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int TOOL_TYPE_FINGER = 1;
1249fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1250fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
125149754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * Tool type constant: The tool is a stylus.
1252fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1253fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getToolType
1254fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1255fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int TOOL_TYPE_STYLUS = 2;
1256fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1257fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
125849754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * Tool type constant: The tool is a mouse or trackpad.
1259fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1260fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getToolType
1261fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1262fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int TOOL_TYPE_MOUSE = 3;
1263fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1264fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
126549754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * Tool type constant: The tool is an eraser or a stylus being used in an inverted posture.
1266fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1267fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getToolType
1268fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
126949754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown    public static final int TOOL_TYPE_ERASER = 4;
1270fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1271fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    // NOTE: If you add a new tool type here you must also add it to:
1272fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    //  native/include/android/input.h
1273fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1274fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    // Symbolic names of all tool types.
1275fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static final SparseArray<String> TOOL_TYPE_SYMBOLIC_NAMES = new SparseArray<String>();
12766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    static {
1277fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        SparseArray<String> names = TOOL_TYPE_SYMBOLIC_NAMES;
1278fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        names.append(TOOL_TYPE_UNKNOWN, "TOOL_TYPE_UNKNOWN");
1279fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        names.append(TOOL_TYPE_FINGER, "TOOL_TYPE_FINGER");
1280fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        names.append(TOOL_TYPE_STYLUS, "TOOL_TYPE_STYLUS");
1281fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        names.append(TOOL_TYPE_MOUSE, "TOOL_TYPE_MOUSE");
128249754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown        names.append(TOOL_TYPE_ERASER, "TOOL_TYPE_ERASER");
12836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    }
12846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
128591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    // Private value for history pos that obtains the current sample.
128691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static final int HISTORY_CURRENT = -0x80000000;
128791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
12881f2451007c660091b7b090c1ea332f9044515d2dJeff Brown    private static final int MAX_RECYCLED = 10;
12891f2451007c660091b7b090c1ea332f9044515d2dJeff Brown    private static final Object gRecyclerLock = new Object();
12901f2451007c660091b7b090c1ea332f9044515d2dJeff Brown    private static int gRecyclerUsed;
12911f2451007c660091b7b090c1ea332f9044515d2dJeff Brown    private static MotionEvent gRecyclerTop;
1292cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
129391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    // Shared temporary objects used when translating coordinates supplied by
129491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    // the caller into single element PointerCoords and pointer id arrays.
1295fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static final Object gSharedTempLock = new Object();
1296fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static PointerCoords[] gSharedTempPointerCoords;
1297fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static PointerProperties[] gSharedTempPointerProperties;
1298fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static int[] gSharedTempPointerIndexMap;
1299fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1300fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static final void ensureSharedTempPointerCapacity(int desiredCapacity) {
1301fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        if (gSharedTempPointerCoords == null
1302fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                || gSharedTempPointerCoords.length < desiredCapacity) {
1303fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int capacity = gSharedTempPointerCoords != null ? gSharedTempPointerCoords.length : 8;
1304fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            while (capacity < desiredCapacity) {
1305fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                capacity *= 2;
1306fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
1307fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            gSharedTempPointerCoords = PointerCoords.createArray(capacity);
1308fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            gSharedTempPointerProperties = PointerProperties.createArray(capacity);
1309fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            gSharedTempPointerIndexMap = new int[capacity];
1310fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
1311fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
131291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
131391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    // Pointer to the native MotionEvent object that contains the actual data.
131491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private int mNativePtr;
13158169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima
13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private MotionEvent mNext;
13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
131891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeInitialize(int nativePtr,
1319fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int deviceId, int source, int action, int flags, int edgeFlags,
1320fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int metaState, int buttonState,
132191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            float xOffset, float yOffset, float xPrecision, float yPrecision,
132291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            long downTimeNanos, long eventTimeNanos,
1323fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int pointerCount, PointerProperties[] pointerIds, PointerCoords[] pointerCoords);
132491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeCopy(int destNativePtr, int sourceNativePtr,
132591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            boolean keepHistory);
132691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native void nativeDispose(int nativePtr);
132791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native void nativeAddBatch(int nativePtr, long eventTimeNanos,
132891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            PointerCoords[] pointerCoords, int metaState);
132991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
133091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeGetDeviceId(int nativePtr);
133191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeGetSource(int nativePtr);
133291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeSetSource(int nativePtr, int source);
133391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeGetAction(int nativePtr);
133491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native void nativeSetAction(int nativePtr, int action);
133556194ebec6212e229f4ccdaa4b187166d20013efJeff Brown    private static native boolean nativeIsTouchEvent(int nativePtr);
133691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeGetFlags(int nativePtr);
133721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    private static native void nativeSetFlags(int nativePtr, int flags);
133891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeGetEdgeFlags(int nativePtr);
133991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native void nativeSetEdgeFlags(int nativePtr, int action);
134091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeGetMetaState(int nativePtr);
1341fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static native int nativeGetButtonState(int nativePtr);
134291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native void nativeOffsetLocation(int nativePtr, float deltaX, float deltaY);
1343fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static native float nativeGetXOffset(int nativePtr);
1344fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static native float nativeGetYOffset(int nativePtr);
134591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native float nativeGetXPrecision(int nativePtr);
134691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native float nativeGetYPrecision(int nativePtr);
134791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native long nativeGetDownTimeNanos(int nativePtr);
1348fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static native void nativeSetDownTimeNanos(int nativePtr, long downTime);
134991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
135091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeGetPointerCount(int nativePtr);
135191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeGetPointerId(int nativePtr, int pointerIndex);
1352fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static native int nativeGetToolType(int nativePtr, int pointerIndex);
135391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeFindPointerIndex(int nativePtr, int pointerId);
135491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
135591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeGetHistorySize(int nativePtr);
135691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native long nativeGetEventTimeNanos(int nativePtr, int historyPos);
135791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native float nativeGetRawAxisValue(int nativePtr,
135891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            int axis, int pointerIndex, int historyPos);
135991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native float nativeGetAxisValue(int nativePtr,
136091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            int axis, int pointerIndex, int historyPos);
136191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native void nativeGetPointerCoords(int nativePtr,
136291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            int pointerIndex, int historyPos, PointerCoords outPointerCoords);
1363fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static native void nativeGetPointerProperties(int nativePtr,
1364fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int pointerIndex, PointerProperties outPointerProperties);
136591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
136691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native void nativeScale(int nativePtr, float scale);
136791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native void nativeTransform(int nativePtr, Matrix matrix);
136891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
136991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native int nativeReadFromParcel(int nativePtr, Parcel parcel);
137091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static native void nativeWriteToParcel(int nativePtr, Parcel parcel);
137191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
137291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private MotionEvent() {
137391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
137420e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown
137591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    @Override
137691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    protected void finalize() throws Throwable {
137791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        try {
137891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            if (mNativePtr != 0) {
137991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                nativeDispose(mNativePtr);
138091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                mNativePtr = 0;
138191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            }
138291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        } finally {
138391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            super.finalize();
138491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1386cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
138791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    static private MotionEvent obtain() {
138846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown        final MotionEvent ev;
138946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown        synchronized (gRecyclerLock) {
13901f2451007c660091b7b090c1ea332f9044515d2dJeff Brown            ev = gRecyclerTop;
13911f2451007c660091b7b090c1ea332f9044515d2dJeff Brown            if (ev == null) {
139291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                return new MotionEvent();
139346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown            }
139446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown            gRecyclerTop = ev.mNext;
13955c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown            gRecyclerUsed -= 1;
139646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown        }
139746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown        ev.mNext = null;
139832cbc3855c2a971aa5a801fd339fb6a37db91a1aJeff Brown        ev.prepareForReuse();
139946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown        return ev;
140046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown    }
140191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
140253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan    /**
140353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * Create a new MotionEvent, filling in all of the basic values that
140453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * define the motion.
1405fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
140653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @param downTime The time (in ms) when the user originally pressed down to start
140753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * a stream of position events.  This must be obtained from {@link SystemClock#uptimeMillis()}.
1408c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param eventTime The the time (in ms) when this specific event was generated.  This
140953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * must be obtained from {@link SystemClock#uptimeMillis()}.
1410cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
1411fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerCount The number of pointers that will be in this event.
1412fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerProperties An array of <em>pointerCount</em> values providing
1413fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * a {@link PointerProperties} property object for each pointer, which must
1414fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * include the pointer identifier.
1415fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerCoords An array of <em>pointerCount</em> values providing
1416c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * a {@link PointerCoords} coordinate object for each pointer.
141753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @param metaState The state of any meta / modifier keys that were in effect when
141853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * the event was generated.
1419fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param buttonState The state of buttons that are pressed.
142053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @param xPrecision The precision of the X coordinate being reported.
142153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @param yPrecision The precision of the Y coordinate being reported.
142253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @param deviceId The id for the device that this event came from.  An id of
142353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * zero indicates that the event didn't come from a physical device; other
142453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * numbers are arbitrary and you shouldn't depend on the values.
142585a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * @param edgeFlags A bitfield indicating which edges, if any, were touched by this
142653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * MotionEvent.
1427c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param source The source of this event.
142885a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * @param flags The motion event flags.
142953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     */
1430c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    static public MotionEvent obtain(long downTime, long eventTime,
1431fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int action, int pointerCount, PointerProperties[] pointerProperties,
1432fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            PointerCoords[] pointerCoords, int metaState, int buttonState,
1433fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            float xPrecision, float yPrecision, int deviceId,
143485a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown            int edgeFlags, int source, int flags) {
143591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        MotionEvent ev = obtain();
143691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        ev.mNativePtr = nativeInitialize(ev.mNativePtr,
1437fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                deviceId, source, action, flags, edgeFlags, metaState, buttonState,
143891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                0, 0, xPrecision, yPrecision,
143991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                downTime * NS_PER_MS, eventTime * NS_PER_MS,
1440fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                pointerCount, pointerProperties, pointerCoords);
144153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan        return ev;
144253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan    }
144391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a new MotionEvent, filling in all of the basic values that
14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * define the motion.
1447fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1448fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param downTime The time (in ms) when the user originally pressed down to start
1449fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * a stream of position events.  This must be obtained from {@link SystemClock#uptimeMillis()}.
1450fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param eventTime The the time (in ms) when this specific event was generated.  This
1451fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * must be obtained from {@link SystemClock#uptimeMillis()}.
1452fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
1453fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerCount The number of pointers that will be in this event.
1454fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerIds An array of <em>pointerCount</em> values providing
1455fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * an identifier for each pointer.
1456fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerCoords An array of <em>pointerCount</em> values providing
1457fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * a {@link PointerCoords} coordinate object for each pointer.
1458fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param metaState The state of any meta / modifier keys that were in effect when
1459fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * the event was generated.
1460fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param xPrecision The precision of the X coordinate being reported.
1461fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param yPrecision The precision of the Y coordinate being reported.
1462fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param deviceId The id for the device that this event came from.  An id of
1463fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * zero indicates that the event didn't come from a physical device; other
1464fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * numbers are arbitrary and you shouldn't depend on the values.
1465fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param edgeFlags A bitfield indicating which edges, if any, were touched by this
1466fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * MotionEvent.
1467fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param source The source of this event.
1468fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param flags The motion event flags.
1469fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1470fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @deprecated Use {@link #obtain(long, long, int, int, PointerProperties[], PointerCoords[], int, int, float, float, int, int, int, int)}
1471fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * instead.
1472fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1473fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    @Deprecated
1474fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    static public MotionEvent obtain(long downTime, long eventTime,
1475fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int action, int pointerCount, int[] pointerIds, PointerCoords[] pointerCoords,
1476fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int metaState, float xPrecision, float yPrecision, int deviceId,
1477fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int edgeFlags, int source, int flags) {
1478fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        synchronized (gSharedTempLock) {
1479fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ensureSharedTempPointerCapacity(pointerCount);
1480fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerProperties[] pp = gSharedTempPointerProperties;
1481fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int i = 0; i < pointerCount; i++) {
1482fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                pp[i].clear();
1483fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                pp[i].id = pointerIds[i];
1484fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
1485fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return obtain(downTime, eventTime, action, pointerCount, pp,
1486fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    pointerCoords, metaState, 0, xPrecision, yPrecision, deviceId,
1487fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    edgeFlags, source, flags);
1488fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
1489fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
1490fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1491fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
1492fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Create a new MotionEvent, filling in all of the basic values that
1493fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * define the motion.
1494cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
1495cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * @param downTime The time (in ms) when the user originally pressed down to start
14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a stream of position events.  This must be obtained from {@link SystemClock#uptimeMillis()}.
1497cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * @param eventTime  The the time (in ms) when this specific event was generated.  This
14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * must be obtained from {@link SystemClock#uptimeMillis()}.
1499cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x The X coordinate of this event.
15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y The Y coordinate of this event.
1502cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * @param pressure The current pressure of this event.  The pressure generally
1503cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * ranges from 0 (no pressure at all) to 1 (normal pressure), however
1504cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * values higher than 1 may be generated depending on the calibration of
15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the input device.
15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param size A scaled value of the approximate size of the area being pressed when
1507cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * touched with the finger. The actual value in pixels corresponding to the finger
15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * touch is normalized with a device specific range of values
15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and scaled to a value between 0 and 1.
15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param metaState The state of any meta / modifier keys that were in effect when
15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the event was generated.
15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param xPrecision The precision of the X coordinate being reported.
15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param yPrecision The precision of the Y coordinate being reported.
15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param deviceId The id for the device that this event came from.  An id of
15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * zero indicates that the event didn't come from a physical device; other
15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * numbers are arbitrary and you shouldn't depend on the values.
151785a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * @param edgeFlags A bitfield indicating which edges, if any, were touched by this
15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * MotionEvent.
15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static public MotionEvent obtain(long downTime, long eventTime, int action,
15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            float x, float y, float pressure, float size, int metaState,
15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            float xPrecision, float yPrecision, int deviceId, int edgeFlags) {
1523fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        MotionEvent ev = obtain();
1524fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        synchronized (gSharedTempLock) {
1525fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ensureSharedTempPointerCapacity(1);
1526fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerProperties[] pp = gSharedTempPointerProperties;
1527fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pp[0].clear();
1528fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pp[0].id = 0;
1529fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1530fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerCoords pc[] = gSharedTempPointerCoords;
1531fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].clear();
1532fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].x = x;
1533fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].y = y;
1534fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].pressure = pressure;
1535fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].size = size;
1536fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
153791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            ev.mNativePtr = nativeInitialize(ev.mNativePtr,
1538fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    deviceId, InputDevice.SOURCE_UNKNOWN, action, 0, edgeFlags, metaState, 0,
153991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    0, 0, xPrecision, yPrecision,
154091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    downTime * NS_PER_MS, eventTime * NS_PER_MS,
1541fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    1, pp, pc);
154291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            return ev;
154391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
15449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
15459822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
15469822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
15479822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * Create a new MotionEvent, filling in all of the basic values that
15489822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * define the motion.
15499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     *
15509822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param downTime The time (in ms) when the user originally pressed down to start
15519822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * a stream of position events.  This must be obtained from {@link SystemClock#uptimeMillis()}.
15529822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param eventTime  The the time (in ms) when this specific event was generated.  This
15539822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * must be obtained from {@link SystemClock#uptimeMillis()}.
1554cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
1555fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerCount The number of pointers that are active in this event.
15569822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param x The X coordinate of this event.
15579822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param y The Y coordinate of this event.
15589822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param pressure The current pressure of this event.  The pressure generally
15599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * ranges from 0 (no pressure at all) to 1 (normal pressure), however
15609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * values higher than 1 may be generated depending on the calibration of
15619822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * the input device.
15629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param size A scaled value of the approximate size of the area being pressed when
15639822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * touched with the finger. The actual value in pixels corresponding to the finger
15649822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * touch is normalized with a device specific range of values
15659822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * and scaled to a value between 0 and 1.
15669822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param metaState The state of any meta / modifier keys that were in effect when
15679822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * the event was generated.
15689822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param xPrecision The precision of the X coordinate being reported.
15699822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param yPrecision The precision of the Y coordinate being reported.
15709822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param deviceId The id for the device that this event came from.  An id of
15719822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * zero indicates that the event didn't come from a physical device; other
15729822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * numbers are arbitrary and you shouldn't depend on the values.
157385a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * @param edgeFlags A bitfield indicating which edges, if any, were touched by this
15749822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * MotionEvent.
15755c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     *
15765c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     * @deprecated Use {@link #obtain(long, long, int, float, float, float, float, int, float, float, int, int)}
15775c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     * instead.
15789822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
15795c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    @Deprecated
15809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    static public MotionEvent obtain(long downTime, long eventTime, int action,
1581fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int pointerCount, float x, float y, float pressure, float size, int metaState,
15829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn            float xPrecision, float yPrecision, int deviceId, int edgeFlags) {
15835c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown        return obtain(downTime, eventTime, action, x, y, pressure, size,
15845c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown                metaState, xPrecision, yPrecision, deviceId, edgeFlags);
15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1586cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a new MotionEvent, filling in a subset of the basic motion
15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values.  Those not specified here are: device id (always 0), pressure
15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and size (always 1), x and y precision (always 1), and edgeFlags (always 0).
1591cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
1592cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * @param downTime The time (in ms) when the user originally pressed down to start
15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a stream of position events.  This must be obtained from {@link SystemClock#uptimeMillis()}.
1594cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * @param eventTime  The the time (in ms) when this specific event was generated.  This
15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * must be obtained from {@link SystemClock#uptimeMillis()}.
1596cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x The X coordinate of this event.
15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y The Y coordinate of this event.
15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param metaState The state of any meta / modifier keys that were in effect when
16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the event was generated.
16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static public MotionEvent obtain(long downTime, long eventTime, int action,
16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            float x, float y, int metaState) {
16045c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown        return obtain(downTime, eventTime, action, x, y, 1.0f, 1.0f,
16055c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown                metaState, 1.0f, 1.0f, 0, 0);
16068169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima    }
16078169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima
16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a new MotionEvent, copying from an existing one.
16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
161191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    static public MotionEvent obtain(MotionEvent other) {
161291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        if (other == null) {
161391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            throw new IllegalArgumentException("other motion event must not be null");
161491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
161591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
161691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        MotionEvent ev = obtain();
161791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        ev.mNativePtr = nativeCopy(ev.mNativePtr, other.mNativePtr, true /*keepHistory*/);
16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return ev;
16199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1620cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16228df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn     * Create a new MotionEvent, copying from an existing one, but not including
16238df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn     * any historical point information.
16248df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn     */
162591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    static public MotionEvent obtainNoHistory(MotionEvent other) {
162691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        if (other == null) {
162791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            throw new IllegalArgumentException("other motion event must not be null");
162891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
162991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
163091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        MotionEvent ev = obtain();
163191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        ev.mNativePtr = nativeCopy(ev.mNativePtr, other.mNativePtr, false /*keepHistory*/);
16328df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn        return ev;
16338df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn    }
16348df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn
163521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    /** @hide */
163621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    @Override
163721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    public MotionEvent copy() {
163821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown        return obtain(this);
163921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    }
164021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown
16418df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn    /**
16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Recycle the MotionEvent, to be re-used by a later caller.  After calling
16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this function you must not ever touch the event again.
16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
164592cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown    @Override
16465c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    public final void recycle() {
164732cbc3855c2a971aa5a801fd339fb6a37db91a1aJeff Brown        super.recycle();
16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized (gRecyclerLock) {
16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (gRecyclerUsed < MAX_RECYCLED) {
16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                gRecyclerUsed++;
16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNext = gRecyclerTop;
16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                gRecyclerTop = this;
16549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
16559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
16569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16579ea77fc821918ea562ff4907945b865e39e0201aJeff Brown
16585c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    /**
16599ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * Applies a scale factor to all points within this event.
16609ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     *
16619ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * This method is used to adjust touch events to simulate different density
16629ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * displays for compatibility mode.  The values returned by {@link #getRawX()},
16639ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * {@link #getRawY()}, {@link #getXPrecision()} and {@link #getYPrecision()}
16649ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * are also affected by the scale factor.
16655c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     *
16669ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * @param scale The scale factor to apply.
16675c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     * @hide
16685c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     */
16695c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    public final void scale(float scale) {
16709ea77fc821918ea562ff4907945b865e39e0201aJeff Brown        if (scale != 1.0f) {
16719ea77fc821918ea562ff4907945b865e39e0201aJeff Brown            nativeScale(mNativePtr, scale);
16729ea77fc821918ea562ff4907945b865e39e0201aJeff Brown        }
167391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
167491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
167591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /** {@inheritDoc} */
167691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    @Override
167791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final int getDeviceId() {
167891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetDeviceId(mNativePtr);
167991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
168091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
168191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /** {@inheritDoc} */
168291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    @Override
168391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final int getSource() {
168491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetSource(mNativePtr);
168591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
168691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
168791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /** {@inheritDoc} */
168891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    @Override
168991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final void setSource(int source) {
169091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeSetSource(mNativePtr, source);
16915c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    }
1692cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1694cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Return the kind of action being performed.
1695cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Consider using {@link #getActionMasked} and {@link #getActionIndex} to retrieve
1696cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * the separate masked action and pointer index.
1697cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @return The action, such as {@link #ACTION_DOWN} or
1698cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * the combination of {@link #ACTION_POINTER_DOWN} with a shifted pointer index.
16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int getAction() {
170191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAction(mNativePtr);
17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1705cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Return the masked action being performed, without pointer index information.
1706cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Use {@link #getActionIndex} to return the index associated with pointer actions.
1707cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @return The action, such as {@link #ACTION_DOWN} or {@link #ACTION_POINTER_DOWN}.
1708b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     */
1709b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public final int getActionMasked() {
171091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAction(mNativePtr) & ACTION_MASK;
1711b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    }
1712b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn
1713b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    /**
1714b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * For {@link #ACTION_POINTER_DOWN} or {@link #ACTION_POINTER_UP}
1715b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * as returned by {@link #getActionMasked}, this returns the associated
1716cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * pointer index.
1717cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * The index may be used with {@link #getPointerId(int)},
1718b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * {@link #getX(int)}, {@link #getY(int)}, {@link #getPressure(int)},
1719b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * and {@link #getSize(int)} to get information about the pointer that has
1720b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * gone down or up.
1721cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @return The index associated with the action.
1722b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     */
1723b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public final int getActionIndex() {
172491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return (nativeGetAction(mNativePtr) & ACTION_POINTER_INDEX_MASK)
172591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                >> ACTION_POINTER_INDEX_SHIFT;
1726b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    }
1727b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn
1728b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    /**
172933bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * Returns true if this motion event is a touch event.
173033bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * <p>
1731a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * Specifically excludes pointer events with action {@link #ACTION_HOVER_MOVE},
1732a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * {@link #ACTION_HOVER_ENTER}, {@link #ACTION_HOVER_EXIT}, or {@link #ACTION_SCROLL}
1733a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * because they are not actually touch events (the pointer is not down).
173433bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * </p>
173533bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * @return True if this motion event is a touch event.
173633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * @hide
173733bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     */
173833bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown    public final boolean isTouchEvent() {
173956194ebec6212e229f4ccdaa4b187166d20013efJeff Brown        return nativeIsTouchEvent(mNativePtr);
174033bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown    }
174133bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown
174233bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown    /**
174385a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * Gets the motion event flags.
174485a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     *
174585a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * @see #FLAG_WINDOW_IS_OBSCURED
174685a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     */
174785a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown    public final int getFlags() {
174891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetFlags(mNativePtr);
174985a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown    }
175085a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown
175121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    /** @hide */
175221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    @Override
175321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    public final boolean isTainted() {
175421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown        final int flags = getFlags();
175521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown        return (flags & FLAG_TAINTED) != 0;
175621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    }
175721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown
175821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    /** @hide */
175921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    @Override
176021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    public final void setTainted(boolean tainted) {
176121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown        final int flags = getFlags();
176221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown        nativeSetFlags(mNativePtr, tainted ? flags | FLAG_TAINTED : flags & ~FLAG_TAINTED);
176321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    }
176421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown
176585a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown    /**
1766cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * Returns the time (in ms) when the user originally pressed down to start
1767cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * a stream of position events.
17689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final long getDownTime() {
177091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetDownTimeNanos(mNativePtr) / NS_PER_MS;
17719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1774fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Sets the time (in ms) when the user originally pressed down to start
1775fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * a stream of position events.
1776fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1777fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
1778fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1779fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final void setDownTime(long downTime) {
1780fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        nativeSetDownTimeNanos(mNativePtr, downTime * NS_PER_MS);
1781fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
1782fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1783fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the time (in ms) when this specific event was generated.
17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final long getEventTime() {
178791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetEventTimeNanos(mNativePtr, HISTORY_CURRENT) / NS_PER_MS;
17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
179153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * Returns the time (in ns) when this specific event was generated.
179253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * The value is in nanosecond precision but it may not have nanosecond accuracy.
179353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     *
179453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @hide
179553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     */
179653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan    public final long getEventTimeNano() {
179791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetEventTimeNanos(mNativePtr, HISTORY_CURRENT);
179853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan    }
179953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan
180053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan    /**
18010dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * {@link #getX(int)} for the first pointer index (may be an
18020dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
180391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
180491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
18059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getX() {
180791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_X, 0, HISTORY_CURRENT);
18089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18110dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * {@link #getY(int)} for the first pointer index (may be an
18120dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
181391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
181491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getY() {
181791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_Y, 0, HISTORY_CURRENT);
18189822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
18199822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
18209822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
18210dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * {@link #getPressure(int)} for the first pointer index (may be an
18220dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
182391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
182491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_PRESSURE
18259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
18269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getPressure() {
182791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_PRESSURE, 0, HISTORY_CURRENT);
18289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
18299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
18309822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
18310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * {@link #getSize(int)} for the first pointer index (may be an
18320dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
183391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
183491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_SIZE
18359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
18369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getSize() {
183791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_SIZE, 0, HISTORY_CURRENT);
18389822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
1839c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
1840c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
1841c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getTouchMajor(int)} for the first pointer index (may be an
1842c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
184391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
184491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MAJOR
1845c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
1846c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getTouchMajor() {
184791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MAJOR, 0, HISTORY_CURRENT);
1848c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
1849c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
1850c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
1851c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getTouchMinor(int)} for the first pointer index (may be an
1852c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
185391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
185491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MINOR
1855c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
1856c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getTouchMinor() {
185791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MINOR, 0, HISTORY_CURRENT);
1858c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
1859c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
1860c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
1861c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getToolMajor(int)} for the first pointer index (may be an
1862c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
186391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
186491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MAJOR
1865c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
1866c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getToolMajor() {
186791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MAJOR, 0, HISTORY_CURRENT);
1868c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
1869c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
1870c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
1871c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getToolMinor(int)} for the first pointer index (may be an
1872c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
187391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
187491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MINOR
1875c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
1876c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getToolMinor() {
187791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MINOR, 0, HISTORY_CURRENT);
1878c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
187991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
1880c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
1881c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getOrientation(int)} for the first pointer index (may be an
1882c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
188391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
188491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_ORIENTATION
1885c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
1886c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getOrientation() {
188791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_ORIENTATION, 0, HISTORY_CURRENT);
188891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
188991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
189091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
189191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getAxisValue(int)} for the first pointer index (may be an
189291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * arbitrary pointer identifier).
189391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
189491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param axis The axis identifier for the axis value to retrieve.
189591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
189691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
189791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
189891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     */
189991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final float getAxisValue(int axis) {
190091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, axis, 0, HISTORY_CURRENT);
1901c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
19029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
19039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
19040dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * The number of pointers of data contained in this event.  Always
19050dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * >= 1.
19060dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     */
19070dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final int getPointerCount() {
190891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetPointerCount(mNativePtr);
19090dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    }
19100dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn
19110dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    /**
19120dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Return the pointer identifier associated with a particular pointer
19130dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * data index is this event.  The identifier tells you the actual pointer
19140dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * number associated with the data, accounting for individual pointers
19150dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * going up and down since the start of the current gesture.
19160dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
19170dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
19180dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     */
1919d41ba666d12a24ee4624ea9a009151e6165e3775Dianne Hackborn    public final int getPointerId(int pointerIndex) {
192091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetPointerId(mNativePtr, pointerIndex);
19210dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    }
1922fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1923fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
1924fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Gets the tool type of a pointer for the given pointer index.
1925fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * The tool type indicates the type of tool used to make contact such
1926fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * as a finger or stylus, if known.
1927fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1928fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
1929fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
1930fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @return The tool type of the pointer.
1931fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1932fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #TOOL_TYPE_UNKNOWN
1933fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #TOOL_TYPE_FINGER
1934fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #TOOL_TYPE_STYLUS
1935fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #TOOL_TYPE_MOUSE
1936fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #TOOL_TYPE_INDIRECT_FINGER
1937fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #TOOL_TYPE_INDIRECT_STYLUS
1938fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1939fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final int getToolType(int pointerIndex) {
1940fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return nativeGetToolType(mNativePtr, pointerIndex);
1941fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
1942fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
19430dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    /**
19440dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Given a pointer identifier, find the index of its data in the event.
19450dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     *
19460dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerId The identifier of the pointer to be found.
19470dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @return Returns either the index of the pointer (for use with
1948b0d6ba1ec4f71b96cab7d1ff62b846d5cf162c4fGilles Debunne     * {@link #getX(int)} et al.), or -1 if there is no data available for
19490dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * that pointer identifier.
19500dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     */
19510dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final int findPointerIndex(int pointerId) {
195291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeFindPointerIndex(mNativePtr, pointerId);
19530dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    }
1954fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
19550dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    /**
19560dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns the X coordinate of this event for the given pointer
19570dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
19580dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * identifier for this index).
19599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * Whole numbers are pixels; the
19609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * value may have a fraction for input devices that are sub-pixel precise.
19610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
19620dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
196391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
196491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
19659822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
19660dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getX(int pointerIndex) {
196791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_X, pointerIndex, HISTORY_CURRENT);
19689822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
19699822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
19709822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
19710dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns the Y coordinate of this event for the given pointer
19720dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
19730dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * identifier for this index).
19749822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * Whole numbers are pixels; the
19759822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * value may have a fraction for input devices that are sub-pixel precise.
19760dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
19770dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
197891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
197991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
19809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
19810dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getY(int pointerIndex) {
198291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_Y, pointerIndex, HISTORY_CURRENT);
19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
19849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19860dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns the current pressure of this event for the given pointer
19870dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
19880dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * identifier for this index).
19899822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * The pressure generally
1990cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * ranges from 0 (no pressure at all) to 1 (normal pressure), however
1991cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * values higher than 1 may be generated depending on the calibration of
19929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the input device.
19930dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
19940dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
199591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
199691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_PRESSURE
19979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19980dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getPressure(int pointerIndex) {
199991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_PRESSURE, pointerIndex, HISTORY_CURRENT);
20009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
20019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
20030dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns a scaled value of the approximate size for the given pointer
20040dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
20050dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * identifier for this index).
20060dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * This represents some approximation of the area of the screen being
20070dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * pressed; the actual value in pixels corresponding to the
20089822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * touch is normalized with the device specific range of values
2009cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * and scaled to a value between 0 and 1. The value of size can be used to
20109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * determine fat touch events.
20110dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
20120dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
201391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
201491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_SIZE
20159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
20160dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getSize(int pointerIndex) {
201791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_SIZE, pointerIndex, HISTORY_CURRENT);
20189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2019c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2020c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2021c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns the length of the major axis of an ellipse that describes the touch
2022c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * area at the point of contact for the given pointer
2023c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
2024c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * identifier for this index).
2025c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2026c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
202791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
202891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MAJOR
2029c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2030c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getTouchMajor(int pointerIndex) {
203191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MAJOR, pointerIndex, HISTORY_CURRENT);
2032c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2033c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2034c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2035c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns the length of the minor axis of an ellipse that describes the touch
2036c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * area at the point of contact for the given pointer
2037c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
2038c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * identifier for this index).
2039c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2040c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
204191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
204291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MINOR
2043c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2044c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getTouchMinor(int pointerIndex) {
204591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MINOR, pointerIndex, HISTORY_CURRENT);
2046c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2047c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2048c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2049c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns the length of the major axis of an ellipse that describes the size of
2050c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * the approaching tool for the given pointer
2051c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
2052c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * identifier for this index).
2053c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The tool area represents the estimated size of the finger or pen that is
2054c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * touching the device independent of its actual touch area at the point of contact.
2055c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2056c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
205791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
205891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MAJOR
2059c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2060c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getToolMajor(int pointerIndex) {
206191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MAJOR, pointerIndex, HISTORY_CURRENT);
2062c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2063c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2064c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2065c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns the length of the minor axis of an ellipse that describes the size of
2066c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * the approaching tool for the given pointer
2067c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
2068c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * identifier for this index).
2069c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The tool area represents the estimated size of the finger or pen that is
2070c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * touching the device independent of its actual touch area at the point of contact.
2071c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2072c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
207391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
207491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MINOR
2075c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2076c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getToolMinor(int pointerIndex) {
207791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MINOR, pointerIndex, HISTORY_CURRENT);
2078c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2079c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2080c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2081c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns the orientation of the touch area and tool area in radians clockwise from vertical
2082c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * for the given pointer <em>index</em> (use {@link #getPointerId(int)} to find the pointer
2083c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * identifier for this index).
20846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * An angle of 0 radians indicates that the major axis of contact is oriented
2085c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * upwards, is perfectly circular or is of unknown orientation.  A positive angle
2086c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * indicates that the major axis of contact is oriented to the right.  A negative angle
2087c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * indicates that the major axis of contact is oriented to the left.
20886d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown     * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians
2089c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (finger pointing fully right).
2090c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2091c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
209291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
209391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_ORIENTATION
2094c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2095c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getOrientation(int pointerIndex) {
209691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_ORIENTATION, pointerIndex, HISTORY_CURRENT);
2097c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
209891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
209991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
210091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * Returns the value of the requested axis for the given pointer <em>index</em>
210191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * (use {@link #getPointerId(int)} to find the pointer identifier for this index).
210291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
210391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param axis The axis identifier for the axis value to retrieve.
210491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
210591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
210691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @return The value of the axis, or 0 if the axis is not available.
210791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
210891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
210991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
211091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     */
211191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final float getAxisValue(int axis, int pointerIndex) {
211291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, axis, pointerIndex, HISTORY_CURRENT);
211391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
211491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
2115c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2116c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Populates a {@link PointerCoords} object with pointer coordinate data for
2117c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * the specified pointer index.
2118c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2119c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2120c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2121c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param outPointerCoords The pointer coordinate object to populate.
212291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
212391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see PointerCoords
2124c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2125c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final void getPointerCoords(int pointerIndex, PointerCoords outPointerCoords) {
212691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeGetPointerCoords(mNativePtr, pointerIndex, HISTORY_CURRENT, outPointerCoords);
2127c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
21289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2130fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Populates a {@link PointerProperties} object with pointer properties for
2131fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * the specified pointer index.
2132fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
2133fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2134fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2135fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param outPointerProperties The pointer properties object to populate.
2136fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
2137fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see PointerProperties
2138fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
2139fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final void getPointerProperties(int pointerIndex,
2140fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            PointerProperties outPointerProperties) {
2141fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        nativeGetPointerProperties(mNativePtr, pointerIndex, outPointerProperties);
2142fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
2143fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2144fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
21459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the state of any meta / modifier keys that were in effect when
21469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the event was generated.  This is the same values as those
21479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned by {@link KeyEvent#getMetaState() KeyEvent.getMetaState}.
21489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
21499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return an integer in which each bit set to 1 represents a pressed
21509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         meta key
21519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
21529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see KeyEvent#getMetaState()
21539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int getMetaState() {
215591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetMetaState(mNativePtr);
21569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
21579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2159fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Gets the state of all buttons that are pressed such as a mouse or stylus button.
2160fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
2161fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @return The button state.
2162fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
2163fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #BUTTON_PRIMARY
2164fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #BUTTON_SECONDARY
2165fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #BUTTON_TERTIARY
2166fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #BUTTON_FORWARD
2167fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #BUTTON_BACK
2168fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
2169fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final int getButtonState() {
2170fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return nativeGetButtonState(mNativePtr);
2171fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
2172fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2173fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
21749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the original raw X coordinate of this event.  For touch
21759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * events on the screen, this is the original location of the event
21769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * on the screen, before it had been adjusted for the containing window
21779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and views.
217891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
217991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see getX()
218091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
21819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getRawX() {
218391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetRawAxisValue(mNativePtr, AXIS_X, 0, HISTORY_CURRENT);
21849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
218591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
21869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
21879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the original raw Y coordinate of this event.  For touch
21889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * events on the screen, this is the original location of the event
21899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * on the screen, before it had been adjusted for the containing window
21909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and views.
219191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
219291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see getY()
219391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
21949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getRawY() {
219691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetRawAxisValue(mNativePtr, AXIS_Y, 0, HISTORY_CURRENT);
21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the precision of the X coordinates being reported.  You can
220191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * multiply this number with {@link #getX} to find the actual hardware
22029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * value of the X coordinate.
22039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the precision of X coordinates being reported.
220491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
220591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
22069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getXPrecision() {
220891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetXPrecision(mNativePtr);
22099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2210cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
22119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the precision of the Y coordinates being reported.  You can
221391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * multiply this number with {@link #getY} to find the actual hardware
22149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * value of the Y coordinate.
22159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the precision of Y coordinates being reported.
221691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
221791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
22189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getYPrecision() {
222091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetYPrecision(mNativePtr);
22219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2222cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
22239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the number of historical points in this event.  These are
22259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * movements that have occurred between this event and the previous event.
22269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This only applies to ACTION_MOVE events -- all other actions will have
22279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a size of 0.
2228cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
22299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the number of historical points in the event.
22309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int getHistorySize() {
223291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetHistorySize(mNativePtr);
22339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2234cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
22359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
22369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the time that a historical movement occurred between this event
22379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and the previous event.  Only applies to ACTION_MOVE events.
2238cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
22399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pos Which historical value to return; must be less than
22409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #getHistorySize}
2241cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
22429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getHistorySize
22439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getEventTime
22449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
22459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final long getHistoricalEventTime(int pos) {
224691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetEventTimeNanos(mNativePtr, pos) / NS_PER_MS;
22479822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
22489822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
22499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
225091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalX(int, int)} for the first pointer index (may be an
22510dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
225291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
225391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
225491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
225591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
225691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
225791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getX()
225891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
22599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
22609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getHistoricalX(int pos) {
226191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_X, 0, pos);
22629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
22639822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
22649822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
226591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalY(int, int)} for the first pointer index (may be an
22660dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
226791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
226891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
226991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
227091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
227191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
227291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getY()
227391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
22749822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
22759822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getHistoricalY(int pos) {
227691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_Y, 0, pos);
22779822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
22789822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
22799822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
228091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalPressure(int, int)} for the first pointer index (may be an
22810dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
228291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
228391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
228491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
228591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
228691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
228791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getPressure()
228891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_PRESSURE
22899822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
22909822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getHistoricalPressure(int pos) {
229191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_PRESSURE, 0, pos);
22929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
22939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
22949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
229591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalSize(int, int)} for the first pointer index (may be an
22960dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
229791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
229891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
229991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
230091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
230191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
230291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getSize()
230391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_SIZE
23049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
23059822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getHistoricalSize(int pos) {
230691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_SIZE, 0, pos);
23079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2308cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
23099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
231091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalTouchMajor(int, int)} for the first pointer index (may be an
2311c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
231291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
231391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
231491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
231591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
231691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
231791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMajor()
231891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MAJOR
2319c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2320c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalTouchMajor(int pos) {
232191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MAJOR, 0, pos);
2322c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2323c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2324c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
232591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalTouchMinor(int, int)} for the first pointer index (may be an
2326c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
232791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
232891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
232991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
233091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
233191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
233291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMinor()
233391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MINOR
2334c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2335c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalTouchMinor(int pos) {
233691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MINOR, 0, pos);
2337c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2338c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2339c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
234091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalToolMajor(int, int)} for the first pointer index (may be an
2341c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
234291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
234391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
234491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
234591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
234691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
234791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMajor()
234891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MAJOR
2349c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2350c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalToolMajor(int pos) {
235191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MAJOR, 0, pos);
2352c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2353c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2354c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
235591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalToolMinor(int, int)} for the first pointer index (may be an
2356c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
235791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
235891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
235991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
236091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
236191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
236291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMinor()
236391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MINOR
2364c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2365c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalToolMinor(int pos) {
236691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MINOR, 0, pos);
2367c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2368c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2369c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
237091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalOrientation(int, int)} for the first pointer index (may be an
2371c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
237291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
237391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
237491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
237591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
237691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
237791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getOrientation()
237891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_ORIENTATION
2379c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2380c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalOrientation(int pos) {
238191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_ORIENTATION, 0, pos);
2382c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
238391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
238491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
238591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalAxisValue(int, int, int)} for the first pointer index (may be an
238691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * arbitrary pointer identifier).
238791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
238891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param axis The axis identifier for the axis value to retrieve.
238991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
239091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
239191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
239291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
239391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getAxisValue(int)
239491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
239591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
239691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     */
239791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final float getHistoricalAxisValue(int axis, int pos) {
239891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, axis, 0, pos);
239991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
240091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
2401c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
24020dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns a historical X coordinate, as per {@link #getX(int)}, that
24030dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * occurred between this event and the previous event for the given pointer.
24040dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Only applies to ACTION_MOVE events.
2405cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
24060dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
24070dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pos Which historical value to return; must be less than
24099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #getHistorySize}
2410cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
24119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getHistorySize
241291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getX(int)
241391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24150dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getHistoricalX(int pointerIndex, int pos) {
241691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_X, pointerIndex, pos);
24179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2418cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
24199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24200dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns a historical Y coordinate, as per {@link #getY(int)}, that
24210dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * occurred between this event and the previous event for the given pointer.
24220dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Only applies to ACTION_MOVE events.
2423cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
24240dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
24250dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pos Which historical value to return; must be less than
24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #getHistorySize}
2428cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
24299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getHistorySize
243091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getY(int)
243191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24330dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getHistoricalY(int pointerIndex, int pos) {
243491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_Y, pointerIndex, pos);
24359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2436cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
24379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24380dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns a historical pressure coordinate, as per {@link #getPressure(int)},
24390dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * that occurred between this event and the previous event for the given
24400dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * pointer.  Only applies to ACTION_MOVE events.
2441cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
24420dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
24430dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
24449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pos Which historical value to return; must be less than
24459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #getHistorySize}
24460dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     *
24479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getHistorySize
244891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getPressure(int)
244991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_PRESSURE
24509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24510dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getHistoricalPressure(int pointerIndex, int pos) {
245291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_PRESSURE, pointerIndex, pos);
24539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2454cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24560dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns a historical size coordinate, as per {@link #getSize(int)}, that
24570dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * occurred between this event and the previous event for the given pointer.
24580dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Only applies to ACTION_MOVE events.
2459cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
24600dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
24610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
24629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pos Which historical value to return; must be less than
24639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #getHistorySize}
24640dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     *
24659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getHistorySize
246691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getSize(int)
246791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_SIZE
24689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24690dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getHistoricalSize(int pointerIndex, int pos) {
247091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_SIZE, pointerIndex, pos);
24719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2472c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2473c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2474c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns a historical touch major axis coordinate, as per {@link #getTouchMajor(int)}, that
2475c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * occurred between this event and the previous event for the given pointer.
2476c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2477c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2478c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2479c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2480c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2481c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2482c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2483c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
248491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMajor(int)
248591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MAJOR
2486c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2487c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalTouchMajor(int pointerIndex, int pos) {
248891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MAJOR, pointerIndex, pos);
2489c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2490cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
24919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2492c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns a historical touch minor axis coordinate, as per {@link #getTouchMinor(int)}, that
2493c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * occurred between this event and the previous event for the given pointer.
2494c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2495c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2496c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2497c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2498c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2499c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2500c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2501c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
250291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMinor(int)
250391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MINOR
2504c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2505c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalTouchMinor(int pointerIndex, int pos) {
250691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MINOR, pointerIndex, pos);
2507c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2508c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2509c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2510c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns a historical tool major axis coordinate, as per {@link #getToolMajor(int)}, that
2511c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * occurred between this event and the previous event for the given pointer.
2512c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2513c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2514c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2515c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2516c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2517c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2518c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2519c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
252091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMajor(int)
252191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MAJOR
2522c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2523c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalToolMajor(int pointerIndex, int pos) {
252491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MAJOR, pointerIndex, pos);
2525c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2526c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2527c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2528c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns a historical tool minor axis coordinate, as per {@link #getToolMinor(int)}, that
2529c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * occurred between this event and the previous event for the given pointer.
2530c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2531c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2532c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2533c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2534c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2535c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2536c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2537c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
253891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMinor(int)
253991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MINOR
2540c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2541c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalToolMinor(int pointerIndex, int pos) {
254291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MINOR, pointerIndex, pos);
2543c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2544c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2545c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2546c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns a historical orientation coordinate, as per {@link #getOrientation(int)}, that
2547c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * occurred between this event and the previous event for the given pointer.
2548c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2549c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2550c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2551c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2552c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2553c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2554c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2555c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
255691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getOrientation(int)
255791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_ORIENTATION
25589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2559c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalOrientation(int pointerIndex, int pos) {
256091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_ORIENTATION, pointerIndex, pos);
256191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
256291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
256391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
256491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * Returns the historical value of the requested axis, as per {@link #getAxisValue(int, int)},
256591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * occurred between this event and the previous event for the given pointer.
256691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * Only applies to ACTION_MOVE events.
256791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
256891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param axis The axis identifier for the axis value to retrieve.
256991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
257091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
257191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
257291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
257391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @return The value of the axis, or 0 if the axis is not available.
257491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
257591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
257691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
257791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     */
257891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final float getHistoricalAxisValue(int axis, int pointerIndex, int pos) {
257991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, axis, pointerIndex, pos);
25809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2581cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
25829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2583c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Populates a {@link PointerCoords} object with historical pointer coordinate data,
2584c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * as per {@link #getPointerCoords}, that occurred between this event and the previous
2585c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * event for the given pointer.
2586c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2587c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2588c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2589c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2590c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2591c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2592c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param outPointerCoords The pointer coordinate object to populate.
2593c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2594c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
2595c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getPointerCoords
259691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see PointerCoords
2597c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2598c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final void getHistoricalPointerCoords(int pointerIndex, int pos,
2599c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown            PointerCoords outPointerCoords) {
260091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeGetPointerCoords(mNativePtr, pointerIndex, pos, outPointerCoords);
2601c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2602c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2603c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
260446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown     * Returns a bitfield indicating which edges, if any, were touched by this
2605cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * MotionEvent. For touch events, clients can use this to determine if the
2606cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * user's finger was touching the edge of the display.
2607cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
2608d41cff2d3a95963a7aa348e502c6d42bae367235Jeff Brown     * This property is only set for {@link #ACTION_DOWN} events.
2609d41cff2d3a95963a7aa348e502c6d42bae367235Jeff Brown     *
26109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #EDGE_LEFT
26119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #EDGE_TOP
26129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #EDGE_RIGHT
26139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #EDGE_BOTTOM
26149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int getEdgeFlags() {
261691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetEdgeFlags(mNativePtr);
26179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2618cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
26199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
262085a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * Sets the bitfield indicating which edges, if any, were touched by this
2621cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * MotionEvent.
2622cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
26239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getEdgeFlags()
26249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void setEdgeFlags(int flags) {
262691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeSetEdgeFlags(mNativePtr, flags);
26279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
26289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets this event's action.
26319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void setAction(int action) {
263391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeSetAction(mNativePtr, action);
26349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
26359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Adjust this event's location.
26389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param deltaX Amount to add to the current X coordinate of the event.
26399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param deltaY Amount to add to the current Y coordinate of the event.
26409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void offsetLocation(float deltaX, float deltaY) {
26429ea77fc821918ea562ff4907945b865e39e0201aJeff Brown        if (deltaX != 0.0f || deltaY != 0.0f) {
26439ea77fc821918ea562ff4907945b865e39e0201aJeff Brown            nativeOffsetLocation(mNativePtr, deltaX, deltaY);
26449ea77fc821918ea562ff4907945b865e39e0201aJeff Brown        }
26459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2646cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
26479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set this event's location.  Applies {@link #offsetLocation} with a
26499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * delta from the current location to the given new location.
2650cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
26519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x New absolute X location.
26529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y New absolute Y location.
26539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void setLocation(float x, float y) {
265591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        float oldX = getX();
265691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        float oldY = getY();
26579ea77fc821918ea562ff4907945b865e39e0201aJeff Brown        offsetLocation(x - oldX, y - oldY);
26585c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    }
26595c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown
266020e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown    /**
266120e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown     * Applies a transformation matrix to all of the points in the event.
266220e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown     *
266320e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown     * @param matrix The transformation matrix to apply.
266420e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown     */
266520e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown    public final void transform(Matrix matrix) {
266620e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown        if (matrix == null) {
266720e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown            throw new IllegalArgumentException("matrix must not be null");
266820e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown        }
266920e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown
267091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeTransform(mNativePtr, matrix);
26719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2672cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
26739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Add a new movement to the batch of movements in this event.  The event's
2675c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * current location, position and size is updated to the new values.
2676c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The current values in the event are added to a list of historical values.
267791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
2678cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Only applies to {@link #ACTION_MOVE} or {@link #ACTION_HOVER_MOVE} events.
2679cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
2680c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param eventTime The time stamp (in ms) for this data.
26819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x The new X position.
26829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y The new Y position.
26839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pressure The new pressure.
26849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param size The new size.
26859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param metaState Meta key state.
26869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void addBatch(long eventTime, float x, float y,
26889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            float pressure, float size, int metaState) {
2689fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        synchronized (gSharedTempLock) {
2690fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ensureSharedTempPointerCapacity(1);
2691fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerCoords[] pc = gSharedTempPointerCoords;
2692fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].clear();
2693fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].x = x;
2694fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].y = y;
2695fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].pressure = pressure;
2696fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].size = size;
2697fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2698fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            nativeAddBatch(mNativePtr, eventTime * NS_PER_MS, pc, metaState);
269991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
27009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
2701cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
27029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
2703c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Add a new movement to the batch of movements in this event.  The event's
2704c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * current location, position and size is updated to the new values.
2705c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The current values in the event are added to a list of historical values.
270691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
2707cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Only applies to {@link #ACTION_MOVE} or {@link #ACTION_HOVER_MOVE} events.
27089822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     *
2709c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param eventTime The time stamp (in ms) for this data.
2710c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerCoords The new pointer coordinates.
27119822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param metaState Meta key state.
27129822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
2713c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final void addBatch(long eventTime, PointerCoords[] pointerCoords, int metaState) {
271491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeAddBatch(mNativePtr, eventTime * NS_PER_MS, pointerCoords, metaState);
27159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2716cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
2717fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
27189d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * Adds all of the movement samples of the specified event to this one if
27199d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * it is compatible.  To be compatible, the event must have the same device id,
27209d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * source, action, flags, pointer count, pointer properties.
27219d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     *
27229d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * Only applies to {@link #ACTION_MOVE} or {@link #ACTION_HOVER_MOVE} events.
27239d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     *
27249d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * @param event The event whose movements samples should be added to this one
27259d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * if possible.
27269d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * @return True if batching was performed or false if batching was not possible.
27279d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * @hide
27289d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     */
27299d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown    public final boolean addBatch(MotionEvent event) {
27309d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        final int action = nativeGetAction(mNativePtr);
27319d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        if (action != ACTION_MOVE && action != ACTION_HOVER_MOVE) {
27329d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return false;
27339d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
27349d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        if (action != nativeGetAction(event.mNativePtr)) {
27359d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return false;
27369d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
27379d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
27389d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        if (nativeGetDeviceId(mNativePtr) != nativeGetDeviceId(event.mNativePtr)
27399d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                || nativeGetSource(mNativePtr) != nativeGetSource(event.mNativePtr)
27409d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                || nativeGetFlags(mNativePtr) != nativeGetFlags(event.mNativePtr)) {
27419d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return false;
27429d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
27439d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
27449d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        final int pointerCount = nativeGetPointerCount(mNativePtr);
27459d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        if (pointerCount != nativeGetPointerCount(event.mNativePtr)) {
27469d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return false;
27479d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
27489d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
27499d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        synchronized (gSharedTempLock) {
27509d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            ensureSharedTempPointerCapacity(Math.max(pointerCount, 2));
27519d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            final PointerProperties[] pp = gSharedTempPointerProperties;
27529d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            final PointerCoords[] pc = gSharedTempPointerCoords;
27539d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
27549d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            for (int i = 0; i < pointerCount; i++) {
27559d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                nativeGetPointerProperties(mNativePtr, i, pp[0]);
27569d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                nativeGetPointerProperties(event.mNativePtr, i, pp[1]);
27579d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                if (!pp[0].equals(pp[1])) {
27589d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                    return false;
27599d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                }
27609d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            }
27619d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
27629d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            final int metaState = nativeGetMetaState(event.mNativePtr);
27639d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            final int historySize = nativeGetHistorySize(event.mNativePtr);
27649d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            for (int h = 0; h <= historySize; h++) {
27659d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                final int historyPos = (h == historySize ? HISTORY_CURRENT : h);
27669d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
27679d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                for (int i = 0; i < pointerCount; i++) {
27689d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                    nativeGetPointerCoords(event.mNativePtr, i, historyPos, pc[i]);
27699d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                }
27709d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
27719d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                final long eventTimeNanos = nativeGetEventTimeNanos(event.mNativePtr, historyPos);
27729d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                nativeAddBatch(mNativePtr, eventTimeNanos, pc, metaState);
27739d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            }
27749d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
27759d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        return true;
27769d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown    }
27779d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
27789d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown    /**
2779fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Returns true if all points in the motion event are completely within the specified bounds.
2780fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
2781fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
2782fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final boolean isWithinBoundsNoHistory(float left, float top,
2783fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            float right, float bottom) {
2784fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        final int pointerCount = nativeGetPointerCount(mNativePtr);
2785fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        for (int i = 0; i < pointerCount; i++) {
2786fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final float x = nativeGetAxisValue(mNativePtr, AXIS_X, i, HISTORY_CURRENT);
2787fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final float y = nativeGetAxisValue(mNativePtr, AXIS_Y, i, HISTORY_CURRENT);
2788fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            if (x < left || x > right || y < top || y > bottom) {
2789fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                return false;
2790fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
2791fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
2792fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return true;
2793fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
2794fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2795fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static final float clamp(float value, float low, float high) {
2796fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        if (value < low) {
2797fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return low;
2798fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        } else if (value > high) {
2799fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return high;
2800fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
2801fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return value;
2802fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
2803fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2804fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
2805fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Returns a new motion events whose points have been clamped to the specified bounds.
2806fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
2807fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
2808fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final MotionEvent clampNoHistory(float left, float top, float right, float bottom) {
2809fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        MotionEvent ev = obtain();
2810fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        synchronized (gSharedTempLock) {
2811fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int pointerCount = nativeGetPointerCount(mNativePtr);
2812fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2813fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ensureSharedTempPointerCapacity(pointerCount);
2814fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerProperties[] pp = gSharedTempPointerProperties;
2815fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerCoords[] pc = gSharedTempPointerCoords;
2816fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2817fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int i = 0; i < pointerCount; i++) {
2818fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                nativeGetPointerProperties(mNativePtr, i, pp[i]);
2819fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                nativeGetPointerCoords(mNativePtr, i, HISTORY_CURRENT, pc[i]);
2820fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                pc[i].x = clamp(pc[i].x, left, right);
2821fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                pc[i].y = clamp(pc[i].y, top, bottom);
2822fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
2823fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ev.mNativePtr = nativeInitialize(ev.mNativePtr,
2824fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetDeviceId(mNativePtr), nativeGetSource(mNativePtr),
2825fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetAction(mNativePtr), nativeGetFlags(mNativePtr),
2826fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetEdgeFlags(mNativePtr), nativeGetMetaState(mNativePtr),
2827fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetButtonState(mNativePtr),
2828fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetXOffset(mNativePtr), nativeGetYOffset(mNativePtr),
2829fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetXPrecision(mNativePtr), nativeGetYPrecision(mNativePtr),
2830fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetDownTimeNanos(mNativePtr),
2831fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetEventTimeNanos(mNativePtr, HISTORY_CURRENT),
2832fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    pointerCount, pp, pc);
2833fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return ev;
2834fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
2835fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
2836fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2837fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
2838fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Gets an integer where each pointer id present in the event is marked as a bit.
2839fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
2840fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
2841fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final int getPointerIdBits() {
2842fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        int idBits = 0;
2843fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        final int pointerCount = nativeGetPointerCount(mNativePtr);
2844fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        for (int i = 0; i < pointerCount; i++) {
2845fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            idBits |= 1 << nativeGetPointerId(mNativePtr, i);
2846fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
2847fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return idBits;
2848fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
2849fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2850fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
2851fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Splits a motion event such that it includes only a subset of pointer ids.
2852fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
2853fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
2854fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final MotionEvent split(int idBits) {
2855fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        MotionEvent ev = obtain();
2856fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        synchronized (gSharedTempLock) {
2857fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int oldPointerCount = nativeGetPointerCount(mNativePtr);
2858fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ensureSharedTempPointerCapacity(oldPointerCount);
2859fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerProperties[] pp = gSharedTempPointerProperties;
2860fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerCoords[] pc = gSharedTempPointerCoords;
2861fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int[] map = gSharedTempPointerIndexMap;
2862fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2863fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int oldAction = nativeGetAction(mNativePtr);
2864fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int oldActionMasked = oldAction & ACTION_MASK;
2865fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int oldActionPointerIndex = (oldAction & ACTION_POINTER_INDEX_MASK)
2866fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    >> ACTION_POINTER_INDEX_SHIFT;
2867fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int newActionPointerIndex = -1;
2868fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int newPointerCount = 0;
2869fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int newIdBits = 0;
2870fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int i = 0; i < oldPointerCount; i++) {
2871fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                nativeGetPointerProperties(mNativePtr, i, pp[newPointerCount]);
2872fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                final int idBit = 1 << pp[newPointerCount].id;
2873fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                if ((idBit & idBits) != 0) {
2874fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    if (i == oldActionPointerIndex) {
2875fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                        newActionPointerIndex = newPointerCount;
2876fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    }
2877fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    map[newPointerCount] = i;
2878fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    newPointerCount += 1;
2879fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    newIdBits |= idBit;
2880fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                }
2881fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
2882fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2883fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            if (newPointerCount == 0) {
2884fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                throw new IllegalArgumentException("idBits did not match any ids in the event");
2885fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
2886fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2887fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int newAction;
2888fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            if (oldActionMasked == ACTION_POINTER_DOWN || oldActionMasked == ACTION_POINTER_UP) {
2889fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                if (newActionPointerIndex < 0) {
2890fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    // An unrelated pointer changed.
2891fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    newAction = ACTION_MOVE;
2892fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                } else if (newPointerCount == 1) {
2893fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    // The first/last pointer went down/up.
2894fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    newAction = oldActionMasked == ACTION_POINTER_DOWN
2895fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            ? ACTION_DOWN : ACTION_UP;
2896fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                } else {
2897fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    // A secondary pointer went down/up.
2898fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    newAction = oldActionMasked
2899fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            | (newActionPointerIndex << ACTION_POINTER_INDEX_SHIFT);
2900fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                }
2901fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            } else {
2902fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                // Simple up/down/cancel/move or other motion action.
2903fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                newAction = oldAction;
2904fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
2905fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2906fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int historySize = nativeGetHistorySize(mNativePtr);
2907fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int h = 0; h <= historySize; h++) {
2908fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                final int historyPos = h == historySize ? HISTORY_CURRENT : h;
2909fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2910fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                for (int i = 0; i < newPointerCount; i++) {
2911fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetPointerCoords(mNativePtr, map[i], historyPos, pc[i]);
2912fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                }
2913fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2914fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                final long eventTimeNanos = nativeGetEventTimeNanos(mNativePtr, historyPos);
2915fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                if (h == 0) {
2916fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    ev.mNativePtr = nativeInitialize(ev.mNativePtr,
2917fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetDeviceId(mNativePtr), nativeGetSource(mNativePtr),
2918fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            newAction, nativeGetFlags(mNativePtr),
2919fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetEdgeFlags(mNativePtr), nativeGetMetaState(mNativePtr),
2920fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetButtonState(mNativePtr),
2921fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetXOffset(mNativePtr), nativeGetYOffset(mNativePtr),
2922fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetXPrecision(mNativePtr), nativeGetYPrecision(mNativePtr),
2923fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetDownTimeNanos(mNativePtr), eventTimeNanos,
2924fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            newPointerCount, pp, pc);
2925fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                } else {
2926fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeAddBatch(ev.mNativePtr, eventTimeNanos, pc, 0);
2927fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                }
2928fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
2929fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return ev;
2930fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
2931fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
2932fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
29339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
29349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
2935fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        StringBuilder msg = new StringBuilder();
2936fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append("MotionEvent { action=").append(actionToString(getAction()));
2937fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2938fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        final int pointerCount = getPointerCount();
2939fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        for (int i = 0; i < pointerCount; i++) {
2940fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            msg.append(", id[").append(i).append("]=").append(getPointerId(i));
2941fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            msg.append(", x[").append(i).append("]=").append(getX(i));
2942fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            msg.append(", y[").append(i).append("]=").append(getY(i));
2943fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            msg.append(", toolType[").append(i).append("]=").append(
2944fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    toolTypeToString(getToolType(i)));
2945fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
2946fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
29478134681b25dfff814ffeaad8ff70e84316c1869fJeff Brown        msg.append(", buttonState=").append(MotionEvent.buttonStateToString(getButtonState()));
2948fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", metaState=").append(KeyEvent.metaStateToString(getMetaState()));
2949fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", flags=0x").append(Integer.toHexString(getFlags()));
2950fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", edgeFlags=0x").append(Integer.toHexString(getEdgeFlags()));
2951fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", pointerCount=").append(pointerCount);
2952fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", historySize=").append(getHistorySize());
2953fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", eventTime=").append(getEventTime());
2954fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", downTime=").append(getDownTime());
2955fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", deviceId=").append(getDeviceId());
2956fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", source=0x").append(Integer.toHexString(getSource()));
2957fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(" }");
2958fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return msg.toString();
2959497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown    }
2960497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown
2961497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown    /**
2962497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown     * Returns a string that represents the symbolic name of the specified action
296391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * such as "ACTION_DOWN", "ACTION_POINTER_DOWN(3)" or an equivalent numeric constant
296491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * such as "35" if unknown.
2965497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown     *
2966497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown     * @param action The action.
2967497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown     * @return The symbolic name of the specified action.
2968497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown     * @hide
2969497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown     */
2970497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown    public static String actionToString(int action) {
2971497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown        switch (action) {
2972497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_DOWN:
2973497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_DOWN";
2974497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_UP:
2975497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_UP";
2976497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_CANCEL:
2977497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_CANCEL";
297833bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown            case ACTION_OUTSIDE:
297933bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown                return "ACTION_OUTSIDE";
2980497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_MOVE:
2981497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_MOVE";
2982cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown            case ACTION_HOVER_MOVE:
2983cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown                return "ACTION_HOVER_MOVE";
298433bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown            case ACTION_SCROLL:
298533bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown                return "ACTION_SCROLL";
2986a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown            case ACTION_HOVER_ENTER:
2987a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown                return "ACTION_HOVER_ENTER";
2988a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown            case ACTION_HOVER_EXIT:
2989a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown                return "ACTION_HOVER_EXIT";
2990497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown        }
2991497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown        int index = (action & ACTION_POINTER_INDEX_MASK) >> ACTION_POINTER_INDEX_SHIFT;
2992497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown        switch (action & ACTION_MASK) {
2993497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_POINTER_DOWN:
2994497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_POINTER_DOWN(" + index + ")";
2995497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_POINTER_UP:
2996497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_POINTER_UP(" + index + ")";
2997497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            default:
2998497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return Integer.toString(action);
2999497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown        }
30009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
30019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
300291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
300391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * Returns a string that represents the symbolic name of the specified axis
30046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * such as "AXIS_X" or an equivalent numeric constant such as "42" if unknown.
300591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
300691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param axis The axis
300791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @return The symbolic name of the specified axis.
300891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     */
300991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static String axisToString(int axis) {
30106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        String symbolicName = AXIS_SYMBOLIC_NAMES.get(axis);
30116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        return symbolicName != null ? symbolicName : Integer.toString(axis);
30126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    }
30136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
30146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
3015cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Gets an axis by its symbolic name such as "AXIS_X" or an
3016cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * equivalent numeric constant such as "42".
30176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
30186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @param symbolicName The symbolic name of the axis.
30196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @return The axis or -1 if not found.
30206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #keycodeToString
30216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
30226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static int axisFromString(String symbolicName) {
30236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        if (symbolicName == null) {
30246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown            throw new IllegalArgumentException("symbolicName must not be null");
30256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        }
30266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
30276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        final int count = AXIS_SYMBOLIC_NAMES.size();
30286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        for (int i = 0; i < count; i++) {
30296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown            if (symbolicName.equals(AXIS_SYMBOLIC_NAMES.valueAt(i))) {
30306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                return i;
30316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown            }
30326f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        }
30336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
30346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        try {
30356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown            return Integer.parseInt(symbolicName, 10);
30366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        } catch (NumberFormatException ex) {
30376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown            return -1;
303891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
303991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
304091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
3041fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
3042fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Returns a string that represents the symbolic name of the specified combined
3043fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * button state flags such as "0", "BUTTON_PRIMARY",
3044fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * "BUTTON_PRIMARY|BUTTON_SECONDARY" or an equivalent numeric constant such as "0x10000000"
3045fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * if unknown.
3046fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
3047fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param buttonState The button state.
3048fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @return The symbolic name of the specified combined button state flags.
3049fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
3050fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
3051fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static String buttonStateToString(int buttonState) {
3052fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        if (buttonState == 0) {
3053fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return "0";
3054fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3055fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        StringBuilder result = null;
3056fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        int i = 0;
3057fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        while (buttonState != 0) {
3058fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final boolean isSet = (buttonState & 1) != 0;
3059fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            buttonState >>>= 1; // unsigned shift!
3060fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            if (isSet) {
3061fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                final String name = BUTTON_SYMBOLIC_NAMES[i];
3062fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                if (result == null) {
3063fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    if (buttonState == 0) {
3064fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                        return name;
3065fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    }
3066fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    result = new StringBuilder(name);
3067fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                } else {
3068fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    result.append('|');
3069fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    result.append(name);
3070fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                }
3071fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3072fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            i += 1;
3073fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3074fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return result.toString();
3075fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
3076fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3077fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
3078fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Returns a string that represents the symbolic name of the specified tool type
3079fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * such as "TOOL_TYPE_FINGER" or an equivalent numeric constant such as "42" if unknown.
3080fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
3081fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param toolType The tool type.
3082fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @return The symbolic name of the specified tool type.
3083fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
3084fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
3085fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static String toolTypeToString(int toolType) {
3086fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        String symbolicName = TOOL_TYPE_SYMBOLIC_NAMES.get(toolType);
3087fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return symbolicName != null ? symbolicName : Integer.toString(toolType);
3088fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
3089fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
30909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Parcelable.Creator<MotionEvent> CREATOR
30919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            = new Parcelable.Creator<MotionEvent>() {
30929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public MotionEvent createFromParcel(Parcel in) {
30936ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown            in.readInt(); // skip token, we already know this is a MotionEvent
30946ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown            return MotionEvent.createFromParcelBody(in);
30959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
30969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public MotionEvent[] newArray(int size) {
30989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new MotionEvent[size];
30999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
31009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
31019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
31026ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown    /** @hide */
31036ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown    public static MotionEvent createFromParcelBody(Parcel in) {
310491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        MotionEvent ev = obtain();
310591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        ev.mNativePtr = nativeReadFromParcel(ev.mNativePtr, in);
31066ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown        return ev;
31076ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown    }
310891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
31099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel out, int flags) {
31106ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown        out.writeInt(PARCEL_TOKEN_MOTION_EVENT);
311191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeWriteToParcel(mNativePtr, out);
31129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
311391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
3114c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
3115c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Transfer object for pointer coordinates.
3116c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
3117fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Objects of this type can be used to specify the pointer coordinates when
3118fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * creating new {@link MotionEvent} objects and to query pointer coordinates
3119fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * in bulk.
3120c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
3121c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Refer to {@link InputDevice} for information about how different kinds of
3122c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * input devices and sources represent pointer coordinates.
3123c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
3124c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final class PointerCoords {
312591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        private static final int INITIAL_PACKED_AXIS_VALUES = 8;
31266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        private long mPackedAxisBits;
312791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        private float[] mPackedAxisValues;
312891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
312991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
313091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Creates a pointer coords object with all axes initialized to zero.
313191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
313291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public PointerCoords() {
313391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
313491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
313591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
313691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Creates a pointer coords object as a copy of the
313791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * contents of another pointer coords object.
313891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
313991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @param other The pointer coords object to copy.
314091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
314191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public PointerCoords(PointerCoords other) {
314291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            copyFrom(other);
314391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
314491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
3145fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /** @hide */
3146fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public static PointerCoords[] createArray(int size) {
3147fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            PointerCoords[] array = new PointerCoords[size];
3148fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int i = 0; i < size; i++) {
3149fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                array[i] = new PointerCoords();
3150fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3151fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return array;
3152fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3153fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3154c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
31556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown         * The X component of the pointer movement.
315691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
315791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_X
3158c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3159c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float x;
3160c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3161c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
31626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown         * The Y component of the pointer movement.
316391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
316491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_Y
3165c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3166c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float y;
3167c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3168c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
316991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * A normalized value that describes the pressure applied to the device
317091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * by a finger or other tool.
3171c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The pressure generally ranges from 0 (no pressure at all) to 1 (normal pressure),
317291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * although values higher than 1 may be generated depending on the calibration of
3173c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * the input device.
317491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
317591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_PRESSURE
3176c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3177c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float pressure;
3178c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3179c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
318091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * A normalized value that describes the approximate size of the pointer touch area
318191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * in relation to the maximum detectable size of the device.
318291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * It represents some approximation of the area of the screen being
3183c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * pressed; the actual value in pixels corresponding to the
3184c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * touch is normalized with the device specific range of values
3185c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * and scaled to a value between 0 and 1. The value of size can be used to
3186c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * determine fat touch events.
318791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
318891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_SIZE
3189c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3190c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float size;
3191c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3192c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
3193c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The length of the major axis of an ellipse that describes the touch area at
3194c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * the point of contact.
319591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * If the device is a touch screen, the length is reported in pixels, otherwise it is
319691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * reported in device-specific units.
319791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
319891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_TOUCH_MAJOR
3199c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3200c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float touchMajor;
3201c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3202c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
3203c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The length of the minor axis of an ellipse that describes the touch area at
3204c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * the point of contact.
320591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * If the device is a touch screen, the length is reported in pixels, otherwise it is
320691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * reported in device-specific units.
320791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
320891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_TOUCH_MINOR
3209c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3210c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float touchMinor;
3211c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3212c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
3213c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The length of the major axis of an ellipse that describes the size of
3214c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * the approaching tool.
3215c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The tool area represents the estimated size of the finger or pen that is
3216c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * touching the device independent of its actual touch area at the point of contact.
321791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * If the device is a touch screen, the length is reported in pixels, otherwise it is
321891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * reported in device-specific units.
321991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
322091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_TOOL_MAJOR
3221c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3222c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float toolMajor;
3223c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3224c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
3225c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The length of the minor axis of an ellipse that describes the size of
3226c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * the approaching tool.
3227c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The tool area represents the estimated size of the finger or pen that is
3228c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * touching the device independent of its actual touch area at the point of contact.
322991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * If the device is a touch screen, the length is reported in pixels, otherwise it is
323091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * reported in device-specific units.
323191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
323291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_TOOL_MINOR
3233c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3234c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float toolMinor;
3235c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3236c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
3237c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The orientation of the touch area and tool area in radians clockwise from vertical.
32386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown         * An angle of 0 radians indicates that the major axis of contact is oriented
3239c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * upwards, is perfectly circular or is of unknown orientation.  A positive angle
3240c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * indicates that the major axis of contact is oriented to the right.  A negative angle
3241c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * indicates that the major axis of contact is oriented to the left.
32426d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown         * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians
3243c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * (finger pointing fully right).
324491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
324591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_ORIENTATION
3246c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3247c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float orientation;
324891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
324991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
325091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Clears the contents of this object.
325191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Resets all axes to zero.
325291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
325391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public void clear() {
325491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            mPackedAxisBits = 0;
325591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
325691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            x = 0;
325791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            y = 0;
325891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            pressure = 0;
325991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            size = 0;
326091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            touchMajor = 0;
326191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            touchMinor = 0;
326291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            toolMajor = 0;
326391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            toolMinor = 0;
326491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            orientation = 0;
3265c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        }
326691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
326791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
326891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Copies the contents of another pointer coords object.
326991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
327091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @param other The pointer coords object to copy.
327191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
327291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public void copyFrom(PointerCoords other) {
32736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown            final long bits = other.mPackedAxisBits;
327491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            mPackedAxisBits = bits;
327591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            if (bits != 0) {
327691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                final float[] otherValues = other.mPackedAxisValues;
32776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                final int count = Long.bitCount(bits);
327891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                float[] values = mPackedAxisValues;
327991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                if (values == null || count > values.length) {
328091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    values = new float[otherValues.length];
328191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    mPackedAxisValues = values;
328291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                }
328391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                System.arraycopy(otherValues, 0, values, 0, count);
328491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            }
328591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
328691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            x = other.x;
328791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            y = other.y;
328891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            pressure = other.pressure;
328991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            size = other.size;
329091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            touchMajor = other.touchMajor;
329191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            touchMinor = other.touchMinor;
329291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            toolMajor = other.toolMajor;
329391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            toolMinor = other.toolMinor;
329491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            orientation = other.orientation;
3295c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        }
329691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
329791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
329891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Gets the value associated with the specified axis.
329991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
330091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @param axis The axis identifier for the axis value to retrieve.
330191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @return The value associated with the axis, or 0 if none.
330291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
330391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_X
330491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_Y
330591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
330691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public float getAxisValue(int axis) {
330791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            switch (axis) {
330891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_X:
330991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return x;
331091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_Y:
331191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return y;
331291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_PRESSURE:
331391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return pressure;
331491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_SIZE:
331591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return size;
331691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOUCH_MAJOR:
331791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return touchMajor;
331891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOUCH_MINOR:
331991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return touchMinor;
332091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOOL_MAJOR:
332191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return toolMajor;
332291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOOL_MINOR:
332391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return toolMinor;
332491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_ORIENTATION:
332591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return orientation;
332691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                default: {
33276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    if (axis < 0 || axis > 63) {
33286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                        throw new IllegalArgumentException("Axis out of range.");
33296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    }
33306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    final long bits = mPackedAxisBits;
33316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    final long axisBit = 1L << axis;
333291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    if ((bits & axisBit) == 0) {
333391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                        return 0;
333491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    }
33356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    final int index = Long.bitCount(bits & (axisBit - 1L));
333691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return mPackedAxisValues[index];
333791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                }
333891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            }
3339c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        }
334091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
334191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
334291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Sets the value associated with the specified axis.
334391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
334491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @param axis The axis identifier for the axis value to assign.
334591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @param value The value to set.
334691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
334791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_X
334891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_Y
334991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
335091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public void setAxisValue(int axis, float value) {
335191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            switch (axis) {
335291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_X:
335391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    x = value;
335491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
335591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_Y:
335691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    y = value;
335791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
335891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_PRESSURE:
335991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    pressure = value;
336091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
336191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_SIZE:
336291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    size = value;
336391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
336491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOUCH_MAJOR:
336591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    touchMajor = value;
336691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
336791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOUCH_MINOR:
336891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    touchMinor = value;
336991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
337091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOOL_MAJOR:
337191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    toolMajor = value;
337291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
337391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOOL_MINOR:
337491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    toolMinor = value;
337591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
337691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_ORIENTATION:
337791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    orientation = value;
337891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
337991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                default: {
33806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    if (axis < 0 || axis > 63) {
33816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                        throw new IllegalArgumentException("Axis out of range.");
33826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    }
33836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    final long bits = mPackedAxisBits;
33846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    final long axisBit = 1L << axis;
33856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    final int index = Long.bitCount(bits & (axisBit - 1L));
338691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    float[] values = mPackedAxisValues;
338791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    if ((bits & axisBit) == 0) {
338891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                        if (values == null) {
338991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                            values = new float[INITIAL_PACKED_AXIS_VALUES];
339091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                            mPackedAxisValues = values;
339191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                        } else {
33926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                            final int count = Long.bitCount(bits);
339391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                            if (count < values.length) {
339491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                if (index != count) {
339591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                    System.arraycopy(values, index, values, index + 1,
339691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                            count - index);
339791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                }
339891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                            } else {
339991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                float[] newValues = new float[count * 2];
340091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                System.arraycopy(values, 0, newValues, 0, index);
340191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                System.arraycopy(values, index, newValues, index + 1,
340291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                        count - index);
340391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                values = newValues;
340491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                mPackedAxisValues = values;
340591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                            }
340691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                        }
340791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                        mPackedAxisBits = bits | axisBit;
340891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    }
340991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    values[index] = value;
341091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                }
341191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            }
3412c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        }
3413c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
3414fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3415fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
3416fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Transfer object for pointer properties.
3417fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
3418fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Objects of this type can be used to specify the pointer id and tool type
3419fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * when creating new {@link MotionEvent} objects and to query pointer properties in bulk.
3420fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
3421fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final class PointerProperties {
3422fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3423fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Creates a pointer properties object with an invalid pointer id.
3424fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3425fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public PointerProperties() {
3426fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            clear();
3427fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3428fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3429fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3430fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Creates a pointer properties object as a copy of the contents of
3431fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * another pointer properties object.
3432fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * @param other
3433fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3434fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public PointerProperties(PointerProperties other) {
3435fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            copyFrom(other);
3436fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3437fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3438fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /** @hide */
3439fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public static PointerProperties[] createArray(int size) {
3440fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            PointerProperties[] array = new PointerProperties[size];
3441fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int i = 0; i < size; i++) {
3442fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                array[i] = new PointerProperties();
3443fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3444fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return array;
3445fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3446fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3447fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3448fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * The pointer id.
3449fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Initially set to {@link #INVALID_POINTER_ID} (-1).
3450fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         *
3451fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * @see MotionEvent#getPointerId(int)
3452fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3453fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public int id;
3454fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3455fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3456fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * The pointer tool type.
3457fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Initially set to 0.
3458fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         *
3459fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * @see MotionEvent#getToolType(int)
3460fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3461fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public int toolType;
3462fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3463fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3464fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Resets the pointer properties to their initial values.
3465fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3466fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public void clear() {
3467fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            id = INVALID_POINTER_ID;
3468fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            toolType = TOOL_TYPE_UNKNOWN;
3469fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3470fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3471fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3472fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Copies the contents of another pointer properties object.
3473fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         *
3474fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * @param other The pointer properties object to copy.
3475fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3476fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public void copyFrom(PointerProperties other) {
3477fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            id = other.id;
3478fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            toolType = other.toolType;
3479fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
34809d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
34819d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        @Override
34829d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        public boolean equals(Object other) {
34839d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            if (other instanceof PointerProperties) {
34849d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                return equals((PointerProperties)other);
34859d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            }
34869d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return false;
34879d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
34889d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
34899d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        private boolean equals(PointerProperties other) {
34909d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return other != null && id == other.id && toolType == other.toolType;
34919d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
34929d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
34939d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        @Override
34949d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        public int hashCode() {
34959d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return id | (toolType << 8);
34969d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
3497fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
34989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3499