blob: c2c93bb5674610141619480d7e1541bba5ae81a2 [file] [log] [blame]
package com.android.testing.uiautomation;
import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.util.Log;
import android.view.IWindowManager;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.MotionEvent;
public class InteractionProvider {
private static final String LOGTAG = "InteractionProvider";
private IWindowManager mWm;
private long mEventThrottle = 10;
public InteractionProvider() {
mWm = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));
if (mWm == null) {
throw new RuntimeException("Unable to connect to WindowManager, "
+ "is the system running?");
}
}
public boolean tap(int x, int y) {
MotionEvent event = MotionEvent.obtain(
SystemClock.uptimeMillis(), SystemClock.uptimeMillis(),
MotionEvent.ACTION_DOWN, x, y, 0);
boolean ret = true;
try {
mWm.injectPointerEvent(event, false);
} catch (RemoteException e) {
Log.w(LOGTAG, "failed to inject DOWN event", e);
ret = false;
}
doEventThrottle();
event.setAction(MotionEvent.ACTION_UP);
try {
mWm.injectPointerEvent(event, false);
} catch (RemoteException e) {
Log.w(LOGTAG, "failed to inject UP event", e);
ret = false;
}
return ret;
}
public boolean sendText(String text) {
if (text == null) {
return false;
}
boolean ret = true;
KeyCharacterMap keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
KeyEvent[] events = keyCharacterMap.getEvents(text.toCharArray());
if (events != null) {
for (int i = 0; i < events.length; i++) {
ret &= sendKey(events[i]);
doEventThrottle();
}
}
return ret;
}
public boolean sendKey(KeyEvent event) {
boolean ret = true;
try {
mWm.injectKeyEvent(event, false);
} catch (RemoteException e) {
ret = false;
}
return ret;
}
public void setEventThrottle(long millis) {
mEventThrottle = millis;
}
private void doEventThrottle() {
try {
Thread.sleep(mEventThrottle);
} catch (InterruptedException e) {
}
}
}