package org.sikuli.android; import org.sikuli.basics.Debug; import org.sikuli.script.*; import java.awt.*; import java.awt.image.BufferedImage; /** * Created by Törcsi on 2016. 06. 26. * Revised by RaiMan */ public class ADBRobot implements IRobot { private int mouse_X1 = -1; private int mouse_Y1 = -1; private int mouse_X2 = -1; private int mouse_Y2 = -1; private boolean mouseDown = false; private int autodelay = 0; private boolean waitForIdle = false; final static int MAX_DELAY = 60000; private ADBScreen screen; private ADBDevice device; public ADBRobot(ADBScreen screen, ADBDevice device) { this.screen = screen; this.device = device; } private void notSupported(String feature) { Debug.error("ADBRobot: %s: not supported yet", feature); } @Override public boolean isRemote() { return true; } @Override public IScreen getScreen() { return screen; } @Override public void cleanup() { notSupported("feature"); } //<editor-fold desc="key actions not supported yet"> @Override public void keyDown(String keys) { notSupported("keyDown"); } @Override public void keyUp(String keys) { notSupported("keyUp"); } @Override public void keyDown(int code) { notSupported("keyDown"); } @Override public void keyUp(int code) { notSupported("keyUp"); } @Override public void keyUp() { notSupported("keyUp"); } @Override public void pressModifiers(int modifiers) { if (modifiers != 0) { notSupported("pressModifiers"); } } @Override public void releaseModifiers(int modifiers) { if (modifiers != 0) { notSupported("releaseModifiers"); } } @Override public void typeChar(char character, KeyMode mode) { if (device == null) { return; } device.typeChar(character); } @Override public void typeKey(int key) { notSupported("typeKey"); } @Override public void typeStarts() { if (device == null) { return; } while (!device.typeStarts()) { RunTime.pause(1); } } @Override public void typeEnds() { if (device == null) { return; } device.typeEnds(); } //</editor-fold> @Override public void mouseMove(int x, int y) { if (!mouseDown) { mouse_X1 = x; mouse_Y1 = y; } else { mouse_X2 = x; mouse_Y2 = y; } } @Override public void mouseDown(int buttons) { clickStarts(); } @Override public int mouseUp(int buttons) { clickEnds(); return 0; } @Override public void mouseReset() { mouseDown = false; } @Override public void clickStarts() { mouseDown = true; mouse_X2 = mouse_X1; mouse_Y2 = mouse_Y1; } @Override public void clickEnds() { if (device == null) { return; } if (mouseDown) { mouseDown = false; if (mouse_X1 == mouse_X2 && mouse_Y1 == mouse_Y2) { device.tap(mouse_X1, mouse_Y1); } else { device.swipe(mouse_X1, mouse_Y1, mouse_X2, mouse_Y2); } } } //<editor-fold desc="mouse actions not supported yet"> @Override public void smoothMove(Location dest) { mouseMove(dest.x, dest.y); } @Override public void smoothMove(Location src, Location dest, long ms) { notSupported("smoothMove"); } @Override public void mouseWheel(int wheelAmt) { notSupported("mouseWheel"); } //</editor-fold> @Override public ScreenImage captureScreen(Rectangle screenRect) { if (device == null) { return null; } return device.captureScreen(screenRect); } @Override public Color getColorAt(int x, int y) { notSupported("getColorAt"); return null; } @Override public void waitForIdle() { try { new java.awt.Robot().waitForIdle(); } catch (AWTException e) { Debug.log(-1, "Error-could non instantiate robot: " + e); } } @Override public void delay(int ms) { if (ms < 0) { ms = 0; } if (ms > MAX_DELAY) { ms = MAX_DELAY; } try { Thread.sleep(ms); } catch (InterruptedException e) { Debug.log(-1, "Thread Interrupted: " + e); } } @Override public void setAutoDelay(int ms) { if (ms < 0) { ms = 0; } if (ms > MAX_DELAY) { ms = MAX_DELAY; } autodelay = ms; } }