mirror of
https://github.com/TonyJiangWJ/Auto.js.git
synced 2026-06-21 21:01:43 +08:00
refactor: remove SimpleActionPerformHost and AccessibilityEventCommandHost
This commit is contained in:
parent
d44a7921df
commit
dc9f8f417a
@ -5,6 +5,10 @@ toast("请打开一个聊天窗口");
|
||||
sleep(500);
|
||||
|
||||
while(true){
|
||||
if(currentPackage() == "com.stardust.scriptdroid"){
|
||||
sleep(300);
|
||||
continue;
|
||||
}
|
||||
setText("我喜欢你");
|
||||
click("发送");
|
||||
}
|
||||
@ -6,7 +6,6 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.RequiresApi;
|
||||
import android.view.KeyEvent;
|
||||
|
||||
import com.stardust.app.OnActivityResultDelegate;
|
||||
import com.stardust.app.SimpleActivityLifecycleCallbacks;
|
||||
@ -21,8 +20,6 @@ import com.stardust.autojs.runtime.api.AbstractShell;
|
||||
import com.stardust.autojs.runtime.api.AppUtils;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
|
||||
import com.stardust.automator.AccessibilityEventCommandHost;
|
||||
import com.stardust.automator.simple_action.SimpleActionPerformHost;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.R;
|
||||
@ -57,8 +54,6 @@ public class AutoJs implements AccessibilityBridge {
|
||||
instance = new AutoJs(context);
|
||||
}
|
||||
|
||||
private final AccessibilityEventCommandHost mAccessibilityEventCommandHost = new AccessibilityEventCommandHost();
|
||||
private final SimpleActionPerformHost mSimpleActionPerformHost = new SimpleActionPerformHost();
|
||||
private final AccessibilityActionRecorder mAccessibilityActionRecorder = new AccessibilityActionRecorder();
|
||||
private final LayoutInspector mLayoutInspector = new LayoutInspector();
|
||||
private final ScriptEngineService mScriptEngineService;
|
||||
@ -146,8 +141,6 @@ public class AutoJs implements AccessibilityBridge {
|
||||
private void addAccessibilityServiceDelegates() {
|
||||
AccessibilityService.addDelegate(100, mAccessibilityInfoProvider);
|
||||
AccessibilityService.addDelegate(300, mAccessibilityActionRecorder);
|
||||
// AccessibilityService.addDelegate(400, mSimpleActionPerformHost);
|
||||
//AccessibilityService.addDelegate(500, mAccessibilityEventCommandHost);
|
||||
}
|
||||
|
||||
public AccessibilityActionRecorder getAccessibilityActionRecorder() {
|
||||
@ -166,16 +159,6 @@ public class AutoJs implements AccessibilityBridge {
|
||||
return mLayoutInspector;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AccessibilityEventCommandHost getCommandHost() {
|
||||
return mAccessibilityEventCommandHost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SimpleActionPerformHost getActionPerformHost() {
|
||||
return mSimpleActionPerformHost;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public AccessibilityService getService() {
|
||||
|
||||
@ -110,32 +110,6 @@ public class AboutActivity extends BaseActivity {
|
||||
.show();
|
||||
}
|
||||
|
||||
private void uiObjectCreateTest() {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int i = 0;
|
||||
while (true) {
|
||||
AccessibilityNodeInfo root = AccessibilityService.getInstance().getRootInActiveWindow();
|
||||
if (root != null) {
|
||||
UiObject uiObject = UiObject.createRoot(root);
|
||||
UiObject child = uiObject.child(0);
|
||||
if (i % 1000 == 0) {
|
||||
Log.v(TAG, String.valueOf(i));
|
||||
Log.v(TAG, Runtime.getRuntime().totalMemory() + "/" + Runtime.getRuntime().maxMemory());
|
||||
if (child != null)
|
||||
Log.v(TAG, String.valueOf(child.getChildCount()));
|
||||
}
|
||||
if (child != null)
|
||||
child.recycle();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
|
||||
}
|
||||
|
||||
private void crashTest() {
|
||||
new ThemeColorMaterialDialogBuilder(this)
|
||||
.title("Crash Test")
|
||||
|
||||
@ -2,8 +2,6 @@ package com.stardust.autojs.runtime;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.stardust.automator.AccessibilityEventCommandHost;
|
||||
import com.stardust.automator.simple_action.SimpleActionPerformHost;
|
||||
import com.stardust.view.accessibility.AccessibilityInfoProvider;
|
||||
import com.stardust.view.accessibility.AccessibilityService;
|
||||
|
||||
@ -17,9 +15,6 @@ public interface AccessibilityBridge {
|
||||
|
||||
AccessibilityInfoProvider getInfoProvider();
|
||||
|
||||
AccessibilityEventCommandHost getCommandHost();
|
||||
|
||||
SimpleActionPerformHost getActionPerformHost();
|
||||
|
||||
@Nullable
|
||||
AccessibilityService getService();
|
||||
|
||||
@ -5,13 +5,11 @@ import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.Log;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.autojs.runtime.AccessibilityBridge;
|
||||
import com.stardust.autojs.runtime.ScriptInterface;
|
||||
import com.stardust.autojs.runtime.ScriptInterruptedException;
|
||||
import com.stardust.automator.AccessibilityEventCommandHost;
|
||||
import com.stardust.automator.ActionArgument;
|
||||
import com.stardust.automator.UiGlobalSelector;
|
||||
import com.stardust.automator.UiObject;
|
||||
|
||||
@ -1,120 +0,0 @@
|
||||
package com.stardust.automator;
|
||||
|
||||
import android.accessibilityservice.AccessibilityService;
|
||||
import android.util.Log;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.view.accessibility.AccessibilityDelegate;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/3/9.
|
||||
*/
|
||||
|
||||
public class AccessibilityEventCommandHost implements AccessibilityDelegate {
|
||||
|
||||
|
||||
public interface Command {
|
||||
|
||||
void execute(AccessibilityService service, AccessibilityEvent event);
|
||||
|
||||
boolean isValid();
|
||||
|
||||
void setValid(boolean valid);
|
||||
}
|
||||
|
||||
public abstract static class AbstractCommand implements Command {
|
||||
|
||||
private boolean mValid;
|
||||
|
||||
public synchronized boolean isValid() {
|
||||
return mValid;
|
||||
}
|
||||
|
||||
public synchronized void setValid(boolean valid) {
|
||||
mValid = valid;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static final String TAG = "CommandHostDelegate";
|
||||
|
||||
public static final int RUN_MODE_SINGLE_THREAD = 0;
|
||||
public static final int RUN_MODE_THREAD_POOL = 1;
|
||||
public static final int RUN_MODE_NEW_THREAD_EVERY_TIME = 2;
|
||||
|
||||
|
||||
private final Queue<Command> mCommands = new LinkedList<>();
|
||||
private Executor mExecutor = Executors.newSingleThreadExecutor();
|
||||
private int mRunMode = RUN_MODE_THREAD_POOL;
|
||||
|
||||
@Override
|
||||
public boolean onAccessibilityEvent(final AccessibilityService service, final AccessibilityEvent event) {
|
||||
synchronized (mCommands) {
|
||||
if (!mCommands.isEmpty()) {
|
||||
Log.v(TAG, "will execute " + mCommands.size() + " commands");
|
||||
}
|
||||
while (!mCommands.isEmpty()) {
|
||||
final Command command = mCommands.poll();
|
||||
if (command.isValid()) {
|
||||
executeCommand(command, service, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Integer> getEventTypes() {
|
||||
return null;
|
||||
}
|
||||
|
||||
private void executeCommand(final Command command, final AccessibilityService service, final AccessibilityEvent event) {
|
||||
final Runnable r = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!command.isValid()) {
|
||||
return;
|
||||
}
|
||||
Log.v(TAG, "executing " + command);
|
||||
command.execute(service, event);
|
||||
synchronized (command) {
|
||||
command.notify();
|
||||
}
|
||||
}
|
||||
};
|
||||
if (mRunMode == RUN_MODE_SINGLE_THREAD) {
|
||||
r.run();
|
||||
} else if (mRunMode == RUN_MODE_NEW_THREAD_EVERY_TIME) {
|
||||
new Thread(r).start();
|
||||
} else {
|
||||
mExecutor.execute(r);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void executeAndWaitForEvent(Command command) {
|
||||
synchronized (mCommands) {
|
||||
mCommands.offer(command);
|
||||
}
|
||||
synchronized (command) {
|
||||
try {
|
||||
command.wait();
|
||||
} catch (InterruptedException e) {
|
||||
command.setValid(false);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setRunMode(int mode) {
|
||||
mRunMode = mode;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,90 +0,0 @@
|
||||
package com.stardust.automator.simple_action;
|
||||
|
||||
import android.accessibilityservice.AccessibilityService;
|
||||
import android.util.Log;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.automator.UiObject;
|
||||
import com.stardust.view.accessibility.AccessibilityDelegate;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/1/21.
|
||||
*/
|
||||
|
||||
public class SimpleActionPerformHost implements AccessibilityDelegate {
|
||||
|
||||
private static final String TAG = "ActionPerformDelegate";
|
||||
|
||||
private BlockingQueue<SimpleAction> mSimpleAction = new ArrayBlockingQueue<>(1);
|
||||
private Executor mExecutor = Executors.newSingleThreadExecutor();
|
||||
|
||||
public void addToActionQueueAndWait(SimpleAction simpleAction) throws InterruptedException {
|
||||
mSimpleAction.put(simpleAction);
|
||||
synchronized (simpleAction) {
|
||||
simpleAction.wait();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onAccessibilityEvent(AccessibilityService service, AccessibilityEvent event) {
|
||||
SimpleAction action = mSimpleAction.poll();
|
||||
if (action == null)
|
||||
return false;
|
||||
AccessibilityNodeInfo root = service.getRootInActiveWindow();
|
||||
if (root == null) {
|
||||
return false;
|
||||
}
|
||||
performAction(root, action);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Integer> getEventTypes() {
|
||||
return null;
|
||||
}
|
||||
|
||||
private void performAction(AccessibilityNodeInfo root, SimpleAction simpleAction) {
|
||||
mExecutor.execute(new SimpleActionPerformRunnable(root, simpleAction));
|
||||
}
|
||||
|
||||
|
||||
private synchronized void onActionPerformed(SimpleAction simpleAction) {
|
||||
synchronized (simpleAction) {
|
||||
simpleAction.notify();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class SimpleActionPerformRunnable implements Runnable {
|
||||
|
||||
private final SimpleAction mSimpleAction;
|
||||
private final AccessibilityNodeInfo mRoot;
|
||||
|
||||
SimpleActionPerformRunnable(AccessibilityNodeInfo root, SimpleAction simpleAction) {
|
||||
mRoot = root;
|
||||
mSimpleAction = simpleAction;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (!mSimpleAction.isValid()) {
|
||||
return;
|
||||
}
|
||||
Log.i(TAG, "perform simpleAction: " + mSimpleAction);
|
||||
if (mSimpleAction.perform(UiObject.createRoot(mRoot))) {
|
||||
mSimpleAction.setResult(true);
|
||||
onActionPerformed(mSimpleAction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -20,13 +20,10 @@ import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.runtime.ScriptStopException;
|
||||
import com.stardust.autojs.runtime.api.AbstractShell;
|
||||
import com.stardust.autojs.runtime.api.AppUtils;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.autojs.runtime.api.Shell;
|
||||
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity;
|
||||
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
|
||||
import com.stardust.autojs.runtime.console.StardustConsole;
|
||||
import com.stardust.automator.AccessibilityEventCommandHost;
|
||||
import com.stardust.automator.simple_action.SimpleActionPerformHost;
|
||||
import com.stardust.util.ScreenMetrics;
|
||||
import com.stardust.util.Supplier;
|
||||
import com.stardust.util.UiHandler;
|
||||
@ -50,8 +47,6 @@ public class AutoJs implements AccessibilityBridge {
|
||||
instance = new AutoJs(context);
|
||||
}
|
||||
|
||||
private final AccessibilityEventCommandHost mAccessibilityEventCommandHost = new AccessibilityEventCommandHost();
|
||||
private final SimpleActionPerformHost mSimpleActionPerformHost = new SimpleActionPerformHost();
|
||||
private final ScriptEngineService mScriptEngineService;
|
||||
private final AccessibilityInfoProvider mAccessibilityInfoProvider;
|
||||
private final UiHandler mUiHandler;
|
||||
@ -138,17 +133,6 @@ public class AutoJs implements AccessibilityBridge {
|
||||
AccessibilityService.addDelegate(100, mAccessibilityInfoProvider);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public AccessibilityEventCommandHost getCommandHost() {
|
||||
return mAccessibilityEventCommandHost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SimpleActionPerformHost getActionPerformHost() {
|
||||
return mSimpleActionPerformHost;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public AccessibilityService getService() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user