Files
AutoJs6/app/src/main/java/com/stardust/scriptdroid/autojs/AutoJs.java

141 lines
5.5 KiB
Java

package com.stardust.scriptdroid.autojs;
import android.accessibilityservice.AccessibilityService;
import android.content.Context;
import android.support.annotation.Nullable;
import com.stardust.autojs.ScriptEngineService;
import com.stardust.autojs.ScriptEngineServiceBuilder;
import com.stardust.autojs.engine.NodeJsJavaScriptEngineManager;
import com.stardust.autojs.runtime.*;
import com.stardust.autojs.runtime.api.Console;
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;
import com.stardust.scriptdroid.scripts.StorageScriptProvider;
import com.stardust.view.accessibility.AccessibilityInfoProvider;
import com.stardust.scriptdroid.layout_inspector.LayoutInspector;
import com.stardust.scriptdroid.record.accessibility.AccessibilityActionRecorder;
import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
import com.stardust.scriptdroid.ui.console.TimberConsole;
import com.stardust.view.accessibility.AccessibilityServiceUtils;
/**
* Created by Stardust on 2017/4/2.
*/
public class AutoJs implements AccessibilityBridge {
private static AutoJs instance;
public static AutoJs getInstance() {
return instance;
}
public static void initInstance(Context 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 LayoutInspector mLayoutInspector = new LayoutInspector();
private final ScriptEngineService mScriptEngineService;
private final AccessibilityInfoProvider mAccessibilityInfoProvider;
private final ScriptRuntime mRuntime;
private AutoJs(Context context) {
mAccessibilityInfoProvider = new AccessibilityInfoProvider(context.getPackageManager());
Console console = new TimberConsole();
mRuntime = new ScriptRuntime(context, console, this);
NodeJsJavaScriptEngineManager manager = new NodeJsJavaScriptEngineManager(context, mRuntime);
manager.setRequirePath(StorageScriptProvider.DEFAULT_DIRECTORY_PATH);
mScriptEngineService = new ScriptEngineServiceBuilder()
.context(context)
.engineManger(manager)
.console(console)
.runtime(mRuntime)
.build();
ScriptEngineService.setInstance(mScriptEngineService);
addAccessibilityServiceDelegates();
getGlobalFunctions();
}
private void getGlobalFunctions() {
new Thread(new Runnable() {
@Override
public void run() {
mScriptEngineService.getGlobalFunctions();
}
}).start();
}
private void addAccessibilityServiceDelegates() {
AccessibilityWatchDogService.addDelegate(100, mAccessibilityInfoProvider);
// AccessibilityWatchDogService.addDelegate(200, mLayoutInspector);
AccessibilityWatchDogService.addDelegate(300, mAccessibilityActionRecorder);
// AccessibilityWatchDogService.addDelegate(400, mSimpleActionPerformHost);
//AccessibilityWatchDogService.addDelegate(500, mAccessibilityEventCommandHost);
}
public AccessibilityActionRecorder getAccessibilityActionRecorder() {
return mAccessibilityActionRecorder;
}
public LayoutInspector getLayoutInspector() {
return mLayoutInspector;
}
@Override
public AccessibilityEventCommandHost getCommandHost() {
return mAccessibilityEventCommandHost;
}
@Override
public SimpleActionPerformHost getActionPerformHost() {
return mSimpleActionPerformHost;
}
@Nullable
@Override
public AccessibilityService getService() {
return AccessibilityWatchDogService.getInstance();
}
@Override
public void ensureServiceEnabled() {
if (AccessibilityWatchDogService.getInstance() == null) {
String errorMessage = null;
if (AccessibilityServiceUtils.isAccessibilityServiceEnabled(App.getApp(), AccessibilityWatchDogService.class)) {
errorMessage = App.getApp().getString(R.string.text_auto_operate_service_enabled_but_not_running);
} else {
if (Pref.def().getBoolean(App.getApp().getString(R.string.key_enable_accessibility_service_by_root), false)) {
if (!AccessibilityServiceTool.enableAccessibilityServiceByRootAndWaitFor(AccessibilityWatchDogService.class, 3000)) {
errorMessage = App.getApp().getString(R.string.text_enable_accessibility_service_by_root_timeout);
}
} else {
errorMessage = App.getApp().getString(R.string.text_no_accessibility_permission);
}
}
if (errorMessage != null) {
mRuntime.toast(errorMessage);
throw new ScriptStopException(errorMessage);
}
}
}
@Override
public AccessibilityInfoProvider getInfoProvider() {
return mAccessibilityInfoProvider;
}
public ScriptEngineService getScriptEngineService() {
return mScriptEngineService;
}
}