aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Kralevich <nnk@google.com>2014-11-02 05:12:23 +0000
committerNick Kralevich <nnk@google.com>2014-11-02 05:12:23 +0000
commitddb7de5a83288bff8e682f08f4b4aa900e335965 (patch)
tree0c86cc441a33a803a3491062d850f75caf2d214d /src
parentb8c4f2e950ab8132196dd644d7cfc892f75a8441 (diff)
downloaddroiddriver-ddb7de5a83288bff8e682f08f4b4aa900e335965.tar.gz
Revert "fix setText and remove replaceText"
not all callers were updated. Master doesn't compile right now. This reverts commit b8c4f2e950ab8132196dd644d7cfc892f75a8441. Change-Id: I4e4ecad28af56e99f4429d2bf118620cef54e734
Diffstat (limited to 'src')
-rw-r--r--src/com/google/android/droiddriver/UiElement.java18
-rw-r--r--src/com/google/android/droiddriver/actions/EventUiElementActor.java5
-rw-r--r--src/com/google/android/droiddriver/actions/SingleKeyAction.java34
-rw-r--r--src/com/google/android/droiddriver/actions/UiElementActor.java7
-rw-r--r--src/com/google/android/droiddriver/actions/accessibility/AccessibilityUiElementActor.java6
-rw-r--r--src/com/google/android/droiddriver/base/BaseUiDevice.java6
-rw-r--r--src/com/google/android/droiddriver/base/BaseUiElement.java35
-rw-r--r--src/com/google/android/droiddriver/util/Events.java32
8 files changed, 56 insertions, 87 deletions
diff --git a/src/com/google/android/droiddriver/UiElement.java b/src/com/google/android/droiddriver/UiElement.java
index f53c22a..72804d8 100644
--- a/src/com/google/android/droiddriver/UiElement.java
+++ b/src/com/google/android/droiddriver/UiElement.java
@@ -145,22 +145,20 @@ public interface UiElement {
boolean perform(Action action);
/**
- * Sets the text of this element. The implementation may not work on all
- * UiElements if the underlying view is not EditText.
- * <p>
- * If IME is open after this call, you can call
- *
- * <pre>
- * perform(SingleKeyAction.BACK);
- * </pre>
- *
- * to close the IME.
+ * Sets the text of this element.
*
* @param text The text to enter.
*/
void setText(String text);
/**
+ * Replace the text of this element.
+ *
+ * @param text The text that be replaced with
+ */
+ void replaceText(String text);
+
+ /**
* Clicks this element. The click will be at the center of the visible
* element.
*/
diff --git a/src/com/google/android/droiddriver/actions/EventUiElementActor.java b/src/com/google/android/droiddriver/actions/EventUiElementActor.java
index a5414a9..1913e5d 100644
--- a/src/com/google/android/droiddriver/actions/EventUiElementActor.java
+++ b/src/com/google/android/droiddriver/actions/EventUiElementActor.java
@@ -27,6 +27,11 @@ public class EventUiElementActor implements UiElementActor {
public static final EventUiElementActor INSTANCE = new EventUiElementActor();
@Override
+ public void setText(UiElement uiElement, String text) {
+ uiElement.perform(new TextAction(text));
+ }
+
+ @Override
public void click(UiElement uiElement) {
uiElement.perform(ClickAction.SINGLE);
}
diff --git a/src/com/google/android/droiddriver/actions/SingleKeyAction.java b/src/com/google/android/droiddriver/actions/SingleKeyAction.java
index 3f5fe15..853840e 100644
--- a/src/com/google/android/droiddriver/actions/SingleKeyAction.java
+++ b/src/com/google/android/droiddriver/actions/SingleKeyAction.java
@@ -17,12 +17,12 @@
package com.google.android.droiddriver.actions;
import android.os.Build;
+import android.os.SystemClock;
import android.view.KeyEvent;
import com.google.android.droiddriver.UiElement;
import com.google.android.droiddriver.util.Events;
import com.google.android.droiddriver.util.Strings;
-import com.google.android.droiddriver.util.Strings.ToStringHelper;
/**
* An action to press a single key. While it is convenient for navigating the
@@ -39,42 +39,30 @@ public class SingleKeyAction extends KeyAction {
public static final SingleKeyAction SEARCH = new SingleKeyAction(KeyEvent.KEYCODE_SEARCH);
public static final SingleKeyAction BACK = new SingleKeyAction(KeyEvent.KEYCODE_BACK);
public static final SingleKeyAction DELETE = new SingleKeyAction(KeyEvent.KEYCODE_DEL);
- public static final SingleKeyAction CTRL_MOVE_HOME = new SingleKeyAction(
- KeyEvent.KEYCODE_MOVE_HOME, KeyEvent.META_CTRL_LEFT_ON);
- public static final SingleKeyAction CTRL_MOVE_END = new SingleKeyAction(
- KeyEvent.KEYCODE_MOVE_END, KeyEvent.META_CTRL_LEFT_ON);
private final int keyCode;
- private final int metaState;
/**
- * Defaults metaState to 0.
+ * Defaults timeoutMillis to 100.
*/
public SingleKeyAction(int keyCode) {
- this(keyCode, 0);
+ this(keyCode, 100L, false);
}
- /**
- * Defaults timeoutMillis to 100 and checkFocused to false.
- */
- public SingleKeyAction(int keyCode, int metaState) {
- this(keyCode, metaState, 100L, false);
- }
-
- public SingleKeyAction(int keyCode, int metaState, long timeoutMillis, boolean checkFocused) {
+ public SingleKeyAction(int keyCode, long timeoutMillis, boolean checkFocused) {
super(timeoutMillis, checkFocused);
this.keyCode = keyCode;
- this.metaState = metaState;
}
@Override
public boolean perform(InputInjector injector, UiElement element) {
maybeCheckFocused(element);
- final long downTime = Events.keyDown(injector, keyCode, metaState);
- Events.keyUp(injector, downTime, keyCode, metaState);
+ final long downTime = SystemClock.uptimeMillis();
+ KeyEvent downEvent = Events.newKeyEvent(downTime, KeyEvent.ACTION_DOWN, keyCode);
+ KeyEvent upEvent = Events.newKeyEvent(downTime, KeyEvent.ACTION_UP, keyCode);
- return true;
+ return injector.injectInputEvent(downEvent) && injector.injectInputEvent(upEvent);
}
@Override
@@ -82,10 +70,6 @@ public class SingleKeyAction extends KeyAction {
String keyCodeString =
Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1 ? String.valueOf(keyCode)
: KeyEvent.keyCodeToString(keyCode);
- ToStringHelper toStringHelper = Strings.toStringHelper(this);
- if (metaState != 0) {
- toStringHelper.add("metaState", metaState);
- }
- return toStringHelper.addValue(keyCodeString).toString();
+ return Strings.toStringHelper(this).addValue(keyCodeString).toString();
}
}
diff --git a/src/com/google/android/droiddriver/actions/UiElementActor.java b/src/com/google/android/droiddriver/actions/UiElementActor.java
index 80c97f4..abca286 100644
--- a/src/com/google/android/droiddriver/actions/UiElementActor.java
+++ b/src/com/google/android/droiddriver/actions/UiElementActor.java
@@ -24,6 +24,13 @@ import com.google.android.droiddriver.scroll.Direction.PhysicalDirection;
*/
public interface UiElementActor {
/**
+ * Sets the text of this element.
+ *
+ * @param text The text to enter.
+ */
+ void setText(UiElement uiElement, String text);
+
+ /**
* Clicks this element. The click will be at the center of the visible
* element.
*/
diff --git a/src/com/google/android/droiddriver/actions/accessibility/AccessibilityUiElementActor.java b/src/com/google/android/droiddriver/actions/accessibility/AccessibilityUiElementActor.java
index afb91f1..dec5979 100644
--- a/src/com/google/android/droiddriver/actions/accessibility/AccessibilityUiElementActor.java
+++ b/src/com/google/android/droiddriver/actions/accessibility/AccessibilityUiElementActor.java
@@ -17,6 +17,7 @@
package com.google.android.droiddriver.actions.accessibility;
import com.google.android.droiddriver.UiElement;
+import com.google.android.droiddriver.actions.TextAction;
import com.google.android.droiddriver.actions.UiElementActor;
import com.google.android.droiddriver.scroll.Direction.PhysicalDirection;
@@ -27,6 +28,11 @@ public class AccessibilityUiElementActor implements UiElementActor {
public static final AccessibilityUiElementActor INSTANCE = new AccessibilityUiElementActor();
@Override
+ public void setText(UiElement uiElement, String text) {
+ uiElement.perform(new TextAction(text));
+ }
+
+ @Override
public void click(UiElement uiElement) {
uiElement.perform(AccessibilityClickAction.SINGLE);
}
diff --git a/src/com/google/android/droiddriver/base/BaseUiDevice.java b/src/com/google/android/droiddriver/base/BaseUiDevice.java
index d7c5afa..a48e410 100644
--- a/src/com/google/android/droiddriver/base/BaseUiDevice.java
+++ b/src/com/google/android/droiddriver/base/BaseUiDevice.java
@@ -36,11 +36,11 @@ import java.io.BufferedOutputStream;
*/
public abstract class BaseUiDevice implements UiDevice {
// power off may not trigger new events
- private static final SingleKeyAction POWER_OFF = new SingleKeyAction(KeyEvent.KEYCODE_POWER,
- 0/* metaState */, 0/* timeoutMillis */, false);
+ private static final SingleKeyAction POWER_OFF = new SingleKeyAction(KeyEvent.KEYCODE_POWER, 0,
+ false);
// power on should always trigger new events
private static final SingleKeyAction POWER_ON = new SingleKeyAction(KeyEvent.KEYCODE_POWER,
- 0/* metaState */, 1000L/* timeoutMillis */, false);
+ 1000L, false);
@Override
public boolean isScreenOn() {
diff --git a/src/com/google/android/droiddriver/base/BaseUiElement.java b/src/com/google/android/droiddriver/base/BaseUiElement.java
index 2c996f4..ef4038f 100644
--- a/src/com/google/android/droiddriver/base/BaseUiElement.java
+++ b/src/com/google/android/droiddriver/base/BaseUiElement.java
@@ -17,21 +17,17 @@
package com.google.android.droiddriver.base;
import android.graphics.Rect;
-import android.view.KeyEvent;
import com.google.android.droiddriver.UiElement;
import com.google.android.droiddriver.actions.Action;
import com.google.android.droiddriver.actions.EventUiElementActor;
-import com.google.android.droiddriver.actions.InputInjector;
import com.google.android.droiddriver.actions.SingleKeyAction;
-import com.google.android.droiddriver.actions.TextAction;
import com.google.android.droiddriver.actions.UiElementActor;
import com.google.android.droiddriver.exceptions.DroidDriverException;
import com.google.android.droiddriver.finders.Attribute;
import com.google.android.droiddriver.finders.Predicate;
import com.google.android.droiddriver.finders.Predicates;
import com.google.android.droiddriver.scroll.Direction.PhysicalDirection;
-import com.google.android.droiddriver.util.Events;
import com.google.android.droiddriver.util.Logs;
import com.google.android.droiddriver.util.Strings;
import com.google.android.droiddriver.util.Strings.ToStringHelper;
@@ -212,29 +208,18 @@ public abstract class BaseUiElement<R, E extends BaseUiElement<R, E>> implements
@Override
public void setText(String text) {
- Logs.call(this, "setText", text);
- clearText();
- if (text == null || text.isEmpty()) {
- return;
- }
-
- perform(new TextAction(text));
+ uiElementActor.setText(this, text);
}
- private void clearText() {
- longClick(); // Gain focus; single click always activates IME.
- String text = getText();
- if (text == null || text.isEmpty()) {
- return;
- }
-
- InputInjector injector = getInjector();
- SingleKeyAction.CTRL_MOVE_HOME.perform(injector, this);
-
- final long shiftDownTime = Events.keyDown(injector, KeyEvent.KEYCODE_SHIFT_LEFT, 0);
- SingleKeyAction.CTRL_MOVE_END.perform(injector, this);
- Events.keyUp(injector, shiftDownTime, KeyEvent.KEYCODE_SHIFT_LEFT, 0);
- SingleKeyAction.DELETE.perform(injector, this);
+ @Override
+ public void replaceText(String text) {
+ if (this.getText() != null) {
+ int len = this.getText().length();
+ for (int i = 0; i < len; i++) {
+ this.perform(SingleKeyAction.DELETE);
+ }
+ }
+ this.setText(text);
}
@Override
diff --git a/src/com/google/android/droiddriver/util/Events.java b/src/com/google/android/droiddriver/util/Events.java
index a905851..cc43ec2 100644
--- a/src/com/google/android/droiddriver/util/Events.java
+++ b/src/com/google/android/droiddriver/util/Events.java
@@ -19,7 +19,6 @@ package com.google.android.droiddriver.util;
import android.os.SystemClock;
import android.util.Log;
import android.view.InputDevice;
-import android.view.InputEvent;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -33,7 +32,7 @@ public class Events {
/**
* @return a touch down event at the specified coordinates
*/
- private static MotionEvent newTouchDownEvent(int x, int y) {
+ public static MotionEvent newTouchDownEvent(int x, int y) {
long downTime = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 1);
event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
@@ -43,7 +42,7 @@ public class Events {
/**
* @return a touch up event at the specified coordinates
*/
- private static MotionEvent newTouchUpEvent(long downTime, int x, int y) {
+ public static MotionEvent newTouchUpEvent(long downTime, int x, int y) {
long eventTime = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, 1);
event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
@@ -53,16 +52,15 @@ public class Events {
/**
* @return a touch move event at the specified coordinates
*/
- private static MotionEvent newTouchMoveEvent(long downTime, int x, int y) {
+ public static MotionEvent newTouchMoveEvent(long downTime, int x, int y) {
long eventTime = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, x, y, 1);
event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
return event;
}
- private static KeyEvent newKeyEvent(long downTime, long eventTime, int action, int keyCode,
- int metaState) {
- KeyEvent event = new KeyEvent(downTime, eventTime, action, keyCode, 0 /* repeat */, metaState);
+ public static KeyEvent newKeyEvent(long downTime, int action, int keyCode) {
+ KeyEvent event = new KeyEvent(downTime, downTime, action, keyCode, 0 /* repeat */);
event.setSource(InputDevice.SOURCE_KEYBOARD);
return event;
}
@@ -73,20 +71,18 @@ public class Events {
*
* @throws ActionException if injection failed
*/
- private static void injectEvent(InputInjector injector, InputEvent event) {
+ public static void injectEvent(InputInjector injector, MotionEvent event) {
injectEvent(Log.DEBUG, injector, event);
}
- private static void injectEvent(int priority, InputInjector injector, InputEvent event) {
+ public static void injectEvent(int priority, InputInjector injector, MotionEvent event) {
Logs.call(priority, injector, "injectInputEvent", event);
try {
if (!injector.injectInputEvent(event)) {
throw new ActionException("Failed to inject " + event);
}
} finally {
- if (event instanceof MotionEvent) {
- ((MotionEvent) event).recycle();
- }
+ event.recycle();
}
}
@@ -105,17 +101,5 @@ public class Events {
injectEvent(Log.VERBOSE, injector, newTouchMoveEvent(downTime, x, y));
}
- public static long keyDown(InputInjector injector, int keyCode, int metaState) {
- long downTime = SystemClock.uptimeMillis();
- KeyEvent downEvent = newKeyEvent(downTime, downTime, KeyEvent.ACTION_DOWN, keyCode, metaState);
- injectEvent(injector, downEvent);
- return downTime;
- }
-
- public static void keyUp(InputInjector injector, long downTime, int keyCode, int metaState) {
- injectEvent(injector,
- newKeyEvent(downTime, SystemClock.uptimeMillis(), KeyEvent.ACTION_UP, keyCode, metaState));
- }
-
private Events() {}
}