1eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn/*
2eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project
3eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn *
4eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
5eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * you may not use this file except in compliance with the License.
6eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * You may obtain a copy of the License at
7eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn *
8eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
9eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn *
10eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
11eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
12eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * See the License for the specific language governing permissions and
14eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * limitations under the License.
15eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */
16eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
17eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackbornpackage android.support.v4.view;
18eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
194dbd11ef441f637f32edd585248da0c914622a38Yigit Boyarimport android.os.Build;
20eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackbornimport android.view.MotionEvent;
21eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
22eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn/**
230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link MotionEvent} introduced
240574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * after API level 4 in a backwards compatible fashion.
25eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */
26eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackbornpublic class MotionEventCompat {
27eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
28eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Interface for the full API.
29eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
30eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    interface MotionEventVersionImpl {
31eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public int findPointerIndex(MotionEvent event, int pointerId);
32eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public int getPointerId(MotionEvent event, int pointerIndex);
33eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getX(MotionEvent event, int pointerIndex);
34eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getY(MotionEvent event, int pointerIndex);
351ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell        public int getPointerCount(MotionEvent event);
364dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        public int getSource(MotionEvent event);
374dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        float getAxisValue(MotionEvent event, int axis);
384dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        float getAxisValue(MotionEvent event, int axis, int pointerIndex);
39eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
40eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
41eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
42eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Interface implementation that doesn't use anything about v4 APIs.
43eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
44eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static class BaseMotionEventVersionImpl implements MotionEventVersionImpl {
45eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
46eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public int findPointerIndex(MotionEvent event, int pointerId) {
474fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            if (pointerId == 0) {
484fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell                // id 0 == index 0 and vice versa.
494fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell                return 0;
504fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            }
51eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return -1;
52eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
53eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
54eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public int getPointerId(MotionEvent event, int pointerIndex) {
554fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            if (pointerIndex == 0) {
564fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell                // index 0 == id 0 and vice versa.
574fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell                return 0;
584fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            }
594fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            throw new IndexOutOfBoundsException("Pre-Eclair does not support multiple pointers");
60eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
61eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
62eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getX(MotionEvent event, int pointerIndex) {
634fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            if (pointerIndex == 0) {
644fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell                return event.getX();
654fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            }
664fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            throw new IndexOutOfBoundsException("Pre-Eclair does not support multiple pointers");
67eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
68eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
69eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getY(MotionEvent event, int pointerIndex) {
704fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            if (pointerIndex == 0) {
714fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell                return event.getY();
724fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            }
734fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell            throw new IndexOutOfBoundsException("Pre-Eclair does not support multiple pointers");
74eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
751ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell        @Override
761ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell        public int getPointerCount(MotionEvent event) {
771ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell            return 1;
781ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell        }
794dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
804dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        @Override
814dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        public int getSource(MotionEvent event) {
824dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar            return InputDeviceCompat.SOURCE_UNKNOWN;
834dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        }
844dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
854dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        @Override
864dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        public float getAxisValue(MotionEvent event, int axis) {
874dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar            return 0;
884dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        }
894dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
904dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        @Override
914dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        public float getAxisValue(MotionEvent event, int axis, int pointerIndex) {
924dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar            return 0;
934dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        }
94eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
95eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
96eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
974dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Interface implementation for devices with at least v5 APIs.
98eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
994dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    static class EclairMotionEventVersionImpl extends BaseMotionEventVersionImpl {
100eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
101eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public int findPointerIndex(MotionEvent event, int pointerId) {
102eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return MotionEventCompatEclair.findPointerIndex(event, pointerId);
103eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
104eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
105eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public int getPointerId(MotionEvent event, int pointerIndex) {
106eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return MotionEventCompatEclair.getPointerId(event, pointerIndex);
107eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
108eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
109eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getX(MotionEvent event, int pointerIndex) {
110eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return MotionEventCompatEclair.getX(event, pointerIndex);
111eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
112eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        @Override
113eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        public float getY(MotionEvent event, int pointerIndex) {
114eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            return MotionEventCompatEclair.getY(event, pointerIndex);
115eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
1161ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell        @Override
1171ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell        public int getPointerCount(MotionEvent event) {
1181ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell            return MotionEventCompatEclair.getPointerCount(event);
1191ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell        }
120eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
121eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
122eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
1234dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Interface implementation for devices with at least v8 APIs.
1244dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
1254dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    static class GingerbreadMotionEventVersionImpl extends EclairMotionEventVersionImpl {
1264dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        @Override
1274dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        public int getSource(MotionEvent event) {
1284dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar            return MotionEventCompatGingerbread.getSource(event);
1294dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        }
1304dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    }
1314dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
1324dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
1334dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Interface implementation for devices with at least v12 APIs.
1344dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
1354dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    static class HoneycombMr1MotionEventVersionImpl extends GingerbreadMotionEventVersionImpl {
1364dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
1374dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        @Override
1384dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        public float getAxisValue(MotionEvent event, int axis) {
1394dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar            return MotionEventCompatHoneycombMr1.getAxisValue(event, axis);
1404dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        }
1414dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
1424dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        @Override
1434dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        public float getAxisValue(MotionEvent event, int axis, int pointerIndex) {
1444dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar            return MotionEventCompatHoneycombMr1.getAxisValue(event, axis, pointerIndex);
1454dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        }
1464dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    }
1474dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
1484dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
149eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Select the correct implementation to use for the current platform.
150eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
151eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static final MotionEventVersionImpl IMPL;
152eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    static {
1534dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        if (Build.VERSION.SDK_INT >= 12) {
1544dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar            IMPL = new HoneycombMr1MotionEventVersionImpl();
1554dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        } else if (Build.VERSION.SDK_INT >= 9) {
1564dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar            IMPL = new GingerbreadMotionEventVersionImpl();
1574dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        } else if (Build.VERSION.SDK_INT >= 5) {
158eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            IMPL = new EclairMotionEventVersionImpl();
159eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        } else {
160eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn            IMPL = new BaseMotionEventVersionImpl();
161eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        }
162eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
163eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
164eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    // -------------------------------------------------------------------
165eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
166eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
167eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Synonym for {@link MotionEvent#ACTION_MASK}.
168eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
169eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static final int ACTION_MASK = 0xff;
170eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
171eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
172eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Synonym for {@link MotionEvent#ACTION_POINTER_DOWN}.
173eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
174eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static final int ACTION_POINTER_DOWN = 5;
175eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
176eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
177eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Synonym for {@link MotionEvent#ACTION_POINTER_UP}.
178eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
179eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static final int ACTION_POINTER_UP = 6;
180eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
181eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
182eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Synonym for {@link MotionEvent#ACTION_HOVER_MOVE}.
183eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
184eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static final int ACTION_HOVER_MOVE = 7;
185eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
186eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
187eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Synonym for {@link MotionEvent#ACTION_SCROLL}.
188eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
189eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static final int ACTION_SCROLL = 8;
190eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
191eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
192eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Synonym for {@link MotionEvent#ACTION_POINTER_INDEX_MASK}.
193eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
194eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static final int ACTION_POINTER_INDEX_MASK  = 0xff00;
195eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
196eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
197eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Synonym for {@link MotionEvent#ACTION_POINTER_INDEX_SHIFT}.
198eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
199eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static final int ACTION_POINTER_INDEX_SHIFT = 8;
200eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
201eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
2024dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#ACTION_HOVER_ENTER}.
203dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov     */
204dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov    public static final int ACTION_HOVER_ENTER = 9;
205dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov
206dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov    /**
2074dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#ACTION_HOVER_EXIT}.
208dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov     */
209dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov    public static final int ACTION_HOVER_EXIT = 10;
210dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov
211dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov    /**
2124dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_X}.
2134dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2144dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_X = 0;
2154dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2164dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2174dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_Y}.
2184dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2194dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_Y = 1;
2204dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2214dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2224dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_PRESSURE}.
2234dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2244dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_PRESSURE = 2;
2254dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2264dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2274dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_SIZE}.
2284dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2294dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_SIZE = 3;
2304dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2314dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2324dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_TOUCH_MAJOR}.
2334dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2344dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_TOUCH_MAJOR = 4;
2354dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2364dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2374dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_TOUCH_MINOR}.
2384dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2394dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_TOUCH_MINOR = 5;
2404dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2414dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2424dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_TOOL_MAJOR}.
2434dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2444dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_TOOL_MAJOR = 6;
2454dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2464dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2474dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_TOOL_MINOR}.
2484dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2494dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_TOOL_MINOR = 7;
2504dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2514dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2524dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_ORIENTATION}.
2534dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2544dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_ORIENTATION = 8;
2554dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2564dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2574dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_VSCROLL}.
2584dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2594dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_VSCROLL = 9;
2604dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2614dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2624dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_HSCROLL}.
2634dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2644dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_HSCROLL = 10;
2654dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2664dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2674dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_Z}.
2684dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2694dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_Z = 11;
2704dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2714dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2724dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_RX}.
2734dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2744dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_RX = 12;
2754dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2764dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2774dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_RY}.
2784dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2794dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_RY = 13;
2804dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2814dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2824dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_RZ}.
2834dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2844dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_RZ = 14;
2854dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2864dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2874dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_HAT_X}.
2884dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2894dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_HAT_X = 15;
2904dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2914dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2924dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_HAT_Y}.
2934dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2944dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_HAT_Y = 16;
2954dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
2964dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
2974dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_LTRIGGER}.
2984dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
2994dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_LTRIGGER = 17;
3004dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3014dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3024dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_RTRIGGER}.
3034dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3044dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_RTRIGGER = 18;
3054dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3064dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3074dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_THROTTLE}.
3084dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3094dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_THROTTLE = 19;
3104dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3114dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3124dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_RUDDER}.
3134dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3144dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_RUDDER = 20;
3154dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3164dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3174dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_WHEEL}.
3184dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3194dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_WHEEL = 21;
3204dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3214dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3224dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GAS}.
3234dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3244dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GAS = 22;
3254dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3264dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3274dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_BRAKE}.
3284dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3294dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_BRAKE = 23;
3304dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3314dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3324dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_DISTANCE}.
3334dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3344dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_DISTANCE = 24;
3354dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3364dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3374dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_TILT}.
3384dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3394dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_TILT = 25;
3404dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3414dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3424dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_1}.
3434dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3444dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_1 = 32;
3454dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3464dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3474dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_2}.
3484dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3494dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_2 = 33;
3504dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3514dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3524dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_3}.
3534dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3544dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_3 = 34;
3554dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3564dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3574dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_4}.
3584dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3594dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_4 = 35;
3604dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3614dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3624dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_5}.
3634dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3644dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_5 = 36;
3654dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3664dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3674dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_6}.
3684dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3694dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_6 = 37;
3704dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3714dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3724dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_7}.
3734dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3744dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_7 = 38;
3754dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3764dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3774dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_8}.
3784dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3794dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_8 = 39;
3804dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3814dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3824dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_9}.
3834dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3844dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_9 = 40;
3854dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3864dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3874dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_10}.
3884dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3894dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_10 = 41;
3904dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3914dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3924dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_11}.
3934dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3944dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_11 = 42;
3954dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
3964dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
3974dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_12}.
3984dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
3994dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_12 = 43;
4004dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
4014dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
4024dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_13}.
4034dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
4044dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_13 = 44;
4054dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
4064dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
4074dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_14}.
4084dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
4094dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_14 = 45;
4104dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
4114dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
4124dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_15}.
4134dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
4144dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_15 = 46;
4154dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
4164dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
4174dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Synonym for {@link MotionEvent#AXIS_GENERIC_16}.
4184dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
4194dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static final int AXIS_GENERIC_16 = 47;
4204dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
4214dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
422eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Call {@link MotionEvent#getAction}, returning only the {@link #ACTION_MASK}
423eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * portion.
424eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
425eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static int getActionMasked(MotionEvent event) {
426eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return event.getAction() & ACTION_MASK;
427eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
428eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
429eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
430eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Call {@link MotionEvent#getAction}, returning only the pointer index
431eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * portion
432eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
433eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static int getActionIndex(MotionEvent event) {
434eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return (event.getAction() & ACTION_POINTER_INDEX_MASK)
435eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn                >> ACTION_POINTER_INDEX_SHIFT;
436eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
437eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
438eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
439eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Call {@link MotionEvent#findPointerIndex(int)}.
4400574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If running on a pre-{@link android.os.Build.VERSION_CODES#ECLAIR} device,
441eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * does nothing and returns -1.
442eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
443eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static int findPointerIndex(MotionEvent event, int pointerId) {
444eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return IMPL.findPointerIndex(event, pointerId);
445eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
446eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
447eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
448eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Call {@link MotionEvent#getPointerId(int)}.
4490574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If running on a pre-{@link android.os.Build.VERSION_CODES#ECLAIR} device,
450eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * {@link IndexOutOfBoundsException} is thrown.
451eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
452eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static int getPointerId(MotionEvent event, int pointerIndex) {
453eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return IMPL.getPointerId(event, pointerIndex);
454eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
455eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
456eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
457eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Call {@link MotionEvent#getX(int)}.
4580574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If running on a pre-{@link android.os.Build.VERSION_CODES#ECLAIR} device,
459eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * {@link IndexOutOfBoundsException} is thrown.
460eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
461eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static float getX(MotionEvent event, int pointerIndex) {
462eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return IMPL.getX(event, pointerIndex);
463eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
464eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn
465eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    /**
466eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * Call {@link MotionEvent#getY(int)}.
4670574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If running on a pre-{@link android.os.Build.VERSION_CODES#ECLAIR} device,
468eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     * {@link IndexOutOfBoundsException} is thrown.
469eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn     */
470eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    public static float getY(MotionEvent event, int pointerIndex) {
471eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn        return IMPL.getY(event, pointerIndex);
472eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn    }
4731ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell
4741ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell    /**
4751ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell     * The number of pointers of data contained in this event.  Always
4761ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell     * >= 1.
4771ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell     */
4781ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell    public static int getPointerCount(MotionEvent event) {
4791ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell        return IMPL.getPointerCount(event);
4801ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell    }
4814dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
4824dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
4834dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Gets the source of the event.
4844dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     *
4854dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * @return The event source or {@link InputDeviceCompat#SOURCE_UNKNOWN} if unknown.
4864dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
4874dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static int getSource(MotionEvent event) {
4884dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        return IMPL.getSource(event);
4894dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    }
4904dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
4914dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
4924dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Get axis value for the first pointer index (may be an
4934dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * arbitrary pointer identifier).
4944dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     *
4954dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * @param axis The axis identifier for the axis value to retrieve.
4964dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     *
4974dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * @see #AXIS_X
4984dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * @see #AXIS_Y
4994dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
5004dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static float getAxisValue(MotionEvent event, int axis) {
5014dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        return IMPL.getAxisValue(event, axis);
5024dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    }
5034dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar
5044dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    /**
5054dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * Returns the value of the requested axis for the given pointer <em>index</em>
5064dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * (use {@link #getPointerId(MotionEvent, int)} to find the pointer identifier for this index).
5074dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     *
5084dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * @param axis The axis identifier for the axis value to retrieve.
5094dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * @param pointerIndex Raw index of pointer to retrieve.  Value may be from 0
5104dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * (the first pointer that is down) to {@link #getPointerCount(MotionEvent)}-1.
5114dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * @return The value of the axis, or 0 if the axis is not available.
5124dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     *
5134dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * @see #AXIS_X
5144dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     * @see #AXIS_Y
5154dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar     */
5164dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    public static float getAxisValue(MotionEvent event, int axis, int pointerIndex) {
5174dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar        return IMPL.getAxisValue(event, axis, pointerIndex);
5184dbd11ef441f637f32edd585248da0c914622a38Yigit Boyar    }
519eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn}
520