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; 220dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackbornimport android.util.Log; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Object used to report movement (mouse, pen, finger, trackball) events. This 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class may hold either absolute or relative movements, depending on what 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is being used for. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class MotionEvent implements Parcelable { 300dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn static final boolean DEBUG_POINTERS = false; 310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Bit mask of the parts of the action code that are the action itself. 349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_MASK = 0xff; 369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A pressed gesture has started, the 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * motion contains the initial starting location. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_DOWN = 0; 429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A pressed gesture has finished, the 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * motion contains the final release location as well as any intermediate 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * points since the last down or move event. 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_UP = 1; 499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A change has happened during a 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * press gesture (between {@link #ACTION_DOWN} and {@link #ACTION_UP}). 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The motion contains the most recent point, as well as any intermediate 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * points since the last down or move event. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_MOVE = 2; 579822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: The current gesture has been aborted. 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You will not receive any more points in it. You should treat this as 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an up event, but not perform any action that you normally would. 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_CANCEL = 3; 649822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A movement has happened outside of the 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normal bounds of the UI element. This does not provide a full gesture, 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but only the initial location of the movement/touch. 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_OUTSIDE = 4; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 739822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * A non-primary pointer has gone down. The bits in 740dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #ACTION_POINTER_ID_MASK} indicate which pointer changed. 759822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 769822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_DOWN = 5; 779822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 789822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 79b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * A non-primary pointer has gone up. The bits in 80b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_POINTER_ID_MASK} indicate which pointer changed. 819822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 82b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_UP = 6; 839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 85b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Bits in the action code that represent a pointer index, used with 86b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_POINTER_DOWN} and {@link #ACTION_POINTER_UP}. Shifting 87b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * down by {@link #ACTION_POINTER_INDEX_SHIFT} provides the actual pointer 88b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * index where the data for the pointer going up or down can be found; you can 89b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * get its identifier with {@link #getPointerId(int)} and the actual 90b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data with {@link #getX(int)} etc. 919822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 92b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_INDEX_MASK = 0xff00; 939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 95b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Bit shift for the action bits holding the pointer index as 96b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * defined by {@link #ACTION_POINTER_INDEX_MASK}. 979822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 98b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_INDEX_SHIFT = 8; 999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 101b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 102b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_DOWN}. 1039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 104b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 105b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_1_DOWN = ACTION_POINTER_DOWN | 0x0000; 106b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 107b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 108b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 109b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_DOWN}. 110b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 111b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 112b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_2_DOWN = ACTION_POINTER_DOWN | 0x0100; 1139822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 115b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 116b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_DOWN}. 1179822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 118b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 119b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_3_DOWN = ACTION_POINTER_DOWN | 0x0200; 120b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 121b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 122b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 123b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_UP}. 124b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 125b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_1_UP = ACTION_POINTER_UP | 0x0000; 1279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 129b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 130b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_UP}. 1319822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 132b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_2_UP = ACTION_POINTER_UP | 0x0100; 1349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 136b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 137b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_UP}. 1389822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 139b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_3_UP = ACTION_POINTER_UP | 0x0200; 1419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 143b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Renamed to {@link #ACTION_POINTER_INDEX_MASK} to match 144b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * the actual data contained in these bits. 1459822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 146b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1470dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public static final int ACTION_POINTER_ID_MASK = 0xff00; 1489822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 150b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Renamed to {@link #ACTION_POINTER_INDEX_SHIFT} to match 151b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * the actual data contained in these bits. 1529822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 153b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1540dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public static final int ACTION_POINTER_ID_SHIFT = 8; 1559822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final boolean TRACK_RECYCLED_LOCATION = false; 157cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the top edge of the screen. 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_TOP = 0x00000001; 162cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the bottom edge of the screen. 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_BOTTOM = 0x00000002; 167cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the left edge of the screen. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_LEFT = 0x00000004; 172cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the right edge of the screen. 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_RIGHT = 0x00000008; 177cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1789822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 1799822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Offset for the sample's X coordinate. 1809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 1819822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public final int SAMPLE_X = 0; 1839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 1859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Offset for the sample's Y coordinate. 1869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 1879822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1889822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public final int SAMPLE_Y = 1; 1899822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1909822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 1919822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Offset for the sample's X coordinate. 1929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 1939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public final int SAMPLE_PRESSURE = 2; 1959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 1979822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Offset for the sample's X coordinate. 1989822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 1999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 2009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public final int SAMPLE_SIZE = 3; 2019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 2039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Number of data items for each sample. 2049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 2059822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 2069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public final int NUM_SAMPLE_DATA = 4; 2079822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2081e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn /** 2091e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn * Number of possible pointers. 2101e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn * @hide 2111e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn */ 2121e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn static public final int BASE_AVAIL_POINTERS = 5; 2131e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn 2149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static private final int BASE_AVAIL_SAMPLES = 8; 2159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private final int MAX_RECYCLED = 10; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private Object gRecyclerLock = new Object(); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private int gRecyclerUsed = 0; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private MotionEvent gRecyclerTop = null; 220cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long mDownTime; 22253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan private long mEventTimeNano; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mAction; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mRawX; 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mRawY; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mXPrecision; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mYPrecision; 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mDeviceId; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mEdgeFlags; 2309822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private int mMetaState; 2319822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2329822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn // Here is the actual event data. Note that the order of the array 2339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn // is a little odd: the first entry is the most recent, and the ones 2349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn // following it are the historical data from oldest to newest. This 2359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn // allows us to easily retrieve the most recent data, without having 2369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn // to copy the arrays every time a new sample is added. 2379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2389822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private int mNumPointers; 2399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private int mNumSamples; 2400dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn // Array of mNumPointers size of identifiers for each pointer of data. 2410dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn private int[] mPointerIdentifiers; 2429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn // Array of (mNumSamples * mNumPointers * NUM_SAMPLE_DATA) size of event data. 2439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private float[] mDataSamples; 2449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn // Array of mNumSamples size of time stamps. 2459822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private long[] mTimeSamples; 2468169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MotionEvent mNext; 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RuntimeException mRecycledLocation; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mRecycled; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MotionEvent() { 2520dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn mPointerIdentifiers = new int[BASE_AVAIL_POINTERS]; 2539822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mDataSamples = new float[BASE_AVAIL_POINTERS*BASE_AVAIL_SAMPLES*NUM_SAMPLE_DATA]; 2549822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mTimeSamples = new long[BASE_AVAIL_SAMPLES]; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 256cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private MotionEvent obtain() { 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (gRecyclerLock) { 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gRecyclerTop == null) { 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new MotionEvent(); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MotionEvent ev = gRecyclerTop; 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gRecyclerTop = ev.mNext; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gRecyclerUsed--; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mRecycledLocation = null; 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mRecycled = false; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ev; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan 27153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan /** 27253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * Create a new MotionEvent, filling in all of the basic values that 27353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * define the motion. 27453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * 27553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param downTime The time (in ms) when the user originally pressed down to start 27653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 27753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param eventTime The the time (in ms) when this specific event was generated. This 27853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * must be obtained from {@link SystemClock#uptimeMillis()}. 27953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param eventTimeNano The the time (in ns) when this specific event was generated. This 28053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * must be obtained from {@link System#nanoTime()}. 28153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param action The kind of action being performed -- one of either 28253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 28353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * {@link #ACTION_CANCEL}. 2840dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointers The number of points that will be in this event. 2850dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param inPointerIds An array of <em>pointers</em> values providing 2860dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * an identifier for each pointer. 2870dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param inData An array of <em>pointers*NUM_SAMPLE_DATA</em> of initial 2880dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * data samples for the event. 28953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param metaState The state of any meta / modifier keys that were in effect when 29053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * the event was generated. 29153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param xPrecision The precision of the X coordinate being reported. 29253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param yPrecision The precision of the Y coordinate being reported. 29353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param deviceId The id for the device that this event came from. An id of 29453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * zero indicates that the event didn't come from a physical device; other 29553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * numbers are arbitrary and you shouldn't depend on the values. 29653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param edgeFlags A bitfield indicating which edges, if any, where touched by this 29753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * MotionEvent. 29853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * 29953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @hide 30053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan */ 30153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan static public MotionEvent obtainNano(long downTime, long eventTime, long eventTimeNano, 3020dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn int action, int pointers, int[] inPointerIds, float[] inData, int metaState, 30353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan float xPrecision, float yPrecision, int deviceId, int edgeFlags) { 30453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan MotionEvent ev = obtain(); 30553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mDeviceId = deviceId; 30653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mEdgeFlags = edgeFlags; 30753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mDownTime = downTime; 30853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mEventTimeNano = eventTimeNano; 30953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mAction = action; 31053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mMetaState = metaState; 311ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn ev.mRawX = inData[SAMPLE_X]; 312ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6Dianne Hackborn ev.mRawY = inData[SAMPLE_Y]; 31353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mXPrecision = xPrecision; 31453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mYPrecision = yPrecision; 3159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = pointers; 3169822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumSamples = 1; 3179822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 3181e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn int[] pointerIdentifiers = ev.mPointerIdentifiers; 3191e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn if (pointerIdentifiers.length < pointers) { 3201e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn ev.mPointerIdentifiers = pointerIdentifiers = new int[pointers]; 3211e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn } 3221e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn System.arraycopy(inPointerIds, 0, pointerIdentifiers, 0, pointers); 3231e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn 3241e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn final int ND = pointers * NUM_SAMPLE_DATA; 3251e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn float[] dataSamples = ev.mDataSamples; 3261e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn if (dataSamples.length < ND) { 3271e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn ev.mDataSamples = dataSamples = new float[ND]; 3281e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn } 3291e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn System.arraycopy(inData, 0, dataSamples, 0, ND); 3301e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn 3319822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mTimeSamples[0] = eventTime; 33253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan 3330dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (DEBUG_POINTERS) { 3340dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn StringBuilder sb = new StringBuilder(128); 3350dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append("New:"); 3360dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn for (int i=0; i<pointers; i++) { 3370dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(" #"); 3380dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(ev.mPointerIdentifiers[i]); 3390dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append("("); 3400dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(ev.mDataSamples[(i*NUM_SAMPLE_DATA) + SAMPLE_X]); 3410dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(","); 3420dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(ev.mDataSamples[(i*NUM_SAMPLE_DATA) + SAMPLE_Y]); 3430dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(")"); 3440dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 3450dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn Log.v("MotionEvent", sb.toString()); 3460dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 3470dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 34853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan return ev; 34953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan } 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new MotionEvent, filling in all of the basic values that 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * define the motion. 354cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 355cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param downTime The time (in ms) when the user originally pressed down to start 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 357cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param eventTime The the time (in ms) when this specific event was generated. This 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must be obtained from {@link SystemClock#uptimeMillis()}. 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action The kind of action being performed -- one of either 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_CANCEL}. 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The X coordinate of this event. 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The Y coordinate of this event. 364cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param pressure The current pressure of this event. The pressure generally 365cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * ranges from 0 (no pressure at all) to 1 (normal pressure), however 366cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * values higher than 1 may be generated depending on the calibration of 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the input device. 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param size A scaled value of the approximate size of the area being pressed when 369cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * touched with the finger. The actual value in pixels corresponding to the finger 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * touch is normalized with a device specific range of values 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and scaled to a value between 0 and 1. 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState The state of any meta / modifier keys that were in effect when 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event was generated. 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param xPrecision The precision of the X coordinate being reported. 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param yPrecision The precision of the Y coordinate being reported. 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param deviceId The id for the device that this event came from. An id of 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * zero indicates that the event didn't come from a physical device; other 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * numbers are arbitrary and you shouldn't depend on the values. 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param edgeFlags A bitfield indicating which edges, if any, where touched by this 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * MotionEvent. 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public MotionEvent obtain(long downTime, long eventTime, int action, 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float x, float y, float pressure, float size, int metaState, 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float xPrecision, float yPrecision, int deviceId, int edgeFlags) { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MotionEvent ev = obtain(); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mDeviceId = deviceId; 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mEdgeFlags = edgeFlags; 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mDownTime = downTime; 38953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mEventTimeNano = eventTime * 1000000; 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mAction = action; 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mMetaState = metaState; 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mXPrecision = xPrecision; 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mYPrecision = yPrecision; 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = 1; 3969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumSamples = 1; 3970dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn int[] pointerIds = ev.mPointerIdentifiers; 3980dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn pointerIds[0] = 0; 3999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float[] data = ev.mDataSamples; 4009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_X] = ev.mRawX = x; 4019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_Y] = ev.mRawY = y; 4029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_PRESSURE] = pressure; 4039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_SIZE] = size; 4049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mTimeSamples[0] = eventTime; 4059822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 4069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return ev; 4079822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 4089822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 4099822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 4109822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Create a new MotionEvent, filling in all of the basic values that 4119822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * define the motion. 4129822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * 4139822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param downTime The time (in ms) when the user originally pressed down to start 4149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 4159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param eventTime The the time (in ms) when this specific event was generated. This 4169822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * must be obtained from {@link SystemClock#uptimeMillis()}. 4179822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param action The kind of action being performed -- one of either 4189822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 4199822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * {@link #ACTION_CANCEL}. 4209822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param pointers The number of pointers that are active in this event. 4219822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param x The X coordinate of this event. 4229822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param y The Y coordinate of this event. 4239822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param pressure The current pressure of this event. The pressure generally 4249822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * ranges from 0 (no pressure at all) to 1 (normal pressure), however 4259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * values higher than 1 may be generated depending on the calibration of 4269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * the input device. 4279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param size A scaled value of the approximate size of the area being pressed when 4289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * touched with the finger. The actual value in pixels corresponding to the finger 4299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * touch is normalized with a device specific range of values 4309822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * and scaled to a value between 0 and 1. 4319822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param metaState The state of any meta / modifier keys that were in effect when 4329822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * the event was generated. 4339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param xPrecision The precision of the X coordinate being reported. 4349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param yPrecision The precision of the Y coordinate being reported. 4359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param deviceId The id for the device that this event came from. An id of 4369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * zero indicates that the event didn't come from a physical device; other 4379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * numbers are arbitrary and you shouldn't depend on the values. 4389822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param edgeFlags A bitfield indicating which edges, if any, where touched by this 4399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * MotionEvent. 4409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 4419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public MotionEvent obtain(long downTime, long eventTime, int action, 4429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn int pointers, float x, float y, float pressure, float size, int metaState, 4439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float xPrecision, float yPrecision, int deviceId, int edgeFlags) { 4449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn MotionEvent ev = obtain(); 4459822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mDeviceId = deviceId; 4469822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mEdgeFlags = edgeFlags; 4479822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mDownTime = downTime; 4489822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mEventTimeNano = eventTime * 1000000; 4499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mAction = action; 4509822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = pointers; 4519822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mMetaState = metaState; 4529822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mXPrecision = xPrecision; 4539822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mYPrecision = yPrecision; 4549822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 4559822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = 1; 4569822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumSamples = 1; 4570dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn int[] pointerIds = ev.mPointerIdentifiers; 4580dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn pointerIds[0] = 0; 4599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float[] data = ev.mDataSamples; 4609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_X] = ev.mRawX = x; 4619822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_Y] = ev.mRawY = y; 4629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_PRESSURE] = pressure; 4639822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_SIZE] = size; 4649822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mTimeSamples[0] = eventTime; 4659822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ev; 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 468cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new MotionEvent, filling in a subset of the basic motion 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values. Those not specified here are: device id (always 0), pressure 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and size (always 1), x and y precision (always 1), and edgeFlags (always 0). 473cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 474cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param downTime The time (in ms) when the user originally pressed down to start 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 476cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param eventTime The the time (in ms) when this specific event was generated. This 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must be obtained from {@link SystemClock#uptimeMillis()}. 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action The kind of action being performed -- one of either 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_CANCEL}. 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The X coordinate of this event. 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The Y coordinate of this event. 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState The state of any meta / modifier keys that were in effect when 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event was generated. 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public MotionEvent obtain(long downTime, long eventTime, int action, 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float x, float y, int metaState) { 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MotionEvent ev = obtain(); 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mDeviceId = 0; 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mEdgeFlags = 0; 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mDownTime = downTime; 49253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mEventTimeNano = eventTime * 1000000; 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mAction = action; 4949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = 1; 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mMetaState = metaState; 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mXPrecision = 1.0f; 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mYPrecision = 1.0f; 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = 1; 5009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumSamples = 1; 5010dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn int[] pointerIds = ev.mPointerIdentifiers; 5020dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn pointerIds[0] = 0; 5039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float[] data = ev.mDataSamples; 5049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_X] = ev.mRawX = x; 5059822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_Y] = ev.mRawY = y; 5069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_PRESSURE] = 1.0f; 5079822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_SIZE] = 1.0f; 5089822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mTimeSamples[0] = eventTime; 5099822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ev; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5128169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima 5138169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima /** 51464f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima * Scales down the coordination of this event by the given scale. 5158169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima * 5168169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima * @hide 5178169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima */ 5188169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima public void scale(float scale) { 51964f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima mRawX *= scale; 52064f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima mRawY *= scale; 52164f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima mXPrecision *= scale; 52264f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima mYPrecision *= scale; 5239822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float[] history = mDataSamples; 5249822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int length = mNumPointers * mNumSamples * NUM_SAMPLE_DATA; 5259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn for (int i = 0; i < length; i += NUM_SAMPLE_DATA) { 5269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn history[i + SAMPLE_X] *= scale; 5279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn history[i + SAMPLE_Y] *= scale; 5289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn // no need to scale pressure 5299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn history[i + SAMPLE_SIZE] *= scale; // TODO: square this? 5308169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima } 5318169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima } 5328169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new MotionEvent, copying from an existing one. 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public MotionEvent obtain(MotionEvent o) { 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MotionEvent ev = obtain(); 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mDeviceId = o.mDeviceId; 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mEdgeFlags = o.mEdgeFlags; 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mDownTime = o.mDownTime; 54153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mEventTimeNano = o.mEventTimeNano; 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mAction = o.mAction; 5439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = o.mNumPointers; 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mRawX = o.mRawX; 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mRawY = o.mRawY; 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mMetaState = o.mMetaState; 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mXPrecision = o.mXPrecision; 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mYPrecision = o.mYPrecision; 5499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5500dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn final int NS = ev.mNumSamples = o.mNumSamples; 5510dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (ev.mTimeSamples.length >= NS) { 5520dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn System.arraycopy(o.mTimeSamples, 0, ev.mTimeSamples, 0, NS); 5539822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } else { 5549822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mTimeSamples = (long[])o.mTimeSamples.clone(); 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5569822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5570dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn final int NP = (ev.mNumPointers=o.mNumPointers); 5580dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (ev.mPointerIdentifiers.length >= NP) { 5590dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn System.arraycopy(o.mPointerIdentifiers, 0, ev.mPointerIdentifiers, 0, NP); 5609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } else { 5610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn ev.mPointerIdentifiers = (int[])o.mPointerIdentifiers.clone(); 5629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 5639822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5640dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn final int ND = NP * NS * NUM_SAMPLE_DATA; 56518a081e68441a098fe0a1a6283439913cfb6b0caOwen Lin if (ev.mDataSamples.length >= ND) { 5669822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn System.arraycopy(o.mDataSamples, 0, ev.mDataSamples, 0, ND); 5679822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } else { 5689822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mDataSamples = (float[])o.mDataSamples.clone(); 5699822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 5709822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ev; 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 573cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5758df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * Create a new MotionEvent, copying from an existing one, but not including 5768df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * any historical point information. 5778df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn */ 5788df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn static public MotionEvent obtainNoHistory(MotionEvent o) { 5798df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn MotionEvent ev = obtain(); 5808df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mDeviceId = o.mDeviceId; 5818df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mEdgeFlags = o.mEdgeFlags; 5828df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mDownTime = o.mDownTime; 5838df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mEventTimeNano = o.mEventTimeNano; 5848df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mAction = o.mAction; 5858df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mNumPointers = o.mNumPointers; 5868df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mRawX = o.mRawX; 5878df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mRawY = o.mRawY; 5888df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mMetaState = o.mMetaState; 5898df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mXPrecision = o.mXPrecision; 5908df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mYPrecision = o.mYPrecision; 5918df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5928df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mNumSamples = 1; 5938df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mTimeSamples[0] = o.mTimeSamples[0]; 5948df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5958df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn final int NP = (ev.mNumPointers=o.mNumPointers); 5968df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn if (ev.mPointerIdentifiers.length >= NP) { 5978df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn System.arraycopy(o.mPointerIdentifiers, 0, ev.mPointerIdentifiers, 0, NP); 5988df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } else { 5998df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mPointerIdentifiers = (int[])o.mPointerIdentifiers.clone(); 6008df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 6018df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 6028df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn final int ND = NP * NUM_SAMPLE_DATA; 6038df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn if (ev.mDataSamples.length >= ND) { 6048df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn System.arraycopy(o.mDataSamples, 0, ev.mDataSamples, 0, ND); 6058df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } else { 6068df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mDataSamples = (float[])o.mDataSamples.clone(); 6078df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 6088df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 6098df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn return ev; 6108df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 6118df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 6128df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn /** 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recycle the MotionEvent, to be re-used by a later caller. After calling 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this function you must not ever touch the event again. 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void recycle() { 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Ensure recycle is only called once! 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TRACK_RECYCLED_LOCATION) { 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mRecycledLocation != null) { 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException(toString() + " recycled twice!", mRecycledLocation); 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecycledLocation = new RuntimeException("Last recycled here"); 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mRecycled) { 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException(toString() + " recycled twice!"); 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Log.w("MotionEvent", "Recycling event " + this, mRecycledLocation); 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (gRecyclerLock) { 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gRecyclerUsed < MAX_RECYCLED) { 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gRecyclerUsed++; 6319822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mNumSamples = 0; 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNext = gRecyclerTop; 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gRecyclerTop = this; 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 637cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the kind of action being performed -- one of either 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 641b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_CANCEL}. Consider using {@link #getActionMasked} 642b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * and {@link #getActionIndex} to retrieve the separate masked action 643b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * and pointer index. 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getAction() { 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAction; 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 650b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Return the masked action being performed, without pointer index 651b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * information. May be any of the actions: {@link #ACTION_DOWN}, 652b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_MOVE}, {@link #ACTION_UP}, {@link #ACTION_CANCEL}, 653b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_POINTER_DOWN}, or {@link #ACTION_POINTER_UP}. 654b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Use {@link #getActionIndex} to return the index associated with 655b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * pointer actions. 656b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 657b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public final int getActionMasked() { 658b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn return mAction & ACTION_MASK; 659b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn } 660b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 661b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 662b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * For {@link #ACTION_POINTER_DOWN} or {@link #ACTION_POINTER_UP} 663b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * as returned by {@link #getActionMasked}, this returns the associated 664b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * pointer index. The index may be used with {@link #getPointerId(int)}, 665b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #getX(int)}, {@link #getY(int)}, {@link #getPressure(int)}, 666b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * and {@link #getSize(int)} to get information about the pointer that has 667b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * gone down or up. 668b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 669b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public final int getActionIndex() { 670b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn return (mAction & ACTION_POINTER_INDEX_MASK) >> ACTION_POINTER_INDEX_SHIFT; 671b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn } 672b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 673b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 674cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * Returns the time (in ms) when the user originally pressed down to start 675cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * a stream of position events. 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getDownTime() { 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDownTime; 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the time (in ms) when this specific event was generated. 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getEventTime() { 6859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mTimeSamples[0]; 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 68953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * Returns the time (in ns) when this specific event was generated. 69053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * The value is in nanosecond precision but it may not have nanosecond accuracy. 69153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * 69253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @hide 69353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan */ 69453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan public final long getEventTimeNano() { 69553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan return mEventTimeNano; 69653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan } 69753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan 69853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan /** 6990dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getX(int)} for the first pointer index (may be an 7000dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getX() { 7039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[SAMPLE_X]; 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7070dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getY(int)} for the first pointer index (may be an 7080dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getY() { 7119822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[SAMPLE_Y]; 7129822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 7139822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 7149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 7150dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getPressure(int)} for the first pointer index (may be an 7160dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 7179822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 7189822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getPressure() { 7199822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[SAMPLE_PRESSURE]; 7209822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 7219822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 7229822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 7230dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getSize(int)} for the first pointer index (may be an 7240dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 7259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 7269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getSize() { 7279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[SAMPLE_SIZE]; 7289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 7299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 7309822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 7310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * The number of pointers of data contained in this event. Always 7320dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * >= 1. 7330dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn */ 7340dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final int getPointerCount() { 7350dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return mNumPointers; 7360dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7370dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 7380dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn /** 7390dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Return the pointer identifier associated with a particular pointer 7400dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * data index is this event. The identifier tells you the actual pointer 7410dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * number associated with the data, accounting for individual pointers 7420dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * going up and down since the start of the current gesture. 7430dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 7440dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 7450dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn */ 746d41ba666d12a24ee4624ea9a009151e6165e3775Dianne Hackborn public final int getPointerId(int pointerIndex) { 747d41ba666d12a24ee4624ea9a009151e6165e3775Dianne Hackborn return mPointerIdentifiers[pointerIndex]; 7480dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7490dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 7500dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn /** 7510dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Given a pointer identifier, find the index of its data in the event. 7520dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * 7530dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerId The identifier of the pointer to be found. 7540dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @return Returns either the index of the pointer (for use with 7550dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getX(int) et al.), or -1 if there is no data available for 7560dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * that pointer identifier. 7570dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn */ 7580dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final int findPointerIndex(int pointerId) { 7590dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn int i = mNumPointers; 7600dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn while (i > 0) { 7610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn i--; 7620dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (mPointerIdentifiers[i] == pointerId) { 7630dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return i; 7640dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7650dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7660dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return -1; 7670dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7680dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 7690dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn /** 7700dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns the X coordinate of this event for the given pointer 7710dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 7720dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 7739822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Whole numbers are pixels; the 7749822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * value may have a fraction for input devices that are sub-pixel precise. 7750dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 7760dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 7779822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 7780dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getX(int pointerIndex) { 7790dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return mDataSamples[(pointerIndex*NUM_SAMPLE_DATA) + SAMPLE_X]; 7809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 7819822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 7829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 7830dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns the Y coordinate of this event for the given pointer 7840dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 7850dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 7869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Whole numbers are pixels; the 7879822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * value may have a fraction for input devices that are sub-pixel precise. 7880dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 7890dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 7909822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 7910dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getY(int pointerIndex) { 7920dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return mDataSamples[(pointerIndex*NUM_SAMPLE_DATA) + SAMPLE_Y]; 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7960dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns the current pressure of this event for the given pointer 7970dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 7980dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 7999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * The pressure generally 800cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * ranges from 0 (no pressure at all) to 1 (normal pressure), however 801cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * values higher than 1 may be generated depending on the calibration of 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the input device. 8030dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 8040dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8060dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getPressure(int pointerIndex) { 8070dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return mDataSamples[(pointerIndex*NUM_SAMPLE_DATA) + SAMPLE_PRESSURE]; 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8110dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a scaled value of the approximate size for the given pointer 8120dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 8130dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 8140dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * This represents some approximation of the area of the screen being 8150dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * pressed; the actual value in pixels corresponding to the 8169822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * touch is normalized with the device specific range of values 817cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * and scaled to a value between 0 and 1. The value of size can be used to 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * determine fat touch events. 8190dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 8200dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8220dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getSize(int pointerIndex) { 8230dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return mDataSamples[(pointerIndex*NUM_SAMPLE_DATA) + SAMPLE_SIZE]; 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the state of any meta / modifier keys that were in effect when 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event was generated. This is the same values as those 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned by {@link KeyEvent#getMetaState() KeyEvent.getMetaState}. 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return an integer in which each bit set to 1 represents a pressed 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * meta key 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see KeyEvent#getMetaState() 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getMetaState() { 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMetaState; 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the original raw X coordinate of this event. For touch 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events on the screen, this is the original location of the event 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the screen, before it had been adjusted for the containing window 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and views. 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getRawX() { 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mRawX; 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the original raw Y coordinate of this event. For touch 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events on the screen, this is the original location of the event 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the screen, before it had been adjusted for the containing window 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and views. 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getRawY() { 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mRawY; 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the precision of the X coordinates being reported. You can 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * multiple this number with {@link #getX} to find the actual hardware 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value of the X coordinate. 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the precision of X coordinates being reported. 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getXPrecision() { 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mXPrecision; 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 869cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the precision of the Y coordinates being reported. You can 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * multiple this number with {@link #getY} to find the actual hardware 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value of the Y coordinate. 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the precision of Y coordinates being reported. 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getYPrecision() { 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mYPrecision; 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 879cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of historical points in this event. These are 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * movements that have occurred between this event and the previous event. 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This only applies to ACTION_MOVE events -- all other actions will have 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a size of 0. 885cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the number of historical points in the event. 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getHistorySize() { 8899822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mNumSamples - 1; 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 891cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the time that a historical movement occurred between this event 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the previous event. Only applies to ACTION_MOVE events. 895cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 898cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getEventTime 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getHistoricalEventTime(int pos) { 9039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mTimeSamples[pos + 1]; 9049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 9059822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 9069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 9070dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalX(int)} for the first pointer index (may be an 9080dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 9099822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 9109822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalX(int pos) { 9119822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[((pos + 1) * NUM_SAMPLE_DATA * mNumPointers) + SAMPLE_X]; 9129822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 9139822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 9149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 9150dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalY(int)} for the first pointer index (may be an 9160dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 9179822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 9189822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalY(int pos) { 9199822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[((pos + 1) * NUM_SAMPLE_DATA * mNumPointers) + SAMPLE_Y]; 9209822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 9219822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 9229822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 9230dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalPressure(int)} for the first pointer index (may be an 9240dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 9259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 9269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalPressure(int pos) { 9279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[((pos + 1) * NUM_SAMPLE_DATA * mNumPointers) + SAMPLE_PRESSURE]; 9289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 9299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 9309822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 9310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalSize(int)} for the first pointer index (may be an 9320dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 9339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 9349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalSize(int pos) { 9359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[((pos + 1) * NUM_SAMPLE_DATA * mNumPointers) + SAMPLE_SIZE]; 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 937cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9390dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical X coordinate, as per {@link #getX(int)}, that 9400dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * occurred between this event and the previous event for the given pointer. 9410dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Only applies to ACTION_MOVE events. 942cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9430dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 9440dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 947cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getX 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9510dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalX(int pointerIndex, int pos) { 9529822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[((pos + 1) * NUM_SAMPLE_DATA * mNumPointers) 9530dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn + (pointerIndex * NUM_SAMPLE_DATA) + SAMPLE_X]; 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 955cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9570dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical Y coordinate, as per {@link #getY(int)}, that 9580dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * occurred between this event and the previous event for the given pointer. 9590dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Only applies to ACTION_MOVE events. 960cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 9620dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 965cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getY 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9690dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalY(int pointerIndex, int pos) { 9709822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[((pos + 1) * NUM_SAMPLE_DATA * mNumPointers) 9710dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn + (pointerIndex * NUM_SAMPLE_DATA) + SAMPLE_Y]; 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 973cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9750dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical pressure coordinate, as per {@link #getPressure(int)}, 9760dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * that occurred between this event and the previous event for the given 9770dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * pointer. Only applies to ACTION_MOVE events. 978cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9790dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 9800dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 9830dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPressure 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9870dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalPressure(int pointerIndex, int pos) { 9889822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[((pos + 1) * NUM_SAMPLE_DATA * mNumPointers) 9890dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn + (pointerIndex * NUM_SAMPLE_DATA) + SAMPLE_PRESSURE]; 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 991cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9930dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical size coordinate, as per {@link #getSize(int)}, that 9940dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * occurred between this event and the previous event for the given pointer. 9950dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Only applies to ACTION_MOVE events. 996cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9970dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 9980dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 10010dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getSize 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10050dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalSize(int pointerIndex, int pos) { 10069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return mDataSamples[((pos + 1) * NUM_SAMPLE_DATA * mNumPointers) 10070dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn + (pointerIndex * NUM_SAMPLE_DATA) + SAMPLE_SIZE]; 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the id for the device that this event came from. An id of 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * zero indicates that the event didn't come from a physical device; other 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * numbers are arbitrary and you shouldn't depend on the values. 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getDeviceId() { 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDeviceId; 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1018cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a bitfield indicating which edges, if any, where touched by this 1021cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * MotionEvent. For touch events, clients can use this to determine if the 1022cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * user's finger was touching the edge of the display. 1023cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_LEFT 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_TOP 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_RIGHT 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_BOTTOM 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getEdgeFlags() { 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mEdgeFlags; 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1032cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the bitfield indicating which edges, if any, where touched by this 1036cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * MotionEvent. 1037cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getEdgeFlags() 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setEdgeFlags(int flags) { 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEdgeFlags = flags; 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets this event's action. 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setAction(int action) { 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Adjust this event's location. 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param deltaX Amount to add to the current X coordinate of the event. 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param deltaY Amount to add to the current Y coordinate of the event. 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void offsetLocation(float deltaX, float deltaY) { 10579822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int N = mNumPointers*mNumSamples*4; 10589822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final float[] pos = mDataSamples; 10599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn for (int i=0; i<N; i+=NUM_SAMPLE_DATA) { 10609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn pos[i+SAMPLE_X] += deltaX; 10619822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn pos[i+SAMPLE_Y] += deltaY; 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1064cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set this event's location. Applies {@link #offsetLocation} with a 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * delta from the current location to the given new location. 1068cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x New absolute X location. 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y New absolute Y location. 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setLocation(float x, float y) { 10739822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float deltaX = x-mDataSamples[SAMPLE_X]; 10749822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float deltaY = y-mDataSamples[SAMPLE_Y]; 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (deltaX != 0 || deltaY != 0) { 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project offsetLocation(deltaX, deltaY); 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1079cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add a new movement to the batch of movements in this event. The event's 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current location, position and size is updated to the new values. In 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the future, the current values in the event will be added to a list of 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * historic values. 1085cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param eventTime The time stamp for this data. 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The new X position. 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The new Y position. 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pressure The new pressure. 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param size The new size. 10919822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param metaState Meta key state. 10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void addBatch(long eventTime, float x, float y, 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float pressure, float size, int metaState) { 10959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float[] data = mDataSamples; 10969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn long[] times = mTimeSamples; 10979822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 10989822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NP = mNumPointers; 10999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NS = mNumSamples; 11009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NI = NP*NS; 11019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int ND = NI * NUM_SAMPLE_DATA; 11020dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (data.length <= ND) { 11030dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn final int NEW_ND = ND + (NP * (BASE_AVAIL_SAMPLES * NUM_SAMPLE_DATA)); 11049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float[] newData = new float[NEW_ND]; 11059822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn System.arraycopy(data, 0, newData, 0, ND); 11069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mDataSamples = data = newData; 11079822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 11089822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn if (times.length <= NS) { 11099822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NEW_NS = NS + BASE_AVAIL_SAMPLES; 11109822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn long[] newHistoryTimes = new long[NEW_NS]; 11119822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn System.arraycopy(times, 0, newHistoryTimes, 0, NS); 11129822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mTimeSamples = times = newHistoryTimes; 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 11159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn times[NS] = times[0]; 11169822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn times[0] = eventTime; 11179822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 11189822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int pos = NS*NUM_SAMPLE_DATA; 11199822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[pos+SAMPLE_X] = data[SAMPLE_X]; 11209822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[pos+SAMPLE_Y] = data[SAMPLE_Y]; 11219822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[pos+SAMPLE_PRESSURE] = data[SAMPLE_PRESSURE]; 11229822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[pos+SAMPLE_SIZE] = data[SAMPLE_SIZE]; 11239822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_X] = x; 11249822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_Y] = y; 11259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_PRESSURE] = pressure; 11269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn data[SAMPLE_SIZE] = size; 11279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mNumSamples = NS+1; 1128cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 11299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mRawX = x; 11309822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mRawY = y; 11319822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mMetaState |= metaState; 11329822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 1133cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 11349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 11359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Add a new movement to the batch of movements in this event. The 11369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * input data must contain (NUM_SAMPLE_DATA * {@link #getPointerCount()}) 11379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * samples of data. 11389822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * 11399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param eventTime The time stamp for this data. 11409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param inData The actual data. 11419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param metaState Meta key state. 11429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * 11439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 11449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 11459822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final void addBatch(long eventTime, float[] inData, int metaState) { 11469822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float[] data = mDataSamples; 11479822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn long[] times = mTimeSamples; 11489822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 11499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NP = mNumPointers; 11509822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NS = mNumSamples; 11519822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NI = NP*NS; 11529822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int ND = NI * NUM_SAMPLE_DATA; 11532397640740e053af7ef4aa742467f723186d5ad7Dianne Hackborn if (data.length < (ND+(NP*NUM_SAMPLE_DATA))) { 11540dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn final int NEW_ND = ND + (NP * (BASE_AVAIL_SAMPLES * NUM_SAMPLE_DATA)); 11559822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float[] newData = new float[NEW_ND]; 11569822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn System.arraycopy(data, 0, newData, 0, ND); 11579822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mDataSamples = data = newData; 11589822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 11592397640740e053af7ef4aa742467f723186d5ad7Dianne Hackborn if (times.length < (NS+1)) { 11609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NEW_NS = NS + BASE_AVAIL_SAMPLES; 11619822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn long[] newHistoryTimes = new long[NEW_NS]; 11629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn System.arraycopy(times, 0, newHistoryTimes, 0, NS); 11639822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mTimeSamples = times = newHistoryTimes; 11649822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 11659822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 11669822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn times[NS] = times[0]; 11679822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn times[0] = eventTime; 11689822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 11699822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn System.arraycopy(data, 0, data, ND, mNumPointers*NUM_SAMPLE_DATA); 11709822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn System.arraycopy(inData, 0, data, 0, mNumPointers*NUM_SAMPLE_DATA); 11719822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 11729822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mNumSamples = NS+1; 1173cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 11749822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mRawX = inData[SAMPLE_X]; 11759822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mRawY = inData[SAMPLE_Y]; 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState |= metaState; 11770dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 11780dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (DEBUG_POINTERS) { 11790dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn StringBuilder sb = new StringBuilder(128); 11800dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append("Add:"); 11810dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn for (int i=0; i<mNumPointers; i++) { 11820dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(" #"); 11830dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(mPointerIdentifiers[i]); 11840dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append("("); 11850dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(mDataSamples[(i*NUM_SAMPLE_DATA) + SAMPLE_X]); 11860dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(","); 11870dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(mDataSamples[(i*NUM_SAMPLE_DATA) + SAMPLE_Y]); 11880dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(")"); 11890dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 11900dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn Log.v("MotionEvent", sb.toString()); 11910dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1193cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "MotionEvent{" + Integer.toHexString(System.identityHashCode(this)) 11979822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn + " action=" + mAction + " x=" + getX() 11989822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn + " y=" + getY() + " pressure=" + getPressure() + " size=" + getSize() + "}"; 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<MotionEvent> CREATOR 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<MotionEvent>() { 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MotionEvent createFromParcel(Parcel in) { 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MotionEvent ev = obtain(); 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.readFromParcel(in); 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ev; 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MotionEvent[] newArray(int size) { 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new MotionEvent[size]; 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel out, int flags) { 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeLong(mDownTime); 122053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan out.writeLong(mEventTimeNano); 12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mAction); 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mMetaState); 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeFloat(mRawX); 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeFloat(mRawY); 12259822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NP = mNumPointers; 12269822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn out.writeInt(NP); 12279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NS = mNumSamples; 12289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn out.writeInt(NS); 12299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NI = NP*NS; 12309822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn if (NI > 0) { 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int i; 12320dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn int[] state = mPointerIdentifiers; 12330dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn for (i=0; i<NP; i++) { 12349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn out.writeInt(state[i]); 12359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 12360dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn final int ND = NI*NUM_SAMPLE_DATA; 12379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float[] history = mDataSamples; 12380dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn for (i=0; i<ND; i++) { 12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeFloat(history[i]); 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn long[] times = mTimeSamples; 12429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn for (i=0; i<NS; i++) { 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeLong(times[i]); 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeFloat(mXPrecision); 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeFloat(mYPrecision); 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mDeviceId); 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mEdgeFlags); 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void readFromParcel(Parcel in) { 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDownTime = in.readLong(); 125453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan mEventTimeNano = in.readLong(); 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = in.readInt(); 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState = in.readInt(); 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRawX = in.readFloat(); 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRawY = in.readFloat(); 12599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NP = in.readInt(); 12609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mNumPointers = NP; 12619822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NS = in.readInt(); 12629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mNumSamples = NS; 12639822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NI = NP*NS; 12649822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn if (NI > 0) { 12650dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn int[] ids = mPointerIdentifiers; 12660dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (ids.length < NP) { 12670dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn mPointerIdentifiers = ids = new int[NP]; 12689822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 12690dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn for (int i=0; i<NP; i++) { 12700dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn ids[i] = in.readInt(); 12719822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 12729822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float[] history = mDataSamples; 12730dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn final int ND = NI*NUM_SAMPLE_DATA; 12740dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (history.length < ND) { 12750dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn mDataSamples = history = new float[ND]; 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12770dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn for (int i=0; i<ND; i++) { 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project history[i] = in.readFloat(); 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn long[] times = mTimeSamples; 12819822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn if (times == null || times.length < NS) { 12829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mTimeSamples = times = new long[NS]; 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn for (int i=0; i<NS; i++) { 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project times[i] = in.readLong(); 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mXPrecision = in.readFloat(); 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mYPrecision = in.readFloat(); 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDeviceId = in.readInt(); 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEdgeFlags = in.readInt(); 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1295