refactor: remove SimpleActionPerformHost and AccessibilityEventCommandHost

This commit is contained in:
hyb1996 2017-07-30 16:28:26 +08:00
parent d44a7921df
commit dc9f8f417a
8 changed files with 4 additions and 276 deletions

View File

@ -5,6 +5,10 @@ toast("请打开一个聊天窗口");
sleep(500);
while(true){
if(currentPackage() == "com.stardust.scriptdroid"){
sleep(300);
continue;
}
setText("我喜欢你");
click("发送");
}

View File

@ -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() {

View File

@ -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")

View File

@ -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();

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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);
}
}
}
}

View File

@ -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() {