feat: auto.setFlags("findOnUiThread");
This commit is contained in:
@@ -109,6 +109,10 @@ module.exports = function(runtime, global){
|
|||||||
"fast": 1
|
"fast": 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const flagsMap = {
|
||||||
|
"findOnUiThread": 1
|
||||||
|
};
|
||||||
|
|
||||||
var auto = function(mode){
|
var auto = function(mode){
|
||||||
if(mode){
|
if(mode){
|
||||||
global.auto.setMode(mode);
|
global.auto.setMode(mode);
|
||||||
@@ -120,14 +124,33 @@ module.exports = function(runtime, global){
|
|||||||
runtime.accessibilityBridge.waitForServiceEnabled();
|
runtime.accessibilityBridge.waitForServiceEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto.setMode = function(mode){
|
auto.setMode = function(modeStr){
|
||||||
if(typeof(mode) !== "string"){
|
if(typeof(mode) !== "string"){
|
||||||
throw new TypeError("mode should be a string");
|
throw new TypeError("mode should be a string");
|
||||||
}
|
}
|
||||||
mode = modes[mode.toLowerCase()] || 0;
|
let mode = modes[modeStr];
|
||||||
|
if(mode == undefined){
|
||||||
|
throw new Error("unknown mode for auto.setMode(): " + modeStr)
|
||||||
|
}
|
||||||
runtime.accessibilityBridge.setMode(mode);
|
runtime.accessibilityBridge.setMode(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto.setFlags = function(flags){
|
||||||
|
if(typeof(flags) !== "string"){
|
||||||
|
throw new TypeError("flags should be a string");
|
||||||
|
}
|
||||||
|
let flagsInt = 0;
|
||||||
|
let flagStrings = flags.split("|");
|
||||||
|
for(let i = 0; i < flagStrings.length; i++){
|
||||||
|
let flag = flagsMap[flagStrings[i]];
|
||||||
|
if(flag == undefined){
|
||||||
|
throw new Error("unknown flag for auto.setFlags(): " + flagStrings[i]);
|
||||||
|
}
|
||||||
|
flagsInt |= flag;
|
||||||
|
}
|
||||||
|
runtime.accessibilityBridge.setFlags(flagsInt);
|
||||||
|
}
|
||||||
|
|
||||||
auto.getService = function(){
|
auto.getService = function(){
|
||||||
return runtime.accessibilityBridge.getService();
|
return runtime.accessibilityBridge.getService();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ public abstract class AutoJs {
|
|||||||
return new ScriptRuntime.Builder()
|
return new ScriptRuntime.Builder()
|
||||||
.setConsole(new StardustConsole(mUiHandler, mGlobalConsole))
|
.setConsole(new StardustConsole(mUiHandler, mGlobalConsole))
|
||||||
.setScreenCaptureRequester(mScreenCaptureRequester)
|
.setScreenCaptureRequester(mScreenCaptureRequester)
|
||||||
.setAccessibilityBridge(new AccessibilityBridgeImpl())
|
.setAccessibilityBridge(new AccessibilityBridgeImpl(mUiHandler))
|
||||||
.setUiHandler(mUiHandler)
|
.setUiHandler(mUiHandler)
|
||||||
.setAppUtils(mAppUtils)
|
.setAppUtils(mAppUtils)
|
||||||
.setEngineService(mScriptEngineService)
|
.setEngineService(mScriptEngineService)
|
||||||
@@ -183,8 +183,8 @@ public abstract class AutoJs {
|
|||||||
|
|
||||||
private class AccessibilityBridgeImpl extends AccessibilityBridge {
|
private class AccessibilityBridgeImpl extends AccessibilityBridge {
|
||||||
|
|
||||||
public AccessibilityBridgeImpl() {
|
public AccessibilityBridgeImpl(UiHandler uiHandler) {
|
||||||
super(createAccessibilityConfig());
|
super(createAccessibilityConfig(), uiHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -7,11 +7,10 @@ import android.view.accessibility.AccessibilityNodeInfo;
|
|||||||
import android.view.accessibility.AccessibilityWindowInfo;
|
import android.view.accessibility.AccessibilityWindowInfo;
|
||||||
|
|
||||||
import com.stardust.autojs.runtime.accessibility.AccessibilityConfig;
|
import com.stardust.autojs.runtime.accessibility.AccessibilityConfig;
|
||||||
import com.stardust.automator.UiObject;
|
import com.stardust.util.UiHandler;
|
||||||
import com.stardust.view.accessibility.AccessibilityInfoProvider;
|
import com.stardust.view.accessibility.AccessibilityInfoProvider;
|
||||||
import com.stardust.view.accessibility.AccessibilityNotificationObserver;
|
import com.stardust.view.accessibility.AccessibilityNotificationObserver;
|
||||||
import com.stardust.view.accessibility.AccessibilityService;
|
import com.stardust.view.accessibility.AccessibilityService;
|
||||||
import com.stardust.view.accessibility.NotificationListener;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -27,12 +26,17 @@ public abstract class AccessibilityBridge {
|
|||||||
public static final int MODE_NORMAL = 0;
|
public static final int MODE_NORMAL = 0;
|
||||||
public static final int MODE_FAST = 1;
|
public static final int MODE_FAST = 1;
|
||||||
|
|
||||||
private int mMode = MODE_NORMAL;
|
public static final int FLAG_FIND_ON_UI_THREAD = 1;
|
||||||
private AccessibilityConfig mConfig;
|
|
||||||
private WindowFilter mWindowFilter;
|
|
||||||
|
|
||||||
public AccessibilityBridge(AccessibilityConfig config) {
|
private int mMode = MODE_NORMAL;
|
||||||
|
private int mFlags = 0;
|
||||||
|
private final AccessibilityConfig mConfig;
|
||||||
|
private WindowFilter mWindowFilter;
|
||||||
|
private final UiHandler mUiHandler;
|
||||||
|
|
||||||
|
public AccessibilityBridge(AccessibilityConfig config, UiHandler uiHandler) {
|
||||||
mConfig = config;
|
mConfig = config;
|
||||||
|
mUiHandler = uiHandler;
|
||||||
mConfig.seal();
|
mConfig.seal();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,6 +44,10 @@ public abstract class AccessibilityBridge {
|
|||||||
|
|
||||||
public abstract void waitForServiceEnabled();
|
public abstract void waitForServiceEnabled();
|
||||||
|
|
||||||
|
public void post(Runnable r) {
|
||||||
|
mUiHandler.post(r);
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public abstract AccessibilityService getService();
|
public abstract AccessibilityService getService();
|
||||||
|
|
||||||
@@ -62,7 +70,7 @@ public abstract class AccessibilityBridge {
|
|||||||
return activeWindow.getRoot();
|
return activeWindow.getRoot();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mMode == MODE_FAST) {
|
if ((mMode & MODE_FAST) != 0) {
|
||||||
return service.fastRootInActiveWindow();
|
return service.fastRootInActiveWindow();
|
||||||
}
|
}
|
||||||
return service.getRootInActiveWindow();
|
return service.getRootInActiveWindow();
|
||||||
@@ -75,11 +83,18 @@ public abstract class AccessibilityBridge {
|
|||||||
@NonNull
|
@NonNull
|
||||||
public abstract AccessibilityInfoProvider getInfoProvider();
|
public abstract AccessibilityInfoProvider getInfoProvider();
|
||||||
|
|
||||||
|
|
||||||
public void setMode(int mode) {
|
public void setMode(int mode) {
|
||||||
mMode = mode;
|
mMode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getFlags() {
|
||||||
|
return mFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFlags(int flags) {
|
||||||
|
mFlags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public abstract AccessibilityNotificationObserver getNotificationObserver();
|
public abstract AccessibilityNotificationObserver getNotificationObserver();
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.stardust.autojs.core.accessibility;
|
package com.stardust.autojs.core.accessibility;
|
||||||
|
|
||||||
|
import android.os.Looper;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -13,12 +14,9 @@ import com.stardust.automator.UiGlobalSelector;
|
|||||||
import com.stardust.automator.UiObject;
|
import com.stardust.automator.UiObject;
|
||||||
import com.stardust.automator.UiObjectCollection;
|
import com.stardust.automator.UiObjectCollection;
|
||||||
import com.stardust.automator.filter.DfsFilter;
|
import com.stardust.automator.filter.DfsFilter;
|
||||||
|
import com.stardust.concurrent.VolatileBox;
|
||||||
import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator;
|
import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator;
|
||||||
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.net.ServerSocket;
|
|
||||||
import java.net.Socket;
|
|
||||||
|
|
||||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS;
|
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS;
|
||||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_COLUMN_INT;
|
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_COLUMN_INT;
|
||||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE;
|
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE;
|
||||||
@@ -76,6 +74,18 @@ public class UiSelector extends UiGlobalSelector {
|
|||||||
@ScriptInterface
|
@ScriptInterface
|
||||||
public UiObjectCollection find() {
|
public UiObjectCollection find() {
|
||||||
ensureAccessibilityServiceEnabled();
|
ensureAccessibilityServiceEnabled();
|
||||||
|
if((mAccessibilityBridge.getFlags() & AccessibilityBridge.FLAG_FIND_ON_UI_THREAD)!=0
|
||||||
|
&& Looper.myLooper() != Looper.getMainLooper()){
|
||||||
|
VolatileBox<UiObjectCollection> result = new VolatileBox<>();
|
||||||
|
mAccessibilityBridge.post(() -> result.setAndNotify(findImpl()));
|
||||||
|
return result.blockedGet();
|
||||||
|
}
|
||||||
|
return findImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@ScriptInterface
|
||||||
|
protected UiObjectCollection findImpl() {
|
||||||
AccessibilityNodeInfo root = mAccessibilityBridge.getRootInCurrentWindow();
|
AccessibilityNodeInfo root = mAccessibilityBridge.getRootInCurrentWindow();
|
||||||
if (BuildConfig.DEBUG)
|
if (BuildConfig.DEBUG)
|
||||||
Log.d(TAG, "find: root = " + root);
|
Log.d(TAG, "find: root = " + root);
|
||||||
|
|||||||
@@ -140,9 +140,11 @@ public class ScriptExecuteActivity extends AppCompatActivity {
|
|||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
Log.d(LOG_TAG, "onDestroy");
|
Log.d(LOG_TAG, "onDestroy");
|
||||||
mScriptEngine.put("activity", null);
|
if(mScriptEngine != null){
|
||||||
mScriptEngine.setTag("activity", null);
|
mScriptEngine.put("activity", null);
|
||||||
mScriptEngine.destroy();
|
mScriptEngine.setTag("activity", null);
|
||||||
|
mScriptEngine.destroy();
|
||||||
|
}
|
||||||
mScriptExecution = null;
|
mScriptExecution = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user