refactor: remove AbstractScriptRuntime
This commit is contained in:
@@ -13,7 +13,6 @@ import com.stardust.autojs.execution.ScriptExecutionListener;
|
||||
import com.stardust.autojs.execution.ScriptExecutionObserver;
|
||||
import com.stardust.autojs.execution.ScriptExecutionTask;
|
||||
import com.stardust.autojs.execution.SimpleScriptExecutionListener;
|
||||
import com.stardust.autojs.runtime.AbstractScriptRuntime;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
@@ -88,7 +87,7 @@ public class ScriptEngineService {
|
||||
mScriptExecutionObserver.registerScriptExecutionListener(GLOBAL_LISTENER);
|
||||
EVENT_BUS.register(this);
|
||||
mScriptEngineManager.putGlobal("context", mUiHandler.getContext());
|
||||
AbstractScriptRuntime.setApplicationContext(builder.mUiHandler.getContext());
|
||||
ScriptRuntime.setApplicationContext(builder.mUiHandler.getContext().getApplicationContext());
|
||||
}
|
||||
|
||||
public Console getGlobalConsole() {
|
||||
|
||||
@@ -1,177 +0,0 @@
|
||||
package com.stardust.autojs.runtime;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.CallSuper;
|
||||
|
||||
import com.stardust.autojs.engine.ScriptEngine;
|
||||
import com.stardust.autojs.runtime.api.AbstractShell;
|
||||
import com.stardust.autojs.runtime.api.AppUtils;
|
||||
import com.stardust.autojs.runtime.api.Loopers;
|
||||
import com.stardust.autojs.runtime.api.ScriptBridges;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.autojs.runtime.api.Events;
|
||||
import com.stardust.autojs.runtime.api.Timers;
|
||||
import com.stardust.autojs.runtime.api.UiSelector;
|
||||
import com.stardust.autojs.runtime.api.image.Images;
|
||||
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
|
||||
import com.stardust.autojs.runtime.api.ui.Dialogs;
|
||||
import com.stardust.autojs.runtime.api.ui.UI;
|
||||
import com.stardust.autojs.runtime.simpleaction.SimpleActionAutomator;
|
||||
import com.stardust.util.ScreenMetrics;
|
||||
import com.stardust.util.UiHandler;
|
||||
import com.stardust.view.accessibility.AccessibilityInfoProvider;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/5/4.
|
||||
*/
|
||||
|
||||
public abstract class AbstractScriptRuntime {
|
||||
|
||||
@ScriptVariable
|
||||
public AppUtils app;
|
||||
|
||||
@ScriptVariable
|
||||
public Console console;
|
||||
|
||||
@ScriptVariable
|
||||
public SimpleActionAutomator automator;
|
||||
|
||||
@ScriptVariable
|
||||
public AccessibilityInfoProvider info;
|
||||
|
||||
@ScriptVariable
|
||||
public UI ui;
|
||||
|
||||
@ScriptVariable
|
||||
public Dialogs dialogs;
|
||||
|
||||
@ScriptVariable
|
||||
public Events events;
|
||||
|
||||
@ScriptVariable
|
||||
public ScriptBridges bridges = new ScriptBridges();
|
||||
|
||||
@ScriptVariable
|
||||
public Loopers loopers;
|
||||
|
||||
@ScriptVariable
|
||||
public Timers timers;
|
||||
|
||||
@ScriptVariable
|
||||
public AccessibilityBridge accessibilityBridge;
|
||||
|
||||
private Images images;
|
||||
|
||||
private UiHandler mUiHandler;
|
||||
private static WeakReference<Context> applicationContext;
|
||||
private Map<String, Object> mProperties = new ConcurrentHashMap<>();
|
||||
|
||||
public AbstractScriptRuntime(UiHandler uiHandler, Console console, AccessibilityBridge bridge, AppUtils appUtils, ScreenCaptureRequester screenCaptureRequester) {
|
||||
this.app = appUtils;
|
||||
this.console = console;
|
||||
accessibilityBridge = bridge;
|
||||
mUiHandler = uiHandler;
|
||||
this.automator = new SimpleActionAutomator(bridge, this);
|
||||
this.info = bridge.getInfoProvider();
|
||||
Context context = uiHandler.getContext();
|
||||
this.ui = new UI(context);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
images = new Images(context, this, screenCaptureRequester);
|
||||
}
|
||||
dialogs = new Dialogs(app, uiHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call in init.js
|
||||
*/
|
||||
@CallSuper
|
||||
public void init() {
|
||||
if (loopers != null)
|
||||
throw new IllegalStateException("already initialized");
|
||||
loopers = new Loopers();
|
||||
events = new Events(mUiHandler.getContext(), accessibilityBridge, bridges, loopers);
|
||||
timers = new Timers(bridges);
|
||||
}
|
||||
|
||||
public static void setApplicationContext(Context context) {
|
||||
applicationContext = new WeakReference<>(context);
|
||||
}
|
||||
|
||||
public static Context getApplicationContext() {
|
||||
if (applicationContext == null || applicationContext.get() == null) {
|
||||
throw new ScriptEnvironmentException("No application context");
|
||||
}
|
||||
return applicationContext.get();
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
public abstract void toast(final String text);
|
||||
|
||||
@ScriptInterface
|
||||
public abstract void sleep(long millis);
|
||||
|
||||
@ScriptInterface
|
||||
public abstract void setClip(final String text);
|
||||
|
||||
@ScriptInterface
|
||||
public abstract AbstractShell getRootShell();
|
||||
|
||||
@ScriptInterface
|
||||
public abstract AbstractShell.Result shell(String cmd, int root);
|
||||
|
||||
@ScriptInterface
|
||||
public abstract UiSelector selector(ScriptEngine engine);
|
||||
|
||||
@ScriptInterface
|
||||
public abstract boolean isStopped();
|
||||
|
||||
@ScriptInterface
|
||||
public abstract void requiresApi(int i);
|
||||
|
||||
@ScriptInterface
|
||||
public abstract void loadJar(String path);
|
||||
|
||||
@ScriptInterface
|
||||
public abstract void exit();
|
||||
|
||||
@ScriptInterface
|
||||
public abstract void setScreenMetrics(int width, int height);
|
||||
|
||||
@ScriptInterface
|
||||
public abstract ScreenMetrics getScreenMetrics();
|
||||
|
||||
public abstract void ensureAccessibilityServiceEnabled();
|
||||
|
||||
@CallSuper
|
||||
public void onExit() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
images.releaseScreenCapturer();
|
||||
}
|
||||
if (events != null)
|
||||
events.recycle();
|
||||
if (loopers != null)
|
||||
loopers.quitAll();
|
||||
}
|
||||
|
||||
public Object getImages() {
|
||||
return images;
|
||||
}
|
||||
|
||||
public Object getProperty(String key) {
|
||||
return mProperties.get(key);
|
||||
}
|
||||
|
||||
public Object putProperty(String key, Object value) {
|
||||
return mProperties.put(key, value);
|
||||
}
|
||||
|
||||
public Object removeProperty(String key) {
|
||||
return mProperties.remove(key);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.stardust.autojs.runtime;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Looper;
|
||||
|
||||
@@ -9,8 +10,15 @@ import com.stardust.autojs.rhino.AndroidClassLoader;
|
||||
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.Events;
|
||||
import com.stardust.autojs.runtime.api.Loopers;
|
||||
import com.stardust.autojs.runtime.api.ScriptBridges;
|
||||
import com.stardust.autojs.runtime.api.Timers;
|
||||
import com.stardust.autojs.runtime.api.UiSelector;
|
||||
import com.stardust.autojs.runtime.api.image.Images;
|
||||
import com.stardust.autojs.runtime.api.image.ScreenCaptureRequester;
|
||||
import com.stardust.autojs.runtime.api.ui.Dialogs;
|
||||
import com.stardust.autojs.runtime.simpleaction.SimpleActionAutomator;
|
||||
import com.stardust.concurrent.VolatileBox;
|
||||
import com.stardust.autojs.runtime.api.ui.UI;
|
||||
import com.stardust.pio.UncheckedIOException;
|
||||
@@ -20,21 +28,26 @@ import com.stardust.util.ScreenMetrics;
|
||||
import com.stardust.util.SdkVersionUtil;
|
||||
import com.stardust.util.Supplier;
|
||||
import com.stardust.util.UiHandler;
|
||||
import com.stardust.view.accessibility.AccessibilityInfoProvider;
|
||||
|
||||
import org.mozilla.javascript.ContextFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/1/27.
|
||||
*/
|
||||
|
||||
public class ScriptRuntime extends AbstractScriptRuntime {
|
||||
public class ScriptRuntime {
|
||||
|
||||
private static final String TAG = "ScriptRuntime";
|
||||
|
||||
|
||||
public static class Builder {
|
||||
private UiHandler mUiHandler;
|
||||
private Console mConsole;
|
||||
@@ -83,20 +96,84 @@ public class ScriptRuntime extends AbstractScriptRuntime {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ScriptVariable
|
||||
public final AppUtils app;
|
||||
|
||||
@ScriptVariable
|
||||
public final Console console;
|
||||
|
||||
@ScriptVariable
|
||||
public final SimpleActionAutomator automator;
|
||||
|
||||
@ScriptVariable
|
||||
public final AccessibilityInfoProvider info;
|
||||
|
||||
@ScriptVariable
|
||||
public final UI ui;
|
||||
|
||||
@ScriptVariable
|
||||
public final Dialogs dialogs;
|
||||
|
||||
@ScriptVariable
|
||||
public Events events;
|
||||
|
||||
@ScriptVariable
|
||||
public final ScriptBridges bridges = new ScriptBridges();
|
||||
|
||||
@ScriptVariable
|
||||
public Loopers loopers;
|
||||
|
||||
@ScriptVariable
|
||||
public Timers timers;
|
||||
|
||||
@ScriptVariable
|
||||
public final AccessibilityBridge accessibilityBridge;
|
||||
|
||||
private Images images;
|
||||
|
||||
private static WeakReference<Context> applicationContext;
|
||||
private Map<String, Object> mProperties = new ConcurrentHashMap<>();
|
||||
private UiHandler mUiHandler;
|
||||
private AccessibilityBridge mAccessibilityBridge;
|
||||
private AbstractShell mRootShell;
|
||||
private Supplier<AbstractShell> mShellSupplier;
|
||||
private ScreenMetrics mScreenMetrics = new ScreenMetrics();
|
||||
|
||||
|
||||
protected ScriptRuntime(Builder builder) {
|
||||
super(builder.mUiHandler, builder.mConsole, builder.mAccessibilityBridge, builder.mAppUtils, builder.mScreenCaptureRequester);
|
||||
mAccessibilityBridge = builder.mAccessibilityBridge;
|
||||
app = builder.mAppUtils;
|
||||
mUiHandler = builder.mUiHandler;
|
||||
console = builder.mConsole;
|
||||
accessibilityBridge = builder.mAccessibilityBridge;
|
||||
mShellSupplier = builder.mShellSupplier;
|
||||
ui = new UI(mUiHandler.getContext());
|
||||
this.automator = new SimpleActionAutomator(accessibilityBridge, this);
|
||||
automator.setScreenMetrics(mScreenMetrics);
|
||||
this.info = accessibilityBridge.getInfoProvider();
|
||||
Context context = mUiHandler.getContext();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
images = new Images(context, this, builder.mScreenCaptureRequester);
|
||||
}
|
||||
dialogs = new Dialogs(app, mUiHandler);
|
||||
}
|
||||
|
||||
public void init() {
|
||||
if (loopers != null)
|
||||
throw new IllegalStateException("already initialized");
|
||||
loopers = new Loopers();
|
||||
events = new Events(mUiHandler.getContext(), accessibilityBridge, bridges, loopers);
|
||||
timers = new Timers(bridges);
|
||||
}
|
||||
|
||||
public static void setApplicationContext(Context context) {
|
||||
applicationContext = new WeakReference<>(context);
|
||||
}
|
||||
|
||||
public static Context getApplicationContext() {
|
||||
if (applicationContext == null || applicationContext.get() == null) {
|
||||
throw new ScriptEnvironmentException("No application context");
|
||||
}
|
||||
return applicationContext.get();
|
||||
}
|
||||
|
||||
public UiHandler getUiHandler() {
|
||||
@@ -104,7 +181,7 @@ public class ScriptRuntime extends AbstractScriptRuntime {
|
||||
}
|
||||
|
||||
public AccessibilityBridge getAccessibilityBridge() {
|
||||
return mAccessibilityBridge;
|
||||
return accessibilityBridge;
|
||||
}
|
||||
|
||||
public void toast(final String text) {
|
||||
@@ -142,7 +219,6 @@ public class ScriptRuntime extends AbstractScriptRuntime {
|
||||
return clip.blockedGetOrThrow(ScriptInterruptedException.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractShell getRootShell() {
|
||||
ensureRootShell();
|
||||
return mRootShell;
|
||||
@@ -164,7 +240,7 @@ public class ScriptRuntime extends AbstractScriptRuntime {
|
||||
}
|
||||
|
||||
public UiSelector selector(ScriptEngine engine) {
|
||||
return new UiSelector(mAccessibilityBridge);
|
||||
return new UiSelector(accessibilityBridge);
|
||||
}
|
||||
|
||||
public boolean isStopped() {
|
||||
@@ -196,27 +272,47 @@ public class ScriptRuntime extends AbstractScriptRuntime {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setScreenMetrics(int width, int height) {
|
||||
mScreenMetrics.setScreenMetrics(width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScreenMetrics getScreenMetrics() {
|
||||
return mScreenMetrics;
|
||||
}
|
||||
|
||||
public void ensureAccessibilityServiceEnabled() {
|
||||
mAccessibilityBridge.ensureServiceEnabled();
|
||||
accessibilityBridge.ensureServiceEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onExit() {
|
||||
super.onExit();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
images.releaseScreenCapturer();
|
||||
}
|
||||
if (events != null)
|
||||
events.recycle();
|
||||
if (loopers != null)
|
||||
loopers.quitAll();
|
||||
if (mRootShell != null) {
|
||||
mRootShell.exit();
|
||||
mRootShell = null;
|
||||
}
|
||||
mShellSupplier = null;
|
||||
}
|
||||
|
||||
public Object getImages() {
|
||||
return images;
|
||||
}
|
||||
|
||||
public Object getProperty(String key) {
|
||||
return mProperties.get(key);
|
||||
}
|
||||
|
||||
public Object putProperty(String key, Object value) {
|
||||
return mProperties.put(key, value);
|
||||
}
|
||||
|
||||
public Object removeProperty(String key) {
|
||||
return mProperties.remove(key);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@ import android.os.Handler;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
|
||||
import com.stardust.autojs.runtime.AbstractScriptRuntime;
|
||||
import com.stardust.autojs.runtime.ScriptInterruptedException;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.lang.ThreadCompat;
|
||||
import com.stardust.pio.UncheckedIOException;
|
||||
|
||||
@@ -84,7 +84,7 @@ public class Shell extends AbstractShell implements AutoCloseable {
|
||||
}
|
||||
|
||||
public Shell(boolean root) {
|
||||
this(AbstractScriptRuntime.getApplicationContext(), root);
|
||||
this(ScriptRuntime.getApplicationContext(), root);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -14,7 +14,7 @@ import android.os.Handler;
|
||||
import android.support.annotation.RequiresApi;
|
||||
import android.util.Log;
|
||||
|
||||
import com.stardust.autojs.runtime.AbstractScriptRuntime;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.runtime.ScriptInterruptedException;
|
||||
import com.stardust.autojs.runtime.ScriptVariable;
|
||||
import com.stardust.autojs.runtime.api.Loopers;
|
||||
@@ -33,7 +33,7 @@ import java.util.Locale;
|
||||
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
|
||||
public class Images {
|
||||
|
||||
private AbstractScriptRuntime mScriptRuntime;
|
||||
private ScriptRuntime mScriptRuntime;
|
||||
private ScreenCaptureRequester mScreenCaptureRequester;
|
||||
private ScreenCapturer mScreenCapturer;
|
||||
private Context mContext;
|
||||
@@ -41,7 +41,7 @@ public class Images {
|
||||
@ScriptVariable
|
||||
public ColorFinder colorFinder = new ColorFinder();
|
||||
|
||||
public Images(Context context, AbstractScriptRuntime scriptRuntime, ScreenCaptureRequester screenCaptureRequester) {
|
||||
public Images(Context context, ScriptRuntime scriptRuntime, ScreenCaptureRequester screenCaptureRequester) {
|
||||
mScriptRuntime = scriptRuntime;
|
||||
mScreenCaptureRequester = screenCaptureRequester;
|
||||
mContext = context;
|
||||
|
||||
@@ -10,9 +10,9 @@ import android.support.annotation.RequiresApi;
|
||||
import android.util.Log;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.autojs.runtime.AbstractScriptRuntime;
|
||||
import com.stardust.autojs.runtime.AccessibilityBridge;
|
||||
import com.stardust.autojs.runtime.ScriptInterface;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.runtime.api.AutomatorConfig;
|
||||
import com.stardust.autojs.runtime.api.Loopers;
|
||||
import com.stardust.automator.GlobalActionAutomator;
|
||||
@@ -32,11 +32,11 @@ public class SimpleActionAutomator {
|
||||
private static final String TAG = "SimpleActionAutomator";
|
||||
|
||||
private AccessibilityBridge mAccessibilityBridge;
|
||||
private AbstractScriptRuntime mScriptRuntime;
|
||||
private ScriptRuntime mScriptRuntime;
|
||||
private GlobalActionAutomator mGlobalActionAutomator;
|
||||
private ScreenMetrics mScreenMetrics;
|
||||
|
||||
public SimpleActionAutomator(AccessibilityBridge accessibilityBridge, AbstractScriptRuntime scriptRuntime) {
|
||||
public SimpleActionAutomator(AccessibilityBridge accessibilityBridge, ScriptRuntime scriptRuntime) {
|
||||
mAccessibilityBridge = accessibilityBridge;
|
||||
mScriptRuntime = scriptRuntime;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user