OSDN Git Service

Use enum for converting TouchPressType values
authorTerence Haddock <thaddock@google.com>
Fri, 15 Apr 2011 08:35:51 +0000 (10:35 +0200)
committerTerence Haddock <thaddock@google.com>
Fri, 15 Apr 2011 13:41:08 +0000 (15:41 +0200)
Change-Id: I072425caf7da7c1c01bf757243005ba0ebd97014

monkeyrunner/src/com/android/monkeyrunner/MonkeyDevice.java
monkeyrunner/src/com/android/monkeyrunner/adb/AdbMonkeyDevice.java
monkeyrunner/src/com/android/monkeyrunner/core/IMonkeyDevice.java
monkeyrunner/src/com/android/monkeyrunner/core/TouchPressType.java [new file with mode: 0644]
monkeyrunner/src/com/android/monkeyrunner/easy/EasyMonkeyDevice.java
monkeyrunner/src/com/android/monkeyrunner/recorder/MonkeyRecorder.java
monkeyrunner/src/com/android/monkeyrunner/recorder/actions/PressAction.java
monkeyrunner/src/com/android/monkeyrunner/recorder/actions/TouchAction.java

index 649e33c..100da68 100644 (file)
  */
 package com.android.monkeyrunner;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
+import com.google.common.base.Functions;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Collections2;
+
+import com.android.monkeyrunner.core.IMonkeyDevice;
+import com.android.monkeyrunner.core.IMonkeyImage;
+import com.android.monkeyrunner.core.TouchPressType;
+import com.android.monkeyrunner.doc.MonkeyRunnerExported;
+import com.android.monkeyrunner.easy.HierarchyViewer;
 
 import org.python.core.ArgParser;
 import org.python.core.ClassDictInit;
 import org.python.core.Py;
 import org.python.core.PyDictionary;
-import org.python.core.PyException;
 import org.python.core.PyObject;
 import org.python.core.PyTuple;
 
