MotionEvent.java revision 9e2ad36be87f2703b3d737189944d82f93bd4f27
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 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemClock; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Object used to report movement (mouse, pen, finger, trackball) events. This 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class may hold either absolute or relative movements, depending on what 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is being used for. 27c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 28c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Refer to {@link InputDevice} for information about how different kinds of 29c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * input devices and sources represent pointer coordinates. 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 31c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brownpublic final class MotionEvent extends InputEvent implements Parcelable { 325c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private static final long MS_PER_NS = 1000000; 330dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Bit mask of the parts of the action code that are the action itself. 369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_MASK = 0xff; 389822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A pressed gesture has started, the 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * motion contains the initial starting location. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_DOWN = 0; 449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A pressed gesture has finished, the 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * motion contains the final release location as well as any intermediate 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * points since the last down or move event. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_UP = 1; 519822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A change has happened during a 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * press gesture (between {@link #ACTION_DOWN} and {@link #ACTION_UP}). 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The motion contains the most recent point, as well as any intermediate 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * points since the last down or move event. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_MOVE = 2; 599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: The current gesture has been aborted. 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You will not receive any more points in it. You should treat this as 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an up event, but not perform any action that you normally would. 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_CANCEL = 3; 669822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A movement has happened outside of the 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normal bounds of the UI element. This does not provide a full gesture, 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but only the initial location of the movement/touch. 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_OUTSIDE = 4; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 759822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * A non-primary pointer has gone down. The bits in 760dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #ACTION_POINTER_ID_MASK} indicate which pointer changed. 779822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 789822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_DOWN = 5; 799822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 81b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * A non-primary pointer has gone up. The bits in 82b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_POINTER_ID_MASK} indicate which pointer changed. 839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 84b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_UP = 6; 859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 87b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Bits in the action code that represent a pointer index, used with 88b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_POINTER_DOWN} and {@link #ACTION_POINTER_UP}. Shifting 89b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * down by {@link #ACTION_POINTER_INDEX_SHIFT} provides the actual pointer 90b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * index where the data for the pointer going up or down can be found; you can 91b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * get its identifier with {@link #getPointerId(int)} and the actual 92b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data with {@link #getX(int)} etc. 939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 94b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_INDEX_MASK = 0xff00; 959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 97b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Bit shift for the action bits holding the pointer index as 98b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * defined by {@link #ACTION_POINTER_INDEX_MASK}. 999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 100b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_INDEX_SHIFT = 8; 1019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 103b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 104b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_DOWN}. 1059822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 106b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 107b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_1_DOWN = ACTION_POINTER_DOWN | 0x0000; 108b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 109b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 110b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 111b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_DOWN}. 112b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 113b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 114b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_2_DOWN = ACTION_POINTER_DOWN | 0x0100; 1159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1169822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 117b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 118b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_DOWN}. 1199822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 120b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 121b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_3_DOWN = ACTION_POINTER_DOWN | 0x0200; 122b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 123b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 124b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 125b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_UP}. 126b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 127b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_1_UP = ACTION_POINTER_UP | 0x0000; 1299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1309822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 131b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 132b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_UP}. 1339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 134b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_2_UP = ACTION_POINTER_UP | 0x0100; 1369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 138b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 139b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_UP}. 1409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 141b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_3_UP = ACTION_POINTER_UP | 0x0200; 1439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 145b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Renamed to {@link #ACTION_POINTER_INDEX_MASK} to match 146b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * the actual data contained in these bits. 1479822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 148b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1490dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public static final int ACTION_POINTER_ID_MASK = 0xff00; 1509822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1519822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 152b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Renamed to {@link #ACTION_POINTER_INDEX_SHIFT} to match 153b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * the actual data contained in these bits. 1549822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 155b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1560dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public static final int ACTION_POINTER_ID_SHIFT = 8; 1579822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final boolean TRACK_RECYCLED_LOCATION = false; 159cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the top edge of the screen. 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_TOP = 0x00000001; 164cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the bottom edge of the screen. 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_BOTTOM = 0x00000002; 169cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the left edge of the screen. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_LEFT = 0x00000004; 174cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the right edge of the screen. 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_RIGHT = 0x00000008; 179cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1809e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 1819822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Offset for the sample's X coordinate. 1829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1836d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown static private final int SAMPLE_X = 0; 1849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1859e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 1869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Offset for the sample's Y coordinate. 1879822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1886d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown static private final int SAMPLE_Y = 1; 1899822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1909e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 191c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Offset for the sample's pressure. 1929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1936d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown static private final int SAMPLE_PRESSURE = 2; 1949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1959e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 196c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Offset for the sample's size 1979822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1986d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown static private final int SAMPLE_SIZE = 3; 1999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2009e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 201c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Offset for the sample's touch major axis length. 202c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 2036d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown static private final int SAMPLE_TOUCH_MAJOR = 4; 204c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 2059e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 206c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Offset for the sample's touch minor axis length. 207c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 2086d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown static private final int SAMPLE_TOUCH_MINOR = 5; 209c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 2109e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 211c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Offset for the sample's tool major axis length. 212c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 2136d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown static private final int SAMPLE_TOOL_MAJOR = 6; 214c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 2159e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 216c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Offset for the sample's tool minor axis length. 217c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 2186d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown static private final int SAMPLE_TOOL_MINOR = 7; 219c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 2209e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 221c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Offset for the sample's orientation. 222c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 2236d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown static private final int SAMPLE_ORIENTATION = 8; 224c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 2259e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 2269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Number of data items for each sample. 2279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 2286d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown static private final int NUM_SAMPLE_DATA = 9; 2299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2309e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 2319e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown * Minimum number of pointers for which to reserve space when allocating new 2329e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown * motion events. This is explicitly not a bound on the maximum number of pointers. 2331e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn */ 2349e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown static private final int BASE_AVAIL_POINTERS = 5; 2351e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn 2369e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown /* 2379e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown * Minimum number of samples for which to reserve space when allocating new motion events. 2389e2ad36be87f2703b3d737189944d82f93bd4f27Jeff Brown */ 2399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static private final int BASE_AVAIL_SAMPLES = 8; 2409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private final int MAX_RECYCLED = 10; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private Object gRecyclerLock = new Object(); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private int gRecyclerUsed = 0; 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private MotionEvent gRecyclerTop = null; 245cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 2465c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private long mDownTimeNano; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mAction; 2485c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private float mXOffset; 2495c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private float mYOffset; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mXPrecision; 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mYPrecision; 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mEdgeFlags; 2539822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private int mMetaState; 2549822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2559822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private int mNumPointers; 2569822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private int mNumSamples; 2575c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 2585c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private int mLastDataSampleIndex; 2595c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private int mLastEventTimeNanoSampleIndex; 2605c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 2610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn // Array of mNumPointers size of identifiers for each pointer of data. 2620dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn private int[] mPointerIdentifiers; 2635c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 2649822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn // Array of (mNumSamples * mNumPointers * NUM_SAMPLE_DATA) size of event data. 2655c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown // Samples are ordered from oldest to newest. 2669822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private float[] mDataSamples; 2675c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 2685c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown // Array of mNumSamples size of event time stamps in nanoseconds. 2695c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown // Samples are ordered from oldest to newest. 2705c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private long[] mEventTimeNanoSamples; 2718169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MotionEvent mNext; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RuntimeException mRecycledLocation; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mRecycled; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown private MotionEvent(int pointerCount, int sampleCount) { 27746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mPointerIdentifiers = new int[pointerCount]; 27846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mDataSamples = new float[pointerCount * sampleCount * NUM_SAMPLE_DATA]; 2795c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mEventTimeNanoSamples = new long[sampleCount]; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 281cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 28246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown static private MotionEvent obtain(int pointerCount, int sampleCount) { 28346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown final MotionEvent ev; 28446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown synchronized (gRecyclerLock) { 28546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (gRecyclerTop == null) { 28646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (pointerCount < BASE_AVAIL_POINTERS) { 28746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown pointerCount = BASE_AVAIL_POINTERS; 28846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 28946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (sampleCount < BASE_AVAIL_SAMPLES) { 29046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown sampleCount = BASE_AVAIL_SAMPLES; 29146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 29246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown return new MotionEvent(pointerCount, sampleCount); 29346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 29446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev = gRecyclerTop; 29546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown gRecyclerTop = ev.mNext; 2965c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown gRecyclerUsed -= 1; 29746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 29846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev.mRecycledLocation = null; 29946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev.mRecycled = false; 30046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev.mNext = null; 30146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 30246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (ev.mPointerIdentifiers.length < pointerCount) { 30346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev.mPointerIdentifiers = new int[pointerCount]; 30446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 30546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 3065c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown if (ev.mEventTimeNanoSamples.length < sampleCount) { 3075c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mEventTimeNanoSamples = new long[sampleCount]; 30846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 30946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 31046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown final int neededDataSamplesLength = pointerCount * sampleCount * NUM_SAMPLE_DATA; 3115c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown if (ev.mDataSamples.length < neededDataSamplesLength) { 31246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev.mDataSamples = new float[neededDataSamplesLength]; 31346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 31446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 31546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown return ev; 31646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 3175c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 31853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan /** 31953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * Create a new MotionEvent, filling in all of the basic values that 32053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * define the motion. 32153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * 32253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param downTime The time (in ms) when the user originally pressed down to start 32353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 324c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param eventTime The the time (in ms) when this specific event was generated. This 32553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * must be obtained from {@link SystemClock#uptimeMillis()}. 32653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param action The kind of action being performed -- one of either 32753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 32853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * {@link #ACTION_CANCEL}. 3290dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointers The number of points that will be in this event. 330c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIds An array of <em>pointers</em> values providing 3310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * an identifier for each pointer. 332c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerCoords An array of <em>pointers</em> values providing 333c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * a {@link PointerCoords} coordinate object for each pointer. 33453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param metaState The state of any meta / modifier keys that were in effect when 33553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * the event was generated. 33653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param xPrecision The precision of the X coordinate being reported. 33753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param yPrecision The precision of the Y coordinate being reported. 33853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param deviceId The id for the device that this event came from. An id of 33953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * zero indicates that the event didn't come from a physical device; other 34053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * numbers are arbitrary and you shouldn't depend on the values. 34153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param edgeFlags A bitfield indicating which edges, if any, where touched by this 34253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * MotionEvent. 343c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param source The source of this event. 34453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan */ 345c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown static public MotionEvent obtain(long downTime, long eventTime, 346c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int action, int pointers, int[] pointerIds, PointerCoords[] pointerCoords, 347c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int metaState, float xPrecision, float yPrecision, int deviceId, 348c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown int edgeFlags, int source) { 3495c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown MotionEvent ev = obtain(pointers, 1); 35053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mDeviceId = deviceId; 351c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown ev.mSource = source; 35253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mEdgeFlags = edgeFlags; 3535c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mDownTimeNano = downTime * MS_PER_NS; 35453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mAction = action; 35553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mMetaState = metaState; 3565c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mXOffset = 0; 3575c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mYOffset = 0; 35853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mXPrecision = xPrecision; 35953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mYPrecision = yPrecision; 3605c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 3619822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = pointers; 3629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumSamples = 1; 3639822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 3645c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastDataSampleIndex = 0; 3655c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastEventTimeNanoSampleIndex = 0; 3661e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn 367c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown System.arraycopy(pointerIds, 0, ev.mPointerIdentifiers, 0, pointers); 3681e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn 369c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown ev.mEventTimeNanoSamples[0] = eventTime * MS_PER_NS; 3705c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 371c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown ev.setPointerCoordsAtSampleIndex(0, pointerCoords); 3720dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 37353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan return ev; 37453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan } 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new MotionEvent, filling in all of the basic values that 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * define the motion. 379cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 380cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param downTime The time (in ms) when the user originally pressed down to start 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 382cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param eventTime The the time (in ms) when this specific event was generated. This 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must be obtained from {@link SystemClock#uptimeMillis()}. 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action The kind of action being performed -- one of either 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_CANCEL}. 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The X coordinate of this event. 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The Y coordinate of this event. 389cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param pressure The current pressure of this event. The pressure generally 390cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * ranges from 0 (no pressure at all) to 1 (normal pressure), however 391cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * values higher than 1 may be generated depending on the calibration of 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the input device. 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param size A scaled value of the approximate size of the area being pressed when 394cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * touched with the finger. The actual value in pixels corresponding to the finger 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * touch is normalized with a device specific range of values 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and scaled to a value between 0 and 1. 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState The state of any meta / modifier keys that were in effect when 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event was generated. 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param xPrecision The precision of the X coordinate being reported. 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param yPrecision The precision of the Y coordinate being reported. 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param deviceId The id for the device that this event came from. An id of 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * zero indicates that the event didn't come from a physical device; other 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * numbers are arbitrary and you shouldn't depend on the values. 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param edgeFlags A bitfield indicating which edges, if any, where touched by this 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * MotionEvent. 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public MotionEvent obtain(long downTime, long eventTime, int action, 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float x, float y, float pressure, float size, int metaState, 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float xPrecision, float yPrecision, int deviceId, int edgeFlags) { 4105c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown MotionEvent ev = obtain(1, 1); 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mDeviceId = deviceId; 412c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown ev.mSource = InputDevice.SOURCE_UNKNOWN; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mEdgeFlags = edgeFlags; 4145c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mDownTimeNano = downTime * MS_PER_NS; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mAction = action; 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mMetaState = metaState; 4175c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mXOffset = 0; 4185c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mYOffset = 0; 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mXPrecision = xPrecision; 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mYPrecision = yPrecision; 4215c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 4229822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = 1; 4239822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumSamples = 1; 4245c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 4255c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastDataSampleIndex = 0; 4265c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastEventTimeNanoSampleIndex = 0; 4275c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 4285c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mPointerIdentifiers[0] = 0; 4295c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 4305c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mEventTimeNanoSamples[0] = eventTime * MS_PER_NS; 4315c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 432c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown ev.setPointerCoordsAtSampleIndex(0, x, y, pressure, size); 4339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return ev; 4349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 4359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 4369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 4379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Create a new MotionEvent, filling in all of the basic values that 4389822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * define the motion. 4399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * 4409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param downTime The time (in ms) when the user originally pressed down to start 4419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 4429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param eventTime The the time (in ms) when this specific event was generated. This 4439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * must be obtained from {@link SystemClock#uptimeMillis()}. 4449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param action The kind of action being performed -- one of either 4459822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 4469822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * {@link #ACTION_CANCEL}. 4479822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param pointers The number of pointers that are active in this event. 4489822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param x The X coordinate of this event. 4499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param y The Y coordinate of this event. 4509822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param pressure The current pressure of this event. The pressure generally 4519822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * ranges from 0 (no pressure at all) to 1 (normal pressure), however 4529822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * values higher than 1 may be generated depending on the calibration of 4539822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * the input device. 4549822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param size A scaled value of the approximate size of the area being pressed when 4559822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * touched with the finger. The actual value in pixels corresponding to the finger 4569822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * touch is normalized with a device specific range of values 4579822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * and scaled to a value between 0 and 1. 4589822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param metaState The state of any meta / modifier keys that were in effect when 4599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * the event was generated. 4609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param xPrecision The precision of the X coordinate being reported. 4619822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param yPrecision The precision of the Y coordinate being reported. 4629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param deviceId The id for the device that this event came from. An id of 4639822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * zero indicates that the event didn't come from a physical device; other 4649822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * numbers are arbitrary and you shouldn't depend on the values. 4659822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param edgeFlags A bitfield indicating which edges, if any, where touched by this 4669822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * MotionEvent. 4675c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * 4685c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * @deprecated Use {@link #obtain(long, long, int, float, float, float, float, int, float, float, int, int)} 4695c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * instead. 4709822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 4715c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown @Deprecated 4729822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public MotionEvent obtain(long downTime, long eventTime, int action, 4739822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn int pointers, float x, float y, float pressure, float size, int metaState, 4749822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float xPrecision, float yPrecision, int deviceId, int edgeFlags) { 4755c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return obtain(downTime, eventTime, action, x, y, pressure, size, 4765c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown metaState, xPrecision, yPrecision, deviceId, edgeFlags); 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 478cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new MotionEvent, filling in a subset of the basic motion 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values. Those not specified here are: device id (always 0), pressure 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and size (always 1), x and y precision (always 1), and edgeFlags (always 0). 483cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 484cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param downTime The time (in ms) when the user originally pressed down to start 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 486cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param eventTime The the time (in ms) when this specific event was generated. This 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must be obtained from {@link SystemClock#uptimeMillis()}. 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action The kind of action being performed -- one of either 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_CANCEL}. 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The X coordinate of this event. 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The Y coordinate of this event. 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState The state of any meta / modifier keys that were in effect when 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event was generated. 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public MotionEvent obtain(long downTime, long eventTime, int action, 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float x, float y, int metaState) { 4985c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return obtain(downTime, eventTime, action, x, y, 1.0f, 1.0f, 4995c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown metaState, 1.0f, 1.0f, 0, 0); 5008169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima } 5018169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new MotionEvent, copying from an existing one. 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public MotionEvent obtain(MotionEvent o) { 5065c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown MotionEvent ev = obtain(o.mNumPointers, o.mNumSamples); 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mDeviceId = o.mDeviceId; 508c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown ev.mSource = o.mSource; 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mEdgeFlags = o.mEdgeFlags; 5105c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mDownTimeNano = o.mDownTimeNano; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mAction = o.mAction; 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mMetaState = o.mMetaState; 5135c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mXOffset = o.mXOffset; 5145c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mYOffset = o.mYOffset; 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mXPrecision = o.mXPrecision; 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mYPrecision = o.mYPrecision; 5175c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown int numPointers = ev.mNumPointers = o.mNumPointers; 5185c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown int numSamples = ev.mNumSamples = o.mNumSamples; 5199822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5205c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastDataSampleIndex = o.mLastDataSampleIndex; 5215c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastEventTimeNanoSampleIndex = o.mLastEventTimeNanoSampleIndex; 5229822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5235c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(o.mPointerIdentifiers, 0, ev.mPointerIdentifiers, 0, numPointers); 5249822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5255c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(o.mEventTimeNanoSamples, 0, ev.mEventTimeNanoSamples, 0, numSamples); 5269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5275c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(o.mDataSamples, 0, ev.mDataSamples, 0, 5285c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown numPointers * numSamples * NUM_SAMPLE_DATA); 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ev; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 531cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5338df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * Create a new MotionEvent, copying from an existing one, but not including 5348df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * any historical point information. 5358df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn */ 5368df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn static public MotionEvent obtainNoHistory(MotionEvent o) { 5375c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown MotionEvent ev = obtain(o.mNumPointers, 1); 5388df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mDeviceId = o.mDeviceId; 539c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown ev.mSource = o.mSource; 5408df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mEdgeFlags = o.mEdgeFlags; 5415c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mDownTimeNano = o.mDownTimeNano; 5428df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mAction = o.mAction; 5438df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mMetaState = o.mMetaState; 5445c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mXOffset = o.mXOffset; 5455c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mYOffset = o.mYOffset; 5468df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mXPrecision = o.mXPrecision; 5478df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mYPrecision = o.mYPrecision; 5488df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5495c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown int numPointers = ev.mNumPointers = o.mNumPointers; 5508df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mNumSamples = 1; 5518df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5525c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastDataSampleIndex = 0; 5535c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastEventTimeNanoSampleIndex = 0; 5548df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5555c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(o.mPointerIdentifiers, 0, ev.mPointerIdentifiers, 0, numPointers); 5568df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5575c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mEventTimeNanoSamples[0] = o.mEventTimeNanoSamples[o.mLastEventTimeNanoSampleIndex]; 5585c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 5595c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(o.mDataSamples, o.mLastDataSampleIndex, ev.mDataSamples, 0, 5605c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown numPointers * NUM_SAMPLE_DATA); 5618df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn return ev; 5628df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 5638df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5648df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn /** 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recycle the MotionEvent, to be re-used by a later caller. After calling 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this function you must not ever touch the event again. 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5685c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown public final void recycle() { 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Ensure recycle is only called once! 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TRACK_RECYCLED_LOCATION) { 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mRecycledLocation != null) { 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException(toString() + " recycled twice!", mRecycledLocation); 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecycledLocation = new RuntimeException("Last recycled here"); 575d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown //Log.w("MotionEvent", "Recycling event " + this, mRecycledLocation); 576d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown } else { 577d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown if (mRecycled) { 578d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown throw new RuntimeException(toString() + " recycled twice!"); 579d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown } 580d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown mRecycled = true; 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (gRecyclerLock) { 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gRecyclerUsed < MAX_RECYCLED) { 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gRecyclerUsed++; 5869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mNumSamples = 0; 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNext = gRecyclerTop; 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gRecyclerTop = this; 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5925c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 5935c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown /** 5945c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * Scales down the coordination of this event by the given scale. 5955c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * 5965c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * @hide 5975c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown */ 5985c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown public final void scale(float scale) { 5995c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXOffset *= scale; 6005c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYOffset *= scale; 6015c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXPrecision *= scale; 6025c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYPrecision *= scale; 6035c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 6045c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float[] history = mDataSamples; 6055c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int length = mNumPointers * mNumSamples * NUM_SAMPLE_DATA; 6065c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < length; i += NUM_SAMPLE_DATA) { 6075c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown history[i + SAMPLE_X] *= scale; 6085c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown history[i + SAMPLE_Y] *= scale; 6095c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown // no need to scale pressure 6105c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown history[i + SAMPLE_SIZE] *= scale; // TODO: square this? 611c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown history[i + SAMPLE_TOUCH_MAJOR] *= scale; 612c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown history[i + SAMPLE_TOUCH_MINOR] *= scale; 613c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown history[i + SAMPLE_TOOL_MAJOR] *= scale; 614c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown history[i + SAMPLE_TOOL_MINOR] *= scale; 6155c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 6165c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 617cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the kind of action being performed -- one of either 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 621b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_CANCEL}. Consider using {@link #getActionMasked} 622b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * and {@link #getActionIndex} to retrieve the separate masked action 623b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * and pointer index. 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getAction() { 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAction; 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 630b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Return the masked action being performed, without pointer index 631b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * information. May be any of the actions: {@link #ACTION_DOWN}, 632b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_MOVE}, {@link #ACTION_UP}, {@link #ACTION_CANCEL}, 633b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_POINTER_DOWN}, or {@link #ACTION_POINTER_UP}. 634b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Use {@link #getActionIndex} to return the index associated with 635b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * pointer actions. 636b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 637b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public final int getActionMasked() { 638b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn return mAction & ACTION_MASK; 639b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn } 640b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 641b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 642b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * For {@link #ACTION_POINTER_DOWN} or {@link #ACTION_POINTER_UP} 643b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * as returned by {@link #getActionMasked}, this returns the associated 644b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * pointer index. The index may be used with {@link #getPointerId(int)}, 645b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #getX(int)}, {@link #getY(int)}, {@link #getPressure(int)}, 646b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * and {@link #getSize(int)} to get information about the pointer that has 647b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * gone down or up. 648b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 649b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public final int getActionIndex() { 650b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn return (mAction & ACTION_POINTER_INDEX_MASK) >> ACTION_POINTER_INDEX_SHIFT; 651b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn } 652b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 653b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 654cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * Returns the time (in ms) when the user originally pressed down to start 655cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * a stream of position events. 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getDownTime() { 6585c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDownTimeNano / MS_PER_NS; 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the time (in ms) when this specific event was generated. 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getEventTime() { 6655c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mEventTimeNanoSamples[mLastEventTimeNanoSampleIndex] / MS_PER_NS; 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 66953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * Returns the time (in ns) when this specific event was generated. 67053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * The value is in nanosecond precision but it may not have nanosecond accuracy. 67153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * 67253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @hide 67353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan */ 67453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan public final long getEventTimeNano() { 6755c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mEventTimeNanoSamples[mLastEventTimeNanoSampleIndex]; 67653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan } 67753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan 67853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan /** 6790dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getX(int)} for the first pointer index (may be an 6800dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getX() { 6835c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_X] + mXOffset; 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6870dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getY(int)} for the first pointer index (may be an 6880dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getY() { 6915c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_Y] + mYOffset; 6929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 6939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 6949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 6950dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getPressure(int)} for the first pointer index (may be an 6960dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 6979822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 6989822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getPressure() { 6995c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_PRESSURE]; 7009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 7019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 7029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 7030dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getSize(int)} for the first pointer index (may be an 7040dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 7059822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 7069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getSize() { 7075c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_SIZE]; 7089822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 709c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 710c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 711c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getTouchMajor(int)} for the first pointer index (may be an 712c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * arbitrary pointer identifier). 713c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 714c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getTouchMajor() { 715c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_TOUCH_MAJOR]; 716c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 717c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 718c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 719c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getTouchMinor(int)} for the first pointer index (may be an 720c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * arbitrary pointer identifier). 721c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 722c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getTouchMinor() { 723c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_TOUCH_MINOR]; 724c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 725c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 726c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 727c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getToolMajor(int)} for the first pointer index (may be an 728c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * arbitrary pointer identifier). 729c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 730c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getToolMajor() { 731c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_TOOL_MAJOR]; 732c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 733c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 734c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 735c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getToolMinor(int)} for the first pointer index (may be an 736c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * arbitrary pointer identifier). 737c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 738c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getToolMinor() { 739c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_TOOL_MINOR]; 740c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 741c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 742c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 743c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getOrientation(int)} for the first pointer index (may be an 744c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * arbitrary pointer identifier). 745c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 746c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getOrientation() { 747c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_ORIENTATION]; 748c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 7499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 7509822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 7510dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * The number of pointers of data contained in this event. Always 7520dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * >= 1. 7530dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn */ 7540dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final int getPointerCount() { 7550dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return mNumPointers; 7560dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7570dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 7580dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn /** 7590dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Return the pointer identifier associated with a particular pointer 7600dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * data index is this event. The identifier tells you the actual pointer 7610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * number associated with the data, accounting for individual pointers 7620dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * going up and down since the start of the current gesture. 7630dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 7640dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 7650dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn */ 766d41ba666d12a24ee4624ea9a009151e6165e3775Dianne Hackborn public final int getPointerId(int pointerIndex) { 767d41ba666d12a24ee4624ea9a009151e6165e3775Dianne Hackborn return mPointerIdentifiers[pointerIndex]; 7680dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7690dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 7700dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn /** 7710dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Given a pointer identifier, find the index of its data in the event. 7720dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * 7730dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerId The identifier of the pointer to be found. 7740dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @return Returns either the index of the pointer (for use with 7750dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getX(int) et al.), or -1 if there is no data available for 7760dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * that pointer identifier. 7770dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn */ 7780dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final int findPointerIndex(int pointerId) { 7790dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn int i = mNumPointers; 7800dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn while (i > 0) { 7810dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn i--; 7820dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (mPointerIdentifiers[i] == pointerId) { 7830dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return i; 7840dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7850dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7860dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return -1; 7870dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7880dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 7890dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn /** 7900dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns the X coordinate of this event for the given pointer 7910dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 7920dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 7939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Whole numbers are pixels; the 7949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * value may have a fraction for input devices that are sub-pixel precise. 7950dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 7960dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 7979822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 7980dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getX(int pointerIndex) { 7995c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex 8005c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_X] + mXOffset; 8019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 8029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 8039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 8040dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns the Y coordinate of this event for the given pointer 8050dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 8060dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 8079822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Whole numbers are pixels; the 8089822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * value may have a fraction for input devices that are sub-pixel precise. 8090dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 8100dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 8119822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 8120dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getY(int pointerIndex) { 8135c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex 8145c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_Y] + mYOffset; 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8180dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns the current pressure of this event for the given pointer 8190dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 8200dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 8219822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * The pressure generally 822cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * ranges from 0 (no pressure at all) to 1 (normal pressure), however 823cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * values higher than 1 may be generated depending on the calibration of 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the input device. 8250dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 8260dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8280dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getPressure(int pointerIndex) { 8295c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex 8305c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_PRESSURE]; 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8340dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a scaled value of the approximate size for the given pointer 8350dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 8360dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 8370dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * This represents some approximation of the area of the screen being 8380dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * pressed; the actual value in pixels corresponding to the 8399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * touch is normalized with the device specific range of values 840cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * and scaled to a value between 0 and 1. The value of size can be used to 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * determine fat touch events. 8420dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 8430dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8450dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getSize(int pointerIndex) { 8465c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex 8475c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_SIZE]; 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 850c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 851c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Returns the length of the major axis of an ellipse that describes the touch 852c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * area at the point of contact for the given pointer 853c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 854c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * identifier for this index). 855c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 856c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 857c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 858c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getTouchMajor(int pointerIndex) { 859c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[mLastDataSampleIndex 860c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_TOUCH_MAJOR]; 861c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 862c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 863c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 864c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Returns the length of the minor axis of an ellipse that describes the touch 865c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * area at the point of contact for the given pointer 866c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 867c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * identifier for this index). 868c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 869c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 870c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 871c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getTouchMinor(int pointerIndex) { 872c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[mLastDataSampleIndex 873c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_TOUCH_MINOR]; 874c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 875c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 876c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 877c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Returns the length of the major axis of an ellipse that describes the size of 878c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the approaching tool for the given pointer 879c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 880c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * identifier for this index). 881c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The tool area represents the estimated size of the finger or pen that is 882c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touching the device independent of its actual touch area at the point of contact. 883c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 884c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 885c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 886c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getToolMajor(int pointerIndex) { 887c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[mLastDataSampleIndex 888c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_TOOL_MAJOR]; 889c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 890c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 891c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 892c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Returns the length of the minor axis of an ellipse that describes the size of 893c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the approaching tool for the given pointer 894c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 895c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * identifier for this index). 896c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The tool area represents the estimated size of the finger or pen that is 897c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touching the device independent of its actual touch area at the point of contact. 898c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 899c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 900c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 901c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getToolMinor(int pointerIndex) { 902c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[mLastDataSampleIndex 903c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_TOOL_MINOR]; 904c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 905c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 906c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 907c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Returns the orientation of the touch area and tool area in radians clockwise from vertical 908c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * for the given pointer <em>index</em> (use {@link #getPointerId(int)} to find the pointer 909c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * identifier for this index). 910c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * An angle of 0 degrees indicates that the major axis of contact is oriented 911c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * upwards, is perfectly circular or is of unknown orientation. A positive angle 912c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * indicates that the major axis of contact is oriented to the right. A negative angle 913c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * indicates that the major axis of contact is oriented to the left. 9146d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians 915c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (finger pointing fully right). 916c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 917c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 918c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 919c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getOrientation(int pointerIndex) { 920c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[mLastDataSampleIndex 921c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_ORIENTATION]; 922c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 923c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 924c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 925c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Populates a {@link PointerCoords} object with pointer coordinate data for 926c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the specified pointer index. 927c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 928c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 929c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 930c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param outPointerCoords The pointer coordinate object to populate. 931c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 932c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final void getPointerCoords(int pointerIndex, PointerCoords outPointerCoords) { 933c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown final int sampleIndex = mLastDataSampleIndex + pointerIndex * NUM_SAMPLE_DATA; 934c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown getPointerCoordsAtSampleIndex(sampleIndex, outPointerCoords); 935c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the state of any meta / modifier keys that were in effect when 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event was generated. This is the same values as those 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned by {@link KeyEvent#getMetaState() KeyEvent.getMetaState}. 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return an integer in which each bit set to 1 represents a pressed 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * meta key 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see KeyEvent#getMetaState() 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getMetaState() { 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMetaState; 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the original raw X coordinate of this event. For touch 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events on the screen, this is the original location of the event 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the screen, before it had been adjusted for the containing window 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and views. 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getRawX() { 9585c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_X]; 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 960c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the original raw Y coordinate of this event. For touch 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events on the screen, this is the original location of the event 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the screen, before it had been adjusted for the containing window 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and views. 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getRawY() { 9685c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_Y]; 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the precision of the X coordinates being reported. You can 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * multiple this number with {@link #getX} to find the actual hardware 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value of the X coordinate. 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the precision of X coordinates being reported. 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getXPrecision() { 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mXPrecision; 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 980cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the precision of the Y coordinates being reported. You can 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * multiple this number with {@link #getY} to find the actual hardware 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value of the Y coordinate. 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the precision of Y coordinates being reported. 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getYPrecision() { 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mYPrecision; 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 990cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of historical points in this event. These are 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * movements that have occurred between this event and the previous event. 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This only applies to ACTION_MOVE events -- all other actions will have 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a size of 0. 996cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the number of historical points in the event. 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getHistorySize() { 10005c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mLastEventTimeNanoSampleIndex; 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1002cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the time that a historical movement occurred between this event 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the previous event. Only applies to ACTION_MOVE events. 1006cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 1009cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getEventTime 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getHistoricalEventTime(int pos) { 10145c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mEventTimeNanoSamples[pos] / MS_PER_NS; 10159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 10169822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 10179822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 10180dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalX(int)} for the first pointer index (may be an 10190dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 10209822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 10219822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalX(int pos) { 10225c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_X] + mXOffset; 10239822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 10249822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 10259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 10260dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalY(int)} for the first pointer index (may be an 10270dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 10289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 10299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalY(int pos) { 10305c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_Y] + mYOffset; 10319822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 10329822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 10339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 10340dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalPressure(int)} for the first pointer index (may be an 10350dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 10369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 10379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalPressure(int pos) { 10385c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_PRESSURE]; 10399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 10409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 10419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 10420dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalSize(int)} for the first pointer index (may be an 10430dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 10449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 10459822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalSize(int pos) { 10465c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_SIZE]; 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1048cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1050c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistoricalTouchMajor(int)} for the first pointer index (may be an 1051c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * arbitrary pointer identifier). 1052c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1053c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getHistoricalTouchMajor(int pos) { 1054c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_TOUCH_MAJOR]; 1055c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1056c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1057c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1058c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistoricalTouchMinor(int)} for the first pointer index (may be an 1059c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * arbitrary pointer identifier). 1060c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1061c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getHistoricalTouchMinor(int pos) { 1062c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_TOUCH_MINOR]; 1063c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1064c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1065c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1066c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistoricalToolMajor(int)} for the first pointer index (may be an 1067c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * arbitrary pointer identifier). 1068c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1069c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getHistoricalToolMajor(int pos) { 1070c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_TOOL_MAJOR]; 1071c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1072c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1073c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1074c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistoricalToolMinor(int)} for the first pointer index (may be an 1075c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * arbitrary pointer identifier). 1076c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1077c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getHistoricalToolMinor(int pos) { 1078c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_TOOL_MINOR]; 1079c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1080c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1081c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1082c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistoricalOrientation(int)} for the first pointer index (may be an 1083c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * arbitrary pointer identifier). 1084c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1085c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getHistoricalOrientation(int pos) { 1086c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_ORIENTATION]; 1087c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1088c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1089c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 10900dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical X coordinate, as per {@link #getX(int)}, that 10910dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * occurred between this event and the previous event for the given pointer. 10920dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Only applies to ACTION_MOVE events. 1093cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10940dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 10950dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 1098cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getX 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11020dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalX(int pointerIndex, int pos) { 11035c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 11045c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_X] + mXOffset; 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1106cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11080dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical Y coordinate, as per {@link #getY(int)}, that 11090dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * occurred between this event and the previous event for the given pointer. 11100dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Only applies to ACTION_MOVE events. 1111cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 11120dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 11130dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 1116cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getY 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11200dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalY(int pointerIndex, int pos) { 11215c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 11225c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_Y] + mYOffset; 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1124cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11260dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical pressure coordinate, as per {@link #getPressure(int)}, 11270dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * that occurred between this event and the previous event for the given 11280dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * pointer. Only applies to ACTION_MOVE events. 1129cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 11300dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 11310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 11340dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPressure 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11380dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalPressure(int pointerIndex, int pos) { 11395c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 11405c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_PRESSURE]; 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1142cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11440dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical size coordinate, as per {@link #getSize(int)}, that 11450dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * occurred between this event and the previous event for the given pointer. 11460dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Only applies to ACTION_MOVE events. 1147cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 11480dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 11490dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 11520dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getSize 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11560dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalSize(int pointerIndex, int pos) { 11575c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 11585c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_SIZE]; 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1160c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1161c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1162c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Returns a historical touch major axis coordinate, as per {@link #getTouchMajor(int)}, that 1163c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * occurred between this event and the previous event for the given pointer. 1164c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Only applies to ACTION_MOVE events. 1165c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1166c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 1167c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 1168c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pos Which historical value to return; must be less than 1169c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistorySize} 1170c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1171c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getHistorySize 1172c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getTouchMajor 1173c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1174c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getHistoricalTouchMajor(int pointerIndex, int pos) { 1175c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 1176c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_TOUCH_MAJOR]; 1177c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1178cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1180c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Returns a historical touch minor axis coordinate, as per {@link #getTouchMinor(int)}, that 1181c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * occurred between this event and the previous event for the given pointer. 1182c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Only applies to ACTION_MOVE events. 1183c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1184c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 1185c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 1186c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pos Which historical value to return; must be less than 1187c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistorySize} 1188c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1189c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getHistorySize 1190c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getTouchMinor 1191c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1192c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getHistoricalTouchMinor(int pointerIndex, int pos) { 1193c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 1194c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_TOUCH_MINOR]; 1195c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1196c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1197c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1198c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Returns a historical tool major axis coordinate, as per {@link #getToolMajor(int)}, that 1199c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * occurred between this event and the previous event for the given pointer. 1200c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Only applies to ACTION_MOVE events. 1201c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1202c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 1203c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 1204c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pos Which historical value to return; must be less than 1205c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistorySize} 1206c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1207c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getHistorySize 1208c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getToolMajor 1209c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1210c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getHistoricalToolMajor(int pointerIndex, int pos) { 1211c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 1212c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_TOOL_MAJOR]; 1213c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1214c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1215c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1216c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Returns a historical tool minor axis coordinate, as per {@link #getToolMinor(int)}, that 1217c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * occurred between this event and the previous event for the given pointer. 1218c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Only applies to ACTION_MOVE events. 1219c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1220c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 1221c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 1222c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pos Which historical value to return; must be less than 1223c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistorySize} 1224c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1225c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getHistorySize 1226c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getToolMinor 1227c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1228c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getHistoricalToolMinor(int pointerIndex, int pos) { 1229c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 1230c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_TOOL_MINOR]; 1231c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1232c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1233c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1234c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Returns a historical orientation coordinate, as per {@link #getOrientation(int)}, that 1235c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * occurred between this event and the previous event for the given pointer. 1236c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Only applies to ACTION_MOVE events. 1237c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1238c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 1239c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 1240c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pos Which historical value to return; must be less than 1241c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistorySize} 1242c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1243c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getHistorySize 1244c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getOrientation 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1246c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final float getHistoricalOrientation(int pointerIndex, int pos) { 1247c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 1248c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_ORIENTATION]; 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1250cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1252c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Populates a {@link PointerCoords} object with historical pointer coordinate data, 1253c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * as per {@link #getPointerCoords}, that occurred between this event and the previous 1254c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * event for the given pointer. 1255c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Only applies to ACTION_MOVE events. 1256c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1257c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 1258c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (the first pointer that is down) to {@link #getPointerCount()}-1. 1259c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pos Which historical value to return; must be less than 1260c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * {@link #getHistorySize} 1261c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param outPointerCoords The pointer coordinate object to populate. 1262c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1263c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getHistorySize 1264c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @see #getPointerCoords 1265c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1266c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final void getHistoricalPointerCoords(int pointerIndex, int pos, 1267c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown PointerCoords outPointerCoords) { 1268c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown final int sampleIndex = (pos * mNumPointers + pointerIndex) * NUM_SAMPLE_DATA; 1269c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown getPointerCoordsAtSampleIndex(sampleIndex, outPointerCoords); 1270c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1271c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1272c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 127346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * Returns a bitfield indicating which edges, if any, were touched by this 1274cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * MotionEvent. For touch events, clients can use this to determine if the 1275cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * user's finger was touching the edge of the display. 1276cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_LEFT 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_TOP 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_RIGHT 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_BOTTOM 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getEdgeFlags() { 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mEdgeFlags; 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1285cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the bitfield indicating which edges, if any, where touched by this 1289cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * MotionEvent. 1290cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getEdgeFlags() 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setEdgeFlags(int flags) { 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEdgeFlags = flags; 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets this event's action. 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setAction(int action) { 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Adjust this event's location. 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param deltaX Amount to add to the current X coordinate of the event. 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param deltaY Amount to add to the current Y coordinate of the event. 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void offsetLocation(float deltaX, float deltaY) { 13105c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXOffset += deltaX; 13115c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYOffset += deltaY; 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1313cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set this event's location. Applies {@link #offsetLocation} with a 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * delta from the current location to the given new location. 1317cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x New absolute X location. 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y New absolute Y location. 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setLocation(float x, float y) { 13225c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXOffset = x - mDataSamples[mLastDataSampleIndex + SAMPLE_X]; 13235c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYOffset = y - mDataSamples[mLastDataSampleIndex + SAMPLE_Y]; 13245c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 13255c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 1326c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown private final void getPointerCoordsAtSampleIndex(int sampleIndex, 1327c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown PointerCoords outPointerCoords) { 1328c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown outPointerCoords.x = mDataSamples[sampleIndex + SAMPLE_X] + mXOffset; 1329c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown outPointerCoords.y = mDataSamples[sampleIndex + SAMPLE_Y] + mYOffset; 1330c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown outPointerCoords.pressure = mDataSamples[sampleIndex + SAMPLE_PRESSURE]; 1331c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown outPointerCoords.size = mDataSamples[sampleIndex + SAMPLE_SIZE]; 1332c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown outPointerCoords.touchMajor = mDataSamples[sampleIndex + SAMPLE_TOUCH_MAJOR]; 1333c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown outPointerCoords.touchMinor = mDataSamples[sampleIndex + SAMPLE_TOUCH_MINOR]; 1334c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown outPointerCoords.toolMajor = mDataSamples[sampleIndex + SAMPLE_TOOL_MAJOR]; 1335c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown outPointerCoords.toolMinor = mDataSamples[sampleIndex + SAMPLE_TOOL_MINOR]; 1336c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown outPointerCoords.orientation = mDataSamples[sampleIndex + SAMPLE_ORIENTATION]; 1337c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1338c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1339c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown private final void setPointerCoordsAtSampleIndex(int sampleIndex, 1340c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown PointerCoords[] pointerCoords) { 1341c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown final int numPointers = mNumPointers; 1342c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown for (int i = 0; i < numPointers; i++) { 1343c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown setPointerCoordsAtSampleIndex(sampleIndex, pointerCoords[i]); 1344c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown sampleIndex += NUM_SAMPLE_DATA; 1345c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1346c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1347c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1348c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown private final void setPointerCoordsAtSampleIndex(int sampleIndex, 1349c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown PointerCoords pointerCoords) { 1350c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_X] = pointerCoords.x - mXOffset; 1351c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_Y] = pointerCoords.y - mYOffset; 1352c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_PRESSURE] = pointerCoords.pressure; 1353c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_SIZE] = pointerCoords.size; 1354c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_TOUCH_MAJOR] = pointerCoords.touchMajor; 1355c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_TOUCH_MINOR] = pointerCoords.touchMinor; 1356c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_TOOL_MAJOR] = pointerCoords.toolMajor; 1357c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_TOOL_MINOR] = pointerCoords.toolMinor; 1358c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_ORIENTATION] = pointerCoords.orientation; 1359c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1360c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1361c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown private final void setPointerCoordsAtSampleIndex(int sampleIndex, 1362c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown float x, float y, float pressure, float size) { 1363c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_X] = x - mXOffset; 1364c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_Y] = y - mYOffset; 1365c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_PRESSURE] = pressure; 1366c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_SIZE] = size; 1367c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_TOUCH_MAJOR] = pressure; 1368c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_TOUCH_MINOR] = pressure; 1369c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_TOOL_MAJOR] = size; 1370c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_TOOL_MINOR] = size; 1371c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown mDataSamples[sampleIndex + SAMPLE_ORIENTATION] = 0; 1372c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1373c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 13745c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private final void incrementNumSamplesAndReserveStorage(int dataSampleStride) { 13755c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown if (mNumSamples == mEventTimeNanoSamples.length) { 13765c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown long[] newEventTimeNanoSamples = new long[mNumSamples + BASE_AVAIL_SAMPLES]; 13775c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(mEventTimeNanoSamples, 0, newEventTimeNanoSamples, 0, mNumSamples); 13785c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mEventTimeNanoSamples = newEventTimeNanoSamples; 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13805c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 13815c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown int nextDataSampleIndex = mLastDataSampleIndex + dataSampleStride; 13825c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown if (nextDataSampleIndex + dataSampleStride > mDataSamples.length) { 13835c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float[] newDataSamples = new float[nextDataSampleIndex 13845c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown + BASE_AVAIL_SAMPLES * dataSampleStride]; 13855c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(mDataSamples, 0, newDataSamples, 0, nextDataSampleIndex); 13865c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mDataSamples = newDataSamples; 13875c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 13885c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 13895c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mLastEventTimeNanoSampleIndex = mNumSamples; 13905c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mLastDataSampleIndex = nextDataSampleIndex; 13915c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mNumSamples += 1; 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1393cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add a new movement to the batch of movements in this event. The event's 1396c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * current location, position and size is updated to the new values. 1397c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The current values in the event are added to a list of historical values. 1398c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1399e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Only applies to {@link #ACTION_MOVE} events. 1400cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 1401c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param eventTime The time stamp (in ms) for this data. 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The new X position. 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The new Y position. 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pressure The new pressure. 14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param size The new size. 14069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param metaState Meta key state. 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void addBatch(long eventTime, float x, float y, 14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float pressure, float size, int metaState) { 14105c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown incrementNumSamplesAndReserveStorage(NUM_SAMPLE_DATA); 14119822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 14125c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mEventTimeNanoSamples[mLastEventTimeNanoSampleIndex] = eventTime * MS_PER_NS; 1413c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown setPointerCoordsAtSampleIndex(mLastDataSampleIndex, x, y, pressure, size); 14149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 14159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mMetaState |= metaState; 14169822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 1417cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 14189822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 1419c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Add a new movement to the batch of movements in this event. The event's 1420c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * current location, position and size is updated to the new values. 1421c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The current values in the event are added to a list of historical values. 1422c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1423e33348ba54cd68d6936cffd4507037c14d4b10c2Jeff Brown * Only applies to {@link #ACTION_MOVE} events. 14249822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * 1425c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param eventTime The time stamp (in ms) for this data. 1426c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * @param pointerCoords The new pointer coordinates. 14279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param metaState Meta key state. 14289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1429c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public final void addBatch(long eventTime, PointerCoords[] pointerCoords, int metaState) { 1430c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown final int dataSampleStride = mNumPointers * NUM_SAMPLE_DATA; 14315c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown incrementNumSamplesAndReserveStorage(dataSampleStride); 14329822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 14335c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mEventTimeNanoSamples[mLastEventTimeNanoSampleIndex] = eventTime * MS_PER_NS; 1434c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown setPointerCoordsAtSampleIndex(mLastDataSampleIndex, pointerCoords); 14359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState |= metaState; 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1438cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "MotionEvent{" + Integer.toHexString(System.identityHashCode(this)) 14429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn + " action=" + mAction + " x=" + getX() 14439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn + " y=" + getY() + " pressure=" + getPressure() + " size=" + getSize() + "}"; 14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<MotionEvent> CREATOR 14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<MotionEvent>() { 14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MotionEvent createFromParcel(Parcel in) { 14496ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown in.readInt(); // skip token, we already know this is a MotionEvent 14506ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown return MotionEvent.createFromParcelBody(in); 14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MotionEvent[] newArray(int size) { 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new MotionEvent[size]; 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14586ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown /** @hide */ 14596ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown public static MotionEvent createFromParcelBody(Parcel in) { 14606ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown final int NP = in.readInt(); 14616ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown final int NS = in.readInt(); 14626ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown final int NI = NP * NS * NUM_SAMPLE_DATA; 14636ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 14646ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown MotionEvent ev = obtain(NP, NS); 14656ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mNumPointers = NP; 14666ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mNumSamples = NS; 14676ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 14686ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.readBaseFromParcel(in); 14696ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 14706ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mDownTimeNano = in.readLong(); 14716ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mAction = in.readInt(); 14726ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mXOffset = in.readFloat(); 14736ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mYOffset = in.readFloat(); 14746ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mXPrecision = in.readFloat(); 14756ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mYPrecision = in.readFloat(); 14766ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mEdgeFlags = in.readInt(); 14776ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mMetaState = in.readInt(); 14786ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 14796ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown final int[] pointerIdentifiers = ev.mPointerIdentifiers; 14806ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown for (int i = 0; i < NP; i++) { 14816ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown pointerIdentifiers[i] = in.readInt(); 14826ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown } 14836ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 14846ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown final long[] eventTimeNanoSamples = ev.mEventTimeNanoSamples; 14856ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown for (int i = 0; i < NS; i++) { 14866ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown eventTimeNanoSamples[i] = in.readLong(); 14876ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown } 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14896ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown final float[] dataSamples = ev.mDataSamples; 14906ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown for (int i = 0; i < NI; i++) { 14916ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown dataSamples[i] = in.readFloat(); 14926ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown } 14936ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 14946ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mLastEventTimeNanoSampleIndex = NS - 1; 14956ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown ev.mLastDataSampleIndex = (NS - 1) * NP * NUM_SAMPLE_DATA; 14966ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown return ev; 14976ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown } 14986ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel out, int flags) { 15006ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown out.writeInt(PARCEL_TOKEN_MOTION_EVENT); 15016ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 15029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NP = mNumPointers; 15039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NS = mNumSamples; 15045c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int NI = NP * NS * NUM_SAMPLE_DATA; 15055c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 15065c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeInt(NP); 15079822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn out.writeInt(NS); 15085c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 15096ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown writeBaseToParcel(out); 15106ec402b5ae33c8927694d8522b4cc6a5c8ba974eJeff Brown 15115c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeLong(mDownTimeNano); 15125c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeInt(mAction); 15135c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeFloat(mXOffset); 15145c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeFloat(mYOffset); 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeFloat(mXPrecision); 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeFloat(mYPrecision); 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mEdgeFlags); 15185c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeInt(mMetaState); 15195c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 15205c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int[] pointerIdentifiers = mPointerIdentifiers; 15215c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < NP; i++) { 15225c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeInt(pointerIdentifiers[i]); 15235c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 15245c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 15255c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final long[] eventTimeNanoSamples = mEventTimeNanoSamples; 15265c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < NS; i++) { 15275c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeLong(eventTimeNanoSamples[i]); 15285c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15305c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final float[] dataSamples = mDataSamples; 15315c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < NI; i++) { 15325c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeFloat(dataSamples[i]); 15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1535c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1536c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1537c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Transfer object for pointer coordinates. 1538c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1539c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Objects of this type can be used to manufacture new {@link MotionEvent} objects 1540c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * and to query pointer coordinate information in bulk. 1541c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * 1542c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * Refer to {@link InputDevice} for information about how different kinds of 1543c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * input devices and sources represent pointer coordinates. 1544c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1545c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public static final class PointerCoords { 1546c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1547c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The X coordinate of the pointer movement. 1548c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The interpretation varies by input source and may represent the position of 1549c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the center of the contact area, a relative displacement in device-specific units 1550c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * or something else. 1551c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1552c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float x; 1553c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1554c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1555c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The Y coordinate of the pointer movement. 1556c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The interpretation varies by input source and may represent the position of 1557c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the center of the contact area, a relative displacement in device-specific units 1558c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * or something else. 1559c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1560c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float y; 1561c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1562c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1563c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A scaled value that describes the pressure applied to the pointer. 1564c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The pressure generally ranges from 0 (no pressure at all) to 1 (normal pressure), 1565c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * however values higher than 1 may be generated depending on the calibration of 1566c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the input device. 1567c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1568c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float pressure; 1569c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1570c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1571c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * A scaled value of the approximate size of the pointer touch area. 1572c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * This represents some approximation of the area of the screen being 1573c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * pressed; the actual value in pixels corresponding to the 1574c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touch is normalized with the device specific range of values 1575c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * and scaled to a value between 0 and 1. The value of size can be used to 1576c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * determine fat touch events. 1577c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1578c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float size; 1579c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1580c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1581c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The length of the major axis of an ellipse that describes the touch area at 1582c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the point of contact. 1583c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1584c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float touchMajor; 1585c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1586c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1587c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The length of the minor axis of an ellipse that describes the touch area at 1588c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the point of contact. 1589c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1590c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float touchMinor; 1591c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1592c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1593c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The length of the major axis of an ellipse that describes the size of 1594c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the approaching tool. 1595c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The tool area represents the estimated size of the finger or pen that is 1596c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touching the device independent of its actual touch area at the point of contact. 1597c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1598c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float toolMajor; 1599c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1600c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1601c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The length of the minor axis of an ellipse that describes the size of 1602c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * the approaching tool. 1603c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The tool area represents the estimated size of the finger or pen that is 1604c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * touching the device independent of its actual touch area at the point of contact. 1605c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1606c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float toolMinor; 1607c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1608c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /** 1609c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * The orientation of the touch area and tool area in radians clockwise from vertical. 1610c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * An angle of 0 degrees indicates that the major axis of contact is oriented 1611c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * upwards, is perfectly circular or is of unknown orientation. A positive angle 1612c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * indicates that the major axis of contact is oriented to the right. A negative angle 1613c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * indicates that the major axis of contact is oriented to the left. 16146d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians 1615c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown * (finger pointing fully right). 1616c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1617c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float orientation; 1618c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1619c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown /* 16206d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown private static final float PI_4 = (float) (Math.PI / 4); 1621c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1622c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float getTouchWidth() { 16236d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return Math.abs(orientation) > PI_4 ? touchMajor : touchMinor; 1624c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1625c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1626c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float getTouchHeight() { 16276d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return Math.abs(orientation) > PI_4 ? touchMinor : touchMajor; 1628c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1629c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1630c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float getToolWidth() { 16316d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return Math.abs(orientation) > PI_4 ? toolMajor : toolMinor; 1632c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1633c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown 1634c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown public float getToolHeight() { 16356d0fec2de3601821f4f44eeb7d7deedebb2b7117Jeff Brown return Math.abs(orientation) > PI_4 ? toolMinor : toolMajor; 1636c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 1637c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown */ 1638c5ed5910c9ef066cec6a13bbb404ec57b1e92637Jeff Brown } 16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1640