just to save works

This commit is contained in:
hyb1996
2017-10-31 10:55:03 +08:00
parent cbd2600c33
commit 8a55450d62
14 changed files with 247 additions and 34 deletions

View File

@@ -0,0 +1,36 @@
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();
}
}

View File

@@ -10,6 +10,7 @@ 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;
@@ -20,9 +21,6 @@ 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.
*/

View File

@@ -1,11 +1,15 @@
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;
@@ -55,22 +59,33 @@ 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(AccessibilityBridge accessibilityBridge) {
mAccessibilityBridge = accessibilityBridge;
public UiSelector(ScriptBridges bridges) {
this(bridges, null);
}
public UiSelector(AccessibilityBridge accessibilityBridge, AccessibilityNodeInfoAllocator allocator) {
mAccessibilityBridge = accessibilityBridge;
public UiSelector(ScriptBridges bridges, AccessibilityNodeInfoAllocator allocator) {
mAccessibilityBridge = bridges.getAccessibilityBrige();
mScriptBridges = bridges;
mAllocator = allocator;
}
@NonNull
@ScriptInterface
public UiObjectCollection find() {
public Object find() {
UiObjectCollection c = findInner();
if(c == UiObjectCollection.EMPTY){
return emptyUiCollection();
}
return mScriptBridges.wrapAsArray(c);
}
protected UiObjectCollection findInner(){
ensureAccessibilityServiceEnabled();
if (AutomatorConfig.isUnintendedGuardEnabled() && isRunningPackageSelf()) {
Log.d(TAG, "isSelfPackage return null");
@@ -80,7 +95,22 @@ public class UiSelector extends UiGlobalSelector {
if (root == null) {
return UiObjectCollection.EMPTY;
}
return findOf(UiObject.createRoot(root, mAllocator));
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;
}
@@ -95,8 +125,15 @@ public class UiSelector extends UiGlobalSelector {
@ScriptInterface
@NonNull
public UiObjectCollection untilFind() {
UiObjectCollection uiObjectCollection = find();
public Object untilFind() {
return mScriptBridges.wrapAsArray(untilFindInner());
}
@ScriptInterface
@NonNull
protected UiObjectCollection untilFindInner() {
UiObjectCollection uiObjectCollection = findInner();
while (uiObjectCollection.empty()) {
if (Thread.currentThread().isInterrupted()) {
throw new ScriptInterruptedException();
@@ -106,7 +143,7 @@ public class UiSelector extends UiGlobalSelector {
} catch (InterruptedException e) {
throw new ScriptInterruptedException();
}
uiObjectCollection = find();
uiObjectCollection = findInner();
}
return uiObjectCollection;
}
@@ -118,13 +155,13 @@ public class UiSelector extends UiGlobalSelector {
@ScriptInterface
public boolean exists() {
UiObjectCollection collection = find();
UiObjectCollection collection = findInner();
return collection.nonEmpty();
}
@NonNull
public UiObject untilFindOne() {
UiObjectCollection collection = untilFind();
UiObjectCollection collection = untilFindInner();
return new UiObject(collection.get(0).getInfo());
}
@@ -151,7 +188,7 @@ public class UiSelector extends UiGlobalSelector {
private boolean performAction(int action, ActionArgument... arguments) {
return untilFind().performAction(action, arguments);
return untilFindInner().performAction(action, arguments);
}

View File

@@ -1,4 +1,4 @@
package com.stardust.autojs.core.accessibility;
package com.stardust.autojs.core.bridge;
import android.content.Context;
import android.support.annotation.NonNull;

View File

@@ -0,0 +1,20 @@
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();
}

View File

@@ -6,7 +6,6 @@ package com.stardust.autojs.runtime;
public class ScriptBridges {
public interface FunctionCaller {
Object[] NO_ARGUMENTS = new Object[0];
@@ -25,4 +24,6 @@ public class ScriptBridges {
throw new IllegalStateException("no function caller");
return mFunctionCaller.call(func, target, args);
}
}

View File

@@ -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.accessibility.AccessibilityBridge;
import com.stardust.autojs.core.bridge.AccessibilityBridge;
import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.rhino.AndroidClassLoader;
import com.stardust.autojs.runtime.api.AbstractShell;
@@ -25,7 +25,6 @@ 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;

View File

@@ -6,10 +6,9 @@ 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.accessibility.AccessibilityBridge;
import com.stardust.autojs.core.bridge.AccessibilityBridge;
import com.stardust.autojs.core.eventloop.EventEmitter;
import com.stardust.notification.Notification;
import com.stardust.notification.NotificationListenerService;