ShadowMotionEvent.java revision 4ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage com.xtremelabs.robolectric.shadows;
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport android.view.MotionEvent;
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport com.xtremelabs.robolectric.Robolectric;
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport com.xtremelabs.robolectric.internal.Implementation;
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport com.xtremelabs.robolectric.internal.Implements;
7f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesimport com.xtremelabs.robolectric.internal.RealObject;
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
9f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughesimport java.lang.reflect.Constructor;
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Shadow for {@code MotionEvent} that uses reflection to create {@code MotionEvent} objects, which cannot otherwise
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be constructed.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project@SuppressWarnings({"UnusedDeclaration"})
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project@Implements(MotionEvent.class)
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ShadowMotionEvent {
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @RealObject private MotionEvent realObject;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private int action;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private float[] x = new float[2];
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private float[] y = new float[2];
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Implementation
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static MotionEvent obtain(long downTime, long eventTime, int action, float x, float y, int metaState) {
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Constructor<MotionEvent> constructor = MotionEvent.class.getDeclaredConstructor();
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            constructor.setAccessible(true);
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            MotionEvent motionEvent = constructor.newInstance();
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ShadowMotionEvent shadowMotionEvent = (ShadowMotionEvent) Robolectric.shadowOf_(motionEvent);
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            shadowMotionEvent.x[0] = x;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            shadowMotionEvent.y[0] = y;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            shadowMotionEvent.action = action;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return motionEvent;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new RuntimeException(e);
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Implementation
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getAction() {
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return action;
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Implementation
46f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    public final float getX() {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getX(0);
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Implementation
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final float getY() {
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getY(0);
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Implementation
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final float getX(int pointerIndex) {
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return x[pointerIndex];
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Implementation
61b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes    public final float getY(int pointerIndex) {
62b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes        return y[pointerIndex];
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public MotionEvent setPointer2(float x, float y) {
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.x[1] = x;
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.y[1] = y;
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return realObject;
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project