mirror of
https://github.com/TonyJiangWJ/Auto.js.git
synced 2026-06-21 21:01:43 +08:00
feat: auto.setFlags("findOnUiThread");
This commit is contained in:
parent
4cae6496b0
commit
8d2c0dd9f3
@ -109,6 +109,10 @@ module.exports = function(runtime, global){
|
||||
"fast": 1
|
||||
}
|
||||
|
||||
const flagsMap = {
|
||||
"findOnUiThread": 1
|
||||
};
|
||||
|
||||
var auto = function(mode){
|
||||
if(mode){
|
||||
global.auto.setMode(mode);
|
||||
@ -120,14 +124,33 @@ module.exports = function(runtime, global){
|
||||
runtime.accessibilityBridge.waitForServiceEnabled();
|
||||
}
|
||||
|
||||
auto.setMode = function(mode){
|
||||
auto.setMode = function(modeStr){
|
||||
if(typeof(mode) !== "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);
|
||||
}
|
||||
|
||||
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(){
|
||||
return runtime.accessibilityBridge.getService();
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ public abstract class AutoJs {
|
||||
return new ScriptRuntime.Builder()
|
||||
.setConsole(new StardustConsole(mUiHandler, mGlobalConsole))
|
||||
.setScreenCaptureRequester(mScreenCaptureRequester)
|
||||
.setAccessibilityBridge(new AccessibilityBridgeImpl())
|
||||
.setAccessibilityBridge(new AccessibilityBridgeImpl(mUiHandler))
|
||||
.setUiHandler(mUiHandler)
|
||||
.setAppUtils(mAppUtils)
|
||||
.setEngineService(mScriptEngineService)
|
||||
@ -183,8 +183,8 @@ public abstract class AutoJs {
|
||||
|
||||
private class AccessibilityBridgeImpl extends AccessibilityBridge {
|
||||
|
||||
public AccessibilityBridgeImpl() {
|
||||
super(createAccessibilityConfig());
|
||||
public AccessibilityBridgeImpl(UiHandler uiHandler) {
|
||||
super(createAccessibilityConfig(), uiHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -7,11 +7,10 @@ import android.view.accessibility.AccessibilityNodeInfo;
|
||||
import android.view.accessibility.AccessibilityWindowInfo;
|
||||
|
||||
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.AccessibilityNotificationObserver;
|
||||
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_FAST = 1;
|
||||
|
||||
private int mMode = MODE_NORMAL;
|
||||
private AccessibilityConfig mConfig;
|
||||
private WindowFilter mWindowFilter;
|
||||
public static final int FLAG_FIND_ON_UI_THREAD = 1;
|
||||
|
||||
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;
|
||||
mUiHandler = uiHandler;
|
||||
mConfig.seal();
|
||||
}
|
||||
|
||||
@ -40,6 +44,10 @@ public abstract class AccessibilityBridge {
|
||||
|
||||
public abstract void waitForServiceEnabled();
|
||||
|
||||
public void post(Runnable r) {
|
||||
mUiHandler.post(r);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public abstract AccessibilityService getService();
|
||||
|
||||
@ -62,7 +70,7 @@ public abstract class AccessibilityBridge {
|
||||
return activeWindow.getRoot();
|
||||
}
|
||||
}
|
||||
if (mMode == MODE_FAST) {
|
||||
if ((mMode & MODE_FAST) != 0) {
|
||||
return service.fastRootInActiveWindow();
|
||||
}
|
||||
return service.getRootInActiveWindow();
|
||||
@ -75,11 +83,18 @@ public abstract class AccessibilityBridge {
|
||||
@NonNull
|
||||
public abstract AccessibilityInfoProvider getInfoProvider();
|
||||
|
||||
|
||||
public void setMode(int mode) {
|
||||
mMode = mode;
|
||||
}
|
||||
|
||||
public int getFlags() {
|
||||
return mFlags;
|
||||
}
|
||||
|
||||
public void setFlags(int flags) {
|
||||
mFlags = flags;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public abstract AccessibilityNotificationObserver getNotificationObserver();
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.stardust.autojs.core.accessibility;
|
||||
|
||||
import android.os.Looper;
|
||||
import android.os.SystemClock;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.Log;
|
||||
@ -13,12 +14,9 @@ import com.stardust.automator.UiGlobalSelector;
|
||||
import com.stardust.automator.UiObject;
|
||||
import com.stardust.automator.UiObjectCollection;
|
||||
import com.stardust.automator.filter.DfsFilter;
|
||||
import com.stardust.concurrent.VolatileBox;
|
||||
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_ARGUMENT_COLUMN_INT;
|
||||
import static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE;
|
||||
@ -76,6 +74,18 @@ public class UiSelector extends UiGlobalSelector {
|
||||
@ScriptInterface
|
||||
public UiObjectCollection find() {
|
||||
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();
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, "find: root = " + root);
|
||||
|
||||
@ -140,9 +140,11 @@ public class ScriptExecuteActivity extends AppCompatActivity {
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
Log.d(LOG_TAG, "onDestroy");
|
||||
mScriptEngine.put("activity", null);
|
||||
mScriptEngine.setTag("activity", null);
|
||||
mScriptEngine.destroy();
|
||||
if(mScriptEngine != null){
|
||||
mScriptEngine.put("activity", null);
|
||||
mScriptEngine.setTag("activity", null);
|
||||
mScriptEngine.destroy();
|
||||
}
|
||||
mScriptExecution = null;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user