diff options
author | Nick Kralevich <nnk@google.com> | 2014-11-02 05:12:23 +0000 |
---|---|---|
committer | Nick Kralevich <nnk@google.com> | 2014-11-02 05:12:23 +0000 |
commit | ddb7de5a83288bff8e682f08f4b4aa900e335965 (patch) | |
tree | 0c86cc441a33a803a3491062d850f75caf2d214d /src | |
parent | b8c4f2e950ab8132196dd644d7cfc892f75a8441 (diff) | |
download | droiddriver-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')
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() {} } |