-import com.android.monkeyrunner.core.IMonkeyDevice;
-import com.android.monkeyrunner.core.IMonkeyImage;
-import com.android.monkeyrunner.doc.MonkeyRunnerExported;
-import com.android.monkeyrunner.easy.HierarchyViewer;
-
-import com.google.common.base.Functions;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableMap;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.logging.Logger;
 
 /*
  * Abstract base class that represents a single connected Android
@@ -46,28 +45,20 @@ import com.google.common.collect.ImmutableMap;
  */
 @MonkeyRunnerExported(doc = "Represents a device attached to the system.")
 public class MonkeyDevice extends PyObject implements ClassDictInit {
+    private static final Logger LOG = Logger.getLogger(MonkeyDevice.class.getName());
+
     public static void classDictInit(PyObject dict) {
         JythonUtils.convertDocAnnotationsForClass(MonkeyDevice.class, dict);
     }
 
     @MonkeyRunnerExported(doc = "Sends a DOWN event when used with touch() or press().")
-    public static final String DOWN = "down";
-    @MonkeyRunnerExported(doc = "Sends an UP event when used with touch() or press().")
-    public static final String UP = "up";
-    @MonkeyRunnerExported(doc = "Sends a DOWN event, immediately followed by an UP event when used with touch() or press()")
-    public static final String DOWN_AND_UP = "downAndUp";
-
-    // TODO: This may not be accessible from jython; if so, remove it.
-    public enum TouchPressType {
-        DOWN, UP, DOWN_AND_UP,
-    }
+    public static final String DOWN = TouchPressType.DOWN.getIdentifier();
 
-    public static final Map<String, IMonkeyDevice.TouchPressType> TOUCH_NAME_TO_ENUM =
-        ImmutableMap.of(DOWN, IMonkeyDevice.TouchPressType.DOWN,
-                UP, IMonkeyDevice.TouchPressType.UP,
-                DOWN_AND_UP, IMonkeyDevice.TouchPressType.DOWN_AND_UP);
+    @MonkeyRunnerExported(doc = "Sends an UP event when used with touch() or press().")
+    public static final String UP = TouchPressType.UP.getIdentifier();
 
-    private static final Set<String> VALID_DOWN_UP_TYPES = TOUCH_NAME_TO_ENUM.keySet();
+    @MonkeyRunnerExported(doc = "Sends a DOWN event, immediately followed by an UP event when used with touch() or press()")
+    public static final String DOWN_AND_UP = TouchPressType.DOWN_AND_UP.getIdentifier();
 
     private IMonkeyDevice impl;
 
@@ -129,21 +120,14 @@ public class MonkeyDevice extends PyObject implements ClassDictInit {
         int x = ap.getInt(0);
         int y = ap.getInt(1);
 
-        // Default
-        String type = MonkeyDevice.DOWN_AND_UP;
-        try {
-            String tmpType = ap.getString(1);
-            if (VALID_DOWN_UP_TYPES.contains(tmpType)) {
-                type = tmpType;
-            } else {
-                // not a valid type
-                type = MonkeyDevice.DOWN_AND_UP;
-            }
-        } catch (PyException e) {
-            // bad stuff was passed in, just use the already specified default value
-            type = MonkeyDevice.DOWN_AND_UP;
+        TouchPressType type = TouchPressType.fromIdentifier(ap.getString(2));
+        if (type == null) {
+            LOG.warning(String.format("Invalid TouchPressType specified (%s) default used instead",
+                    ap.getString(2)));
+            type = TouchPressType.DOWN_AND_UP;
         }
-        impl.touch(x, y, TOUCH_NAME_TO_ENUM.get(type));
+
+        impl.touch(x, y, type);
     }
 
     @MonkeyRunnerExported(doc = "Simulates dragging (touch, hold, and move) on the device screen.",
@@ -191,22 +175,14 @@ public class MonkeyDevice extends PyObject implements ClassDictInit {
         Preconditions.checkNotNull(ap);
 
         String name = ap.getString(0);
-
-        // Default
-        String type = MonkeyDevice.DOWN_AND_UP;
-        try {
-            String tmpType = ap.getString(1);
-            if (VALID_DOWN_UP_TYPES.contains(tmpType)) {
-                type = tmpType;
-            } else {
-                // not a valid type
-                type = MonkeyDevice.DOWN_AND_UP;
-            }
-        } catch (PyException e) {
-            // bad stuff was passed in, just use the already specified default value
-            type = MonkeyDevice.DOWN_AND_UP;
+        TouchPressType type = TouchPressType.fromIdentifier(ap.getString(1));
+        if (type == null) {
+            LOG.warning(String.format("Invalid TouchPressType specified (%s) default used instead",
+                    ap.getString(2)));
+            type = TouchPressType.DOWN_AND_UP;
         }
-        impl.press(name, TOUCH_NAME_TO_ENUM.get(type));
+
+        impl.press(name, type);
     }
 
     @MonkeyRunnerExported(doc = "Types the specified string on the keyboard. This is " +
index 60eaba9..050292a 100644 (file)
@@ -29,6 +29,7 @@ import com.android.monkeyrunner.MonkeyManager;
 import com.android.monkeyrunner.adb.LinearInterpolator.Point;
 import com.android.monkeyrunner.core.IMonkeyImage;
 import com.android.monkeyrunner.core.IMonkeyDevice;
+import com.android.monkeyrunner.core.TouchPressType;
 import com.android.monkeyrunner.easy.HierarchyViewer;
 
 import java.io.IOException;
index c081a56..9c06ec4 100644 (file)
@@ -27,10 +27,6 @@ import javax.annotation.Nullable;
  * MonkeyDevice interface.
  */
 public interface IMonkeyDevice {
-    enum TouchPressType {
-        DOWN, UP, DOWN_AND_UP,
-    }
-
     /**
      * Create a MonkeyMananger for talking to this device.
      *
diff --git a/monkeyrunner/src/com/android/monkeyrunner/core/TouchPressType.java b/monkeyrunner/src/com/android/monkeyrunner/core/TouchPressType.java
new file mode 100644 (file)
index 0000000..cfa878a
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.monkeyrunner.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * TouchPressType enum contains valid input for the "touch" Monkey command.
+ * When passed as a string, the "identifier" value is used.
+ */
+public enum TouchPressType {
+    DOWN("down"), UP("up"), DOWN_AND_UP("downAndUp");
+
+    private static final Map<String,TouchPressType> identifierToEnum =
+        new HashMap<String,TouchPressType>();
+    static {
+        for (TouchPressType type : values()) {
+            identifierToEnum.put(type.identifier, type);
+        }
+    }
+
+    private String identifier;
+
+    TouchPressType(String identifier) {
+        this.identifier = identifier;
+    }
+
+    public String getIdentifier() {
+        return identifier;
+    }
+
+    public static TouchPressType fromIdentifier(String name) {
+        return identifierToEnum.get(name);
+    }
+}
\ No newline at end of file
index e72e462..1c6c71b 100644 (file)
@@ -19,10 +19,9 @@ package com.android.monkeyrunner.easy;
 import com.google.common.base.Preconditions;
 
 import com.android.hierarchyviewerlib.device.ViewNode;
-import com.android.hierarchyviewerlib.device.ViewNode.Property;
 import com.android.monkeyrunner.JythonUtils;
 import com.android.monkeyrunner.MonkeyDevice;
-import com.android.monkeyrunner.core.IMonkeyDevice.TouchPressType;
+import com.android.monkeyrunner.core.TouchPressType;
 import com.android.monkeyrunner.doc.MonkeyRunnerExported;
 
 import org.eclipse.swt.graphics.Point;
@@ -32,7 +31,6 @@ import org.python.core.Py;
 import org.python.core.PyException;
 import org.python.core.PyInteger;
 import org.python.core.PyObject;
-import org.python.core.PyString;
 import org.python.core.PyTuple;
 
 import java.util.Set;
@@ -76,8 +74,8 @@ public class EasyMonkeyDevice extends PyObject implements ClassDictInit {
 
         By selector = getSelector(ap, 0);
         String tmpType = ap.getString(1);
-        TouchPressType type = MonkeyDevice.TOUCH_NAME_TO_ENUM.get(tmpType);
-        if (type == null) type = TouchPressType.DOWN_AND_UP;
+        TouchPressType type = TouchPressType.fromIdentifier(tmpType);
+        Preconditions.checkNotNull(type, "Invalid touch type: " + tmpType);
         // TODO: try catch rethrow PyExc
         touch(selector, type);
     }
index 914a5b9..bde882e 100644 (file)
@@ -15,6 +15,7 @@
  */
 package com.android.monkeyrunner.recorder;
 
+import com.android.monkeyrunner.MonkeyDevice;
 import com.android.monkeyrunner.adb.AdbBackend;
 import com.android.monkeyrunner.core.IMonkeyBackend;
 import com.android.monkeyrunner.core.IMonkeyDevice;
@@ -45,7 +46,11 @@ public class MonkeyRecorder {
      *
      * @param device
      */
-    public static void start(final IMonkeyDevice device) {
+    public static void start(final MonkeyDevice device) {
+        start(device.getImpl());
+    }
+
+    /* package */static void start(final IMonkeyDevice device) {
         MonkeyRecorderFrame frame = new MonkeyRecorderFrame(device);
         // TODO: this is a hack until the window listener works.
         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
index 66a933a..88c3fa7 100644 (file)
@@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableBiMap;
 
 import com.android.monkeyrunner.MonkeyDevice;
 import com.android.monkeyrunner.core.IMonkeyDevice;
+import com.android.monkeyrunner.core.TouchPressType;
 
 /**
  * Action to press a certain button.
@@ -62,7 +63,6 @@ public class PressAction implements Action {
 
     @Override
     public void execute(IMonkeyDevice device) {
-        device.press(key,
-                MonkeyDevice.TOUCH_NAME_TO_ENUM.get(downUpFlag));
+        device.press(key, TouchPressType.fromIdentifier(downUpFlag));
     }
 }
index 4e0ae2d..1001bef 100644 (file)
@@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableBiMap;
 
 import com.android.monkeyrunner.MonkeyDevice;
 import com.android.monkeyrunner.core.IMonkeyDevice;
+import com.android.monkeyrunner.core.TouchPressType;
 
 /**
  * Action to touch the touchscreen at a certain location.
@@ -48,8 +49,7 @@ public class TouchAction implements Action {
 
     @Override
     public void execute(IMonkeyDevice device) throws Exception {
-        device.touch(x, y,
-                MonkeyDevice.TOUCH_NAME_TO_ENUM.get(direction));
+        device.touch(x, y, TouchPressType.fromIdentifier(direction));
     }
 
     @Override