package com.simplbug.sikulimonkey;
import java.awt.AWTException;
import java.awt.Rectangle;
import org.python.core.PyFloat;
import org.python.core.PyObject;
import org.python.core.PyString;
import org.sikuli.script.Debug;
import org.sikuli.script.FindFailed;
import org.sikuli.script.IRobot;
import org.sikuli.script.IScreen;
import org.sikuli.script.Location;
import org.sikuli.script.Region;
import org.sikuli.script.ScreenImage;
import com.android.monkeyrunner.MonkeyDevice;
import com.android.monkeyrunner.MonkeyRunner;
public class AndroidScreen extends AndroidRegion implements IScreen {
public AndroidScreen(String serialNumber) throws AWTException {
MonkeyDevice device = MonkeyRunner.waitForConnection(new PyObject[] { new PyFloat(15), new PyString(serialNumber) }, null);
try { // waitForConnection() never returns null, even the connection cannot be created.
String model = device.getProperty(new PyObject[] {new PyString("build.model")}, null);
Debug.history("Successfully connect to a device. MODEL: " + model);
} catch (Throwable e) {
throw new RuntimeException("Failed to connect to a device (within timeout).", e);
}
_robot = new AndroidRobot(device);
// Region's default constructor doesn't use this screen as the default one.
Rectangle bounds = getBounds();
super.init(bounds.x, bounds.y, bounds.width, bounds.height, this);
}
@Override
public ScreenImage capture() {
return _robot.captureScreen(getBounds());
}
@Override
public ScreenImage capture(int x, int y, int width, int height) {
return _robot.captureScreen(new Rectangle(x, y, width, height));
}
@Override
public ScreenImage capture(Rectangle rect) {
return _robot.captureScreen(rect);
}
@Override
public ScreenImage capture(Region reg) {
return _robot.captureScreen(reg.getROI());
}
@Override
public Rectangle getBounds() {
return _robot.getBounds();
}
@Override
public IRobot getRobot() {
return _robot;
}
public <PSRML> int type(String text) throws FindFailed {
return _robot.type(text);
}
@Override
public Region newRegion(Rectangle rect) {
return super.newRegion(rect);
}
@Override
public void showClick(Location loc) {
throw new UnsupportedOperationException();
}
@Override
public void showDropTarget(Location loc) {
throw new UnsupportedOperationException();
}
@Override
public void showMove(Location loc) {
throw new UnsupportedOperationException();
}
@Override
public void showTarget(Location loc) {
throw new UnsupportedOperationException();
}
}