refactor: remove SimpleActionPerformHost and AccessibilityEventCommandHost
This commit is contained in:
@@ -5,6 +5,10 @@ toast("请打开一个聊天窗口");
|
|||||||
sleep(500);
|
sleep(500);
|
||||||
|
|
||||||
while(true){
|
while(true){
|
||||||
|
if(currentPackage() == "com.stardust.scriptdroid"){
|
||||||
|
sleep(300);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
setText("我喜欢你");
|
setText("我喜欢你");
|
||||||
click("发送");
|
click("发送");
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,6 @@ import android.os.Build;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.annotation.RequiresApi;
|
import android.support.annotation.RequiresApi;
|
||||||
import android.view.KeyEvent;
|
|
||||||
|
|
||||||
import com.stardust.app.OnActivityResultDelegate;
|
import com.stardust.app.OnActivityResultDelegate;
|
||||||
import com.stardust.app.SimpleActivityLifecycleCallbacks;
|
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.AppUtils;
|
||||||
import com.stardust.autojs.runtime.api.Console;
|
import com.stardust.autojs.runtime.api.Console;
|
||||||
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
|
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.App;
|
||||||
import com.stardust.scriptdroid.Pref;
|
import com.stardust.scriptdroid.Pref;
|
||||||
import com.stardust.scriptdroid.R;
|
import com.stardust.scriptdroid.R;
|
||||||
@@ -57,8 +54,6 @@ public class AutoJs implements AccessibilityBridge {
|
|||||||
instance = new AutoJs(context);
|
instance = new AutoJs(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final AccessibilityEventCommandHost mAccessibilityEventCommandHost = new AccessibilityEventCommandHost();
|
|
||||||
private final SimpleActionPerformHost mSimpleActionPerformHost = new SimpleActionPerformHost();
|
|
||||||
private final AccessibilityActionRecorder mAccessibilityActionRecorder = new AccessibilityActionRecorder();
|
private final AccessibilityActionRecorder mAccessibilityActionRecorder = new AccessibilityActionRecorder();
|
||||||
private final LayoutInspector mLayoutInspector = new LayoutInspector();
|
private final LayoutInspector mLayoutInspector = new LayoutInspector();
|
||||||
private final ScriptEngineService mScriptEngineService;
|
private final ScriptEngineService mScriptEngineService;
|
||||||
@@ -146,8 +141,6 @@ public class AutoJs implements AccessibilityBridge {
|
|||||||
private void addAccessibilityServiceDelegates() {
|
private void addAccessibilityServiceDelegates() {
|
||||||
AccessibilityService.addDelegate(100, mAccessibilityInfoProvider);
|
AccessibilityService.addDelegate(100, mAccessibilityInfoProvider);
|
||||||
AccessibilityService.addDelegate(300, mAccessibilityActionRecorder);
|
AccessibilityService.addDelegate(300, mAccessibilityActionRecorder);
|
||||||
// AccessibilityService.addDelegate(400, mSimpleActionPerformHost);
|
|
||||||
//AccessibilityService.addDelegate(500, mAccessibilityEventCommandHost);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AccessibilityActionRecorder getAccessibilityActionRecorder() {
|
public AccessibilityActionRecorder getAccessibilityActionRecorder() {
|
||||||
@@ -166,16 +159,6 @@ public class AutoJs implements AccessibilityBridge {
|
|||||||
return mLayoutInspector;
|
return mLayoutInspector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public AccessibilityEventCommandHost getCommandHost() {
|
|
||||||
return mAccessibilityEventCommandHost;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SimpleActionPerformHost getActionPerformHost() {
|
|
||||||
return mSimpleActionPerformHost;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public AccessibilityService getService() {
|
public AccessibilityService getService() {
|
||||||
|
|||||||
@@ -110,32 +110,6 @@ public class AboutActivity extends BaseActivity {
|
|||||||
.show();
|
.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() {
|
private void crashTest() {
|
||||||
new ThemeColorMaterialDialogBuilder(this)
|
new ThemeColorMaterialDialogBuilder(this)
|
||||||
.title("Crash Test")
|
.title("Crash Test")
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package com.stardust.autojs.runtime;
|
|||||||
|
|
||||||
import android.support.annotation.Nullable;
|
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.AccessibilityInfoProvider;
|
||||||
import com.stardust.view.accessibility.AccessibilityService;
|
import com.stardust.view.accessibility.AccessibilityService;
|
||||||
|
|
||||||
@@ -17,9 +15,6 @@ public interface AccessibilityBridge {
|
|||||||
|
|
||||||
AccessibilityInfoProvider getInfoProvider();
|
AccessibilityInfoProvider getInfoProvider();
|
||||||
|
|
||||||
AccessibilityEventCommandHost getCommandHost();
|
|
||||||
|
|
||||||
SimpleActionPerformHost getActionPerformHost();
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
AccessibilityService getService();
|
AccessibilityService getService();
|
||||||
|
|||||||
@@ -5,13 +5,11 @@ import android.content.Intent;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.accessibility.AccessibilityEvent;
|
|
||||||
import android.view.accessibility.AccessibilityNodeInfo;
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
|
|
||||||
import com.stardust.autojs.runtime.AccessibilityBridge;
|
import com.stardust.autojs.runtime.AccessibilityBridge;
|
||||||
import com.stardust.autojs.runtime.ScriptInterface;
|
import com.stardust.autojs.runtime.ScriptInterface;
|
||||||
import com.stardust.autojs.runtime.ScriptInterruptedException;
|
import com.stardust.autojs.runtime.ScriptInterruptedException;
|
||||||
import com.stardust.automator.AccessibilityEventCommandHost;
|
|
||||||
import com.stardust.automator.ActionArgument;
|
import com.stardust.automator.ActionArgument;
|
||||||
import com.stardust.automator.UiGlobalSelector;
|
import com.stardust.automator.UiGlobalSelector;
|
||||||
import com.stardust.automator.UiObject;
|
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.ScriptStopException;
|
||||||
import com.stardust.autojs.runtime.api.AbstractShell;
|
import com.stardust.autojs.runtime.api.AbstractShell;
|
||||||
import com.stardust.autojs.runtime.api.AppUtils;
|
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.Shell;
|
||||||
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity;
|
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequestActivity;
|
||||||
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
|
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
|
||||||
import com.stardust.autojs.runtime.console.StardustConsole;
|
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.ScreenMetrics;
|
||||||
import com.stardust.util.Supplier;
|
import com.stardust.util.Supplier;
|
||||||
import com.stardust.util.UiHandler;
|
import com.stardust.util.UiHandler;
|
||||||
@@ -50,8 +47,6 @@ public class AutoJs implements AccessibilityBridge {
|
|||||||
instance = new AutoJs(context);
|
instance = new AutoJs(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final AccessibilityEventCommandHost mAccessibilityEventCommandHost = new AccessibilityEventCommandHost();
|
|
||||||
private final SimpleActionPerformHost mSimpleActionPerformHost = new SimpleActionPerformHost();
|
|
||||||
private final ScriptEngineService mScriptEngineService;
|
private final ScriptEngineService mScriptEngineService;
|
||||||
private final AccessibilityInfoProvider mAccessibilityInfoProvider;
|
private final AccessibilityInfoProvider mAccessibilityInfoProvider;
|
||||||
private final UiHandler mUiHandler;
|
private final UiHandler mUiHandler;
|
||||||
@@ -138,17 +133,6 @@ public class AutoJs implements AccessibilityBridge {
|
|||||||
AccessibilityService.addDelegate(100, mAccessibilityInfoProvider);
|
AccessibilityService.addDelegate(100, mAccessibilityInfoProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AccessibilityEventCommandHost getCommandHost() {
|
|
||||||
return mAccessibilityEventCommandHost;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SimpleActionPerformHost getActionPerformHost() {
|
|
||||||
return mSimpleActionPerformHost;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public AccessibilityService getService() {
|
public AccessibilityService getService() {
|
||||||
|
|||||||
Reference in New Issue
Block a user