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;
170337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright    private static final String LABEL_PREFIX = "AXIS_";
171fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
172fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
173fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * An invalid pointer id.
174fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
175fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * This value (-1) can be used as a placeholder to indicate that a pointer id
176fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * has not been assigned or is not available.  It cannot appear as
177fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * a pointer id inside a {@link MotionEvent}.
178fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
179fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int INVALID_POINTER_ID = -1;
180fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * Bit mask of the parts of the action code that are the action itself.
1839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
1849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public static final int ACTION_MASK             = 0xff;
1859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
1869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
187fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A pressed gesture has started, the
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * motion contains the initial starting location.
189fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
190fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * This is also a good time to check the button state to distinguish
191fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * secondary and tertiary button clicks and handle them appropriately.
192fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Use {@link #getButtonState} to retrieve the button state.
193fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACTION_DOWN             = 0;
1969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
198fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A pressed gesture has finished, the
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * motion contains the final release location as well as any intermediate
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * points since the last down or move event.
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACTION_UP               = 1;
2039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
205fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A change has happened during a
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * press gesture (between {@link #ACTION_DOWN} and {@link #ACTION_UP}).
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The motion contains the most recent point, as well as any intermediate
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * points since the last down or move event.
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACTION_MOVE             = 2;
2119822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
213fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: The current gesture has been aborted.
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * You will not receive any more points in it.  You should treat this as
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * an up event, but not perform any action that you normally would.
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACTION_CANCEL           = 3;
2189822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
220fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A movement has happened outside of the
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * normal bounds of the UI element.  This does not provide a full gesture,
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * but only the initial location of the movement/touch.
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACTION_OUTSIDE          = 4;
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
227fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A non-primary pointer has gone down.
228fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
229fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Use {@link #getActionIndex} to retrieve the index of the pointer that changed.
230fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p><p>
231fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * The index is encoded in the {@link #ACTION_POINTER_INDEX_MASK} bits of the
232fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * unmasked action returned by {@link #getAction}.
233fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
2349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
2359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public static final int ACTION_POINTER_DOWN     = 5;
2369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
2379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
238fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A non-primary pointer has gone up.
239fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
240fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Use {@link #getActionIndex} to retrieve the index of the pointer that changed.
241fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p><p>
242fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * The index is encoded in the {@link #ACTION_POINTER_INDEX_MASK} bits of the
243fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * unmasked action returned by {@link #getAction}.
244fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
2459822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
246b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_UP       = 6;
247cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown
248cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown    /**
249fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: A change happened but the pointer
250cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * is not down (unlike {@link #ACTION_MOVE}).  The motion contains the most
251cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * recent point, as well as any intermediate points since the last
252cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * hover move event.
25333bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * <p>
254a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is always delivered to the window or view under the pointer.
255a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * </p><p>
25633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * This action is not a touch event so it is delivered to
25733bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * {@link View#onGenericMotionEvent(MotionEvent)} rather than
25833bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * {@link View#onTouchEvent(MotionEvent)}.
25933bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * </p>
260cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     */
261cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown    public static final int ACTION_HOVER_MOVE       = 7;
262cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown
2639822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
264fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: The motion event contains relative
26533bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * vertical and/or horizontal scroll offsets.  Use {@link #getAxisValue(int)}
26633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * to retrieve the information from {@link #AXIS_VSCROLL} and {@link #AXIS_HSCROLL}.
26733bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * The pointer may or may not be down when this event is dispatched.
268fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
269a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is always delivered to the window or view under the pointer, which
270a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * may not be the window or view currently touched.
271fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p><p>
27233bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * This action is not a touch event so it is delivered to
27333bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * {@link View#onGenericMotionEvent(MotionEvent)} rather than
27433bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * {@link View#onTouchEvent(MotionEvent)}.
27533bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * </p>
27633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     */
27733bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown    public static final int ACTION_SCROLL           = 8;
27833bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown
27933bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown    /**
280fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: The pointer is not down but has entered the
281a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * boundaries of a window or view.
282a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * <p>
283a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is always delivered to the window or view under the pointer.
284a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * </p><p>
285a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is not a touch event so it is delivered to
286a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * {@link View#onGenericMotionEvent(MotionEvent)} rather than
287a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * {@link View#onTouchEvent(MotionEvent)}.
288a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * </p>
289a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     */
290a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown    public static final int ACTION_HOVER_ENTER      = 9;
291a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown
292a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown    /**
293fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Constant for {@link #getActionMasked}: The pointer is not down but has exited the
294a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * boundaries of a window or view.
295a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * <p>
296a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is always delivered to the window or view that was previously under the pointer.
297a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * </p><p>
298a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * This action is not a touch event so it is delivered to
299a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * {@link View#onGenericMotionEvent(MotionEvent)} rather than
300a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * {@link View#onTouchEvent(MotionEvent)}.
301a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * </p>
302a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     */
303a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown    public static final int ACTION_HOVER_EXIT       = 10;
304a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown
305a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown    /**
3065bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * Constant for {@link #getActionMasked}: A button has been pressed.
3075bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     *
3085bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * <p>
3095bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * Use {@link #getActionButton()} to get which button was pressed.
3105bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * </p><p>
3115bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * This action is not a touch event so it is delivered to
3125bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * {@link View#onGenericMotionEvent(MotionEvent)} rather than
3135bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * {@link View#onTouchEvent(MotionEvent)}.
3145bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * </p>
3155bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     */
3165bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    public static final int ACTION_BUTTON_PRESS   = 11;
3175bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright
3185bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    /**
3195bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * Constant for {@link #getActionMasked}: A button has been released.
3205bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     *
3215bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * <p>
3225bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * Use {@link #getActionButton()} to get which button was released.
3235bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * </p><p>
3245bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * This action is not a touch event so it is delivered to
3255bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * {@link View#onGenericMotionEvent(MotionEvent)} rather than
3265bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * {@link View#onTouchEvent(MotionEvent)}.
3275bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * </p>
3285bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     */
3295bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    public static final int ACTION_BUTTON_RELEASE  = 12;
3305bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright
3315bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    /**
332b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * Bits in the action code that represent a pointer index, used with
333b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * {@link #ACTION_POINTER_DOWN} and {@link #ACTION_POINTER_UP}.  Shifting
334b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * down by {@link #ACTION_POINTER_INDEX_SHIFT} provides the actual pointer
335b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * index where the data for the pointer going up or down can be found; you can
336b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * get its identifier with {@link #getPointerId(int)} and the actual
337b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data with {@link #getX(int)} etc.
338fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
339fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getActionIndex
3409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
341b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_INDEX_MASK  = 0xff00;
3429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
344b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * Bit shift for the action bits holding the pointer index as
345b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * defined by {@link #ACTION_POINTER_INDEX_MASK}.
346fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
347fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getActionIndex
3489822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
349b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_INDEX_SHIFT = 8;
350fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3519822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
352b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
353b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_DOWN}.
3549822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
355b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
356b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_1_DOWN   = ACTION_POINTER_DOWN | 0x0000;
357b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn
358b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    /**
359b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
360b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_DOWN}.
361b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     */
362b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
363b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_2_DOWN   = ACTION_POINTER_DOWN | 0x0100;
3649822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3659822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
366b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
367b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_DOWN}.
3689822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
369b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
370b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public static final int ACTION_POINTER_3_DOWN   = ACTION_POINTER_DOWN | 0x0200;
371b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn
372b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    /**
373b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
374b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_UP}.
375b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     */
376b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
3779822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public static final int ACTION_POINTER_1_UP     = ACTION_POINTER_UP | 0x0000;
3789822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3799822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
380b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
381b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_UP}.
3829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
383b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
3849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public static final int ACTION_POINTER_2_UP     = ACTION_POINTER_UP | 0x0100;
3859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
387b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the
388b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * data index associated with {@link #ACTION_POINTER_UP}.
3899822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
390b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
3919822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public static final int ACTION_POINTER_3_UP     = ACTION_POINTER_UP | 0x0200;
3929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
3939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
394b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Renamed to {@link #ACTION_POINTER_INDEX_MASK} to match
395b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * the actual data contained in these bits.
3969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
397b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
3980dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public static final int ACTION_POINTER_ID_MASK  = 0xff00;
3999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
4009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
401b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * @deprecated Renamed to {@link #ACTION_POINTER_INDEX_SHIFT} to match
402b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * the actual data contained in these bits.
4039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
404b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    @Deprecated
4050dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public static final int ACTION_POINTER_ID_SHIFT = 8;
4069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
40785a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown    /**
40885a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * This flag indicates that the window that received this motion event is partly
40985a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * or wholly obscured by another visible window above it.  This flag is set to true
41085a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * even if the event did not directly pass through the obscured area.
41185a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * A security sensitive application can check this flag to identify situations in which
41285a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * a malicious application may have covered up part of its content for the purpose
41385a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * of misleading the user or hijacking touches.  An appropriate response might be
41485a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * to drop the suspect touches or to take additional precautions to confirm the user's
41585a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * actual intent.
41685a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     */
41785a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown    public static final int FLAG_WINDOW_IS_OBSCURED = 0x1;
418cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4200625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     * This flag indicates that the window that received this motion event is partly
4210625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     * or wholly obscured by another visible window above it.  This flag is set to true
4220625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     * even if the event did not directly pass through the obscured area.
4230625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     * A security sensitive application can check this flag to identify situations in which
4240625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     * a malicious application may have covered up part of its content for the purpose
4250625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     * of misleading the user or hijacking touches.  An appropriate response might be
4260625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     * to drop the suspect touches or to take additional precautions to confirm the user's
4270625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     * actual intent.
4280625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     *
4290625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     * Unlike FLAG_WINDOW_IS_OBSCURED, this is actually true.
4300625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     * @hide
4310625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright     */
4320625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright    public static final int FLAG_WINDOW_IS_PARTIALLY_OBSCURED = 0x2;
4330625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright
4340625e11b3765890f7a8bda7006d1a8b29a492f7fMichael Wright    /**
43521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * Private flag that indicates when the system has detected that this motion event
43621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * may be inconsistent with respect to the sequence of previously delivered motion events,
43721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * such as when a pointer move event is sent but the pointer is not down.
43821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     *
43921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * @hide
44021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * @see #isTainted
44121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     * @see #setTainted
44221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown     */
44321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    public static final int FLAG_TAINTED = 0x80000000;
44421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown
44521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    /**
446ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * Private flag indicating that this event was synthesized by the system and
447ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * should be delivered to the accessibility focused view first. When being
448ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * dispatched such an event is not handled by predecessors of the accessibility
449ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * focused view and after the event reaches that view the flag is cleared and
450ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * normal event dispatch is performed. This ensures that the platform can click
451ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * on any view that has accessibility focus which is semantically equivalent to
452ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * asking the view to perform a click accessibility action but more generic as
453ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * views not implementing click action correctly can still be activated.
454ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     *
455ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * @hide
456ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * @see #isTargetAccessibilityFocus()
457ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     * @see #setTargetAccessibilityFocus(boolean)
458ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav     */
459ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav    public static final int FLAG_TARGET_ACCESSIBILITY_FOCUS = 0x40000000;
460ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav
461ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav
462ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav    /**
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag indicating the motion event intersected the top edge of the screen.
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int EDGE_TOP = 0x00000001;
466cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag indicating the motion event intersected the bottom edge of the screen.
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int EDGE_BOTTOM = 0x00000002;
471cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag indicating the motion event intersected the left edge of the screen.
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int EDGE_LEFT = 0x00000004;
476cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag indicating the motion event intersected the right edge of the screen.
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int EDGE_RIGHT = 0x00000008;
481cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
48291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
483fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: X axis of a motion event.
4846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
4856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
4866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the absolute X screen position of the center of
4876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * the touch contact area.  The units are display pixels.
4886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the absolute X surface position of the center of the touch
489cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * contact area.  The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
490cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * to query the effective range of values.
4916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a mouse, reports the absolute X screen position of the mouse pointer.
4926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are display pixels.
4936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a trackball, reports the relative horizontal displacement of the trackball.
4946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (left) to 1.0 (right).
4956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute X position of the joystick.
4966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (left) to 1.0 (right).
4976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
4986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
49991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
50091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getX(int)
50191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalX(int, int)
50291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#x
50391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
5049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
50591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_X = 0;
50691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
50791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
508fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Y axis of a motion event.
5096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
5106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
5116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the absolute Y screen position of the center of
5126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * the touch contact area.  The units are display pixels.
5136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the absolute Y surface position of the center of the touch
5146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * contact area.  The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
5156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to query the effective range of values.
5166f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a mouse, reports the absolute Y screen position of the mouse pointer.
5176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are display pixels.
5186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a trackball, reports the relative vertical displacement of the trackball.
5196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (up) to 1.0 (down).
5206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute Y position of the joystick.
5216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (up or far) to 1.0 (down or near).
5226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
5236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
52491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
52591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getY(int)
52691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalY(int, int)
52791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#y
52891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
529c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
53091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_Y = 1;
531c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
53291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
533fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Pressure axis of a motion event.
5346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
5356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
536cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * <li>For a touch screen or touch pad, reports the approximate pressure applied to the surface
5376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * by a finger or other tool.  The value is normalized to a range from
5386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * 0 (no pressure at all) to 1 (normal pressure), although values higher than 1
5396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * may be generated depending on the calibration of the input device.
5406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a trackball, the value is set to 1 if the trackball button is pressed
5416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * or 0 otherwise.
5426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a mouse, the value is set to 1 if the primary mouse button is pressed
5436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * or 0 otherwise.
5446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
5456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
54691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
54791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getPressure(int)
54891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalPressure(int, int)
54991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#pressure
55091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
551c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
55291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_PRESSURE = 2;
55391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
55491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
555fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Size axis of a motion event.
5566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
5576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
5586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen or touch pad, reports the approximate size of the contact area in
5596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * relation to the maximum detectable size for the device.  The value is normalized
5606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to a range from 0 (smallest detectable size) to 1 (largest detectable size),
561cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * although it is not a linear scale.  This value is of limited use.
5626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * To obtain calibrated size information, use
5636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * {@link #AXIS_TOUCH_MAJOR} or {@link #AXIS_TOOL_MAJOR}.
5646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
5656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
56691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
56791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getSize(int)
56891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalSize(int, int)
56991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#size
57091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
571c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
57291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_SIZE = 3;
573c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
57491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
575fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: TouchMajor axis of a motion event.
5766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
5776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
5786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the length of the major axis of an ellipse that
5796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the touch area at the point of contact.
5806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are display pixels.
5816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the length of the major axis of an ellipse that
5826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the touch area at the point of contact.
5836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
5846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to query the effective range of values.
5856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
5866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
58791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
58891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMajor(int)
58991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalTouchMajor(int, int)
59091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#touchMajor
59191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
592c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
59391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_TOUCH_MAJOR = 4;
59491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
59591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
596fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: TouchMinor axis of a motion event.
5976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
5986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
5996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the length of the minor axis of an ellipse that
6006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the touch area at the point of contact.
6016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are display pixels.
6026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the length of the minor axis of an ellipse that
6036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the touch area at the point of contact.
6046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
6056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to query the effective range of values.
6066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
6076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
6086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * When the touch is circular, the major and minor axis lengths will be equal to one another.
6096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
61091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
61191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMinor(int)
61291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalTouchMinor(int, int)
61391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#touchMinor
61491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
615c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
61691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_TOUCH_MINOR = 5;
617c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
61891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
619fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: ToolMajor axis of a motion event.
6206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
6216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
6226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the length of the major axis of an ellipse that
6236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the size of the approaching finger or tool used to make contact.
6246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the length of the major axis of an ellipse that
6256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the size of the approaching finger or tool used to make contact.
6266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
6276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to query the effective range of values.
6286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
6296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
6306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * When the touch is circular, the major and minor axis lengths will be equal to one another.
6316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
6326f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The tool size may be larger than the touch size since the tool may not be fully
6336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * in contact with the touch sensor.
6346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
63591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
63691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMajor(int)
63791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalToolMajor(int, int)
63891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#toolMajor
63991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
6409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
64191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_TOOL_MAJOR = 6;
64291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
64391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
644fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: ToolMinor axis of a motion event.
6456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
6466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
6476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen, reports the length of the minor axis of an ellipse that
6486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the size of the approaching finger or tool used to make contact.
6496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch pad, reports the length of the minor axis of an ellipse that
6506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * represents the size of the approaching finger or tool used to make contact.
6516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The units are device-dependent; use {@link InputDevice#getMotionRange(int)}
6526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to query the effective range of values.
6536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
6546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
6556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * When the touch is circular, the major and minor axis lengths will be equal to one another.
6566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
6576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The tool size may be larger than the touch size since the tool may not be fully
6586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * in contact with the touch sensor.
6596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
66091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
66191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMinor(int)
66291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalToolMinor(int, int)
66391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#toolMinor
66491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
6651e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn     */
66691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_TOOL_MINOR = 7;
66791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
66891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
669fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Orientation axis of a motion event.
6706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
6716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
6726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a touch screen or touch pad, reports the orientation of the finger
6736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * or tool in radians relative to the vertical plane of the device.
6746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * An angle of 0 radians indicates that the major axis of contact is oriented
67591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * upwards, is perfectly circular or is of unknown orientation.  A positive angle
67691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * indicates that the major axis of contact is oriented to the right.  A negative angle
67791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * indicates that the major axis of contact is oriented to the left.
67891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians
67991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * (finger pointing fully right).
68065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * <li>For a stylus, the orientation indicates the direction in which the stylus
68165fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * is pointing in relation to the vertical axis of the current orientation of the screen.
68265fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * The range is from -PI radians to PI radians, where 0 is pointing up,
68365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * -PI/2 radians is pointing left, -PI or PI radians is pointing down, and PI/2 radians
68465fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * is pointing right.  See also {@link #AXIS_TILT}.
6856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
6866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
68791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
68891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getOrientation(int)
68991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistoricalOrientation(int, int)
69091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see MotionEvent.PointerCoords#orientation
69191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see InputDevice#getMotionRange
6929e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown     */
69391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static final int AXIS_ORIENTATION = 8;
69491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
6956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
696fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Vertical Scroll axis of a motion event.
6976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
6986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
699cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * <li>For a mouse, reports the relative movement of the vertical scroll wheel.
70033bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * The value is normalized to a range from -1.0 (down) to 1.0 (up).
7016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
7036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * This axis should be used to scroll views vertically.
7046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_VSCROLL = 9;
7126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
714fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Horizontal Scroll axis of a motion event.
7156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7166f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
717cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * <li>For a mouse, reports the relative movement of the horizontal scroll wheel.
7186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (left) to 1.0 (right).
7196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p><p>
7216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * This axis should be used to scroll views horizontally.
7226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_HSCROLL = 10;
7306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
732fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Z axis of a motion event.
7336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
7356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute Z position of the joystick.
7366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (high) to 1.0 (low).
7376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <em>On game pads with two analog joysticks, this axis is often reinterpreted
7386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to report the absolute X position of the second joystick instead.</em>
7396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_Z = 11;
7486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
750fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: X Rotation axis of a motion event.
7516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
7536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute rotation angle about the X axis.
7546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (counter-clockwise) to 1.0 (clockwise).
7556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_RX = 12;
7646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
766fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Y Rotation axis of a motion event.
7676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
7696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute rotation angle about the Y axis.
7706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (counter-clockwise) to 1.0 (clockwise).
7716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_RY = 13;
7806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
782fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Z Rotation axis of a motion event.
7836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
7846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
7856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute rotation angle about the Z axis.
7866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (counter-clockwise) to 1.0 (clockwise).
7876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <em>On game pads with two analog joysticks, this axis is often reinterpreted
7886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * to report the absolute Y position of the second joystick instead.</em>
7896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
7906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
7916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
7926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
7936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
7946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
7956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
7966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
7976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_RZ = 14;
7986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
7996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
800fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Hat X axis of a motion event.
8016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
8026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
8036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute X position of the directional hat control.
8046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (left) to 1.0 (right).
8056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
8066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
8076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
8086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
8096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
8126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
8136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_HAT_X = 15;
8146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
8156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
816fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Hat Y axis of a motion event.
8176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
8186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
8196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute Y position of the directional hat control.
8206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from -1.0 (up) to 1.0 (down).
8216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
8226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
8236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
8246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
8256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
8286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
8296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_HAT_Y = 16;
8306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
8316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
832fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Left Trigger axis of a motion event.
8336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
8346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
8356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute position of the left trigger control.
8366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from 0.0 (released) to 1.0 (fully pressed).
8376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
8386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
8396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
8406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
8416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
8446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
8456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_LTRIGGER = 17;
8466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
8476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
848fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Right Trigger axis of a motion event.
8496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <p>
8506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <ul>
8516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * <li>For a joystick, reports the absolute position of the right trigger control.
8526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The value is normalized to a range from 0.0 (released) to 1.0 (fully pressed).
8536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </ul>
8546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * </p>
8556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
8566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
8576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
8606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
8616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_RTRIGGER = 18;
8626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
8636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
864fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Throttle axis of a motion event.
8653a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <p>
8663a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <ul>
8673a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <li>For a joystick, reports the absolute position of the throttle control.
8683a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * The value is normalized to a range from 0.0 (fully open) to 1.0 (fully closed).
8693a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </ul>
8703a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </p>
8713a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     *
8723a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getAxisValue(int, int)
8733a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8743a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8753a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see InputDevice#getMotionRange
8763a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     */
8773a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    public static final int AXIS_THROTTLE = 19;
8783a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown
8793a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    /**
880fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Rudder axis of a motion event.
8813a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <p>
8823a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <ul>
8833a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <li>For a joystick, reports the absolute position of the rudder control.
8843a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * The value is normalized to a range from -1.0 (turn left) to 1.0 (turn right).
8853a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </ul>
8863a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </p>
8873a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     *
8883a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getAxisValue(int, int)
8893a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
8903a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
8913a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see InputDevice#getMotionRange
8923a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     */
8933a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    public static final int AXIS_RUDDER = 20;
8943a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown
8953a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    /**
896fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Wheel axis of a motion event.
8973a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <p>
8983a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <ul>
8993a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <li>For a joystick, reports the absolute position of the steering wheel control.
9003a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * The value is normalized to a range from -1.0 (turn left) to 1.0 (turn right).
9013a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </ul>
9023a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </p>
9033a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     *
9043a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getAxisValue(int, int)
9053a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
9063a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
9073a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see InputDevice#getMotionRange
9083a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     */
9093a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    public static final int AXIS_WHEEL = 21;
9103a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown
9113a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    /**
912fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Gas axis of a motion event.
9133a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <p>
9143a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <ul>
9153a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <li>For a joystick, reports the absolute position of the gas (accelerator) control.
9163a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * The value is normalized to a range from 0.0 (no acceleration)
9173a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * to 1.0 (maximum acceleration).
9183a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </ul>
9193a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </p>
9203a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     *
9213a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getAxisValue(int, int)
9223a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
9233a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
9243a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see InputDevice#getMotionRange
9253a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     */
9263a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    public static final int AXIS_GAS = 22;
9273a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown
9283a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    /**
929fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Brake axis of a motion event.
9303a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <p>
9313a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <ul>
9323a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * <li>For a joystick, reports the absolute position of the brake control.
9333a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * The value is normalized to a range from 0.0 (no braking) to 1.0 (maximum braking).
9343a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </ul>
9353a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * </p>
9363a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     *
9373a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getAxisValue(int, int)
9383a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
9393a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
9403a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     * @see InputDevice#getMotionRange
9413a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown     */
9423a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    public static final int AXIS_BRAKE = 23;
9433a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown
9443a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown    /**
945fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Distance axis of a motion event.
946fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
947fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <ul>
948fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <li>For a stylus, reports the distance of the stylus from the screen.
94965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * A value of 0.0 indicates direct contact and larger values indicate increasing
95065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * distance from the surface.
951fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </ul>
952fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
953fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
954fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getAxisValue(int, int)
955fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
956fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
957fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see InputDevice#getMotionRange
958fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
959fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int AXIS_DISTANCE = 24;
960fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
961fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
96265fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * Axis constant: Tilt axis of a motion event.
96365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * <p>
96465fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * <ul>
96565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * <li>For a stylus, reports the tilt angle of the stylus in radians where
96665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * 0 radians indicates that the stylus is being held perpendicular to the
96765fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * surface, and PI/2 radians indicates that the stylus is being held flat
96865fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * against the surface.
96965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * </ul>
97065fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * </p>
97165fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     *
97265fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * @see #getAxisValue(int, int)
97365fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
97465fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int, int)
97565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     * @see InputDevice#getMotionRange
97665fd251c3913fc921468a3dad190810db19eb9dfJeff Brown     */
97765fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    public static final int AXIS_TILT = 25;
97865fd251c3913fc921468a3dad190810db19eb9dfJeff Brown
97965fd251c3913fc921468a3dad190810db19eb9dfJeff Brown    /**
98067322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     * Axis constant: Generic scroll axis of a motion event.
98167322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     * <p>
98267322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     * <ul>
98367322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     * <li>Reports the relative movement of the generic scrolling device.
98467322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     * </ul>
98567322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     * </p><p>
98667322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     * This axis should be used for scroll events that are neither strictly vertical nor horizontal.
98767322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     * A good example would be the rotation of a rotary encoder input device.
98867322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     * </p>
98967322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     *
99067322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     * @see #getAxisValue(int, int)
9918171658b9fdcbd8faf84aa01f187cc8e7d56fa9ePrashant Malani     * {@hide}
99267322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani     */
99367322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani    public static final int AXIS_SCROLL = 26;
99467322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani
99567322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani    /**
996347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * Axis constant: The movement of x position of a motion event.
997347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * <p>
998347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * <ul>
999347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * <li>For a mouse, reports a difference of x position between the previous position.
1000347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * This is useful when pointer is captured, in that case the mouse pointer doesn't change
1001347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * the location but this axis reports the difference which allows the app to see
1002347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * how the mouse is moved.
1003347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * </ul>
1004347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * </p>
1005347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     *
1006347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * @see #getAxisValue(int, int)
1007347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * @see #getHistoricalAxisValue(int, int, int)
1008347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * @see MotionEvent.PointerCoords#getAxisValue(int, int)
1009347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * @see InputDevice#getMotionRange
1010347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     */
1011347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai    public static final int AXIS_RELATIVE_X = 27;
1012347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai
1013347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai    /**
1014347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * Axis constant: The movement of y position of a motion event.
1015347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * <p>
1016347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * This is similar to {@link #AXIS_RELATIVE_X} but for y-axis.
1017347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * </p>
1018347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     *
1019347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * @see #getAxisValue(int, int)
1020347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * @see #getHistoricalAxisValue(int, int, int)
1021347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * @see MotionEvent.PointerCoords#getAxisValue(int, int)
1022347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     * @see InputDevice#getMotionRange
1023347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai     */
1024347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai    public static final int AXIS_RELATIVE_Y = 28;
1025347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai
1026347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai    /**
1027fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 1 axis of a motion event.
10286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10326f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_1 = 32;
10366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10376f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1038fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 2 axis of a motion event.
10396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_2 = 33;
10476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1049fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 3 axis of a motion event.
10506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_3 = 34;
10586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1060fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 4 axis of a motion event.
10616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_4 = 35;
10696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10706f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1071fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 5 axis of a motion event.
10726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_5 = 36;
10806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10816f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1082fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 6 axis of a motion event.
10836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
10896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
10906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_6 = 37;
10916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
10926f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1093fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 7 axis of a motion event.
10946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
10956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
10966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
10976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
10986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
10996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
11006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
11016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_7 = 38;
11026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
11036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1104fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 8 axis of a motion event.
11056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
11066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
11076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
11086f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
11096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
11106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
11116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
11126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_8 = 39;
11136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
11146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1115fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 9 axis of a motion event.
11166f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
11176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
11186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
11196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
11206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
11216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
11226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
11236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_9 = 40;
11246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
11256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1126fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 10 axis of a motion event.
11276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
11286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
11296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
11306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
11316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
11326f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
11336f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
11346f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_10 = 41;
11356f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
11366f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1137fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 11 axis of a motion event.
11386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
11396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
11406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
11416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
11426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
11436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
11446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
11456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_11 = 42;
11466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
11476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1148fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 12 axis of a motion event.
11496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
11506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
11516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
11526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
11536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
11546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
11556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
11566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_12 = 43;
11576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
11586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1159fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 13 axis of a motion event.
11606f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
11616f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
11626f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
11636f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
11646f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
11656f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
11666f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
11676f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_13 = 44;
11686f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
11696f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1170fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 14 axis of a motion event.
11716f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
11726f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
11736f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
11746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
11756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
11766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
11776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
11786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_14 = 45;
11796f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
11806f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1181fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 15 axis of a motion event.
11826f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
11836f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
11846f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
11856f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
11866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
11876f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
11886f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
11896f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_15 = 46;
11906f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
11916f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
1192fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Axis constant: Generic 16 axis of a motion event.
11936f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * The interpretation of a generic axis is device-specific.
11946f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
11956f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getAxisValue(int, int)
11966f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see #getHistoricalAxisValue(int, int, int)
11976f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see MotionEvent.PointerCoords#getAxisValue(int)
11986f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @see InputDevice#getMotionRange
11996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
12006f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static final int AXIS_GENERIC_16 = 47;
12016f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
12026f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    // NOTE: If you add a new axis here you must also add it to:
12036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    //  native/include/android/input.h
12046f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    //  frameworks/base/include/ui/KeycodeLabels.h
12056f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
12066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    // Symbolic names of all axes.
12076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    private static final SparseArray<String> AXIS_SYMBOLIC_NAMES = new SparseArray<String>();
1208fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    static {
12096f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        SparseArray<String> names = AXIS_SYMBOLIC_NAMES;
12106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_X, "AXIS_X");
12116f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_Y, "AXIS_Y");
12126f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_PRESSURE, "AXIS_PRESSURE");
12136f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_SIZE, "AXIS_SIZE");
12146f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_TOUCH_MAJOR, "AXIS_TOUCH_MAJOR");
12156f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_TOUCH_MINOR, "AXIS_TOUCH_MINOR");
12166f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_TOOL_MAJOR, "AXIS_TOOL_MAJOR");
12176f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_TOOL_MINOR, "AXIS_TOOL_MINOR");
12186f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_ORIENTATION, "AXIS_ORIENTATION");
12196f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_VSCROLL, "AXIS_VSCROLL");
12206f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_HSCROLL, "AXIS_HSCROLL");
12216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_Z, "AXIS_Z");
12226f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_RX, "AXIS_RX");
12236f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_RY, "AXIS_RY");
12246f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_RZ, "AXIS_RZ");
12256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_HAT_X, "AXIS_HAT_X");
12266f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_HAT_Y, "AXIS_HAT_Y");
12276f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_LTRIGGER, "AXIS_LTRIGGER");
12286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_RTRIGGER, "AXIS_RTRIGGER");
12293a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown        names.append(AXIS_THROTTLE, "AXIS_THROTTLE");
12303a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown        names.append(AXIS_RUDDER, "AXIS_RUDDER");
12313a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown        names.append(AXIS_WHEEL, "AXIS_WHEEL");
12323a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown        names.append(AXIS_GAS, "AXIS_GAS");
12333a22fa057091cd6614f58ebc57a7ce4fe29462bbJeff Brown        names.append(AXIS_BRAKE, "AXIS_BRAKE");
1234fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        names.append(AXIS_DISTANCE, "AXIS_DISTANCE");
123565fd251c3913fc921468a3dad190810db19eb9dfJeff Brown        names.append(AXIS_TILT, "AXIS_TILT");
123667322b1ff058d9abadd94c10b0ce167508ead6f5Prashant Malani        names.append(AXIS_SCROLL, "AXIS_SCROLL");
1237347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai        names.append(AXIS_RELATIVE_X, "AXIS_REALTIVE_X");
1238347e5d498f4c216d588e98776a386d8bdf93d05cJun Mukai        names.append(AXIS_RELATIVE_Y, "AXIS_REALTIVE_Y");
12396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_1, "AXIS_GENERIC_1");
12406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_2, "AXIS_GENERIC_2");
12416f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_3, "AXIS_GENERIC_3");
12426f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_4, "AXIS_GENERIC_4");
12436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_5, "AXIS_GENERIC_5");
12446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_6, "AXIS_GENERIC_6");
12456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_7, "AXIS_GENERIC_7");
12466f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_8, "AXIS_GENERIC_8");
12476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_9, "AXIS_GENERIC_9");
12486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_10, "AXIS_GENERIC_10");
12496f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_11, "AXIS_GENERIC_11");
12506f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_12, "AXIS_GENERIC_12");
12516f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_13, "AXIS_GENERIC_13");
12526f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_14, "AXIS_GENERIC_14");
12536f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_15, "AXIS_GENERIC_15");
12546f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        names.append(AXIS_GENERIC_16, "AXIS_GENERIC_16");
12556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    }
12566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
1257fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
125849754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * Button constant: Primary button (left mouse button).
125949754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     *
126049754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * This button constant is not set in response to simple touches with a finger
126149754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * or stylus tip.  The user must actually push a button.
1262fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1263fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getButtonState
1264fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1265fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int BUTTON_PRIMARY = 1 << 0;
1266fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1267fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
12685bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * Button constant: Secondary button (right mouse button).
1269fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1270fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getButtonState
1271fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1272fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int BUTTON_SECONDARY = 1 << 1;
1273fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1274fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
12755bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * Button constant: Tertiary button (middle mouse button).
1276fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1277fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getButtonState
1278fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1279fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int BUTTON_TERTIARY = 1 << 2;
1280fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1281fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
1282fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Button constant: Back button pressed (mouse back button).
1283fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
1284fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * The system may send a {@link KeyEvent#KEYCODE_BACK} key press to the application
1285fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * when this button is pressed.
1286fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
1287fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1288fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getButtonState
1289fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1290fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int BUTTON_BACK = 1 << 3;
1291fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1292fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
1293fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Button constant: Forward button pressed (mouse forward button).
1294fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * <p>
1295fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * The system may send a {@link KeyEvent#KEYCODE_FORWARD} key press to the application
1296fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * when this button is pressed.
1297fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * </p>
1298fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1299fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getButtonState
1300fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1301fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int BUTTON_FORWARD = 1 << 4;
1302fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
13035bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    /**
13045bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * Button constant: Primary stylus button pressed.
13055bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     *
13065bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * @see #getButtonState
13075bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     */
13085bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    public static final int BUTTON_STYLUS_PRIMARY = 1 << 5;
13095bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright
13105bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    /**
13115bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * Button constant: Secondary stylus button pressed.
13125bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     *
13135bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * @see #getButtonState
13145bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     */
13155bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    public static final int BUTTON_STYLUS_SECONDARY = 1 << 6;
13165bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright
1317fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    // NOTE: If you add a new axis here you must also add it to:
1318fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    //  native/include/android/input.h
1319fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1320fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    // Symbolic names of all button states in bit order from least significant
1321fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    // to most significant.
1322fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static final String[] BUTTON_SYMBOLIC_NAMES = new String[] {
1323fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "BUTTON_PRIMARY",
1324fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "BUTTON_SECONDARY",
1325fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "BUTTON_TERTIARY",
1326fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "BUTTON_BACK",
1327fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "BUTTON_FORWARD",
13285bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright        "BUTTON_STYLUS_PRIMARY",
13295bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright        "BUTTON_STYLUS_SECONDARY",
1330fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000080",
1331fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000100",
1332fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000200",
1333fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000400",
1334fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00000800",
1335fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00001000",
1336fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00002000",
1337fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00004000",
1338fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00008000",
1339fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00010000",
1340fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00020000",
1341fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00040000",
1342fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00080000",
1343fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00100000",
1344fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00200000",
1345fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00400000",
1346fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x00800000",
1347fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x01000000",
1348fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x02000000",
1349fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x04000000",
1350fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x08000000",
1351fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x10000000",
1352fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x20000000",
1353fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x40000000",
1354fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        "0x80000000",
1355fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    };
1356fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1357fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
1358fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Tool type constant: Unknown tool type.
1359fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * This constant is used when the tool type is not known or is not relevant,
1360fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * such as for a trackball or other non-pointing device.
1361fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1362fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getToolType
1363fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1364fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int TOOL_TYPE_UNKNOWN = 0;
1365fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1366fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
136749754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * Tool type constant: The tool is a finger.
1368fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1369fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getToolType
1370fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1371fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int TOOL_TYPE_FINGER = 1;
1372fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1373fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
137449754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * Tool type constant: The tool is a stylus.
1375fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1376fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getToolType
1377fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1378fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int TOOL_TYPE_STYLUS = 2;
1379fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1380fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
138149754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * Tool type constant: The tool is a mouse or trackpad.
1382fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1383fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getToolType
1384fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1385fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final int TOOL_TYPE_MOUSE = 3;
1386fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1387fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
138849754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown     * Tool type constant: The tool is an eraser or a stylus being used in an inverted posture.
1389fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1390fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #getToolType
1391fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
139249754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown    public static final int TOOL_TYPE_ERASER = 4;
1393fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1394fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    // NOTE: If you add a new tool type here you must also add it to:
1395fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    //  native/include/android/input.h
1396fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1397fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    // Symbolic names of all tool types.
1398fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static final SparseArray<String> TOOL_TYPE_SYMBOLIC_NAMES = new SparseArray<String>();
13996f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    static {
1400fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        SparseArray<String> names = TOOL_TYPE_SYMBOLIC_NAMES;
1401fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        names.append(TOOL_TYPE_UNKNOWN, "TOOL_TYPE_UNKNOWN");
1402fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        names.append(TOOL_TYPE_FINGER, "TOOL_TYPE_FINGER");
1403fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        names.append(TOOL_TYPE_STYLUS, "TOOL_TYPE_STYLUS");
1404fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        names.append(TOOL_TYPE_MOUSE, "TOOL_TYPE_MOUSE");
140549754db5a304d995c1cc108ff6f19e4ba4265572Jeff Brown        names.append(TOOL_TYPE_ERASER, "TOOL_TYPE_ERASER");
14066f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    }
14076f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
140891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    // Private value for history pos that obtains the current sample.
140991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private static final int HISTORY_CURRENT = -0x80000000;
141091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
14111f2451007c660091b7b090c1ea332f9044515d2dJeff Brown    private static final int MAX_RECYCLED = 10;
14121f2451007c660091b7b090c1ea332f9044515d2dJeff Brown    private static final Object gRecyclerLock = new Object();
14131f2451007c660091b7b090c1ea332f9044515d2dJeff Brown    private static int gRecyclerUsed;
14141f2451007c660091b7b090c1ea332f9044515d2dJeff Brown    private static MotionEvent gRecyclerTop;
1415cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
141691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    // Shared temporary objects used when translating coordinates supplied by
141791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    // the caller into single element PointerCoords and pointer id arrays.
1418fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static final Object gSharedTempLock = new Object();
1419fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static PointerCoords[] gSharedTempPointerCoords;
1420fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static PointerProperties[] gSharedTempPointerProperties;
1421fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static int[] gSharedTempPointerIndexMap;
1422fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1423fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static final void ensureSharedTempPointerCapacity(int desiredCapacity) {
1424fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        if (gSharedTempPointerCoords == null
1425fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                || gSharedTempPointerCoords.length < desiredCapacity) {
1426fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int capacity = gSharedTempPointerCoords != null ? gSharedTempPointerCoords.length : 8;
1427fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            while (capacity < desiredCapacity) {
1428fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                capacity *= 2;
1429fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
1430fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            gSharedTempPointerCoords = PointerCoords.createArray(capacity);
1431fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            gSharedTempPointerProperties = PointerProperties.createArray(capacity);
1432fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            gSharedTempPointerIndexMap = new int[capacity];
1433fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
1434fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
143591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
143691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    // Pointer to the native MotionEvent object that contains the actual data.
143799a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private long mNativePtr;
14388169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima
14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private MotionEvent mNext;
14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
144199a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native long nativeInitialize(long nativePtr,
1442fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int deviceId, int source, int action, int flags, int edgeFlags,
1443fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int metaState, int buttonState,
144491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            float xOffset, float yOffset, float xPrecision, float yPrecision,
144591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            long downTimeNanos, long eventTimeNanos,
1446fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int pointerCount, PointerProperties[] pointerIds, PointerCoords[] pointerCoords);
144799a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native long nativeCopy(long destNativePtr, long sourceNativePtr,
144891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            boolean keepHistory);
144999a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeDispose(long nativePtr);
145099a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeAddBatch(long nativePtr, long eventTimeNanos,
145191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            PointerCoords[] pointerCoords, int metaState);
145291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
145399a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetDeviceId(long nativePtr);
145499a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetSource(long nativePtr);
145599a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeSetSource(long nativePtr, int source);
145699a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetAction(long nativePtr);
145799a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeSetAction(long nativePtr, int action);
145899a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native boolean nativeIsTouchEvent(long nativePtr);
145999a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetFlags(long nativePtr);
146099a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeSetFlags(long nativePtr, int flags);
146199a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetEdgeFlags(long nativePtr);
146299a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeSetEdgeFlags(long nativePtr, int action);
146399a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetMetaState(long nativePtr);
146499a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetButtonState(long nativePtr);
14655bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    private static native void nativeSetButtonState(long nativePtr, int buttonState);
14665bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    private static native int nativeGetActionButton(long nativePtr);
14676b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright    private static native void nativeSetActionButton(long nativePtr, int actionButton);
146899a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeOffsetLocation(long nativePtr, float deltaX, float deltaY);
146999a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native float nativeGetXOffset(long nativePtr);
147099a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native float nativeGetYOffset(long nativePtr);
147199a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native float nativeGetXPrecision(long nativePtr);
147299a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native float nativeGetYPrecision(long nativePtr);
147399a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native long nativeGetDownTimeNanos(long nativePtr);
147499a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeSetDownTimeNanos(long nativePtr, long downTime);
147599a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat
147699a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetPointerCount(long nativePtr);
147799a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetPointerId(long nativePtr, int pointerIndex);
147899a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetToolType(long nativePtr, int pointerIndex);
147999a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeFindPointerIndex(long nativePtr, int pointerId);
148099a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat
148199a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native int nativeGetHistorySize(long nativePtr);
148299a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native long nativeGetEventTimeNanos(long nativePtr, int historyPos);
148399a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native float nativeGetRawAxisValue(long nativePtr,
148491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            int axis, int pointerIndex, int historyPos);
148599a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native float nativeGetAxisValue(long nativePtr,
148691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            int axis, int pointerIndex, int historyPos);
148799a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeGetPointerCoords(long nativePtr,
148891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            int pointerIndex, int historyPos, PointerCoords outPointerCoords);
148999a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeGetPointerProperties(long nativePtr,
1490fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int pointerIndex, PointerProperties outPointerProperties);
149191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
149299a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeScale(long nativePtr, float scale);
149399a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeTransform(long nativePtr, Matrix matrix);
149491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
149599a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native long nativeReadFromParcel(long nativePtr, Parcel parcel);
149699a1ef2b7f1eb7266e1c3782f649de0d8dbe23bfAshok Bhat    private static native void nativeWriteToParcel(long nativePtr, Parcel parcel);
149791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
1498337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright    private static native String nativeAxisToString(int axis);
1499337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright    private static native int nativeAxisFromString(String label);
1500337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright
150191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    private MotionEvent() {
150291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
150320e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown
150491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    @Override
150591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    protected void finalize() throws Throwable {
150691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        try {
150791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            if (mNativePtr != 0) {
150891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                nativeDispose(mNativePtr);
150991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                mNativePtr = 0;
151091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            }
151191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        } finally {
151291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            super.finalize();
151391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1515cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
151691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    static private MotionEvent obtain() {
151746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown        final MotionEvent ev;
151846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown        synchronized (gRecyclerLock) {
15191f2451007c660091b7b090c1ea332f9044515d2dJeff Brown            ev = gRecyclerTop;
15201f2451007c660091b7b090c1ea332f9044515d2dJeff Brown            if (ev == null) {
152191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                return new MotionEvent();
152246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown            }
152346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown            gRecyclerTop = ev.mNext;
15245c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown            gRecyclerUsed -= 1;
152546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown        }
152646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown        ev.mNext = null;
152732cbc3855c2a971aa5a801fd339fb6a37db91a1aJeff Brown        ev.prepareForReuse();
152846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown        return ev;
152946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown    }
153091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
153153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan    /**
153253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * Create a new MotionEvent, filling in all of the basic values that
153353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * define the motion.
1534fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
153553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @param downTime The time (in ms) when the user originally pressed down to start
153653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * a stream of position events.  This must be obtained from {@link SystemClock#uptimeMillis()}.
1537c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param eventTime The the time (in ms) when this specific event was generated.  This
153853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * must be obtained from {@link SystemClock#uptimeMillis()}.
1539cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
1540fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerCount The number of pointers that will be in this event.
1541fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerProperties An array of <em>pointerCount</em> values providing
1542fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * a {@link PointerProperties} property object for each pointer, which must
1543fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * include the pointer identifier.
1544fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerCoords An array of <em>pointerCount</em> values providing
1545c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * a {@link PointerCoords} coordinate object for each pointer.
154653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @param metaState The state of any meta / modifier keys that were in effect when
154753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * the event was generated.
1548fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param buttonState The state of buttons that are pressed.
154953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @param xPrecision The precision of the X coordinate being reported.
155053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @param yPrecision The precision of the Y coordinate being reported.
155153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @param deviceId The id for the device that this event came from.  An id of
155253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * zero indicates that the event didn't come from a physical device; other
155353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * numbers are arbitrary and you shouldn't depend on the values.
155485a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * @param edgeFlags A bitfield indicating which edges, if any, were touched by this
155553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * MotionEvent.
1556c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param source The source of this event.
155785a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * @param flags The motion event flags.
155853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     */
1559c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    static public MotionEvent obtain(long downTime, long eventTime,
1560fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int action, int pointerCount, PointerProperties[] pointerProperties,
1561fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            PointerCoords[] pointerCoords, int metaState, int buttonState,
1562fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            float xPrecision, float yPrecision, int deviceId,
156385a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown            int edgeFlags, int source, int flags) {
156491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        MotionEvent ev = obtain();
156591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        ev.mNativePtr = nativeInitialize(ev.mNativePtr,
1566fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                deviceId, source, action, flags, edgeFlags, metaState, buttonState,
156791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                0, 0, xPrecision, yPrecision,
156891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                downTime * NS_PER_MS, eventTime * NS_PER_MS,
1569fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                pointerCount, pointerProperties, pointerCoords);
157053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan        return ev;
157153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan    }
157291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a new MotionEvent, filling in all of the basic values that
15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * define the motion.
1576fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1577fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param downTime The time (in ms) when the user originally pressed down to start
1578fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * a stream of position events.  This must be obtained from {@link SystemClock#uptimeMillis()}.
1579fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param eventTime The the time (in ms) when this specific event was generated.  This
1580fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * must be obtained from {@link SystemClock#uptimeMillis()}.
1581fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
1582fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerCount The number of pointers that will be in this event.
1583fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerIds An array of <em>pointerCount</em> values providing
1584fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * an identifier for each pointer.
1585fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerCoords An array of <em>pointerCount</em> values providing
1586fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * a {@link PointerCoords} coordinate object for each pointer.
1587fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param metaState The state of any meta / modifier keys that were in effect when
1588fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * the event was generated.
1589fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param xPrecision The precision of the X coordinate being reported.
1590fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param yPrecision The precision of the Y coordinate being reported.
1591fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param deviceId The id for the device that this event came from.  An id of
1592fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * zero indicates that the event didn't come from a physical device; other
1593fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * numbers are arbitrary and you shouldn't depend on the values.
1594fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param edgeFlags A bitfield indicating which edges, if any, were touched by this
1595fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * MotionEvent.
1596fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param source The source of this event.
1597fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param flags The motion event flags.
1598fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1599fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @deprecated Use {@link #obtain(long, long, int, int, PointerProperties[], PointerCoords[], int, int, float, float, int, int, int, int)}
1600fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * instead.
1601fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1602fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    @Deprecated
1603fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    static public MotionEvent obtain(long downTime, long eventTime,
1604fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int action, int pointerCount, int[] pointerIds, PointerCoords[] pointerCoords,
1605fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int metaState, float xPrecision, float yPrecision, int deviceId,
1606fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int edgeFlags, int source, int flags) {
1607fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        synchronized (gSharedTempLock) {
1608fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ensureSharedTempPointerCapacity(pointerCount);
1609fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerProperties[] pp = gSharedTempPointerProperties;
1610fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int i = 0; i < pointerCount; i++) {
1611fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                pp[i].clear();
1612fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                pp[i].id = pointerIds[i];
1613fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
1614fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return obtain(downTime, eventTime, action, pointerCount, pp,
1615fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    pointerCoords, metaState, 0, xPrecision, yPrecision, deviceId,
1616fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    edgeFlags, source, flags);
1617fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
1618fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
1619fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1620fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
1621fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Create a new MotionEvent, filling in all of the basic values that
1622fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * define the motion.
1623cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
1624cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * @param downTime The time (in ms) when the user originally pressed down to start
16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a stream of position events.  This must be obtained from {@link SystemClock#uptimeMillis()}.
1626cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * @param eventTime  The the time (in ms) when this specific event was generated.  This
16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * must be obtained from {@link SystemClock#uptimeMillis()}.
1628cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x The X coordinate of this event.
16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y The Y coordinate of this event.
1631cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * @param pressure The current pressure of this event.  The pressure generally
1632cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * ranges from 0 (no pressure at all) to 1 (normal pressure), however
1633cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * values higher than 1 may be generated depending on the calibration of
16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the input device.
16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param size A scaled value of the approximate size of the area being pressed when
1636cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * touched with the finger. The actual value in pixels corresponding to the finger
16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * touch is normalized with a device specific range of values
16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and scaled to a value between 0 and 1.
16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param metaState The state of any meta / modifier keys that were in effect when
16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the event was generated.
16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param xPrecision The precision of the X coordinate being reported.
16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param yPrecision The precision of the Y coordinate being reported.
16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param deviceId The id for the device that this event came from.  An id of
16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * zero indicates that the event didn't come from a physical device; other
16459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * numbers are arbitrary and you shouldn't depend on the values.
164685a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * @param edgeFlags A bitfield indicating which edges, if any, were touched by this
16479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * MotionEvent.
16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static public MotionEvent obtain(long downTime, long eventTime, int action,
16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            float x, float y, float pressure, float size, int metaState,
16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            float xPrecision, float yPrecision, int deviceId, int edgeFlags) {
1652fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        MotionEvent ev = obtain();
1653fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        synchronized (gSharedTempLock) {
1654fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ensureSharedTempPointerCapacity(1);
1655fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerProperties[] pp = gSharedTempPointerProperties;
1656fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pp[0].clear();
1657fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pp[0].id = 0;
1658fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1659fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerCoords pc[] = gSharedTempPointerCoords;
1660fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].clear();
1661fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].x = x;
1662fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].y = y;
1663fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].pressure = pressure;
1664fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].size = size;
1665fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
166691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            ev.mNativePtr = nativeInitialize(ev.mNativePtr,
1667fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    deviceId, InputDevice.SOURCE_UNKNOWN, action, 0, edgeFlags, metaState, 0,
166891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    0, 0, xPrecision, yPrecision,
166991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    downTime * NS_PER_MS, eventTime * NS_PER_MS,
1670fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    1, pp, pc);
167191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            return ev;
167291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
16739822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
16749822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
16759822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
16769822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * Create a new MotionEvent, filling in all of the basic values that
16779822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * define the motion.
16789822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     *
16799822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param downTime The time (in ms) when the user originally pressed down to start
16809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * a stream of position events.  This must be obtained from {@link SystemClock#uptimeMillis()}.
16819822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param eventTime  The the time (in ms) when this specific event was generated.  This
16829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * must be obtained from {@link SystemClock#uptimeMillis()}.
1683cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
1684fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerCount The number of pointers that are active in this event.
16859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param x The X coordinate of this event.
16869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param y The Y coordinate of this event.
16879822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param pressure The current pressure of this event.  The pressure generally
16889822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * ranges from 0 (no pressure at all) to 1 (normal pressure), however
16899822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * values higher than 1 may be generated depending on the calibration of
16909822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * the input device.
16919822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param size A scaled value of the approximate size of the area being pressed when
16929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * touched with the finger. The actual value in pixels corresponding to the finger
16939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * touch is normalized with a device specific range of values
16949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * and scaled to a value between 0 and 1.
16959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param metaState The state of any meta / modifier keys that were in effect when
16969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * the event was generated.
16979822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param xPrecision The precision of the X coordinate being reported.
16989822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param yPrecision The precision of the Y coordinate being reported.
16999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param deviceId The id for the device that this event came from.  An id of
17009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * zero indicates that the event didn't come from a physical device; other
17019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * numbers are arbitrary and you shouldn't depend on the values.
170285a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * @param edgeFlags A bitfield indicating which edges, if any, were touched by this
17039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * MotionEvent.
17045c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     *
17055c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     * @deprecated Use {@link #obtain(long, long, int, float, float, float, float, int, float, float, int, int)}
17065c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     * instead.
17079822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
17085c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    @Deprecated
17099822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    static public MotionEvent obtain(long downTime, long eventTime, int action,
1710fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int pointerCount, float x, float y, float pressure, float size, int metaState,
17119822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn            float xPrecision, float yPrecision, int deviceId, int edgeFlags) {
17125c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown        return obtain(downTime, eventTime, action, x, y, pressure, size,
17135c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown                metaState, xPrecision, yPrecision, deviceId, edgeFlags);
17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1715cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a new MotionEvent, filling in a subset of the basic motion
17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values.  Those not specified here are: device id (always 0), pressure
17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and size (always 1), x and y precision (always 1), and edgeFlags (always 0).
1720cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
1721cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * @param downTime The time (in ms) when the user originally pressed down to start
17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a stream of position events.  This must be obtained from {@link SystemClock#uptimeMillis()}.
1723cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * @param eventTime  The the time (in ms) when this specific event was generated.  This
17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * must be obtained from {@link SystemClock#uptimeMillis()}.
1725cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @param action The kind of action being performed, such as {@link #ACTION_DOWN}.
17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x The X coordinate of this event.
17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y The Y coordinate of this event.
17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param metaState The state of any meta / modifier keys that were in effect when
17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the event was generated.
17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static public MotionEvent obtain(long downTime, long eventTime, int action,
17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            float x, float y, int metaState) {
17335c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown        return obtain(downTime, eventTime, action, x, y, 1.0f, 1.0f,
17345c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown                metaState, 1.0f, 1.0f, 0, 0);
17358169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima    }
17368169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima
17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a new MotionEvent, copying from an existing one.
17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
174091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    static public MotionEvent obtain(MotionEvent other) {
174191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        if (other == null) {
174291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            throw new IllegalArgumentException("other motion event must not be null");
174391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
174491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
174591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        MotionEvent ev = obtain();
174691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        ev.mNativePtr = nativeCopy(ev.mNativePtr, other.mNativePtr, true /*keepHistory*/);
17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return ev;
17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1749cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
17518df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn     * Create a new MotionEvent, copying from an existing one, but not including
17528df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn     * any historical point information.
17538df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn     */
175491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    static public MotionEvent obtainNoHistory(MotionEvent other) {
175591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        if (other == null) {
175691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            throw new IllegalArgumentException("other motion event must not be null");
175791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
175891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
175991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        MotionEvent ev = obtain();
176091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        ev.mNativePtr = nativeCopy(ev.mNativePtr, other.mNativePtr, false /*keepHistory*/);
17618df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn        return ev;
17628df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn    }
17638df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn
176421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    /** @hide */
176521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    @Override
176621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    public MotionEvent copy() {
176721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown        return obtain(this);
176821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    }
176921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown
17708df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn    /**
17719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Recycle the MotionEvent, to be re-used by a later caller.  After calling
17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this function you must not ever touch the event again.
17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
177492cc2d8dc35f2bdd1bb95ab24787066371064899Jeff Brown    @Override
17755c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    public final void recycle() {
177632cbc3855c2a971aa5a801fd339fb6a37db91a1aJeff Brown        super.recycle();
17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        synchronized (gRecyclerLock) {
17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (gRecyclerUsed < MAX_RECYCLED) {
17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                gRecyclerUsed++;
17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNext = gRecyclerTop;
17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                gRecyclerTop = this;
17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17869ea77fc821918ea562ff4907945b865e39e0201aJeff Brown
17875c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    /**
17889ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * Applies a scale factor to all points within this event.
17899ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     *
17909ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * This method is used to adjust touch events to simulate different density
17919ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * displays for compatibility mode.  The values returned by {@link #getRawX()},
17929ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * {@link #getRawY()}, {@link #getXPrecision()} and {@link #getYPrecision()}
17939ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * are also affected by the scale factor.
17945c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     *
17959ea77fc821918ea562ff4907945b865e39e0201aJeff Brown     * @param scale The scale factor to apply.
17965c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     * @hide
17975c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown     */
17985c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    public final void scale(float scale) {
17999ea77fc821918ea562ff4907945b865e39e0201aJeff Brown        if (scale != 1.0f) {
18009ea77fc821918ea562ff4907945b865e39e0201aJeff Brown            nativeScale(mNativePtr, scale);
18019ea77fc821918ea562ff4907945b865e39e0201aJeff Brown        }
180291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
180391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
180491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /** {@inheritDoc} */
180591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    @Override
180691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final int getDeviceId() {
180791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetDeviceId(mNativePtr);
180891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
180991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
181091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /** {@inheritDoc} */
181191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    @Override
181291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final int getSource() {
181391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetSource(mNativePtr);
181491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
181591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
181691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /** {@inheritDoc} */
181791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    @Override
181891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final void setSource(int source) {
181991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeSetSource(mNativePtr, source);
18205c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    }
1821cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1823cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Return the kind of action being performed.
1824cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Consider using {@link #getActionMasked} and {@link #getActionIndex} to retrieve
1825cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * the separate masked action and pointer index.
1826cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @return The action, such as {@link #ACTION_DOWN} or
1827cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * the combination of {@link #ACTION_POINTER_DOWN} with a shifted pointer index.
18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int getAction() {
183091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAction(mNativePtr);
18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1834cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Return the masked action being performed, without pointer index information.
1835cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Use {@link #getActionIndex} to return the index associated with pointer actions.
1836cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @return The action, such as {@link #ACTION_DOWN} or {@link #ACTION_POINTER_DOWN}.
1837b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     */
1838b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public final int getActionMasked() {
183991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAction(mNativePtr) & ACTION_MASK;
1840b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    }
1841b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn
1842b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    /**
1843b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * For {@link #ACTION_POINTER_DOWN} or {@link #ACTION_POINTER_UP}
1844b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * as returned by {@link #getActionMasked}, this returns the associated
1845cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * pointer index.
1846cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * The index may be used with {@link #getPointerId(int)},
1847b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * {@link #getX(int)}, {@link #getY(int)}, {@link #getPressure(int)},
1848b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * and {@link #getSize(int)} to get information about the pointer that has
1849b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     * gone down or up.
1850cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * @return The index associated with the action.
1851b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn     */
1852b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    public final int getActionIndex() {
185391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return (nativeGetAction(mNativePtr) & ACTION_POINTER_INDEX_MASK)
185491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                >> ACTION_POINTER_INDEX_SHIFT;
1855b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    }
1856b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn
1857b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn    /**
185833bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * Returns true if this motion event is a touch event.
185933bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * <p>
1860a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * Specifically excludes pointer events with action {@link #ACTION_HOVER_MOVE},
1861a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * {@link #ACTION_HOVER_ENTER}, {@link #ACTION_HOVER_EXIT}, or {@link #ACTION_SCROLL}
1862a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown     * because they are not actually touch events (the pointer is not down).
186333bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * </p>
186433bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * @return True if this motion event is a touch event.
186533bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     * @hide
186633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown     */
186733bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown    public final boolean isTouchEvent() {
186856194ebec6212e229f4ccdaa4b187166d20013efJeff Brown        return nativeIsTouchEvent(mNativePtr);
186933bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown    }
187033bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown
187133bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown    /**
187285a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * Gets the motion event flags.
187385a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     *
187485a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * @see #FLAG_WINDOW_IS_OBSCURED
187585a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     */
187685a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown    public final int getFlags() {
187791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetFlags(mNativePtr);
187885a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown    }
187985a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown
188021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    /** @hide */
188121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    @Override
188221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    public final boolean isTainted() {
188321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown        final int flags = getFlags();
188421bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown        return (flags & FLAG_TAINTED) != 0;
188521bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    }
188621bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown
188721bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    /** @hide */
188821bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    @Override
188921bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    public final void setTainted(boolean tainted) {
189021bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown        final int flags = getFlags();
189121bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown        nativeSetFlags(mNativePtr, tainted ? flags | FLAG_TAINTED : flags & ~FLAG_TAINTED);
189221bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown    }
189321bc5c917d4ee2a9b2b8173091e6bba85eaff899Jeff Brown
1894ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav    /** @hide */
1895ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav    public final boolean isTargetAccessibilityFocus() {
1896ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav        final int flags = getFlags();
1897ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav        return (flags & FLAG_TARGET_ACCESSIBILITY_FOCUS) != 0;
1898ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav    }
1899ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav
1900ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav    /** @hide */
1901ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav    public final void setTargetAccessibilityFocus(boolean targetsFocus) {
1902ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav        final int flags = getFlags();
1903ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav        nativeSetFlags(mNativePtr, targetsFocus
1904ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav                ? flags | FLAG_TARGET_ACCESSIBILITY_FOCUS
1905ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav                : flags & ~FLAG_TARGET_ACCESSIBILITY_FOCUS);
1906ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav    }
1907ded133c446fa9d0d23e6bde19a66fb2ce3980491Svetoslav
190885a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown    /**
1909cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * Returns the time (in ms) when the user originally pressed down to start
1910cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * a stream of position events.
19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final long getDownTime() {
191391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetDownTimeNanos(mNativePtr) / NS_PER_MS;
19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1917fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Sets the time (in ms) when the user originally pressed down to start
1918fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * a stream of position events.
1919fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
1920fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
1921fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
1922fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final void setDownTime(long downTime) {
1923fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        nativeSetDownTimeNanos(mNativePtr, downTime * NS_PER_MS);
1924fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
1925fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
1926fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
1927b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * Retrieve the time this event occurred,
1928b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * in the {@link android.os.SystemClock#uptimeMillis} time base.
1929b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     *
1930b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * @return Returns the time this event occurred,
1931b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * in the {@link android.os.SystemClock#uptimeMillis} time base.
19329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1933b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown    @Override
19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final long getEventTime() {
193591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetEventTimeNanos(mNativePtr, HISTORY_CURRENT) / NS_PER_MS;
19369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
19379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1939b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * Retrieve the time this event occurred,
1940b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * in the {@link android.os.SystemClock#uptimeMillis} time base but with
1941b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * nanosecond precision.
1942b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * <p>
194353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * The value is in nanosecond precision but it may not have nanosecond accuracy.
1944b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * </p>
1945b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     *
1946b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * @return Returns the time this event occurred,
1947b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * in the {@link android.os.SystemClock#uptimeMillis} time base but with
1948b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * nanosecond precision.
194953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     *
195053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     * @hide
195153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan     */
1952b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown    @Override
195353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan    public final long getEventTimeNano() {
195491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetEventTimeNanos(mNativePtr, HISTORY_CURRENT);
195553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan    }
195653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan
195753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan    /**
19580dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * {@link #getX(int)} for the first pointer index (may be an
19590dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
196091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
196191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getX() {
196491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_X, 0, HISTORY_CURRENT);
19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
19669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19680dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * {@link #getY(int)} for the first pointer index (may be an
19690dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
197091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
197191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
19729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getY() {
197491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_Y, 0, HISTORY_CURRENT);
19759822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
19769822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
19779822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
19780dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * {@link #getPressure(int)} for the first pointer index (may be an
19790dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
198091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
198191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_PRESSURE
19829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
19839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getPressure() {
198491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_PRESSURE, 0, HISTORY_CURRENT);
19859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
19869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
19879822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
19880dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * {@link #getSize(int)} for the first pointer index (may be an
19890dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
199091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
199191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_SIZE
19929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
19939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getSize() {
199491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_SIZE, 0, HISTORY_CURRENT);
19959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
1996c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
1997c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
1998c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getTouchMajor(int)} for the first pointer index (may be an
1999c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
200091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
200191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MAJOR
2002c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2003c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getTouchMajor() {
200491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MAJOR, 0, HISTORY_CURRENT);
2005c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2006c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2007c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2008c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getTouchMinor(int)} for the first pointer index (may be an
2009c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
201091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
201191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MINOR
2012c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2013c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getTouchMinor() {
201491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MINOR, 0, HISTORY_CURRENT);
2015c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2016c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2017c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2018c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getToolMajor(int)} for the first pointer index (may be an
2019c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
202091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
202191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MAJOR
2022c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2023c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getToolMajor() {
202491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MAJOR, 0, HISTORY_CURRENT);
2025c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2026c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2027c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2028c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getToolMinor(int)} for the first pointer index (may be an
2029c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
203091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
203191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MINOR
2032c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2033c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getToolMinor() {
203491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MINOR, 0, HISTORY_CURRENT);
2035c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
203691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
2037c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2038c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getOrientation(int)} for the first pointer index (may be an
2039c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
204091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
204191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_ORIENTATION
2042c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2043c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getOrientation() {
204491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_ORIENTATION, 0, HISTORY_CURRENT);
204591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
204691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
204791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
204891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getAxisValue(int)} for the first pointer index (may be an
204991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * arbitrary pointer identifier).
205091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
205191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param axis The axis identifier for the axis value to retrieve.
205291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
205391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
205491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
205591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     */
205691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final float getAxisValue(int axis) {
205791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, axis, 0, HISTORY_CURRENT);
2058c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
20599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
20609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
20610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * The number of pointers of data contained in this event.  Always
20620dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * >= 1.
20630dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     */
20640dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final int getPointerCount() {
206591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetPointerCount(mNativePtr);
20660dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    }
20670dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn
20680dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    /**
20690dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Return the pointer identifier associated with a particular pointer
2070682c24e22811d4ee17ae1cd61bf255c3f7e722b7Trevor Johns     * data index in this event.  The identifier tells you the actual pointer
20710dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * number associated with the data, accounting for individual pointers
20720dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * going up and down since the start of the current gesture.
20730dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
20740dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
20750dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     */
2076d41ba666d12a24ee4624ea9a009151e6165e3775Dianne Hackborn    public final int getPointerId(int pointerIndex) {
207791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetPointerId(mNativePtr, pointerIndex);
20780dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    }
2079fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2080fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
2081fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Gets the tool type of a pointer for the given pointer index.
2082fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * The tool type indicates the type of tool used to make contact such
2083fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * as a finger or stylus, if known.
2084fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
2085fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2086fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2087fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @return The tool type of the pointer.
2088fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
2089fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #TOOL_TYPE_UNKNOWN
2090fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #TOOL_TYPE_FINGER
2091fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #TOOL_TYPE_STYLUS
2092fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #TOOL_TYPE_MOUSE
2093fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
2094fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final int getToolType(int pointerIndex) {
2095fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return nativeGetToolType(mNativePtr, pointerIndex);
2096fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
2097fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
20980dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    /**
20990dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Given a pointer identifier, find the index of its data in the event.
21000dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     *
21010dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerId The identifier of the pointer to be found.
21020dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @return Returns either the index of the pointer (for use with
2103b0d6ba1ec4f71b96cab7d1ff62b846d5cf162c4fGilles Debunne     * {@link #getX(int)} et al.), or -1 if there is no data available for
21040dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * that pointer identifier.
21050dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     */
21060dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final int findPointerIndex(int pointerId) {
210791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeFindPointerIndex(mNativePtr, pointerId);
21080dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    }
2109fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
21100dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    /**
21110dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns the X coordinate of this event for the given pointer
21120dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
21130dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * identifier for this index).
21149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * Whole numbers are pixels; the
21159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * value may have a fraction for input devices that are sub-pixel precise.
21160dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
21170dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
211891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
211991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
21209822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
21210dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getX(int pointerIndex) {
212291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_X, pointerIndex, HISTORY_CURRENT);
21239822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
21249822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
21259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
21260dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns the Y coordinate of this event for the given pointer
21270dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
21280dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * identifier for this index).
21299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * Whole numbers are pixels; the
21309822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * value may have a fraction for input devices that are sub-pixel precise.
21310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
21320dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
213391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
213491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
21359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
21360dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getY(int pointerIndex) {
213791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_Y, pointerIndex, HISTORY_CURRENT);
21389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
21399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
21410dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns the current pressure of this event for the given pointer
21420dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
21430dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * identifier for this index).
21449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * The pressure generally
2145cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * ranges from 0 (no pressure at all) to 1 (normal pressure), however
2146cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * values higher than 1 may be generated depending on the calibration of
21479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the input device.
21480dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
21490dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
215091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
215191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_PRESSURE
21529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21530dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getPressure(int pointerIndex) {
215491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_PRESSURE, pointerIndex, HISTORY_CURRENT);
21559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
21569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
21580dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns a scaled value of the approximate size for the given pointer
21590dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
21600dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * identifier for this index).
21610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * This represents some approximation of the area of the screen being
21620dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * pressed; the actual value in pixels corresponding to the
21639822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * touch is normalized with the device specific range of values
2164cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * and scaled to a value between 0 and 1. The value of size can be used to
21659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * determine fat touch events.
21660dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
21670dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
216891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
216991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_SIZE
21709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
21710dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getSize(int pointerIndex) {
217291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_SIZE, pointerIndex, HISTORY_CURRENT);
21739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2174c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2175c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2176c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns the length of the major axis of an ellipse that describes the touch
2177c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * area at the point of contact for the given pointer
2178c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
2179c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * identifier for this index).
2180c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2181c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
218291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
218391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MAJOR
2184c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2185c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getTouchMajor(int pointerIndex) {
218691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MAJOR, pointerIndex, HISTORY_CURRENT);
2187c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2188c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2189c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2190c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns the length of the minor axis of an ellipse that describes the touch
2191c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * area at the point of contact for the given pointer
2192c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
2193c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * identifier for this index).
2194c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2195c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
219691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
219791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MINOR
2198c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2199c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getTouchMinor(int pointerIndex) {
220091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MINOR, pointerIndex, HISTORY_CURRENT);
2201c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2202c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2203c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2204c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns the length of the major axis of an ellipse that describes the size of
2205c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * the approaching tool for the given pointer
2206c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
2207c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * identifier for this index).
2208c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The tool area represents the estimated size of the finger or pen that is
2209c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * touching the device independent of its actual touch area at the point of contact.
2210c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2211c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
221291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
221391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MAJOR
2214c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2215c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getToolMajor(int pointerIndex) {
221691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MAJOR, pointerIndex, HISTORY_CURRENT);
2217c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2218c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2219c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2220c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns the length of the minor axis of an ellipse that describes the size of
2221c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * the approaching tool for the given pointer
2222c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * <em>index</em> (use {@link #getPointerId(int)} to find the pointer
2223c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * identifier for this index).
2224c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The tool area represents the estimated size of the finger or pen that is
2225c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * touching the device independent of its actual touch area at the point of contact.
2226c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2227c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
222891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
222991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MINOR
2230c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2231c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getToolMinor(int pointerIndex) {
223291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MINOR, pointerIndex, HISTORY_CURRENT);
2233c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2234c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2235c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2236c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns the orientation of the touch area and tool area in radians clockwise from vertical
2237c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * for the given pointer <em>index</em> (use {@link #getPointerId(int)} to find the pointer
2238c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * identifier for this index).
22396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * An angle of 0 radians indicates that the major axis of contact is oriented
2240c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * upwards, is perfectly circular or is of unknown orientation.  A positive angle
2241c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * indicates that the major axis of contact is oriented to the right.  A negative angle
2242c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * indicates that the major axis of contact is oriented to the left.
22436d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown     * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians
2244c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (finger pointing fully right).
2245c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2246c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
224791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
224891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_ORIENTATION
2249c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2250c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getOrientation(int pointerIndex) {
225191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_ORIENTATION, pointerIndex, HISTORY_CURRENT);
2252c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
225391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
225491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
225591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * Returns the value of the requested axis for the given pointer <em>index</em>
225691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * (use {@link #getPointerId(int)} to find the pointer identifier for this index).
225791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
225891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param axis The axis identifier for the axis value to retrieve.
225991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
226091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
226191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @return The value of the axis, or 0 if the axis is not available.
226291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
226391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
226491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
226591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     */
226691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final float getAxisValue(int axis, int pointerIndex) {
226791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, axis, pointerIndex, HISTORY_CURRENT);
226891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
226991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
2270c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2271c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Populates a {@link PointerCoords} object with pointer coordinate data for
2272c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * the specified pointer index.
2273c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2274c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2275c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2276c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param outPointerCoords The pointer coordinate object to populate.
227791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
227891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see PointerCoords
2279c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2280c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final void getPointerCoords(int pointerIndex, PointerCoords outPointerCoords) {
228191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeGetPointerCoords(mNativePtr, pointerIndex, HISTORY_CURRENT, outPointerCoords);
2282c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
22839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2285fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Populates a {@link PointerProperties} object with pointer properties for
2286fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * the specified pointer index.
2287fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
2288fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2289fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2290fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param outPointerProperties The pointer properties object to populate.
2291fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
2292fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see PointerProperties
2293fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
2294fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final void getPointerProperties(int pointerIndex,
2295fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            PointerProperties outPointerProperties) {
2296fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        nativeGetPointerProperties(mNativePtr, pointerIndex, outPointerProperties);
2297fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
2298fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2299fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
23009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the state of any meta / modifier keys that were in effect when
23019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the event was generated.  This is the same values as those
23029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned by {@link KeyEvent#getMetaState() KeyEvent.getMetaState}.
23039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return an integer in which each bit set to 1 represents a pressed
23059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         meta key
23069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
23079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see KeyEvent#getMetaState()
23089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int getMetaState() {
231091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetMetaState(mNativePtr);
23119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
23129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2314fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Gets the state of all buttons that are pressed such as a mouse or stylus button.
2315fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
2316fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @return The button state.
2317fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
2318fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #BUTTON_PRIMARY
2319fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #BUTTON_SECONDARY
2320fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #BUTTON_TERTIARY
2321fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #BUTTON_FORWARD
2322fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @see #BUTTON_BACK
23235bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * @see #BUTTON_STYLUS_PRIMARY
23245bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * @see #BUTTON_STYLUS_SECONDARY
2325fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
2326fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final int getButtonState() {
2327fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return nativeGetButtonState(mNativePtr);
2328fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
2329fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2330fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
23315bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * Sets the bitfield indicating which buttons are pressed.
23325bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     *
23335bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * @see #getButtonState()
23345bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * @hide
23355bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     */
23365bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    public final void setButtonState(int buttonState) {
23375bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright        nativeSetButtonState(mNativePtr, buttonState);
23385bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    }
23395bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright
23405bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    /**
23415bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * Gets which button has been modified during a press or release action.
23425bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     *
23435bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * For actions other than {@link #ACTION_BUTTON_PRESS} and {@link #ACTION_BUTTON_RELEASE}
23445bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * the returned value is undefined.
23455bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     *
23465bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * @see #getButtonState()
23475bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     */
23485bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    public final int getActionButton() {
23495bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright        return nativeGetActionButton(mNativePtr);
23505bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    }
23515bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright
23525bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright    /**
23536b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright     * Sets the action button for the event.
23546b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright     *
23556b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright     * @see #getActionButton()
23566b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright     * @hide
23576b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright     */
23586b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright    public final void setActionButton(int button) {
23596b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright        nativeSetActionButton(mNativePtr, button);
23606b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright    }
23616b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright
23626b819b4147af4ec14ec08c50f83bb42f44481917Michael Wright    /**
23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the original raw X coordinate of this event.  For touch
23649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * events on the screen, this is the original location of the event
23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * on the screen, before it had been adjusted for the containing window
23669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and views.
236791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
2368072137c80a9ce30a1c79cc416932a24bd2e4dccbMichael Wright     * @see #getX(int)
236991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
23709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getRawX() {
237291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetRawAxisValue(mNativePtr, AXIS_X, 0, HISTORY_CURRENT);
23739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
237491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
23759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the original raw Y coordinate of this event.  For touch
23779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * events on the screen, this is the original location of the event
23789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * on the screen, before it had been adjusted for the containing window
23799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and views.
238091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
2381072137c80a9ce30a1c79cc416932a24bd2e4dccbMichael Wright     * @see #getY(int)
238291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
23839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getRawY() {
238591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetRawAxisValue(mNativePtr, AXIS_Y, 0, HISTORY_CURRENT);
23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
23879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
23889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
23899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the precision of the X coordinates being reported.  You can
239091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * multiply this number with {@link #getX} to find the actual hardware
23919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * value of the X coordinate.
23929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the precision of X coordinates being reported.
239391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
239491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
23959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
23969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getXPrecision() {
239791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetXPrecision(mNativePtr);
23989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2399cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
24009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the precision of the Y coordinates being reported.  You can
240291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * multiply this number with {@link #getY} to find the actual hardware
24039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * value of the Y coordinate.
24049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the precision of Y coordinates being reported.
240591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
240691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
24079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final float getYPrecision() {
240991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetYPrecision(mNativePtr);
24109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2411cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
24129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the number of historical points in this event.  These are
24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * movements that have occurred between this event and the previous event.
24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This only applies to ACTION_MOVE events -- all other actions will have
24169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a size of 0.
2417cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
24189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns the number of historical points in the event.
24199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int getHistorySize() {
242191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetHistorySize(mNativePtr);
24229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2423cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the time that a historical movement occurred between this event
2426b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * and the previous event, in the {@link android.os.SystemClock#uptimeMillis} time base.
2427b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * <p>
2428b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * This only applies to ACTION_MOVE events.
2429b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * </p>
2430cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
24319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pos Which historical value to return; must be less than
24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #getHistorySize}
2433b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * @return Returns the time that a historical movement occurred between this
2434b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * event and the previous event,
2435b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * in the {@link android.os.SystemClock#uptimeMillis} time base.
2436cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
24379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getHistorySize
24389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getEventTime
24399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
24409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final long getHistoricalEventTime(int pos) {
244191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetEventTimeNanos(mNativePtr, pos) / NS_PER_MS;
24429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
24439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
24449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
2445b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * Returns the time that a historical movement occurred between this event
2446b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * and the previous event, in the {@link android.os.SystemClock#uptimeMillis} time base
2447b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * but with nanosecond (instead of millisecond) precision.
2448b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * <p>
2449b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * This only applies to ACTION_MOVE events.
2450b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * </p><p>
2451b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * The value is in nanosecond precision but it may not have nanosecond accuracy.
2452b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * </p>
2453b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     *
2454b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * @param pos Which historical value to return; must be less than
2455b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * {@link #getHistorySize}
2456b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * @return Returns the time that a historical movement occurred between this
2457b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * event and the previous event,
2458b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * in the {@link android.os.SystemClock#uptimeMillis} time base but with
2459b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * nanosecond (instead of millisecond) precision.
2460b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     *
2461b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * @see #getHistorySize
2462b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * @see #getEventTime
2463b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     *
2464b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     * @hide
2465b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown     */
2466b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown    public final long getHistoricalEventTimeNano(int pos) {
2467b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown        return nativeGetEventTimeNanos(mNativePtr, pos);
2468b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown    }
2469b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown
2470b11499d2db0ba9782363ec6bf714b583e8585212Jeff Brown    /**
247191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalX(int, int)} for the first pointer index (may be an
24720dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
247391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
247491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
247591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
247691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
247791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
247891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getX()
247991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
24809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
24819822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getHistoricalX(int pos) {
248291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_X, 0, pos);
24839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
24849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
24859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
248691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalY(int, int)} for the first pointer index (may be an
24870dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
248891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
248991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
249091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
249191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
249291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
249391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getY()
249491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
24959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
24969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getHistoricalY(int pos) {
249791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_Y, 0, pos);
24989822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
24999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
25009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
250191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalPressure(int, int)} for the first pointer index (may be an
25020dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
250391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
250491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
250591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
250691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
250791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
250891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getPressure()
250991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_PRESSURE
25109822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
25119822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getHistoricalPressure(int pos) {
251291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_PRESSURE, 0, pos);
25139822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
25149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn
25159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
251691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalSize(int, int)} for the first pointer index (may be an
25170dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * arbitrary pointer identifier).
251891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
251991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
252091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
252191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
252291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
252391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getSize()
252491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_SIZE
25259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
25269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    public final float getHistoricalSize(int pos) {
252791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_SIZE, 0, pos);
25289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2529cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
25309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
253191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalTouchMajor(int, int)} for the first pointer index (may be an
2532c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
253391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
253491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
253591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
253691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
253791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
253891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMajor()
253991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MAJOR
2540c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2541c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalTouchMajor(int pos) {
254291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MAJOR, 0, pos);
2543c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2544c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2545c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
254691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalTouchMinor(int, int)} for the first pointer index (may be an
2547c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
254891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
254991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
255091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
255191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
255291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
255391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMinor()
255491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MINOR
2555c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2556c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalTouchMinor(int pos) {
255791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MINOR, 0, pos);
2558c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2559c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2560c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
256191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalToolMajor(int, int)} for the first pointer index (may be an
2562c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
256391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
256491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
256591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
256691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
256791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
256891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMajor()
256991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MAJOR
2570c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2571c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalToolMajor(int pos) {
257291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MAJOR, 0, pos);
2573c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2574c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2575c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
257691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalToolMinor(int, int)} for the first pointer index (may be an
2577c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
257891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
257991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
258091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
258191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
258291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
258391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMinor()
258491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MINOR
2585c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2586c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalToolMinor(int pos) {
258791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MINOR, 0, pos);
2588c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2589c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2590c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
259191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalOrientation(int, int)} for the first pointer index (may be an
2592c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * arbitrary pointer identifier).
259391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
259491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
259591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
259691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
259791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
259891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getOrientation()
259991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_ORIENTATION
2600c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2601c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalOrientation(int pos) {
260291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_ORIENTATION, 0, pos);
2603c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
260491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
260591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
260691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistoricalAxisValue(int, int, int)} for the first pointer index (may be an
260791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * arbitrary pointer identifier).
260891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
260991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param axis The axis identifier for the axis value to retrieve.
261091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
261191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
261291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
261391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getHistorySize
261491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getAxisValue(int)
261591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
261691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
261791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     */
261891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final float getHistoricalAxisValue(int axis, int pos) {
261991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, axis, 0, pos);
262091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
262191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
2622c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
26230dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns a historical X coordinate, as per {@link #getX(int)}, that
26240dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * occurred between this event and the previous event for the given pointer.
26250dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Only applies to ACTION_MOVE events.
2626cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
26270dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
26280dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
26299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pos Which historical value to return; must be less than
26309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #getHistorySize}
2631cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
26329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getHistorySize
263391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getX(int)
263491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
26359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26360dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getHistoricalX(int pointerIndex, int pos) {
263791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_X, pointerIndex, pos);
26389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2639cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
26409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26410dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns a historical Y coordinate, as per {@link #getY(int)}, that
26420dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * occurred between this event and the previous event for the given pointer.
26430dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Only applies to ACTION_MOVE events.
2644cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
26450dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
26460dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
26479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pos Which historical value to return; must be less than
26489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #getHistorySize}
2649cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
26509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getHistorySize
265191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getY(int)
265291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
26539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26540dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getHistoricalY(int pointerIndex, int pos) {
265591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_Y, pointerIndex, pos);
26569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2657cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
26589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26590dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns a historical pressure coordinate, as per {@link #getPressure(int)},
26600dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * that occurred between this event and the previous event for the given
26610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * pointer.  Only applies to ACTION_MOVE events.
2662cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
26630dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
26640dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
26659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pos Which historical value to return; must be less than
26669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #getHistorySize}
26670dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     *
26689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getHistorySize
266991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getPressure(int)
267091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_PRESSURE
26719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26720dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getHistoricalPressure(int pointerIndex, int pos) {
267391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_PRESSURE, pointerIndex, pos);
26749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2675cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
26769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
26770dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Returns a historical size coordinate, as per {@link #getSize(int)}, that
26780dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * occurred between this event and the previous event for the given pointer.
26790dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * Only applies to ACTION_MOVE events.
2680cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
26810dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
26820dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     * (the first pointer that is down) to {@link #getPointerCount()}-1.
26839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pos Which historical value to return; must be less than
26849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #getHistorySize}
26850dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn     *
26869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getHistorySize
268791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getSize(int)
268891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_SIZE
26899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
26900dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn    public final float getHistoricalSize(int pointerIndex, int pos) {
269191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_SIZE, pointerIndex, pos);
26929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2693c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2694c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2695c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns a historical touch major axis coordinate, as per {@link #getTouchMajor(int)}, that
2696c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * occurred between this event and the previous event for the given pointer.
2697c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2698c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2699c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2700c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2701c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2702c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2703c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2704c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
270591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMajor(int)
270691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MAJOR
2707c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2708c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalTouchMajor(int pointerIndex, int pos) {
270991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MAJOR, pointerIndex, pos);
2710c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2711cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
27129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2713c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns a historical touch minor axis coordinate, as per {@link #getTouchMinor(int)}, that
2714c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * occurred between this event and the previous event for the given pointer.
2715c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2716c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2717c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2718c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2719c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2720c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2721c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2722c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
272391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getTouchMinor(int)
272491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOUCH_MINOR
2725c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2726c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalTouchMinor(int pointerIndex, int pos) {
272791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOUCH_MINOR, pointerIndex, pos);
2728c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2729c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2730c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2731c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns a historical tool major axis coordinate, as per {@link #getToolMajor(int)}, that
2732c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * occurred between this event and the previous event for the given pointer.
2733c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2734c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2735c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2736c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2737c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2738c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2739c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2740c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
274191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMajor(int)
274291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MAJOR
2743c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2744c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalToolMajor(int pointerIndex, int pos) {
274591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MAJOR, pointerIndex, pos);
2746c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2747c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2748c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2749c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns a historical tool minor axis coordinate, as per {@link #getToolMinor(int)}, that
2750c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * occurred between this event and the previous event for the given pointer.
2751c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2752c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2753c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2754c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2755c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2756c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2757c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2758c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
275991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getToolMinor(int)
276091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_TOOL_MINOR
2761c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2762c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalToolMinor(int pointerIndex, int pos) {
276391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_TOOL_MINOR, pointerIndex, pos);
2764c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2765c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2766c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
2767c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Returns a historical orientation coordinate, as per {@link #getOrientation(int)}, that
2768c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * occurred between this event and the previous event for the given pointer.
2769c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2770c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2771c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2772c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2773c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2774c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2775c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2776c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
277791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #getOrientation(int)
277891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_ORIENTATION
27799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2780c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final float getHistoricalOrientation(int pointerIndex, int pos) {
278191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, AXIS_ORIENTATION, pointerIndex, pos);
278291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
278391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
278491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
278591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * Returns the historical value of the requested axis, as per {@link #getAxisValue(int, int)},
278691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * occurred between this event and the previous event for the given pointer.
278791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * Only applies to ACTION_MOVE events.
278891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
278991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param axis The axis identifier for the axis value to retrieve.
279091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
279191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
279291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @param pos Which historical value to return; must be less than
279391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * {@link #getHistorySize}
279491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @return The value of the axis, or 0 if the axis is not available.
279591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
279691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_X
279791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see #AXIS_Y
279891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     */
279991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public final float getHistoricalAxisValue(int axis, int pointerIndex, int pos) {
280091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetAxisValue(mNativePtr, axis, pointerIndex, pos);
28019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2802cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
28039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2804c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Populates a {@link PointerCoords} object with historical pointer coordinate data,
2805c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * as per {@link #getPointerCoords}, that occurred between this event and the previous
2806c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * event for the given pointer.
2807c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Only applies to ACTION_MOVE events.
2808c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2809c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
2810c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * (the first pointer that is down) to {@link #getPointerCount()}-1.
2811c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pos Which historical value to return; must be less than
2812c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * {@link #getHistorySize}
2813c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param outPointerCoords The pointer coordinate object to populate.
2814c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
2815c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getHistorySize
2816c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @see #getPointerCoords
281791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @see PointerCoords
2818c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
2819c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final void getHistoricalPointerCoords(int pointerIndex, int pos,
2820c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown            PointerCoords outPointerCoords) {
282191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeGetPointerCoords(mNativePtr, pointerIndex, pos, outPointerCoords);
2822c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
2823c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
2824c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
282546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown     * Returns a bitfield indicating which edges, if any, were touched by this
2826cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * MotionEvent. For touch events, clients can use this to determine if the
2827cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * user's finger was touching the edge of the display.
2828cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
2829d41cff2d3a95963a7aa348e502c6d42bae367235Jeff Brown     * This property is only set for {@link #ACTION_DOWN} events.
2830d41cff2d3a95963a7aa348e502c6d42bae367235Jeff Brown     *
28319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #EDGE_LEFT
28329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #EDGE_TOP
28339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #EDGE_RIGHT
28349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #EDGE_BOTTOM
28359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
28369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int getEdgeFlags() {
283791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        return nativeGetEdgeFlags(mNativePtr);
28389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2839cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
28409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
284185a3176704b5bfbeece9bd928369fbb76eec7dc6Jeff Brown     * Sets the bitfield indicating which edges, if any, were touched by this
2842cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     * MotionEvent.
2843cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
28449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getEdgeFlags()
28459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
28469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void setEdgeFlags(int flags) {
284791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeSetEdgeFlags(mNativePtr, flags);
28489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
28519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets this event's action.
28529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
28539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void setAction(int action) {
285491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeSetAction(mNativePtr, action);
28559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
28569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
28579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
28589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Adjust this event's location.
28599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param deltaX Amount to add to the current X coordinate of the event.
28609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param deltaY Amount to add to the current Y coordinate of the event.
28619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
28629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void offsetLocation(float deltaX, float deltaY) {
28639ea77fc821918ea562ff4907945b865e39e0201aJeff Brown        if (deltaX != 0.0f || deltaY != 0.0f) {
28649ea77fc821918ea562ff4907945b865e39e0201aJeff Brown            nativeOffsetLocation(mNativePtr, deltaX, deltaY);
28659ea77fc821918ea562ff4907945b865e39e0201aJeff Brown        }
28669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2867cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
28689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
28699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set this event's location.  Applies {@link #offsetLocation} with a
28709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * delta from the current location to the given new location.
2871cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
28729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x New absolute X location.
28739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y New absolute Y location.
28749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
28759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void setLocation(float x, float y) {
287691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        float oldX = getX();
287791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        float oldY = getY();
28789ea77fc821918ea562ff4907945b865e39e0201aJeff Brown        offsetLocation(x - oldX, y - oldY);
28795c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown    }
28805c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown
288120e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown    /**
288220e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown     * Applies a transformation matrix to all of the points in the event.
288320e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown     *
288420e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown     * @param matrix The transformation matrix to apply.
288520e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown     */
288620e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown    public final void transform(Matrix matrix) {
288720e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown        if (matrix == null) {
288820e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown            throw new IllegalArgumentException("matrix must not be null");
288920e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown        }
289020e987bfc35d0ae6cb6344ead65ed44ee7cf8750Jeff Brown
289191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeTransform(mNativePtr, matrix);
28929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2893cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
28949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
28959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Add a new movement to the batch of movements in this event.  The event's
2896c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * current location, position and size is updated to the new values.
2897c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The current values in the event are added to a list of historical values.
289891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
2899cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Only applies to {@link #ACTION_MOVE} or {@link #ACTION_HOVER_MOVE} events.
2900cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy     *
2901c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param eventTime The time stamp (in ms) for this data.
29029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x The new X position.
29039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y The new Y position.
29049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pressure The new pressure.
29059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param size The new size.
29069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param metaState Meta key state.
29079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
29089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final void addBatch(long eventTime, float x, float y,
29099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            float pressure, float size, int metaState) {
2910fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        synchronized (gSharedTempLock) {
2911fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ensureSharedTempPointerCapacity(1);
2912fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerCoords[] pc = gSharedTempPointerCoords;
2913fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].clear();
2914fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].x = x;
2915fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].y = y;
2916fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].pressure = pressure;
2917fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            pc[0].size = size;
2918fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
2919fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            nativeAddBatch(mNativePtr, eventTime * NS_PER_MS, pc, metaState);
292091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
29219822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    }
2922cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
29239822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn    /**
2924c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Add a new movement to the batch of movements in this event.  The event's
2925c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * current location, position and size is updated to the new values.
2926c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * The current values in the event are added to a list of historical values.
292791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
2928cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Only applies to {@link #ACTION_MOVE} or {@link #ACTION_HOVER_MOVE} events.
29299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     *
2930c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param eventTime The time stamp (in ms) for this data.
2931c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * @param pointerCoords The new pointer coordinates.
29329822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     * @param metaState Meta key state.
29339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn     */
2934c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public final void addBatch(long eventTime, PointerCoords[] pointerCoords, int metaState) {
293591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeAddBatch(mNativePtr, eventTime * NS_PER_MS, pointerCoords, metaState);
29369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2937cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy
2938fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
29399d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * Adds all of the movement samples of the specified event to this one if
29409d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * it is compatible.  To be compatible, the event must have the same device id,
29419d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * source, action, flags, pointer count, pointer properties.
29429d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     *
29439d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * Only applies to {@link #ACTION_MOVE} or {@link #ACTION_HOVER_MOVE} events.
29449d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     *
29459d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * @param event The event whose movements samples should be added to this one
29469d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * if possible.
29479d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * @return True if batching was performed or false if batching was not possible.
29489d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     * @hide
29499d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown     */
29509d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown    public final boolean addBatch(MotionEvent event) {
29519d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        final int action = nativeGetAction(mNativePtr);
29529d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        if (action != ACTION_MOVE && action != ACTION_HOVER_MOVE) {
29539d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return false;
29549d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
29559d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        if (action != nativeGetAction(event.mNativePtr)) {
29569d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return false;
29579d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
29589d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
29599d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        if (nativeGetDeviceId(mNativePtr) != nativeGetDeviceId(event.mNativePtr)
29609d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                || nativeGetSource(mNativePtr) != nativeGetSource(event.mNativePtr)
29619d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                || nativeGetFlags(mNativePtr) != nativeGetFlags(event.mNativePtr)) {
29629d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return false;
29639d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
29649d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
29659d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        final int pointerCount = nativeGetPointerCount(mNativePtr);
29669d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        if (pointerCount != nativeGetPointerCount(event.mNativePtr)) {
29679d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return false;
29689d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
29699d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
29709d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        synchronized (gSharedTempLock) {
29719d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            ensureSharedTempPointerCapacity(Math.max(pointerCount, 2));
29729d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            final PointerProperties[] pp = gSharedTempPointerProperties;
29739d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            final PointerCoords[] pc = gSharedTempPointerCoords;
29749d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
29759d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            for (int i = 0; i < pointerCount; i++) {
29769d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                nativeGetPointerProperties(mNativePtr, i, pp[0]);
29779d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                nativeGetPointerProperties(event.mNativePtr, i, pp[1]);
29789d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                if (!pp[0].equals(pp[1])) {
29799d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                    return false;
29809d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                }
29819d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            }
29829d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
29839d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            final int metaState = nativeGetMetaState(event.mNativePtr);
29849d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            final int historySize = nativeGetHistorySize(event.mNativePtr);
29859d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            for (int h = 0; h <= historySize; h++) {
29869d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                final int historyPos = (h == historySize ? HISTORY_CURRENT : h);
29879d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
29889d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                for (int i = 0; i < pointerCount; i++) {
29899d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                    nativeGetPointerCoords(event.mNativePtr, i, historyPos, pc[i]);
29909d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                }
29919d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
29929d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                final long eventTimeNanos = nativeGetEventTimeNanos(event.mNativePtr, historyPos);
29939d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                nativeAddBatch(mNativePtr, eventTimeNanos, pc, metaState);
29949d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            }
29959d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
29969d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        return true;
29979d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown    }
29989d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
29999d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown    /**
3000fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Returns true if all points in the motion event are completely within the specified bounds.
3001fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
3002fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
3003fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final boolean isWithinBoundsNoHistory(float left, float top,
3004fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            float right, float bottom) {
3005fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        final int pointerCount = nativeGetPointerCount(mNativePtr);
3006fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        for (int i = 0; i < pointerCount; i++) {
3007fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final float x = nativeGetAxisValue(mNativePtr, AXIS_X, i, HISTORY_CURRENT);
3008fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final float y = nativeGetAxisValue(mNativePtr, AXIS_Y, i, HISTORY_CURRENT);
3009fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            if (x < left || x > right || y < top || y > bottom) {
3010fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                return false;
3011fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3012fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3013fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return true;
3014fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
3015fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3016fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    private static final float clamp(float value, float low, float high) {
3017fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        if (value < low) {
3018fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return low;
3019fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        } else if (value > high) {
3020fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return high;
3021fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3022fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return value;
3023fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
3024fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3025fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
3026fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Returns a new motion events whose points have been clamped to the specified bounds.
3027fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
3028fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
3029fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final MotionEvent clampNoHistory(float left, float top, float right, float bottom) {
3030fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        MotionEvent ev = obtain();
3031fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        synchronized (gSharedTempLock) {
3032fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int pointerCount = nativeGetPointerCount(mNativePtr);
3033fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3034fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ensureSharedTempPointerCapacity(pointerCount);
3035fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerProperties[] pp = gSharedTempPointerProperties;
3036fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerCoords[] pc = gSharedTempPointerCoords;
3037fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3038fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int i = 0; i < pointerCount; i++) {
3039fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                nativeGetPointerProperties(mNativePtr, i, pp[i]);
3040fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                nativeGetPointerCoords(mNativePtr, i, HISTORY_CURRENT, pc[i]);
3041fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                pc[i].x = clamp(pc[i].x, left, right);
3042fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                pc[i].y = clamp(pc[i].y, top, bottom);
3043fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3044fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ev.mNativePtr = nativeInitialize(ev.mNativePtr,
3045fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetDeviceId(mNativePtr), nativeGetSource(mNativePtr),
3046fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetAction(mNativePtr), nativeGetFlags(mNativePtr),
3047fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetEdgeFlags(mNativePtr), nativeGetMetaState(mNativePtr),
3048fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetButtonState(mNativePtr),
3049fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetXOffset(mNativePtr), nativeGetYOffset(mNativePtr),
3050fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetXPrecision(mNativePtr), nativeGetYPrecision(mNativePtr),
3051fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetDownTimeNanos(mNativePtr),
3052fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetEventTimeNanos(mNativePtr, HISTORY_CURRENT),
3053fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    pointerCount, pp, pc);
3054fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return ev;
3055fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3056fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
3057fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3058fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
3059fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Gets an integer where each pointer id present in the event is marked as a bit.
3060fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
3061fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
3062fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final int getPointerIdBits() {
3063fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        int idBits = 0;
3064fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        final int pointerCount = nativeGetPointerCount(mNativePtr);
3065fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        for (int i = 0; i < pointerCount; i++) {
3066fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            idBits |= 1 << nativeGetPointerId(mNativePtr, i);
3067fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3068fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return idBits;
3069fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
3070fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3071fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
3072fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Splits a motion event such that it includes only a subset of pointer ids.
3073fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
3074fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
3075fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public final MotionEvent split(int idBits) {
3076fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        MotionEvent ev = obtain();
3077fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        synchronized (gSharedTempLock) {
3078fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int oldPointerCount = nativeGetPointerCount(mNativePtr);
3079fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            ensureSharedTempPointerCapacity(oldPointerCount);
3080fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerProperties[] pp = gSharedTempPointerProperties;
3081fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final PointerCoords[] pc = gSharedTempPointerCoords;
3082fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int[] map = gSharedTempPointerIndexMap;
3083fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3084fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int oldAction = nativeGetAction(mNativePtr);
3085fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int oldActionMasked = oldAction & ACTION_MASK;
3086fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int oldActionPointerIndex = (oldAction & ACTION_POINTER_INDEX_MASK)
3087fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    >> ACTION_POINTER_INDEX_SHIFT;
3088fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int newActionPointerIndex = -1;
3089fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int newPointerCount = 0;
3090fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            int newIdBits = 0;
3091fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int i = 0; i < oldPointerCount; i++) {
3092fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                nativeGetPointerProperties(mNativePtr, i, pp[newPointerCount]);
3093fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                final int idBit = 1 << pp[newPointerCount].id;
3094fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                if ((idBit & idBits) != 0) {
3095fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    if (i == oldActionPointerIndex) {
3096fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                        newActionPointerIndex = newPointerCount;
3097fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    }
3098fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    map[newPointerCount] = i;
3099fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    newPointerCount += 1;
3100fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    newIdBits |= idBit;
3101fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                }
3102fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3103fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3104fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            if (newPointerCount == 0) {
3105fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                throw new IllegalArgumentException("idBits did not match any ids in the event");
3106fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3107fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3108fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int newAction;
3109fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            if (oldActionMasked == ACTION_POINTER_DOWN || oldActionMasked == ACTION_POINTER_UP) {
3110fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                if (newActionPointerIndex < 0) {
3111fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    // An unrelated pointer changed.
3112fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    newAction = ACTION_MOVE;
3113fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                } else if (newPointerCount == 1) {
3114fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    // The first/last pointer went down/up.
3115fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    newAction = oldActionMasked == ACTION_POINTER_DOWN
3116fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            ? ACTION_DOWN : ACTION_UP;
3117fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                } else {
3118fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    // A secondary pointer went down/up.
3119fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    newAction = oldActionMasked
3120fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            | (newActionPointerIndex << ACTION_POINTER_INDEX_SHIFT);
3121fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                }
3122fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            } else {
3123fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                // Simple up/down/cancel/move or other motion action.
3124fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                newAction = oldAction;
3125fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3126fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3127fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final int historySize = nativeGetHistorySize(mNativePtr);
3128fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int h = 0; h <= historySize; h++) {
3129fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                final int historyPos = h == historySize ? HISTORY_CURRENT : h;
3130fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3131fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                for (int i = 0; i < newPointerCount; i++) {
3132fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeGetPointerCoords(mNativePtr, map[i], historyPos, pc[i]);
3133fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                }
3134fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3135fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                final long eventTimeNanos = nativeGetEventTimeNanos(mNativePtr, historyPos);
3136fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                if (h == 0) {
3137fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    ev.mNativePtr = nativeInitialize(ev.mNativePtr,
3138fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetDeviceId(mNativePtr), nativeGetSource(mNativePtr),
3139fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            newAction, nativeGetFlags(mNativePtr),
3140fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetEdgeFlags(mNativePtr), nativeGetMetaState(mNativePtr),
3141fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetButtonState(mNativePtr),
3142fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetXOffset(mNativePtr), nativeGetYOffset(mNativePtr),
3143fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetXPrecision(mNativePtr), nativeGetYPrecision(mNativePtr),
3144fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            nativeGetDownTimeNanos(mNativePtr), eventTimeNanos,
3145fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                            newPointerCount, pp, pc);
3146fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                } else {
3147fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    nativeAddBatch(ev.mNativePtr, eventTimeNanos, pc, 0);
3148fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                }
3149fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3150fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return ev;
3151fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3152fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
3153fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
31549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
31559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
3156fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        StringBuilder msg = new StringBuilder();
3157fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append("MotionEvent { action=").append(actionToString(getAction()));
31585bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright        msg.append(", actionButton=").append(buttonStateToString(getActionButton()));
3159fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3160fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        final int pointerCount = getPointerCount();
3161fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        for (int i = 0; i < pointerCount; i++) {
3162fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            msg.append(", id[").append(i).append("]=").append(getPointerId(i));
3163fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            msg.append(", x[").append(i).append("]=").append(getX(i));
3164fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            msg.append(", y[").append(i).append("]=").append(getY(i));
3165fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            msg.append(", toolType[").append(i).append("]=").append(
3166fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    toolTypeToString(getToolType(i)));
3167fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3168fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
31698134681b25dfff814ffeaad8ff70e84316c1869fJeff Brown        msg.append(", buttonState=").append(MotionEvent.buttonStateToString(getButtonState()));
3170fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", metaState=").append(KeyEvent.metaStateToString(getMetaState()));
3171fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", flags=0x").append(Integer.toHexString(getFlags()));
3172fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", edgeFlags=0x").append(Integer.toHexString(getEdgeFlags()));
3173fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", pointerCount=").append(pointerCount);
3174fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", historySize=").append(getHistorySize());
3175fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", eventTime=").append(getEventTime());
3176fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", downTime=").append(getDownTime());
3177fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", deviceId=").append(getDeviceId());
3178fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(", source=0x").append(Integer.toHexString(getSource()));
3179fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        msg.append(" }");
3180fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return msg.toString();
3181497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown    }
3182497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown
3183497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown    /**
31844dad6cab641f95524d86d0fe9f9d46e323aeb41bJohn Spurlock     * Returns a string that represents the symbolic name of the specified unmasked action
318591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * such as "ACTION_DOWN", "ACTION_POINTER_DOWN(3)" or an equivalent numeric constant
318691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * such as "35" if unknown.
3187497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown     *
31884dad6cab641f95524d86d0fe9f9d46e323aeb41bJohn Spurlock     * @param action The unmasked action.
3189497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown     * @return The symbolic name of the specified action.
31904dad6cab641f95524d86d0fe9f9d46e323aeb41bJohn Spurlock     * @see #getAction()
3191497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown     */
3192497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown    public static String actionToString(int action) {
3193497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown        switch (action) {
3194497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_DOWN:
3195497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_DOWN";
3196497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_UP:
3197497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_UP";
3198497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_CANCEL:
3199497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_CANCEL";
320033bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown            case ACTION_OUTSIDE:
320133bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown                return "ACTION_OUTSIDE";
3202497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_MOVE:
3203497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_MOVE";
3204cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown            case ACTION_HOVER_MOVE:
3205cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown                return "ACTION_HOVER_MOVE";
320633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown            case ACTION_SCROLL:
320733bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown                return "ACTION_SCROLL";
3208a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown            case ACTION_HOVER_ENTER:
3209a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown                return "ACTION_HOVER_ENTER";
3210a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown            case ACTION_HOVER_EXIT:
3211a032cc008618b83ecbbede537517d1e7998e3264Jeff Brown                return "ACTION_HOVER_EXIT";
32125bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright            case ACTION_BUTTON_PRESS:
32135bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright                return "ACTION_BUTTON_PRESS";
32145bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright            case ACTION_BUTTON_RELEASE:
32155bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright                return "ACTION_BUTTON_RELEASE";
3216497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown        }
3217497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown        int index = (action & ACTION_POINTER_INDEX_MASK) >> ACTION_POINTER_INDEX_SHIFT;
3218497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown        switch (action & ACTION_MASK) {
3219497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_POINTER_DOWN:
3220497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_POINTER_DOWN(" + index + ")";
3221497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            case ACTION_POINTER_UP:
3222497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return "ACTION_POINTER_UP(" + index + ")";
3223497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown            default:
3224497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown                return Integer.toString(action);
3225497a92cc5ba2176b8a8484b0a7da040eac0e887bJeff Brown        }
32269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
32279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
322891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    /**
322991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * Returns a string that represents the symbolic name of the specified axis
32306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * such as "AXIS_X" or an equivalent numeric constant such as "42" if unknown.
323191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     *
32324dad6cab641f95524d86d0fe9f9d46e323aeb41bJohn Spurlock     * @param axis The axis.
323391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     * @return The symbolic name of the specified axis.
323491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown     */
323591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    public static String axisToString(int axis) {
3236337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright        String symbolicName = nativeAxisToString(axis);
3237337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright        return symbolicName != null ? LABEL_PREFIX + symbolicName : Integer.toString(axis);
32386f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    }
32396f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown
32406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    /**
3241cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * Gets an axis by its symbolic name such as "AXIS_X" or an
3242cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413Jeff Brown     * equivalent numeric constant such as "42".
32436f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     *
32446f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @param symbolicName The symbolic name of the axis.
32456f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     * @return The axis or -1 if not found.
32464dad6cab641f95524d86d0fe9f9d46e323aeb41bJohn Spurlock     * @see KeyEvent#keyCodeToString(int)
32476f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown     */
32486f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown    public static int axisFromString(String symbolicName) {
3249337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright        if (symbolicName.startsWith(LABEL_PREFIX)) {
3250337d9d2edc262141f9b8f684e53aae5e47f0ae13Michael Wright            symbolicName = symbolicName.substring(LABEL_PREFIX.length());
3251973efa0813260c24390d46b07e524de605630180Michael Wright            int axis = nativeAxisFromString(symbolicName);
3252973efa0813260c24390d46b07e524de605630180Michael Wright            if (axis >= 0) {
3253973efa0813260c24390d46b07e524de605630180Michael Wright                return axis;
3254973efa0813260c24390d46b07e524de605630180Michael Wright            }
32556f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        }
32566f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        try {
32576f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown            return Integer.parseInt(symbolicName, 10);
32586f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        } catch (NumberFormatException ex) {
32596f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown            return -1;
326091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
326191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown    }
326291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
3263fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
3264fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Returns a string that represents the symbolic name of the specified combined
3265fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * button state flags such as "0", "BUTTON_PRIMARY",
3266fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * "BUTTON_PRIMARY|BUTTON_SECONDARY" or an equivalent numeric constant such as "0x10000000"
3267fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * if unknown.
3268fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
3269fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param buttonState The button state.
3270fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @return The symbolic name of the specified combined button state flags.
3271fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
3272fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
3273fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static String buttonStateToString(int buttonState) {
3274fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        if (buttonState == 0) {
3275fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return "0";
3276fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3277fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        StringBuilder result = null;
3278fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        int i = 0;
3279fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        while (buttonState != 0) {
3280fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            final boolean isSet = (buttonState & 1) != 0;
3281fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            buttonState >>>= 1; // unsigned shift!
3282fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            if (isSet) {
3283fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                final String name = BUTTON_SYMBOLIC_NAMES[i];
3284fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                if (result == null) {
3285fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    if (buttonState == 0) {
3286fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                        return name;
3287fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    }
3288fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    result = new StringBuilder(name);
3289fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                } else {
3290fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    result.append('|');
3291fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                    result.append(name);
3292fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                }
3293fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3294fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            i += 1;
3295fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3296fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return result.toString();
3297fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
3298fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3299fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
3300fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Returns a string that represents the symbolic name of the specified tool type
3301fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * such as "TOOL_TYPE_FINGER" or an equivalent numeric constant such as "42" if unknown.
3302fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
3303fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @param toolType The tool type.
3304fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @return The symbolic name of the specified tool type.
3305fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * @hide
3306fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
3307fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static String toolTypeToString(int toolType) {
3308fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        String symbolicName = TOOL_TYPE_SYMBOLIC_NAMES.get(toolType);
3309fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        return symbolicName != null ? symbolicName : Integer.toString(toolType);
3310fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
3311fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3312cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan    /**
3313cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan     * Checks if a mouse or stylus button (or combination of buttons) is pressed.
3314cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan     * @param button Button (or combination of buttons).
3315cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan     * @return True if specified buttons are pressed.
3316cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan     *
3317cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan     * @see #BUTTON_PRIMARY
3318cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan     * @see #BUTTON_SECONDARY
3319cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan     * @see #BUTTON_TERTIARY
3320cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan     * @see #BUTTON_FORWARD
3321cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan     * @see #BUTTON_BACK
33225bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * @see #BUTTON_STYLUS_PRIMARY
33235bd69e6e6164c59a0423edd0d5243fc8c07e6af3Michael Wright     * @see #BUTTON_STYLUS_SECONDARY
3324cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan     */
3325cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan    public final boolean isButtonPressed(int button) {
3326cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan        if (button == 0) {
3327cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan            return false;
3328cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan        }
3329cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan        return (getButtonState() & button) == button;
3330cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan    }
3331cc32bd83e4d420c1adaeb3ea40f8986471e54590Sujith Ramakrishnan
33329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Parcelable.Creator<MotionEvent> CREATOR
33339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            = new Parcelable.Creator<MotionEvent>() {
33349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public MotionEvent createFromParcel(Parcel in) {
33356ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown            in.readInt(); // skip token, we already know this is a MotionEvent
33366ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown            return MotionEvent.createFromParcelBody(in);
33379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
33389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
33399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public MotionEvent[] newArray(int size) {
33409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new MotionEvent[size];
33419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
33429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
33439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
33446ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown    /** @hide */
33456ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown    public static MotionEvent createFromParcelBody(Parcel in) {
334691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        MotionEvent ev = obtain();
334791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        ev.mNativePtr = nativeReadFromParcel(ev.mNativePtr, in);
33486ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown        return ev;
33496ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown    }
335091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
3351c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale    /** @hide */
3352c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale    @Override
3353c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale    public final void cancel() {
3354c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale        setAction(ACTION_CANCEL);
3355c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale    }
3356c3672cd3f7e2bd87d6de9dada499de82b62fae84Wale Ogunwale
33579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel out, int flags) {
33586ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown        out.writeInt(PARCEL_TOKEN_MOTION_EVENT);
335991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        nativeWriteToParcel(mNativePtr, out);
33609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
336191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
3362c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    /**
3363c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Transfer object for pointer coordinates.
3364c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
3365fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Objects of this type can be used to specify the pointer coordinates when
3366fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * creating new {@link MotionEvent} objects and to query pointer coordinates
3367fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * in bulk.
3368c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     *
3369c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * Refer to {@link InputDevice} for information about how different kinds of
3370c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     * input devices and sources represent pointer coordinates.
3371c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown     */
3372c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    public static final class PointerCoords {
337391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        private static final int INITIAL_PACKED_AXIS_VALUES = 8;
33746f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown        private long mPackedAxisBits;
337591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        private float[] mPackedAxisValues;
337691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
337791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
337891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Creates a pointer coords object with all axes initialized to zero.
337991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
338091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public PointerCoords() {
338191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
338291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
338391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
338491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Creates a pointer coords object as a copy of the
338591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * contents of another pointer coords object.
338691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
338791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @param other The pointer coords object to copy.
338891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
338991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public PointerCoords(PointerCoords other) {
339091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            copyFrom(other);
339191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        }
339291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
3393fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /** @hide */
3394fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public static PointerCoords[] createArray(int size) {
3395fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            PointerCoords[] array = new PointerCoords[size];
3396fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int i = 0; i < size; i++) {
3397fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                array[i] = new PointerCoords();
3398fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3399fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return array;
3400fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3401fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3402c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
34036f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown         * The X component of the pointer movement.
340491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
340591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_X
3406c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3407c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float x;
3408c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3409c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
34106f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown         * The Y component of the pointer movement.
341191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
341291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_Y
3413c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3414c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float y;
3415c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3416c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
341791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * A normalized value that describes the pressure applied to the device
341891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * by a finger or other tool.
3419c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The pressure generally ranges from 0 (no pressure at all) to 1 (normal pressure),
342091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * although values higher than 1 may be generated depending on the calibration of
3421c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * the input device.
342291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
342391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_PRESSURE
3424c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3425c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float pressure;
3426c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3427c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
342891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * A normalized value that describes the approximate size of the pointer touch area
342991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * in relation to the maximum detectable size of the device.
343091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * It represents some approximation of the area of the screen being
3431c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * pressed; the actual value in pixels corresponding to the
3432c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * touch is normalized with the device specific range of values
3433c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * and scaled to a value between 0 and 1. The value of size can be used to
3434c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * determine fat touch events.
343591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
343691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_SIZE
3437c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3438c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float size;
3439c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3440c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
3441c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The length of the major axis of an ellipse that describes the touch area at
3442c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * the point of contact.
344391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * If the device is a touch screen, the length is reported in pixels, otherwise it is
344491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * reported in device-specific units.
344591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
344691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_TOUCH_MAJOR
3447c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3448c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float touchMajor;
3449c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3450c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
3451c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The length of the minor axis of an ellipse that describes the touch area at
3452c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * the point of contact.
345391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * If the device is a touch screen, the length is reported in pixels, otherwise it is
345491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * reported in device-specific units.
345591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
345691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_TOUCH_MINOR
3457c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3458c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float touchMinor;
3459c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3460c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
3461c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The length of the major axis of an ellipse that describes the size of
3462c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * the approaching tool.
3463c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The tool area represents the estimated size of the finger or pen that is
3464c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * touching the device independent of its actual touch area at the point of contact.
346591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * If the device is a touch screen, the length is reported in pixels, otherwise it is
346691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * reported in device-specific units.
346791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
346891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_TOOL_MAJOR
3469c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3470c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float toolMajor;
3471c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3472c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
3473c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The length of the minor axis of an ellipse that describes the size of
3474c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * the approaching tool.
3475c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The tool area represents the estimated size of the finger or pen that is
3476c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * touching the device independent of its actual touch area at the point of contact.
347791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * If the device is a touch screen, the length is reported in pixels, otherwise it is
347891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * reported in device-specific units.
347991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
348091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_TOOL_MINOR
3481c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3482c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float toolMinor;
3483c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown
3484c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        /**
3485c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * The orientation of the touch area and tool area in radians clockwise from vertical.
34866f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown         * An angle of 0 radians indicates that the major axis of contact is oriented
3487c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * upwards, is perfectly circular or is of unknown orientation.  A positive angle
3488c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * indicates that the major axis of contact is oriented to the right.  A negative angle
3489c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * indicates that the major axis of contact is oriented to the left.
34906d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown         * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians
3491c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         * (finger pointing fully right).
349291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
349391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_ORIENTATION
3494c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown         */
3495c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        public float orientation;
349691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
349791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
349891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Clears the contents of this object.
349991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Resets all axes to zero.
350091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
350191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public void clear() {
350291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            mPackedAxisBits = 0;
350391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
350491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            x = 0;
350591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            y = 0;
350691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            pressure = 0;
350791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            size = 0;
350891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            touchMajor = 0;
350991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            touchMinor = 0;
351091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            toolMajor = 0;
351191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            toolMinor = 0;
351291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            orientation = 0;
3513c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        }
351491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
351591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
351691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Copies the contents of another pointer coords object.
351791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
351891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @param other The pointer coords object to copy.
351991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
352091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public void copyFrom(PointerCoords other) {
35216f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown            final long bits = other.mPackedAxisBits;
352291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            mPackedAxisBits = bits;
352391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            if (bits != 0) {
352491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                final float[] otherValues = other.mPackedAxisValues;
35256f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                final int count = Long.bitCount(bits);
352691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                float[] values = mPackedAxisValues;
352791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                if (values == null || count > values.length) {
352891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    values = new float[otherValues.length];
352991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    mPackedAxisValues = values;
353091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                }
353191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                System.arraycopy(otherValues, 0, values, 0, count);
353291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            }
353391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
353491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            x = other.x;
353591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            y = other.y;
353691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            pressure = other.pressure;
353791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            size = other.size;
353891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            touchMajor = other.touchMajor;
353991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            touchMinor = other.touchMinor;
354091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            toolMajor = other.toolMajor;
354191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            toolMinor = other.toolMinor;
354291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            orientation = other.orientation;
3543c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        }
354491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
354591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
354691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Gets the value associated with the specified axis.
354791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
354891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @param axis The axis identifier for the axis value to retrieve.
354991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @return The value associated with the axis, or 0 if none.
355091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
355191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_X
355291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_Y
355391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
355491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public float getAxisValue(int axis) {
355591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            switch (axis) {
355691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_X:
355791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return x;
355891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_Y:
355991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return y;
356091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_PRESSURE:
356191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return pressure;
356291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_SIZE:
356391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return size;
356491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOUCH_MAJOR:
356591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return touchMajor;
356691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOUCH_MINOR:
356791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return touchMinor;
356891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOOL_MAJOR:
356991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return toolMajor;
357091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOOL_MINOR:
357191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return toolMinor;
357291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_ORIENTATION:
357391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return orientation;
357491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                default: {
35756f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    if (axis < 0 || axis > 63) {
35766f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                        throw new IllegalArgumentException("Axis out of range.");
35776f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    }
35786f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    final long bits = mPackedAxisBits;
35799adca065148f704187866c53cceda8e0050b1f35Michael Wright                    final long axisBit = 0x8000000000000000L >>> axis;
358091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    if ((bits & axisBit) == 0) {
358191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                        return 0;
358291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    }
35839adca065148f704187866c53cceda8e0050b1f35Michael Wright                    final int index = Long.bitCount(bits & ~(0xFFFFFFFFFFFFFFFFL >>> axis));
358491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    return mPackedAxisValues[index];
358591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                }
358691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            }
3587c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        }
358891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown
358991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        /**
359091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * Sets the value associated with the specified axis.
359191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
359291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @param axis The axis identifier for the axis value to assign.
359391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @param value The value to set.
359491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         *
359591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_X
359691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         * @see MotionEvent#AXIS_Y
359791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown         */
359891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown        public void setAxisValue(int axis, float value) {
359991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            switch (axis) {
360091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_X:
360191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    x = value;
360291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
360391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_Y:
360491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    y = value;
360591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
360691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_PRESSURE:
360791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    pressure = value;
360891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
360991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_SIZE:
361091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    size = value;
361191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
361291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOUCH_MAJOR:
361391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    touchMajor = value;
361491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
361591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOUCH_MINOR:
361691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    touchMinor = value;
361791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
361891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOOL_MAJOR:
361991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    toolMajor = value;
362091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
362191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_TOOL_MINOR:
362291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    toolMinor = value;
362391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
362491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                case AXIS_ORIENTATION:
362591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    orientation = value;
362691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    break;
362791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                default: {
36286f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    if (axis < 0 || axis > 63) {
36296f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                        throw new IllegalArgumentException("Axis out of range.");
36306f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    }
36316f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                    final long bits = mPackedAxisBits;
36329adca065148f704187866c53cceda8e0050b1f35Michael Wright                    final long axisBit = 0x8000000000000000L >>> axis;
36339adca065148f704187866c53cceda8e0050b1f35Michael Wright                    final int index = Long.bitCount(bits & ~(0xFFFFFFFFFFFFFFFFL >>> axis));
363491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    float[] values = mPackedAxisValues;
363591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    if ((bits & axisBit) == 0) {
363691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                        if (values == null) {
363791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                            values = new float[INITIAL_PACKED_AXIS_VALUES];
363891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                            mPackedAxisValues = values;
363991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                        } else {
36406f2fba428ca5e77a26d991ad728e346cc47609eeJeff Brown                            final int count = Long.bitCount(bits);
364191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                            if (count < values.length) {
364291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                if (index != count) {
364391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                    System.arraycopy(values, index, values, index + 1,
364491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                            count - index);
364591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                }
364691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                            } else {
364791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                float[] newValues = new float[count * 2];
364891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                System.arraycopy(values, 0, newValues, 0, index);
364991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                System.arraycopy(values, index, newValues, index + 1,
365091c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                        count - index);
365191c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                values = newValues;
365291c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                                mPackedAxisValues = values;
365391c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                            }
365491c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                        }
365591c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                        mPackedAxisBits = bits | axisBit;
365691c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    }
365791c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                    values[index] = value;
365891c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown                }
365991c69ab01539f7ba28708f41ec1835cc2920d0a0Jeff Brown            }
3660c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown        }
3661c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown    }
3662fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3663fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    /**
3664fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Transfer object for pointer properties.
3665fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     *
3666fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * Objects of this type can be used to specify the pointer id and tool type
3667fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     * when creating new {@link MotionEvent} objects and to query pointer properties in bulk.
3668fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown     */
3669fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    public static final class PointerProperties {
3670fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3671fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Creates a pointer properties object with an invalid pointer id.
3672fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3673fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public PointerProperties() {
3674fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            clear();
3675fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3676fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3677fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3678fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Creates a pointer properties object as a copy of the contents of
3679fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * another pointer properties object.
3680fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * @param other
3681fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3682fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public PointerProperties(PointerProperties other) {
3683fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            copyFrom(other);
3684fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3685fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3686fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /** @hide */
3687fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public static PointerProperties[] createArray(int size) {
3688fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            PointerProperties[] array = new PointerProperties[size];
3689fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            for (int i = 0; i < size; i++) {
3690fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown                array[i] = new PointerProperties();
3691fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            }
3692fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            return array;
3693fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3694fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3695fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3696fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * The pointer id.
3697fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Initially set to {@link #INVALID_POINTER_ID} (-1).
3698fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         *
3699fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * @see MotionEvent#getPointerId(int)
3700fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3701fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public int id;
3702fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3703fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3704fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * The pointer tool type.
3705fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Initially set to 0.
3706fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         *
3707fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * @see MotionEvent#getToolType(int)
3708fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3709fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public int toolType;
3710fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3711fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3712fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Resets the pointer properties to their initial values.
3713fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3714fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public void clear() {
3715fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            id = INVALID_POINTER_ID;
3716fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            toolType = TOOL_TYPE_UNKNOWN;
3717fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
3718fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown
3719fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        /**
3720fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * Copies the contents of another pointer properties object.
3721fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         *
3722fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         * @param other The pointer properties object to copy.
3723fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown         */
3724fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        public void copyFrom(PointerProperties other) {
3725fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            id = other.id;
3726fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown            toolType = other.toolType;
3727fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown        }
37289d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
37299d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        @Override
37309d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        public boolean equals(Object other) {
37319d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            if (other instanceof PointerProperties) {
37329d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown                return equals((PointerProperties)other);
37339d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            }
37349d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return false;
37359d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
37369d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
37379d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        private boolean equals(PointerProperties other) {
37389d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return other != null && id == other.id && toolType == other.toolType;
37399d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
37409d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown
37419d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        @Override
37429d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        public int hashCode() {
37439d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown            return id | (toolType << 8);
37449d3bdbd6b8f9eda5f67212b06185cd59adcda6c8Jeff Brown        }
3745fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown    }
37469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3747