MotionEvent.java revision 5c225b1680e696ae8bbf505a1997d6f720672f74
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 { 305c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private static final long MS_PER_NS = 1000000; 310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn static final boolean DEBUG_POINTERS = false; 320dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Bit mask of the parts of the action code that are the action itself. 359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_MASK = 0xff; 379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 389822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A pressed gesture has started, the 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * motion contains the initial starting location. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_DOWN = 0; 439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A pressed gesture has finished, the 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * motion contains the final release location as well as any intermediate 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * points since the last down or move event. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_UP = 1; 509822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A change has happened during a 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * press gesture (between {@link #ACTION_DOWN} and {@link #ACTION_UP}). 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The motion contains the most recent point, as well as any intermediate 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * points since the last down or move event. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_MOVE = 2; 589822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: The current gesture has been aborted. 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You will not receive any more points in it. You should treat this as 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an up event, but not perform any action that you normally would. 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_CANCEL = 3; 659822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #getAction}: A movement has happened outside of the 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normal bounds of the UI element. This does not provide a full gesture, 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but only the initial location of the movement/touch. 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACTION_OUTSIDE = 4; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 749822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * A non-primary pointer has gone down. The bits in 750dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #ACTION_POINTER_ID_MASK} indicate which pointer changed. 769822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 779822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_DOWN = 5; 789822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 799822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 80b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * A non-primary pointer has gone up. The bits in 81b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_POINTER_ID_MASK} indicate which pointer changed. 829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 83b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_UP = 6; 849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 86b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Bits in the action code that represent a pointer index, used with 87b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_POINTER_DOWN} and {@link #ACTION_POINTER_UP}. Shifting 88b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * down by {@link #ACTION_POINTER_INDEX_SHIFT} provides the actual pointer 89b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * index where the data for the pointer going up or down can be found; you can 90b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * get its identifier with {@link #getPointerId(int)} and the actual 91b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data with {@link #getX(int)} etc. 929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 93b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_INDEX_MASK = 0xff00; 949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 96b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Bit shift for the action bits holding the pointer index as 97b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * defined by {@link #ACTION_POINTER_INDEX_MASK}. 989822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 99b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_INDEX_SHIFT = 8; 1009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 102b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 103b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_DOWN}. 1049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 105b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 106b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_1_DOWN = ACTION_POINTER_DOWN | 0x0000; 107b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 108b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 109b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 110b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_DOWN}. 111b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 112b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 113b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_2_DOWN = ACTION_POINTER_DOWN | 0x0100; 1149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 116b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 117b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_DOWN}. 1189822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 119b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 120b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public static final int ACTION_POINTER_3_DOWN = ACTION_POINTER_DOWN | 0x0200; 121b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 122b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 123b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 124b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_UP}. 125b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 126b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1279822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_1_UP = ACTION_POINTER_UP | 0x0000; 1289822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 130b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 131b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_UP}. 1329822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 133b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_2_UP = ACTION_POINTER_UP | 0x0100; 1359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 137b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the 138b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * data index associated with {@link #ACTION_POINTER_UP}. 1399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 140b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public static final int ACTION_POINTER_3_UP = ACTION_POINTER_UP | 0x0200; 1429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 144b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Renamed to {@link #ACTION_POINTER_INDEX_MASK} to match 145b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * the actual data contained in these bits. 1469822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 147b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1480dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public static final int ACTION_POINTER_ID_MASK = 0xff00; 1499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1509822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 151b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * @deprecated Renamed to {@link #ACTION_POINTER_INDEX_SHIFT} to match 152b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * the actual data contained in these bits. 1539822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 154b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn @Deprecated 1550dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public static final int ACTION_POINTER_ID_SHIFT = 8; 1569822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final boolean TRACK_RECYCLED_LOCATION = false; 158cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the top edge of the screen. 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_TOP = 0x00000001; 163cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the bottom edge of the screen. 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_BOTTOM = 0x00000002; 168cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the left edge of the screen. 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_LEFT = 0x00000004; 173cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag indicating the motion event intersected the right edge of the screen. 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int EDGE_RIGHT = 0x00000008; 178cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 1799822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 1809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Offset for the sample's X coordinate. 1819822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 1829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public final int SAMPLE_X = 0; 1849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 1869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Offset for the sample's Y coordinate. 1879822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 1889822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1899822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public final int SAMPLE_Y = 1; 1909822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1919822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 1929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Offset for the sample's X coordinate. 1939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 1949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 1959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public final int SAMPLE_PRESSURE = 2; 1969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 1979822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 1989822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Offset for the sample's X coordinate. 1999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 2009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 2019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public final int SAMPLE_SIZE = 3; 2029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 2049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Number of data items for each sample. 2059822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 2069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 2079822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public final int NUM_SAMPLE_DATA = 4; 2089822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2091e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn /** 2101e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn * Number of possible pointers. 2111e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn * @hide 2121e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn */ 2131e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn static public final int BASE_AVAIL_POINTERS = 5; 2141e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn 2159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static private final int BASE_AVAIL_SAMPLES = 8; 2169822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private final int MAX_RECYCLED = 10; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private Object gRecyclerLock = new Object(); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private int gRecyclerUsed = 0; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static private MotionEvent gRecyclerTop = null; 221cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 2225c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private long mDownTimeNano; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mAction; 2245c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private float mXOffset; 2255c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private float mYOffset; 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 private int mNumPointers; 2339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private int mNumSamples; 2345c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 2355c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private int mLastDataSampleIndex; 2365c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private int mLastEventTimeNanoSampleIndex; 2375c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 2380dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn // Array of mNumPointers size of identifiers for each pointer of data. 2390dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn private int[] mPointerIdentifiers; 2405c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 2419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn // Array of (mNumSamples * mNumPointers * NUM_SAMPLE_DATA) size of event data. 2425c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown // Samples are ordered from oldest to newest. 2439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn private float[] mDataSamples; 2445c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 2455c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown // Array of mNumSamples size of event time stamps in nanoseconds. 2465c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown // Samples are ordered from oldest to newest. 2475c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private long[] mEventTimeNanoSamples; 2488169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MotionEvent mNext; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RuntimeException mRecycledLocation; 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mRecycled; 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown private MotionEvent(int pointerCount, int sampleCount) { 25446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mPointerIdentifiers = new int[pointerCount]; 25546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown mDataSamples = new float[pointerCount * sampleCount * NUM_SAMPLE_DATA]; 2565c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mEventTimeNanoSamples = new long[sampleCount]; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 258cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 25946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown static private MotionEvent obtain(int pointerCount, int sampleCount) { 26046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown final MotionEvent ev; 26146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown synchronized (gRecyclerLock) { 26246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (gRecyclerTop == null) { 26346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (pointerCount < BASE_AVAIL_POINTERS) { 26446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown pointerCount = BASE_AVAIL_POINTERS; 26546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 26646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (sampleCount < BASE_AVAIL_SAMPLES) { 26746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown sampleCount = BASE_AVAIL_SAMPLES; 26846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 26946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown return new MotionEvent(pointerCount, sampleCount); 27046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 27146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev = gRecyclerTop; 27246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown gRecyclerTop = ev.mNext; 2735c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown gRecyclerUsed -= 1; 27446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 27546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev.mRecycledLocation = null; 27646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev.mRecycled = false; 27746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev.mNext = null; 27846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 27946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown if (ev.mPointerIdentifiers.length < pointerCount) { 28046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev.mPointerIdentifiers = new int[pointerCount]; 28146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 28246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 2835c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown if (ev.mEventTimeNanoSamples.length < sampleCount) { 2845c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mEventTimeNanoSamples = new long[sampleCount]; 28546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 28646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 28746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown final int neededDataSamplesLength = pointerCount * sampleCount * NUM_SAMPLE_DATA; 2885c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown if (ev.mDataSamples.length < neededDataSamplesLength) { 28946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown ev.mDataSamples = new float[neededDataSamplesLength]; 29046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 29146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 29246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown return ev; 29346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown } 2945c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 29553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan /** 29653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * Create a new MotionEvent, filling in all of the basic values that 29753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * define the motion. 29853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * 29953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param downTime The time (in ms) when the user originally pressed down to start 30053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 30153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param eventTime The the time (in ms) when this specific event was generated. This 30253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * must be obtained from {@link SystemClock#uptimeMillis()}. 30353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param eventTimeNano The the time (in ns) when this specific event was generated. This 30453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * must be obtained from {@link System#nanoTime()}. 30553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param action The kind of action being performed -- one of either 30653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 30753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * {@link #ACTION_CANCEL}. 3080dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointers The number of points that will be in this event. 3090dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param inPointerIds An array of <em>pointers</em> values providing 3100dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * an identifier for each pointer. 3110dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param inData An array of <em>pointers*NUM_SAMPLE_DATA</em> of initial 3120dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * data samples for the event. 31353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param metaState The state of any meta / modifier keys that were in effect when 31453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * the event was generated. 31553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param xPrecision The precision of the X coordinate being reported. 31653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param yPrecision The precision of the Y coordinate being reported. 31753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param deviceId The id for the device that this event came from. An id of 31853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * zero indicates that the event didn't come from a physical device; other 31953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * numbers are arbitrary and you shouldn't depend on the values. 32053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @param edgeFlags A bitfield indicating which edges, if any, where touched by this 32153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * MotionEvent. 32253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * 32353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @hide 32453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan */ 32553071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan static public MotionEvent obtainNano(long downTime, long eventTime, long eventTimeNano, 3260dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn int action, int pointers, int[] inPointerIds, float[] inData, int metaState, 32753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan float xPrecision, float yPrecision, int deviceId, int edgeFlags) { 3285c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown MotionEvent ev = obtain(pointers, 1); 32953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mDeviceId = deviceId; 33053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mEdgeFlags = edgeFlags; 3315c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mDownTimeNano = downTime * MS_PER_NS; 33253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mAction = action; 33353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mMetaState = metaState; 3345c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mXOffset = 0; 3355c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mYOffset = 0; 33653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mXPrecision = xPrecision; 33753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan ev.mYPrecision = yPrecision; 3385c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 3399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = pointers; 3409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumSamples = 1; 3419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 3425c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastDataSampleIndex = 0; 3435c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastEventTimeNanoSampleIndex = 0; 3441e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn 3455c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(inPointerIds, 0, ev.mPointerIdentifiers, 0, pointers); 3461e8dfc73fba88766ee3c25ae7b3bb1850319b11dDianne Hackborn 3475c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mEventTimeNanoSamples[0] = eventTimeNano; 3485c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 3495c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(inData, 0, ev.mDataSamples, 0, pointers * NUM_SAMPLE_DATA); 35053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan 3510dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (DEBUG_POINTERS) { 3520dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn StringBuilder sb = new StringBuilder(128); 3530dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append("New:"); 3545c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < pointers; i++) { 3550dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(" #"); 3565c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown sb.append(ev.getPointerId(i)); 3570dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append("("); 3585c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown sb.append(ev.getX(i)); 3590dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(","); 3605c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown sb.append(ev.getY(i)); 3610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(")"); 3620dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 3630dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn Log.v("MotionEvent", sb.toString()); 3640dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 3650dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 36653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan return ev; 36753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan } 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new MotionEvent, filling in all of the basic values that 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * define the motion. 372cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 373cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param downTime The time (in ms) when the user originally pressed down to start 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 375cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param eventTime The the time (in ms) when this specific event was generated. This 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must be obtained from {@link SystemClock#uptimeMillis()}. 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action The kind of action being performed -- one of either 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_CANCEL}. 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The X coordinate of this event. 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The Y coordinate of this event. 382cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param pressure The current pressure of this event. The pressure generally 383cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * ranges from 0 (no pressure at all) to 1 (normal pressure), however 384cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * values higher than 1 may be generated depending on the calibration of 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the input device. 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param size A scaled value of the approximate size of the area being pressed when 387cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * touched with the finger. The actual value in pixels corresponding to the finger 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * touch is normalized with a device specific range of values 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and scaled to a value between 0 and 1. 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState The state of any meta / modifier keys that were in effect when 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event was generated. 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param xPrecision The precision of the X coordinate being reported. 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param yPrecision The precision of the Y coordinate being reported. 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param deviceId The id for the device that this event came from. An id of 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * zero indicates that the event didn't come from a physical device; other 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * numbers are arbitrary and you shouldn't depend on the values. 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param edgeFlags A bitfield indicating which edges, if any, where touched by this 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * MotionEvent. 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public MotionEvent obtain(long downTime, long eventTime, int action, 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float x, float y, float pressure, float size, int metaState, 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float xPrecision, float yPrecision, int deviceId, int edgeFlags) { 4035c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown MotionEvent ev = obtain(1, 1); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mDeviceId = deviceId; 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mEdgeFlags = edgeFlags; 4065c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mDownTimeNano = downTime * MS_PER_NS; 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mAction = action; 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mMetaState = metaState; 4095c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mXOffset = 0; 4105c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mYOffset = 0; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mXPrecision = xPrecision; 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mYPrecision = yPrecision; 4135c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 4149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumPointers = 1; 4159822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn ev.mNumSamples = 1; 4165c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 4175c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastDataSampleIndex = 0; 4185c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastEventTimeNanoSampleIndex = 0; 4195c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 4205c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mPointerIdentifiers[0] = 0; 4215c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 4225c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mEventTimeNanoSamples[0] = eventTime * MS_PER_NS; 4235c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 4245c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float[] dataSamples = ev.mDataSamples; 4255c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[SAMPLE_X] = x; 4265c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[SAMPLE_Y] = y; 4275c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[SAMPLE_PRESSURE] = pressure; 4285c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[SAMPLE_SIZE] = size; 4299822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn return ev; 4309822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 4319822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 4329822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 4339822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Create a new MotionEvent, filling in all of the basic values that 4349822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * define the motion. 4359822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * 4369822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param downTime The time (in ms) when the user originally pressed down to start 4379822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 4389822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param eventTime The the time (in ms) when this specific event was generated. This 4399822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * must be obtained from {@link SystemClock#uptimeMillis()}. 4409822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param action The kind of action being performed -- one of either 4419822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 4429822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * {@link #ACTION_CANCEL}. 4439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param pointers The number of pointers that are active in this event. 4449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param x The X coordinate of this event. 4459822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param y The Y coordinate of this event. 4469822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param pressure The current pressure of this event. The pressure generally 4479822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * ranges from 0 (no pressure at all) to 1 (normal pressure), however 4489822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * values higher than 1 may be generated depending on the calibration of 4499822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * the input device. 4509822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param size A scaled value of the approximate size of the area being pressed when 4519822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * touched with the finger. The actual value in pixels corresponding to the finger 4529822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * touch is normalized with a device specific range of values 4539822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * and scaled to a value between 0 and 1. 4549822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param metaState The state of any meta / modifier keys that were in effect when 4559822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * the event was generated. 4569822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param xPrecision The precision of the X coordinate being reported. 4579822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param yPrecision The precision of the Y coordinate being reported. 4589822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param deviceId The id for the device that this event came from. An id of 4599822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * zero indicates that the event didn't come from a physical device; other 4609822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * numbers are arbitrary and you shouldn't depend on the values. 4619822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param edgeFlags A bitfield indicating which edges, if any, where touched by this 4629822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * MotionEvent. 4635c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * 4645c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * @deprecated Use {@link #obtain(long, long, int, float, float, float, float, int, float, float, int, int)} 4655c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * instead. 4669822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 4675c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown @Deprecated 4689822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn static public MotionEvent obtain(long downTime, long eventTime, int action, 4699822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn int pointers, float x, float y, float pressure, float size, int metaState, 4709822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn float xPrecision, float yPrecision, int deviceId, int edgeFlags) { 4715c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return obtain(downTime, eventTime, action, x, y, pressure, size, 4725c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown metaState, xPrecision, yPrecision, deviceId, edgeFlags); 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 474cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new MotionEvent, filling in a subset of the basic motion 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values. Those not specified here are: device id (always 0), pressure 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and size (always 1), x and y precision (always 1), and edgeFlags (always 0). 479cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 480cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param downTime The time (in ms) when the user originally pressed down to start 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. 482cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * @param eventTime The the time (in ms) when this specific event was generated. This 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must be obtained from {@link SystemClock#uptimeMillis()}. 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action The kind of action being performed -- one of either 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_CANCEL}. 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The X coordinate of this event. 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The Y coordinate of this event. 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metaState The state of any meta / modifier keys that were in effect when 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event was generated. 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public MotionEvent obtain(long downTime, long eventTime, int action, 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float x, float y, int metaState) { 4945c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return obtain(downTime, eventTime, action, x, y, 1.0f, 1.0f, 4955c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown metaState, 1.0f, 1.0f, 0, 0); 4968169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima } 4978169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new MotionEvent, copying from an existing one. 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public MotionEvent obtain(MotionEvent o) { 5025c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown MotionEvent ev = obtain(o.mNumPointers, o.mNumSamples); 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mDeviceId = o.mDeviceId; 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mEdgeFlags = o.mEdgeFlags; 5055c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mDownTimeNano = o.mDownTimeNano; 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mAction = o.mAction; 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mMetaState = o.mMetaState; 5085c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mXOffset = o.mXOffset; 5095c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mYOffset = o.mYOffset; 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mXPrecision = o.mXPrecision; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ev.mYPrecision = o.mYPrecision; 5125c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown int numPointers = ev.mNumPointers = o.mNumPointers; 5135c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown int numSamples = ev.mNumSamples = o.mNumSamples; 5149822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5155c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastDataSampleIndex = o.mLastDataSampleIndex; 5165c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastEventTimeNanoSampleIndex = o.mLastEventTimeNanoSampleIndex; 5179822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5185c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(o.mPointerIdentifiers, 0, ev.mPointerIdentifiers, 0, numPointers); 5199822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5205c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(o.mEventTimeNanoSamples, 0, ev.mEventTimeNanoSamples, 0, numSamples); 5219822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 5225c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(o.mDataSamples, 0, ev.mDataSamples, 0, 5235c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown numPointers * numSamples * NUM_SAMPLE_DATA); 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ev; 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 526cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5288df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * Create a new MotionEvent, copying from an existing one, but not including 5298df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn * any historical point information. 5308df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn */ 5318df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn static public MotionEvent obtainNoHistory(MotionEvent o) { 5325c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown MotionEvent ev = obtain(o.mNumPointers, 1); 5338df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mDeviceId = o.mDeviceId; 5348df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mEdgeFlags = o.mEdgeFlags; 5355c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mDownTimeNano = o.mDownTimeNano; 5368df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mAction = o.mAction; 5378df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mMetaState = o.mMetaState; 5385c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mXOffset = o.mXOffset; 5395c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mYOffset = o.mYOffset; 5408df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mXPrecision = o.mXPrecision; 5418df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mYPrecision = o.mYPrecision; 5428df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5435c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown int numPointers = ev.mNumPointers = o.mNumPointers; 5448df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn ev.mNumSamples = 1; 5458df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5465c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastDataSampleIndex = 0; 5475c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastEventTimeNanoSampleIndex = 0; 5488df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5495c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(o.mPointerIdentifiers, 0, ev.mPointerIdentifiers, 0, numPointers); 5508df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5515c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mEventTimeNanoSamples[0] = o.mEventTimeNanoSamples[o.mLastEventTimeNanoSampleIndex]; 5525c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 5535c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(o.mDataSamples, o.mLastDataSampleIndex, ev.mDataSamples, 0, 5545c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown numPointers * NUM_SAMPLE_DATA); 5558df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn return ev; 5568df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn } 5578df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn 5588df8b2b405c60cacf7a66c4e2ca078dd3d7ec7bdDianne Hackborn /** 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recycle the MotionEvent, to be re-used by a later caller. After calling 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this function you must not ever touch the event again. 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5625c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown public final void recycle() { 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Ensure recycle is only called once! 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TRACK_RECYCLED_LOCATION) { 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mRecycledLocation != null) { 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException(toString() + " recycled twice!", mRecycledLocation); 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecycledLocation = new RuntimeException("Last recycled here"); 569d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown //Log.w("MotionEvent", "Recycling event " + this, mRecycledLocation); 570d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown } else { 571d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown if (mRecycled) { 572d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown throw new RuntimeException(toString() + " recycled twice!"); 573d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown } 574d28f4be870ea8850a2d4a2fe51333643f16b9ab1Jeff Brown mRecycled = true; 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (gRecyclerLock) { 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gRecyclerUsed < MAX_RECYCLED) { 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gRecyclerUsed++; 5809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mNumSamples = 0; 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNext = gRecyclerTop; 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gRecyclerTop = this; 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5865c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 5875c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown /** 5885c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * Scales down the coordination of this event by the given scale. 5895c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * 5905c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * @hide 5915c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown */ 5925c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown public final void scale(float scale) { 5935c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXOffset *= scale; 5945c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYOffset *= scale; 5955c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXPrecision *= scale; 5965c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYPrecision *= scale; 5975c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 5985c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float[] history = mDataSamples; 5995c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int length = mNumPointers * mNumSamples * NUM_SAMPLE_DATA; 6005c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < length; i += NUM_SAMPLE_DATA) { 6015c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown history[i + SAMPLE_X] *= scale; 6025c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown history[i + SAMPLE_Y] *= scale; 6035c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown // no need to scale pressure 6045c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown history[i + SAMPLE_SIZE] *= scale; // TODO: square this? 6055c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 6065c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 607cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the kind of action being performed -- one of either 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or 611b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_CANCEL}. Consider using {@link #getActionMasked} 612b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * and {@link #getActionIndex} to retrieve the separate masked action 613b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * and pointer index. 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getAction() { 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAction; 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 620b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Return the masked action being performed, without pointer index 621b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * information. May be any of the actions: {@link #ACTION_DOWN}, 622b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_MOVE}, {@link #ACTION_UP}, {@link #ACTION_CANCEL}, 623b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #ACTION_POINTER_DOWN}, or {@link #ACTION_POINTER_UP}. 624b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * Use {@link #getActionIndex} to return the index associated with 625b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * pointer actions. 626b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 627b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public final int getActionMasked() { 628b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn return mAction & ACTION_MASK; 629b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn } 630b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 631b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 632b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * For {@link #ACTION_POINTER_DOWN} or {@link #ACTION_POINTER_UP} 633b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * as returned by {@link #getActionMasked}, this returns the associated 634b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * pointer index. The index may be used with {@link #getPointerId(int)}, 635b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * {@link #getX(int)}, {@link #getY(int)}, {@link #getPressure(int)}, 636b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * and {@link #getSize(int)} to get information about the pointer that has 637b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn * gone down or up. 638b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn */ 639b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn public final int getActionIndex() { 640b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn return (mAction & ACTION_POINTER_INDEX_MASK) >> ACTION_POINTER_INDEX_SHIFT; 641b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn } 642b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn 643b125dc5599468a09d82751cd76152071ae485afbDianne Hackborn /** 644cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * Returns the time (in ms) when the user originally pressed down to start 645cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * a stream of position events. 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getDownTime() { 6485c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDownTimeNano / MS_PER_NS; 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the time (in ms) when this specific event was generated. 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getEventTime() { 6555c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mEventTimeNanoSamples[mLastEventTimeNanoSampleIndex] / MS_PER_NS; 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 65953071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * Returns the time (in ns) when this specific event was generated. 66053071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * The value is in nanosecond precision but it may not have nanosecond accuracy. 66153071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * 66253071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan * @hide 66353071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan */ 66453071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan public final long getEventTimeNano() { 6655c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mEventTimeNanoSamples[mLastEventTimeNanoSampleIndex]; 66653071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan } 66753071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan 66853071d6d159f6dfd6fe0328a39bcf967ef308a64Michael Chan /** 6690dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getX(int)} for the first pointer index (may be an 6700dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getX() { 6735c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_X] + mXOffset; 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6770dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getY(int)} for the first pointer index (may be an 6780dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getY() { 6815c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_Y] + mYOffset; 6829822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 6839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 6849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 6850dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getPressure(int)} for the first pointer index (may be an 6860dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 6879822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 6889822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getPressure() { 6895c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_PRESSURE]; 6909822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 6919822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 6929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 6930dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getSize(int)} for the first pointer index (may be an 6940dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 6959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 6969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getSize() { 6975c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_SIZE]; 6989822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 6999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 7009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 7010dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * The number of pointers of data contained in this event. Always 7020dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * >= 1. 7030dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn */ 7040dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final int getPointerCount() { 7050dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return mNumPointers; 7060dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7070dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 7080dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn /** 7090dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Return the pointer identifier associated with a particular pointer 7100dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * data index is this event. The identifier tells you the actual pointer 7110dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * number associated with the data, accounting for individual pointers 7120dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * going up and down since the start of the current gesture. 7130dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 7140dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 7150dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn */ 716d41ba666d12a24ee4624ea9a009151e6165e3775Dianne Hackborn public final int getPointerId(int pointerIndex) { 717d41ba666d12a24ee4624ea9a009151e6165e3775Dianne Hackborn return mPointerIdentifiers[pointerIndex]; 7180dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7190dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 7200dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn /** 7210dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Given a pointer identifier, find the index of its data in the event. 7220dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * 7230dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerId The identifier of the pointer to be found. 7240dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @return Returns either the index of the pointer (for use with 7250dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getX(int) et al.), or -1 if there is no data available for 7260dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * that pointer identifier. 7270dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn */ 7280dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final int findPointerIndex(int pointerId) { 7290dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn int i = mNumPointers; 7300dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn while (i > 0) { 7310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn i--; 7320dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (mPointerIdentifiers[i] == pointerId) { 7330dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return i; 7340dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7350dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7360dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn return -1; 7370dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 7380dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 7390dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn /** 7400dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns the X coordinate of this event for the given pointer 7410dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 7420dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 7439822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Whole numbers are pixels; the 7449822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * value may have a fraction for input devices that are sub-pixel precise. 7450dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 7460dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 7479822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 7480dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getX(int pointerIndex) { 7495c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex 7505c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_X] + mXOffset; 7519822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 7529822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 7539822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 7540dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns the Y coordinate of this event for the given pointer 7550dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 7560dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 7579822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Whole numbers are pixels; the 7589822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * value may have a fraction for input devices that are sub-pixel precise. 7590dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 7600dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 7619822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 7620dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getY(int pointerIndex) { 7635c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex 7645c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_Y] + mYOffset; 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7680dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns the current pressure of this event for the given pointer 7690dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 7700dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 7719822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * The pressure generally 772cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * ranges from 0 (no pressure at all) to 1 (normal pressure), however 773cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * values higher than 1 may be generated depending on the calibration of 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the input device. 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. 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7780dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getPressure(int pointerIndex) { 7795c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex 7805c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_PRESSURE]; 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7840dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a scaled value of the approximate size for the given pointer 7850dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * <em>index</em> (use {@link #getPointerId(int)} to find the pointer 7860dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * identifier for this index). 7870dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * This represents some approximation of the area of the screen being 7880dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * pressed; the actual value in pixels corresponding to the 7899822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * touch is normalized with the device specific range of values 790cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * and scaled to a value between 0 and 1. The value of size can be used to 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * determine fat touch events. 7920dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 7930dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7950dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getSize(int pointerIndex) { 7965c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex 7975c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown + pointerIndex * NUM_SAMPLE_DATA + SAMPLE_SIZE]; 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the state of any meta / modifier keys that were in effect when 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event was generated. This is the same values as those 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned by {@link KeyEvent#getMetaState() KeyEvent.getMetaState}. 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return an integer in which each bit set to 1 represents a pressed 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * meta key 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see KeyEvent#getMetaState() 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getMetaState() { 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMetaState; 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the original raw X coordinate of this event. For touch 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events on the screen, this is the original location of the event 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the screen, before it had been adjusted for the containing window 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and views. 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getRawX() { 8215c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_X]; 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the original raw Y coordinate of this event. For touch 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * events on the screen, this is the original location of the event 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the screen, before it had been adjusted for the containing window 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and views. 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getRawY() { 8315c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[mLastDataSampleIndex + SAMPLE_Y]; 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the precision of the X coordinates being reported. You can 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * multiple this number with {@link #getX} to find the actual hardware 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value of the X coordinate. 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the precision of X coordinates being reported. 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getXPrecision() { 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mXPrecision; 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 843cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the precision of the Y coordinates being reported. You can 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * multiple this number with {@link #getY} to find the actual hardware 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value of the Y coordinate. 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the precision of Y coordinates being reported. 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float getYPrecision() { 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mYPrecision; 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 853cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of historical points in this event. These are 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * movements that have occurred between this event and the previous event. 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This only applies to ACTION_MOVE events -- all other actions will have 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a size of 0. 859cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the number of historical points in the event. 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getHistorySize() { 8635c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mLastEventTimeNanoSampleIndex; 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 865cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the time that a historical movement occurred between this event 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the previous event. Only applies to ACTION_MOVE events. 869cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 872cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getEventTime 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final long getHistoricalEventTime(int pos) { 8775c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mEventTimeNanoSamples[pos] / MS_PER_NS; 8789822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 8799822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 8809822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 8810dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalX(int)} for the first pointer index (may be an 8820dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 8839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 8849822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalX(int pos) { 8855c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_X] + mXOffset; 8869822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 8879822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 8889822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 8890dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalY(int)} for the first pointer index (may be an 8900dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 8919822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 8929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalY(int pos) { 8935c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_Y] + mYOffset; 8949822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 8959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 8969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 8970dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalPressure(int)} for the first pointer index (may be an 8980dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 8999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 9009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalPressure(int pos) { 9015c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_PRESSURE]; 9029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 9039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 9049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 9050dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * {@link #getHistoricalSize(int)} for the first pointer index (may be an 9060dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * arbitrary pointer identifier). 9079822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 9089822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final float getHistoricalSize(int pos) { 9095c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[pos * mNumPointers * NUM_SAMPLE_DATA + SAMPLE_SIZE]; 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 911cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9130dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical X coordinate, as per {@link #getX(int)}, that 9140dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * occurred between this event and the previous event for the given pointer. 9150dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Only applies to ACTION_MOVE events. 916cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9170dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 9180dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 921cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getX 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9250dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalX(int pointerIndex, int pos) { 9265c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 9275c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_X] + mXOffset; 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical Y coordinate, as per {@link #getY(int)}, that 9320dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * occurred between this event and the previous event for the given pointer. 9330dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Only applies to ACTION_MOVE events. 934cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9350dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 9360dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 939cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getY 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9430dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalY(int pointerIndex, int pos) { 9445c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 9455c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_Y] + mYOffset; 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 947cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9490dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical pressure coordinate, as per {@link #getPressure(int)}, 9500dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * that occurred between this event and the previous event for the given 9510dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * pointer. Only applies to ACTION_MOVE events. 952cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9530dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 9540dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 9570dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getPressure 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9610dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalPressure(int pointerIndex, int pos) { 9625c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 9635c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_PRESSURE]; 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 965cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9670dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Returns a historical size coordinate, as per {@link #getSize(int)}, that 9680dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * occurred between this event and the previous event for the given pointer. 9690dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * Only applies to ACTION_MOVE events. 970cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9710dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 9720dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * (the first pointer that is down) to {@link #getPointerCount()}-1. 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pos Which historical value to return; must be less than 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getHistorySize} 9750dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn * 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getHistorySize 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getSize 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9790dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn public final float getHistoricalSize(int pointerIndex, int pos) { 9805c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown return mDataSamples[(pos * mNumPointers + pointerIndex) 9815c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown * NUM_SAMPLE_DATA + SAMPLE_SIZE]; 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 983cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the id for the device that this event came from. An id of 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * zero indicates that the event didn't come from a physical device; other 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * numbers are arbitrary and you shouldn't depend on the values. 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getDeviceId() { 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDeviceId; 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 992cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 99446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * Returns a bitfield indicating which edges, if any, were touched by this 995cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * MotionEvent. For touch events, clients can use this to determine if the 996cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * user's finger was touching the edge of the display. 997cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_LEFT 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_TOP 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_RIGHT 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #EDGE_BOTTOM 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getEdgeFlags() { 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mEdgeFlags; 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1006cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the bitfield indicating which edges, if any, where touched by this 1010cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * MotionEvent. 1011cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getEdgeFlags() 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setEdgeFlags(int flags) { 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEdgeFlags = flags; 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets this event's action. 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setAction(int action) { 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAction = action; 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Adjust this event's location. 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param deltaX Amount to add to the current X coordinate of the event. 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param deltaY Amount to add to the current Y coordinate of the event. 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void offsetLocation(float deltaX, float deltaY) { 10315c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXOffset += deltaX; 10325c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYOffset += deltaY; 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1034cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set this event's location. Applies {@link #offsetLocation} with a 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * delta from the current location to the given new location. 1038cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x New absolute X location. 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y New absolute Y location. 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setLocation(float x, float y) { 10435c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mXOffset = x - mDataSamples[mLastDataSampleIndex + SAMPLE_X]; 10445c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mYOffset = y - mDataSamples[mLastDataSampleIndex + SAMPLE_Y]; 10455c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 10465c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 10475c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown private final void incrementNumSamplesAndReserveStorage(int dataSampleStride) { 10485c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown if (mNumSamples == mEventTimeNanoSamples.length) { 10495c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown long[] newEventTimeNanoSamples = new long[mNumSamples + BASE_AVAIL_SAMPLES]; 10505c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(mEventTimeNanoSamples, 0, newEventTimeNanoSamples, 0, mNumSamples); 10515c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mEventTimeNanoSamples = newEventTimeNanoSamples; 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10535c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 10545c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown int nextDataSampleIndex = mLastDataSampleIndex + dataSampleStride; 10555c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown if (nextDataSampleIndex + dataSampleStride > mDataSamples.length) { 10565c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float[] newDataSamples = new float[nextDataSampleIndex 10575c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown + BASE_AVAIL_SAMPLES * dataSampleStride]; 10585c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(mDataSamples, 0, newDataSamples, 0, nextDataSampleIndex); 10595c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mDataSamples = newDataSamples; 10605c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 10615c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 10625c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mLastEventTimeNanoSampleIndex = mNumSamples; 10635c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mLastDataSampleIndex = nextDataSampleIndex; 10645c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mNumSamples += 1; 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1066cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add a new movement to the batch of movements in this event. The event's 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current location, position and size is updated to the new values. In 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the future, the current values in the event will be added to a list of 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * historic values. 1072cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy * 10739822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param eventTime The time stamp for this data. 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The new X position. 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The new Y position. 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pressure The new pressure. 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param size The new size. 10789822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param metaState Meta key state. 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void addBatch(long eventTime, float x, float y, 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float pressure, float size, int metaState) { 10825c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown incrementNumSamplesAndReserveStorage(NUM_SAMPLE_DATA); 10839822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 10845c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mEventTimeNanoSamples[mLastEventTimeNanoSampleIndex] = eventTime * MS_PER_NS; 10859822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 10865c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float[] dataSamples = mDataSamples; 10875c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[mLastDataSampleIndex + SAMPLE_X] = x - mXOffset; 10885c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[mLastDataSampleIndex + SAMPLE_Y] = y - mYOffset; 10895c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[mLastDataSampleIndex + SAMPLE_PRESSURE] = pressure; 10905c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[mLastDataSampleIndex + SAMPLE_SIZE] = size; 10919822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 10929822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn mMetaState |= metaState; 10939822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn } 1094cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 10959822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn /** 10969822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * Add a new movement to the batch of movements in this event. The 10979822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * input data must contain (NUM_SAMPLE_DATA * {@link #getPointerCount()}) 10989822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * samples of data. 10999822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * 11009822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param eventTime The time stamp for this data. 11019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param inData The actual data. 11029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @param metaState Meta key state. 11039822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * 11049822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn * @hide 11059822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn */ 11069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn public final void addBatch(long eventTime, float[] inData, int metaState) { 11075c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int numPointers = mNumPointers; 11085c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int dataSampleStride = numPointers * NUM_SAMPLE_DATA; 11095c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown incrementNumSamplesAndReserveStorage(dataSampleStride); 11109822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 11115c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown mEventTimeNanoSamples[mLastEventTimeNanoSampleIndex] = eventTime * MS_PER_NS; 11129822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 11135c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown float[] dataSamples = mDataSamples; 11145c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown System.arraycopy(inData, 0, dataSamples, mLastDataSampleIndex, dataSampleStride); 11155c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 11165c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown if (mXOffset != 0 || mYOffset != 0) { 11175c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown int index = mLastEventTimeNanoSampleIndex; 11185c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < numPointers; i++) { 11195c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[index + SAMPLE_X] -= mXOffset; 11205c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[index + SAMPLE_Y] -= mYOffset; 11215c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown index += NUM_SAMPLE_DATA; 11225c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 11235c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 11249822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMetaState |= metaState; 11260dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn 11270dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn if (DEBUG_POINTERS) { 11280dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn StringBuilder sb = new StringBuilder(128); 11290dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append("Add:"); 11305c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < mNumPointers; i++) { 11310dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(" #"); 11325c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown sb.append(getPointerId(i)); 11330dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append("("); 11345c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown sb.append(getX(i)); 11350dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(","); 11365c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown sb.append(getY(i)); 11370dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn sb.append(")"); 11380dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 11390dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn Log.v("MotionEvent", sb.toString()); 11400dd7cb4b4ef86eb7d4e837b1948501da66adeebeDianne Hackborn } 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1142cafdea61a85c8f5d0646cc9413a09346c637f43fRomain Guy 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "MotionEvent{" + Integer.toHexString(System.identityHashCode(this)) 11469822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn + " action=" + mAction + " x=" + getX() 11479822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn + " y=" + getY() + " pressure=" + getPressure() + " size=" + getSize() + "}"; 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<MotionEvent> CREATOR 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<MotionEvent>() { 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MotionEvent createFromParcel(Parcel in) { 11535c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int NP = in.readInt(); 11545c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int NS = in.readInt(); 11555c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int NI = NP * NS * NUM_SAMPLE_DATA; 11565c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 11575c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown MotionEvent ev = obtain(NP, NS); 11585c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mNumPointers = NP; 11595c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mNumSamples = NS; 11605c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 11615c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mDownTimeNano = in.readLong(); 11625c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mAction = in.readInt(); 11635c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mXOffset = in.readFloat(); 11645c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mYOffset = in.readFloat(); 11655c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mXPrecision = in.readFloat(); 11665c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mYPrecision = in.readFloat(); 11675c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mDeviceId = in.readInt(); 11685c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mEdgeFlags = in.readInt(); 11695c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mMetaState = in.readInt(); 11705c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 11715c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int[] pointerIdentifiers = ev.mPointerIdentifiers; 11725c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < NP; i++) { 11735c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown pointerIdentifiers[i] = in.readInt(); 11745c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 11755c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 11765c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final long[] eventTimeNanoSamples = ev.mEventTimeNanoSamples; 11775c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < NS; i++) { 11785c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown eventTimeNanoSamples[i] = in.readLong(); 11795c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 11805c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 11815c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final float[] dataSamples = ev.mDataSamples; 11825c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < NI; i++) { 11835c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown dataSamples[i] = in.readFloat(); 11845c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 11855c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 11865c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastEventTimeNanoSampleIndex = NS - 1; 11875c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown ev.mLastDataSampleIndex = (NS - 1) * NP * NUM_SAMPLE_DATA; 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ev; 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MotionEvent[] newArray(int size) { 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new MotionEvent[size]; 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel out, int flags) { 12019822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NP = mNumPointers; 12029822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn final int NS = mNumSamples; 12035c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int NI = NP * NS * NUM_SAMPLE_DATA; 12045c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 12055c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeInt(NP); 12069822d2b27330793ea4ba9c3316ef35f402f35fb4Dianne Hackborn out.writeInt(NS); 12075c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 12085c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeLong(mDownTimeNano); 12095c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeInt(mAction); 12105c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeFloat(mXOffset); 12115c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeFloat(mYOffset); 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeFloat(mXPrecision); 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeFloat(mYPrecision); 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mDeviceId); 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(mEdgeFlags); 12165c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeInt(mMetaState); 12175c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 12185c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final int[] pointerIdentifiers = mPointerIdentifiers; 12195c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < NP; i++) { 12205c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeInt(pointerIdentifiers[i]); 12215c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 12225c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown 12235c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final long[] eventTimeNanoSamples = mEventTimeNanoSamples; 12245c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < NS; i++) { 12255c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeLong(eventTimeNanoSamples[i]); 12265c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown } 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12285c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown final float[] dataSamples = mDataSamples; 12295c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown for (int i = 0; i < NI; i++) { 12305c225b1680e696ae8bbf505a1997d6f720672f74Jeff Brown out.writeFloat(dataSamples[i]); 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1234