From 67ca45f793e3adba2aac6661dafe102531aa8b41 Mon Sep 17 00:00:00 2001 From: Aniket Date: Fri, 28 Aug 2015 15:28:33 +0800 Subject: [PATCH 1/4] Fix for issue 208 and 219 --- .../io/appium/java_client/AppiumDriver.java | 9 +++-- .../io/appium/java_client/MobileCommand.java | 4 +- .../android/AndroidDeviceActionShortcuts.java | 24 +++++++++++- .../java_client/android/AndroidDriver.java | 38 ++++++++++++++++--- .../android/AndroidDriverTest.java | 13 +++++-- .../android/AndroidGestureTest.java | 2 +- 6 files changed, 74 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 76c565fad..25cdb3cee 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -28,7 +28,8 @@ import static io.appium.java_client.MobileCommand.INSTALL_APP; import static io.appium.java_client.MobileCommand.IS_APP_INSTALLED; import static io.appium.java_client.MobileCommand.IS_LOCKED; -import static io.appium.java_client.MobileCommand.KEY_EVENT; +import static io.appium.java_client.MobileCommand.PRESS_KEY_CODE; +import static io.appium.java_client.MobileCommand.LONG_PRESS_KEY_CODE; import static io.appium.java_client.MobileCommand.LAUNCH_APP; import static io.appium.java_client.MobileCommand.LOCK; import static io.appium.java_client.MobileCommand.OPEN_NOTIFICATIONS; @@ -210,8 +211,10 @@ public AppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) { builder.put(RESET, postC("/session/:sessionId/appium/app/reset")) .put(GET_STRINGS, postC("/session/:sessionId/appium/app/strings")) - .put(KEY_EVENT, - postC("/session/:sessionId/appium/device/keyevent")) + .put(PRESS_KEY_CODE, + postC("/session/:sessionId/appium/device/press_keycode")) + .put(LONG_PRESS_KEY_CODE, + postC("/session/:sessionId?/appium/device/long_press_keycode")) .put(CURRENT_ACTIVITY, getC("/session/:sessionId/appium/device/current_activity")) .put(SET_VALUE, diff --git a/src/main/java/io/appium/java_client/MobileCommand.java b/src/main/java/io/appium/java_client/MobileCommand.java index 0083a3317..e0482d46d 100644 --- a/src/main/java/io/appium/java_client/MobileCommand.java +++ b/src/main/java/io/appium/java_client/MobileCommand.java @@ -26,7 +26,8 @@ public interface MobileCommand { String RESET = "reset"; String GET_STRINGS = "getStrings"; - String KEY_EVENT = "keyEvent"; + String PRESS_KEY_CODE = "pressKeyCode"; + String LONG_PRESS_KEY_CODE = "longPressKeyCode"; String CURRENT_ACTIVITY = "currentActivity"; String SET_VALUE = "setValue"; String PULL_FILE = "pullFile"; @@ -53,4 +54,5 @@ public interface MobileCommand { String SET_SETTINGS = "setSettings"; String START_ACTIVITY = "startActivity"; String TOGGLE_LOCATION_SERVICES = "toggleLocationServices"; + } diff --git a/src/main/java/io/appium/java_client/android/AndroidDeviceActionShortcuts.java b/src/main/java/io/appium/java_client/android/AndroidDeviceActionShortcuts.java index 2283e82e4..c1bebc5f6 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDeviceActionShortcuts.java +++ b/src/main/java/io/appium/java_client/android/AndroidDeviceActionShortcuts.java @@ -10,7 +10,7 @@ public interface AndroidDeviceActionShortcuts extends DeviceActionShortcuts { * @param key * code for the key pressed on the device */ - public void sendKeyEvent(int key); + public void pressKeyCode(int key); /** * Send a key event along with an Android metastate to an Android device @@ -22,5 +22,25 @@ public interface AndroidDeviceActionShortcuts extends DeviceActionShortcuts { * @see AndroidKeyCode * @see AndroidKeyMetastate */ - public void sendKeyEvent(int key, Integer metastate); + public void pressKeyCode(int key, Integer metastate); + + /** + * Send a long key event to the device + * + * @param key + * code for the key pressed on the device + */ + public void longPressKeyCode(int key); + + /** + * Send a long key event along with an Android metastate to an Android device + * Metastates are things like *shift* to get uppercase characters + * + * @param key code for the key pressed on the Android device + * @param metastate metastate for the keypress + * + * @see AndroidKeyCode + * @see AndroidKeyMetastate + */ + public void longPressKeyCode(int key, Integer metastate); } diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index d05c971d4..999c8d2c9 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -86,8 +86,8 @@ static String UiScrollable(String uiSelector) { * code for the key pressed on the device */ @Override - public void sendKeyEvent(int key) { - execute(KEY_EVENT, getCommandImmutableMap(KEY_CODE, key)); + public void pressKeyCode(int key) { + execute(PRESS_KEY_CODE, getCommandImmutableMap(KEY_CODE, key)); } /** @@ -98,13 +98,41 @@ public void sendKeyEvent(int key) { * * @see AndroidKeyCode * @see AndroidKeyMetastate - * @see AndroidDeviceActionShortcuts#sendKeyEvent(int, Integer) + * @see AndroidDeviceActionShortcuts#pressKeyCode(int, Integer) */ @Override - public void sendKeyEvent(int key, Integer metastate) { + public void pressKeyCode(int key, Integer metastate) { String[] parameters = new String[] { KEY_CODE, METASTATE_PARAM }; Object[] values = new Object[] { key, metastate }; - execute(KEY_EVENT, getCommandImmutableMap(parameters, values)); + execute(PRESS_KEY_CODE, getCommandImmutableMap(parameters, values)); + } + + /** + * Send a long key event to the device + * + * @param key + * code for the long key pressed on the device + */ + @Override + public void longPressKeyCode(int key) { + execute(PRESS_KEY_CODE, getCommandImmutableMap(KEY_CODE, key)); + } + + /** + * @param key + * code for the long key pressed on the Android device + * @param metastate + * metastate for the long key press + * + * @see AndroidKeyCode + * @see AndroidKeyMetastate + * @see AndroidDeviceActionShortcuts#pressKeyCode(int, Integer) + */ + @Override + public void longPressKeyCode(int key, Integer metastate) { + String[] parameters = new String[] { KEY_CODE, METASTATE_PARAM }; + Object[] values = new Object[] { key, metastate }; + execute(PRESS_KEY_CODE, getCommandImmutableMap(parameters, values)); } /** diff --git a/src/test/java/io/appium/java_client/android/AndroidDriverTest.java b/src/test/java/io/appium/java_client/android/AndroidDriverTest.java index 9419a0698..8b6f95f4d 100644 --- a/src/test/java/io/appium/java_client/android/AndroidDriverTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidDriverTest.java @@ -69,13 +69,18 @@ public void getStringsWithLanguageTest() { } @Test - public void keyEventTest() { - driver.sendKeyEvent(AndroidKeyCode.HOME); + public void pressKeyCodeTest() { + driver.pressKeyCode(AndroidKeyCode.HOME); } @Test - public void keyEventWithMetastateTest() { - driver.sendKeyEvent(AndroidKeyCode.SPACE, AndroidKeyMetastate.META_SHIFT_ON); + public void pressKeyCodeWithMetastateTest() { + driver.pressKeyCode(AndroidKeyCode.SPACE, AndroidKeyMetastate.META_SHIFT_ON); + } + + @Test + public void longPressKeyCodeTest() { + driver.longPressKeyCode(AndroidKeyCode.HOME); } @Test diff --git a/src/test/java/io/appium/java_client/android/AndroidGestureTest.java b/src/test/java/io/appium/java_client/android/AndroidGestureTest.java index bc330654b..b5c8140c8 100644 --- a/src/test/java/io/appium/java_client/android/AndroidGestureTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidGestureTest.java @@ -117,7 +117,7 @@ public void elementGestureTest(){ e2.swipe(SwipeElementDirection.LEFT, 10, 20, 1000); System.out.println("LEFT Right border - 10 Left border + 20"); - driver.sendKeyEvent(AndroidKeyCode.BACK); + driver.pressKeyCode(AndroidKeyCode.BACK); e2 = driver.findElementByClassName("android.widget.TextView"); e2.swipe(SwipeElementDirection.DOWN,1000); System.out.println("DOWN"); From 361e9eb4855808a1b463b575dc63abfd32e56631 Mon Sep 17 00:00:00 2001 From: Aniket Date: Sat, 12 Sep 2015 11:25:41 +0800 Subject: [PATCH 2/4] Updating indentations --- .../io/appium/java_client/AppiumDriver.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 76370d451..ca875e69b 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -202,11 +202,11 @@ private AppiumDriver(CommandExecutor executor, Capabilities capabilities){ super.setErrorHandler(errorHandler); } - public AppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) { - this(new AppiumCommandExecutor( - getMobileCommands(), remoteAddress), desiredCapabilities); - this.remoteAddress = remoteAddress; - } + public AppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) { + this(new AppiumCommandExecutor( + getMobileCommands(), remoteAddress), desiredCapabilities); + this.remoteAddress = remoteAddress; + } public AppiumDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) { this(new AppiumCommandExecutor( @@ -670,10 +670,10 @@ private static ImmutableMap getMobileCommands(){ builder.put(RESET, postC("/session/:sessionId/appium/app/reset")) .put(GET_STRINGS, postC("/session/:sessionId/appium/app/strings")) - .put(PRESS_KEY_CODE, - postC("/session/:sessionId/appium/device/press_keycode")) - .put(LONG_PRESS_KEY_CODE, - postC("/session/:sessionId?/appium/device/long_press_keycode")) + .put(PRESS_KEY_CODE, + postC("/session/:sessionId/appium/device/press_keycode")) + .put(LONG_PRESS_KEY_CODE, + postC("/session/:sessionId?/appium/device/long_press_keycode")) .put(CURRENT_ACTIVITY, getC("/session/:sessionId/appium/device/current_activity")) .put(SET_VALUE, From 4b4549ae45eaea6454f4b92f9aaf27bae210fd2d Mon Sep 17 00:00:00 2001 From: Aniket Date: Sat, 12 Sep 2015 11:31:00 +0800 Subject: [PATCH 3/4] Fixing indentation --- src/main/java/io/appium/java_client/AppiumDriver.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index ca875e69b..9af3367a4 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -670,10 +670,10 @@ private static ImmutableMap getMobileCommands(){ builder.put(RESET, postC("/session/:sessionId/appium/app/reset")) .put(GET_STRINGS, postC("/session/:sessionId/appium/app/strings")) - .put(PRESS_KEY_CODE, - postC("/session/:sessionId/appium/device/press_keycode")) - .put(LONG_PRESS_KEY_CODE, - postC("/session/:sessionId?/appium/device/long_press_keycode")) + .put(PRESS_KEY_CODE, + postC("/session/:sessionId/appium/device/press_keycode")) + .put(LONG_PRESS_KEY_CODE, + postC("/session/:sessionId?/appium/device/long_press_keycode")) .put(CURRENT_ACTIVITY, getC("/session/:sessionId/appium/device/current_activity")) .put(SET_VALUE, From 9a2fe9c61484574ac97edb966078a2d36007a42e Mon Sep 17 00:00:00 2001 From: Aniket Date: Sat, 12 Sep 2015 11:39:06 +0800 Subject: [PATCH 4/4] Fixing indentation --- src/main/java/io/appium/java_client/AppiumDriver.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 9af3367a4..cbd6563c5 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -202,11 +202,11 @@ private AppiumDriver(CommandExecutor executor, Capabilities capabilities){ super.setErrorHandler(errorHandler); } - public AppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) { - this(new AppiumCommandExecutor( - getMobileCommands(), remoteAddress), desiredCapabilities); - this.remoteAddress = remoteAddress; - } + public AppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) { + this(new AppiumCommandExecutor( + getMobileCommands(), remoteAddress), desiredCapabilities); + this.remoteAddress = remoteAddress; + } public AppiumDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) { this(new AppiumCommandExecutor(