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