diff --git a/.idea/modules.xml b/.idea/modules.xml index 7e950955..4fac18b4 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,8 @@ - + diff --git a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java index efdf45bb..5fe8743c 100644 --- a/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java +++ b/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java @@ -15,7 +15,7 @@ import com.stardust.autojs.engine.LoopBasedJavaScriptEngine; import com.stardust.autojs.engine.RootAutomatorEngine; import com.stardust.autojs.engine.ScriptEngine; import com.stardust.autojs.engine.ScriptEngineManager; -import com.stardust.autojs.core.bridge.AccessibilityBridge; +import com.stardust.autojs.core.accessibility.AccessibilityBridge; import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.autojs.core.console.GlobalStardustConsole; import com.stardust.autojs.runtime.exception.ScriptException; diff --git a/autojs/src/main/java/com/stardust/autojs/core/bridge/AccessibilityBridge.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java similarity index 96% rename from autojs/src/main/java/com/stardust/autojs/core/bridge/AccessibilityBridge.java rename to autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java index e7c014e5..8d100675 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/bridge/AccessibilityBridge.java +++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/AccessibilityBridge.java @@ -1,4 +1,4 @@ -package com.stardust.autojs.core.bridge; +package com.stardust.autojs.core.accessibility; import android.content.Context; import android.support.annotation.NonNull; diff --git a/autojs/src/main/java/com/stardust/autojs/core/accessibility/ScriptUiObject.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/ScriptUiObject.java deleted file mode 100644 index 9bbc47af..00000000 --- a/autojs/src/main/java/com/stardust/autojs/core/accessibility/ScriptUiObject.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.stardust.autojs.core.accessibility; - -import com.stardust.autojs.core.bridge.ScriptBridges; -import com.stardust.automator.UiObject; -import com.stardust.automator.UiObjectCollection; -import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator; - -/** - * Created by Stardust on 2017/10/31. - */ - -public class ScriptUiObject extends UiObject { - - private ScriptBridges mScriptBridges; - - public ScriptUiObject(Object info, ScriptBridges scriptBridges) { - super(info); - mScriptBridges = scriptBridges; - } - - public ScriptUiObject(Object info, AccessibilityNodeInfoAllocator allocator, boolean isRootNode, ScriptBridges scriptBridges) { - super(info, allocator, isRootNode); - mScriptBridges = scriptBridges; - } - - public ScriptUiObject(Object info, AccessibilityNodeInfoAllocator allocator, ScriptBridges scriptBridges) { - super(info, allocator); - mScriptBridges = scriptBridges; - } - - - @Override - public Object children() { - return super.children(); - } -} diff --git a/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java index 2b1180cb..f301d902 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java +++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java @@ -10,7 +10,6 @@ import android.util.Log; import android.view.accessibility.AccessibilityNodeInfo; import com.stardust.autojs.annotation.ScriptInterface; -import com.stardust.autojs.core.bridge.AccessibilityBridge; import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.autojs.runtime.accessibility.AutomatorConfig; import com.stardust.automator.GlobalActionAutomator; @@ -21,6 +20,9 @@ import com.stardust.automator.simple_action.SimpleAction; import com.stardust.util.DeveloperUtils; import com.stardust.util.ScreenMetrics; +import org.mozilla.javascript.Context; +import org.mozilla.javascript.NativeJavaObject; + /** * Created by Stardust on 2017/4/2. */ diff --git a/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java index 8d75935c..8893e549 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java +++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/UiSelector.java @@ -1,15 +1,11 @@ package com.stardust.autojs.core.accessibility; import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.util.Log; import android.view.accessibility.AccessibilityNodeInfo; import com.stardust.autojs.annotation.ScriptInterface; -import com.stardust.autojs.core.bridge.AccessibilityBridge; -import com.stardust.autojs.core.bridge.ScriptBridges; import com.stardust.autojs.runtime.accessibility.AutomatorConfig; -import com.stardust.autojs.runtime.api.UI; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.automator.ActionArgument; import com.stardust.automator.UiGlobalSelector; @@ -59,33 +55,22 @@ public class UiSelector extends UiGlobalSelector { private static final String TAG = "UiSelector"; - private static Object sEmptyUiCollection; private AccessibilityBridge mAccessibilityBridge; private AccessibilityNodeInfoAllocator mAllocator = null; - private ScriptBridges mScriptBridges; - public UiSelector(ScriptBridges bridges) { - this(bridges, null); + public UiSelector(AccessibilityBridge accessibilityBridge) { + mAccessibilityBridge = accessibilityBridge; } - public UiSelector(ScriptBridges bridges, AccessibilityNodeInfoAllocator allocator) { - mAccessibilityBridge = bridges.getAccessibilityBrige(); - mScriptBridges = bridges; + public UiSelector(AccessibilityBridge accessibilityBridge, AccessibilityNodeInfoAllocator allocator) { + mAccessibilityBridge = accessibilityBridge; mAllocator = allocator; } @NonNull @ScriptInterface - public Object find() { - UiObjectCollection c = findInner(); - if(c == UiObjectCollection.EMPTY){ - return emptyUiCollection(); - } - return mScriptBridges.wrapAsArray(c); - } - - protected UiObjectCollection findInner(){ + public UiObjectCollection find() { ensureAccessibilityServiceEnabled(); if (AutomatorConfig.isUnintendedGuardEnabled() && isRunningPackageSelf()) { Log.d(TAG, "isSelfPackage return null"); @@ -95,22 +80,7 @@ public class UiSelector extends UiGlobalSelector { if (root == null) { return UiObjectCollection.EMPTY; } - return super.findOf(UiObject.createRoot(root, mAllocator)); - } - - @SuppressWarnings("unchecked") - @Override - public Object findOf(UiObject node) { - return mScriptBridges.wrapAsArray((Iterable) super.findOf(node)); - } - - - @NonNull - private Object emptyUiCollection() { - if(sEmptyUiCollection == null){ - sEmptyUiCollection = mScriptBridges.wrapAsArray(UiObjectCollection.EMPTY); - } - return sEmptyUiCollection; + return findOf(UiObject.createRoot(root, mAllocator)); } @@ -125,15 +95,8 @@ public class UiSelector extends UiGlobalSelector { @ScriptInterface @NonNull - public Object untilFind() { - return mScriptBridges.wrapAsArray(untilFindInner()); - } - - - @ScriptInterface - @NonNull - protected UiObjectCollection untilFindInner() { - UiObjectCollection uiObjectCollection = findInner(); + public UiObjectCollection untilFind() { + UiObjectCollection uiObjectCollection = find(); while (uiObjectCollection.empty()) { if (Thread.currentThread().isInterrupted()) { throw new ScriptInterruptedException(); @@ -143,7 +106,7 @@ public class UiSelector extends UiGlobalSelector { } catch (InterruptedException e) { throw new ScriptInterruptedException(); } - uiObjectCollection = findInner(); + uiObjectCollection = find(); } return uiObjectCollection; } @@ -155,13 +118,13 @@ public class UiSelector extends UiGlobalSelector { @ScriptInterface public boolean exists() { - UiObjectCollection collection = findInner(); + UiObjectCollection collection = find(); return collection.nonEmpty(); } @NonNull public UiObject untilFindOne() { - UiObjectCollection collection = untilFindInner(); + UiObjectCollection collection = untilFind(); return new UiObject(collection.get(0).getInfo()); } @@ -188,7 +151,7 @@ public class UiSelector extends UiGlobalSelector { private boolean performAction(int action, ActionArgument... arguments) { - return untilFindInner().performAction(action, arguments); + return untilFind().performAction(action, arguments); } diff --git a/autojs/src/main/java/com/stardust/autojs/core/bridge/ScriptBridges.java b/autojs/src/main/java/com/stardust/autojs/core/bridge/ScriptBridges.java deleted file mode 100644 index 07b8f724..00000000 --- a/autojs/src/main/java/com/stardust/autojs/core/bridge/ScriptBridges.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stardust.autojs.core.bridge; - -/** - * Created by Stardust on 2017/10/31. - */ - -public abstract class ScriptBridges { - - - public abstract Object toArray(Object[] nativeArray); - - public abstract Object toString(String nativeString); - - public abstract Object callFunction(Object function, Object target, Object[] args); - - public abstract Object wrapAsArray(Iterable iterable); - - public abstract AccessibilityBridge getAccessibilityBrige(); - -} diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java index d232b254..404497bb 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java @@ -6,6 +6,7 @@ package com.stardust.autojs.runtime; public class ScriptBridges { + public interface FunctionCaller { Object[] NO_ARGUMENTS = new Object[0]; @@ -24,6 +25,4 @@ public class ScriptBridges { throw new IllegalStateException("no function caller"); return mFunctionCaller.call(func, target, args); } - - } diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java index ed7233dc..e6385aef 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptRuntime.java @@ -7,7 +7,7 @@ import android.os.Looper; import com.stardust.autojs.R; import com.stardust.autojs.ScriptEngineService; import com.stardust.autojs.annotation.ScriptVariable; -import com.stardust.autojs.core.bridge.AccessibilityBridge; +import com.stardust.autojs.core.accessibility.AccessibilityBridge; import com.stardust.autojs.engine.ScriptEngine; import com.stardust.autojs.rhino.AndroidClassLoader; import com.stardust.autojs.runtime.api.AbstractShell; @@ -25,6 +25,7 @@ import com.stardust.autojs.runtime.exception.ScriptEnvironmentException; import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.core.accessibility.SimpleActionAutomator; +import com.stardust.concurrent.VolatileBox; import com.stardust.autojs.runtime.api.UI; import com.stardust.concurrent.VolatileDispose; import com.stardust.pio.UncheckedIOException; diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java index 033de836..988e0d35 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Events.java @@ -6,9 +6,10 @@ import android.graphics.Point; import android.os.Build; import android.os.Handler; import android.view.KeyEvent; +import android.view.accessibility.AccessibilityEvent; import com.stardust.autojs.R; -import com.stardust.autojs.core.bridge.AccessibilityBridge; +import com.stardust.autojs.core.accessibility.AccessibilityBridge; import com.stardust.autojs.core.eventloop.EventEmitter; import com.stardust.notification.Notification; import com.stardust.notification.NotificationListenerService; diff --git a/automator/src/main/java/com/stardust/automator/UiGlobalSelector.java b/automator/src/main/java/com/stardust/automator/UiGlobalSelector.java index f73d4b34..d1ddaeb2 100644 --- a/automator/src/main/java/com/stardust/automator/UiGlobalSelector.java +++ b/automator/src/main/java/com/stardust/automator/UiGlobalSelector.java @@ -351,19 +351,13 @@ public class UiGlobalSelector { return this; } - - /** - * Note: The method use a dirty template to make its child class can - * change the type of return value. - */ - @SuppressWarnings("unchecked") - public T findOf(UiObject node) { + public UiObjectCollection findOf(UiObject node) { List list = new ArrayList<>(); list.add(node); for (ListFilter filter : mFilters) { list = filter.filter(list); } - return (T) UiObjectCollection.of(list); + return UiObjectCollection.of(list); } @Nullable diff --git a/automator/src/main/java/com/stardust/automator/UiObject.java b/automator/src/main/java/com/stardust/automator/UiObject.java index ca6f8402..0da339af 100644 --- a/automator/src/main/java/com/stardust/automator/UiObject.java +++ b/automator/src/main/java/com/stardust/automator/UiObject.java @@ -97,7 +97,7 @@ public class UiObject extends AccessibilityNodeInfoCompat { } } - public T find(UiGlobalSelector selector) { + public UiObjectCollection find(UiGlobalSelector selector) { return selector.findOf(this); } @@ -105,13 +105,12 @@ public class UiObject extends AccessibilityNodeInfoCompat { return selector.findOneOf(this); } - @SuppressWarnings("unchecked") - public T children() { + public UiObjectCollection children() { ArrayList list = new ArrayList<>(getChildCount()); for (int i = 0; i < getChildCount(); i++) { list.add(getChild(i)); } - return (T) UiObjectCollection.ofCompat(list); + return UiObjectCollection.ofCompat(list); } public int childCount() { diff --git a/automator/src/main/java/com/stardust/automator/UiObjectCollection.java b/automator/src/main/java/com/stardust/automator/UiObjectCollection.java index 70b518d8..4f89a4e0 100644 --- a/automator/src/main/java/com/stardust/automator/UiObjectCollection.java +++ b/automator/src/main/java/com/stardust/automator/UiObjectCollection.java @@ -2,7 +2,6 @@ package com.stardust.automator; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; import android.view.accessibility.AccessibilityNodeInfo; @@ -11,11 +10,8 @@ import com.stardust.util.Consumer; import com.stardust.util.Func1; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; -import java.util.Iterator; import java.util.List; -import java.util.ListIterator; import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.*; import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CONTEXT_CLICK; @@ -31,7 +27,7 @@ import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat. * Created by Stardust on 2017/3/9. */ -public class UiObjectCollection implements List { +public class UiObjectCollection { public static final UiObjectCollection EMPTY = UiObjectCollection.of(Collections.emptyList()); @@ -53,7 +49,7 @@ public class UiObjectCollection implements List { private List mNodes; - protected UiObjectCollection(List list) { + private UiObjectCollection(List list) { mNodes = list; } @@ -193,126 +189,14 @@ public class UiObjectCollection implements List { new ActionArgument.IntActionArgument(ACTION_ARGUMENT_COLUMN_INT, column)); } - @Override public UiObject get(int i) { return mNodes.get(i); } - @Override - public UiObject set(int index, UiObject element) { - return mNodes.set(index, element); - } - - @Override - public void add(int index, UiObject element) { - mNodes.add(index, element); - } - - @Override - public UiObject remove(int index) { - return mNodes.remove(index); - } - - @Override - public int indexOf(Object o) { - return mNodes.indexOf(o); - } - - @Override - public int lastIndexOf(Object o) { - return mNodes.lastIndexOf(o); - } - - @NonNull - @Override - public ListIterator listIterator() { - return mNodes.listIterator(); - } - - @NonNull - @Override - public ListIterator listIterator(int index) { - return mNodes.listIterator(index); - } - - @NonNull - @Override - public UiObjectCollection subList(int fromIndex, int toIndex) { - return UiObjectCollection.of(mNodes.subList(fromIndex, toIndex)); - } - public int size() { return mNodes.size(); } - @Override - public boolean isEmpty() { - return mNodes.isEmpty(); - } - - @Override - public boolean contains(Object o) { - return mNodes.contains(o); - } - - @NonNull - @Override - public Iterator iterator() { - return mNodes.iterator(); - } - - @NonNull - @Override - public Object[] toArray() { - return mNodes.toArray(); - } - - @NonNull - @Override - public T[] toArray(@NonNull T[] a) { - return mNodes.toArray(a); - } - - @Override - public boolean add(UiObject uiObject) { - return mNodes.add(uiObject); - } - - @Override - public boolean remove(Object o) { - return mNodes.remove(o); - } - - @Override - public boolean containsAll(@NonNull Collection c) { - return mNodes.containsAll(c); - } - - @Override - public boolean addAll(@NonNull Collection c) { - return mNodes.addAll(c); - } - - @Override - public boolean addAll(int index, @NonNull Collection c) { - return mNodes.addAll(index, c); - } - - @Override - public boolean removeAll(@NonNull Collection c) { - return mNodes.retainAll(c); - } - - @Override - public boolean retainAll(@NonNull Collection c) { - return mNodes.retainAll(c); - } - - @Override - public void clear() { - mNodes.clear(); - } - public UiObjectCollection each(Consumer consumer) { for (UiObject uiObject : mNodes) { consumer.accept(uiObject); @@ -332,7 +216,7 @@ public class UiObjectCollection implements List { public UiObjectCollection find(UiGlobalSelector selector) { List list = new ArrayList<>(); for (UiObject object : mNodes) { - list.addAll(((UiObjectCollection) selector.findOf(object)).mNodes); + list.addAll(selector.findOf(object).mNodes); } return of(list); } @@ -348,11 +232,11 @@ public class UiObjectCollection implements List { } public boolean empty() { - return isEmpty(); + return size() == 0; } public boolean nonEmpty() { - return !isEmpty(); + return size() != 0; } } diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/rt/AutoJs.java b/inrt/src/main/java/com/stardust/auojs/inrt/rt/AutoJs.java index 39f66911..723434ec 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/rt/AutoJs.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/rt/AutoJs.java @@ -13,7 +13,7 @@ import com.stardust.auojs.inrt.App; import com.stardust.auojs.inrt.R; import com.stardust.autojs.ScriptEngineService; import com.stardust.autojs.ScriptEngineServiceBuilder; -import com.stardust.autojs.core.bridge.AccessibilityBridge; +import com.stardust.autojs.core.accessibility.AccessibilityBridge; import com.stardust.autojs.core.console.GlobalStardustConsole; import com.stardust.autojs.core.inputevent.InputEventObserver; import com.stardust.autojs.core.record.accessibility.AccessibilityActionRecorder;