This commit is contained in:
hyb1996
2017-05-02 11:27:04 +08:00
parent 0d39afccb2
commit 68706fbd98
71 changed files with 759 additions and 514 deletions

View File

@@ -3,9 +3,11 @@ package com.stardust.scriptdroid;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.annotation.Keep;
import android.support.multidex.MultiDexApplication;
import com.flurry.android.FlurryAgent;
import com.squareup.leakcanary.LeakCanary;
import com.stardust.app.SimpleActivityLifecycleCallbacks;
import com.stardust.app.VolumeChangeObserver;
@@ -40,10 +42,16 @@ public class App extends MultiDexApplication {
public void onCreate() {
super.onCreate();
instance = new WeakReference<>(this);
setUpStaticsTool();
setUpDebugEnvironment();
init();
registerActivityLifecycleCallback();
}
private void setUpStaticsTool() {
new FlurryAgent.Builder()
.withLogEnabled(true)
.build(this, "D42MH48ZN4PJC5TKNYZD");
}
@@ -80,6 +88,12 @@ public class App extends MultiDexApplication {
private void registerActivityLifecycleCallback() {
registerActivityLifecycleCallbacks(new SimpleActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
super.onActivityCreated(activity, savedInstanceState);
FlurryAgent.logEvent(activity.getClass().getSimpleName());
}
@Override
public void onActivityPaused(Activity activity) {
currentActivity = null;

View File

@@ -2,19 +2,24 @@ package com.stardust.scriptdroid.autojs;
import android.accessibilityservice.AccessibilityService;
import android.content.Context;
import android.os.Handler;
import android.support.annotation.Nullable;
import com.flurry.android.FlurryAgent;
import com.stardust.autojs.ScriptEngineService;
import com.stardust.autojs.ScriptEngineServiceBuilder;
import com.stardust.autojs.ScriptExecutionListener;
import com.stardust.autojs.engine.JavaScriptEngine;
import com.stardust.autojs.engine.NodeJsJavaScriptEngineManager;
import com.stardust.autojs.runtime.*;
import com.stardust.autojs.runtime.api.Console;
import com.stardust.autojs.script.ScriptSource;
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.util.Supplier;
import com.stardust.view.accessibility.AccessibilityInfoProvider;
import com.stardust.scriptdroid.layout_inspector.LayoutInspector;
import com.stardust.scriptdroid.record.accessibility.AccessibilityActionRecorder;
@@ -46,23 +51,49 @@ public class AutoJs implements AccessibilityBridge {
private final LayoutInspector mLayoutInspector = new LayoutInspector();
private final ScriptEngineService mScriptEngineService;
private final AccessibilityInfoProvider mAccessibilityInfoProvider;
private final ScriptRuntime mRuntime;
private final Handler mUiHandler;
private AutoJs(Context context) {
private AutoJs(final Context context) {
mUiHandler = new Handler(context.getMainLooper());
mAccessibilityInfoProvider = new AccessibilityInfoProvider(context.getPackageManager());
Console console = new TimberConsole();
mRuntime = new ScriptRuntime(context, console, this);
NodeJsJavaScriptEngineManager manager = new NodeJsJavaScriptEngineManager(context, mRuntime);
NodeJsJavaScriptEngineManager manager = new NodeJsJavaScriptEngineManager(context);
manager.setRequirePath(StorageScriptProvider.DEFAULT_DIRECTORY_PATH);
mScriptEngineService = new ScriptEngineServiceBuilder()
.context(context)
.engineManger(manager)
.console(console)
.runtime(mRuntime)
.runtime(new Supplier<ScriptRuntime>() {
@Override
public ScriptRuntime get() {
return new ScriptRuntime(context, mUiHandler, new TimberConsole(), AutoJs.this);
}
})
.build();
ScriptEngineService.setInstance(mScriptEngineService);
addAccessibilityServiceDelegates();
setDefaultScriptExecutionListener(mScriptEngineService);
}
private static void setDefaultScriptExecutionListener(ScriptEngineService scriptEngineService) {
final ScriptExecutionListener listener = scriptEngineService.getDefaultScriptExecutionListener();
scriptEngineService.setDefaultScriptExecutionListener(new ScriptExecutionListener() {
@Override
public void onStart(JavaScriptEngine engine, ScriptSource source) {
listener.onStart(engine, source);
FlurryAgent.logEvent("EXEC:" + source.toString());
}
@Override
public void onSuccess(JavaScriptEngine engine, ScriptSource source, Object result) {
listener.onSuccess(engine, source, result);
}
@Override
public void onException(JavaScriptEngine engine, ScriptSource source, Exception e) {
listener.onException(engine, source, e);
}
});
}
private void addAccessibilityServiceDelegates() {
@@ -113,7 +144,6 @@ public class AutoJs implements AccessibilityBridge {
}
}
if (errorMessage != null) {
mRuntime.toast(errorMessage);
throw new ScriptStopException(errorMessage);
}
}

View File

@@ -154,11 +154,7 @@ public class HoverMenuService extends Service {
}
private void captureCurrentWindow() {
NodeInfo nodeInfo = AutoJs.getInstance().getLayoutInspector().captureCurrentWindow();
if (nodeInfo == null)
return;
mFloatingLayoutHierarchyView.setRootNode(nodeInfo);
mFloatingLayoutBoundsView.setRootNode(nodeInfo);
AutoJs.getInstance().getLayoutInspector().captureCurrentWindow();
}
@Nullable
@@ -216,11 +212,13 @@ public class HoverMenuService extends Service {
}
private void showLayoutBounds() {
mFloatingLayoutBoundsView.setRootNode(AutoJs.getInstance().getLayoutInspector().getCapture());
mWindowHoverMenu.getHoverMenuView().setVisibility(View.GONE);
showView(mFloatingLayoutBoundsView);
}
public void showLayoutHierarchy() {
mFloatingLayoutHierarchyView.setRootNode(AutoJs.getInstance().getLayoutInspector().getCapture());
mWindowHoverMenu.getHoverMenuView().setVisibility(View.GONE);
showView(mFloatingLayoutHierarchyView);
}

View File

@@ -12,6 +12,7 @@ import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
import com.stardust.scriptdroid.layout_inspector.LayoutInspector;
import com.stardust.util.ClipboardUtil;
import com.stardust.scriptdroid.ui.main.MainActivity;
import com.stardust.util.MessageEvent;
@@ -47,20 +48,31 @@ public class MainMenuNavigatorContent implements NavigatorContent {
@ViewBinding.Click(R.id.layout_hierarchy)
private void showLayoutHierarchy() {
if (AutoJs.getInstance().getLayoutInspector().getCapture() == null) {
Toast.makeText(mView.getContext(), R.string.text_no_accessibility_permission_to_capture, Toast.LENGTH_SHORT).show();
} else {
HoverMenuService.postEvent(new MessageEvent(HoverMenuService.MESSAGE_SHOW_LAYOUT_HIERARCHY));
if (!ensureCapture()) {
return;
}
HoverMenuService.postEvent(new MessageEvent(HoverMenuService.MESSAGE_SHOW_LAYOUT_HIERARCHY));
}
private boolean ensureCapture() {
LayoutInspector inspector = AutoJs.getInstance().getLayoutInspector();
if (inspector.isDumping()) {
Toast.makeText(mView.getContext(), R.string.text_layout_inspector_is_dumping, Toast.LENGTH_SHORT).show();
return false;
}
if (inspector.getCapture() == null) {
Toast.makeText(mView.getContext(), R.string.text_no_accessibility_permission_to_capture, Toast.LENGTH_SHORT).show();
return false;
}
return true;
}
@ViewBinding.Click(R.id.layout_bounds)
private void showLayoutBounds() {
if (AutoJs.getInstance().getLayoutInspector().getCapture() == null) {
Toast.makeText(mView.getContext(), R.string.text_no_accessibility_permission_to_capture, Toast.LENGTH_SHORT).show();
} else {
HoverMenuService.postEvent(new MessageEvent(HoverMenuService.MESSAGE_SHOW_LAYOUT_BOUNDS));
if (!ensureCapture()) {
return;
}
HoverMenuService.postEvent(new MessageEvent(HoverMenuService.MESSAGE_SHOW_LAYOUT_BOUNDS));
}
@ViewBinding.Click(R.id.stop_all_running_scripts)

View File

@@ -118,7 +118,7 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat
private void resumeRecord() {
mRecorder.resume();
setState(Recorder.STATE_RECORDING);
EventBus.getDefault().post(new MessageEvent(HoverMenuService.MESSAGE_COLLAPSE_MENU));
HoverMenuService.postEvent(new MessageEvent(HoverMenuService.MESSAGE_COLLAPSE_MENU));
}
private void pauseRecord() {
@@ -131,7 +131,7 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat
mRecorder.setOnStateChangedListener(this);
mRecorder.start();
setState(Recorder.STATE_RECORDING);
EventBus.getDefault().post(new MessageEvent(HoverMenuService.MESSAGE_COLLAPSE_MENU));
HoverMenuService.postEvent(new MessageEvent(HoverMenuService.MESSAGE_COLLAPSE_MENU));
}
private void setState(int state) {
@@ -147,7 +147,7 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat
private void stopRecord() {
mRecorder.stop();
setState(Recorder.STATE_STOPPED);
EventBus.getDefault().post(new MessageEvent(HoverMenuService.MESSAGE_COLLAPSE_MENU));
HoverMenuService.postEvent(new MessageEvent(HoverMenuService.MESSAGE_COLLAPSE_MENU));
}

View File

@@ -1,40 +1,51 @@
package com.stardust.scriptdroid.layout_inspector;
import android.accessibilityservice.AccessibilityService;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
import com.stardust.view.accessibility.AccessibilityDelegate;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/**
* Created by Stardust on 2017/3/10.
*/
public class LayoutInspector implements AccessibilityDelegate {
public class LayoutInspector {
private NodeInfo mCapture;
private volatile NodeInfo mCapture;
private volatile boolean mDumping = false;
private Executor mExecutor = Executors.newSingleThreadExecutor();
@Override
public boolean onAccessibilityEvent(AccessibilityService service, AccessibilityEvent event) {
return false;
}
public NodeInfo captureCurrentWindow() {
public void captureCurrentWindow() {
AccessibilityService service = AccessibilityWatchDogService.getInstance();
if (service == null) {
mCapture = null;
} else {
AccessibilityNodeInfo root = service.getRootInActiveWindow();
final AccessibilityNodeInfo root = service.getRootInActiveWindow();
if (root == null) {
mCapture = null;
} else {
mCapture = NodeInfo.capture(root);
mExecutor.execute(new Runnable() {
@Override
public void run() {
mDumping = true;
mCapture = NodeInfo.capture(root);
mDumping = false;
}
});
}
}
return mCapture;
}
public boolean isDumping() {
return mDumping;
}
public void clearCapture() {
mCapture = null;

View File

@@ -81,7 +81,6 @@ public class LayoutHierarchyView extends MultiLevelListView {
}
private void init() {
mAdapter = new Adapter();
setAdapter(mAdapter);
@@ -204,6 +203,8 @@ public class LayoutHierarchyView extends MultiLevelListView {
}
private String simplifyClassName(CharSequence className) {
if (className == null)
return null;
String s = className.toString();
if (s.startsWith("android.widget.")) {
s = s.substring(15);
@@ -214,7 +215,6 @@ public class LayoutHierarchyView extends MultiLevelListView {
private String getItemInfoDsc(ItemInfo itemInfo) {
StringBuilder builder = new StringBuilder();
builder.append(String.format(Locale.getDefault(), "level[%d], idx in level[%d/%d]",
itemInfo.getLevel() + 1, /*Indexing starts from 0*/
itemInfo.getIdxInLevel() + 1 /*Indexing starts from 0*/,

View File

@@ -71,11 +71,6 @@ public class LayoutInspectView extends FrameLayout {
}
}
public void showLayoutBoundsView() {
mLayoutBoundsView.setRootNode(AutoJs.getInstance().getLayoutInspector().captureCurrentWindow());
backToLayoutBoundsView();
}
public boolean isLayoutBoundsViewShowing() {
return mCurrentView == mLayoutBoundsView;
}

View File

@@ -6,6 +6,7 @@ import android.util.SparseArray;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.automator.UiObject;
import com.stardust.automator.simple_action.FilterAction;
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
import com.stardust.util.SparseArrayEntries;
@@ -123,24 +124,17 @@ public class AccessibilityActionConverter {
if (source == null)
return;
AccessibilityNodeInfoAllocator allocator = new AccessibilityNodeInfoAllocator();
List<AccessibilityNodeInfo> editableList = FilterAction.EditableFilter.findEditable(allocator, service.getRootInActiveWindow());
UiObject uiObject = new UiObject(service.getRootInActiveWindow(), allocator);
List<UiObject> editableList = FilterAction.EditableFilter.findEditable(uiObject);
int i = findInEditableList(editableList, source);
recycle(editableList);
sb.append("while(!input(").append(i).append(", \"").append(source.getText()).append("\"));");
source.recycle();
allocator.recycleAll();
}
private void recycle(List<AccessibilityNodeInfo> list) {
for (AccessibilityNodeInfo nodeInfo : list) {
nodeInfo.recycle();
}
}
private static int findInEditableList(List<AccessibilityNodeInfo> editableList, AccessibilityNodeInfo editable) {
private static int findInEditableList(List<UiObject> editableList, AccessibilityNodeInfo editable) {
int i = 0;
for (AccessibilityNodeInfo nodeInfo : editableList) {
for (UiObject nodeInfo : editableList) {
if (AccessibilityNodeInfoHelper.getBoundsInScreen(nodeInfo).equals(AccessibilityNodeInfoHelper.getBoundsInScreen(editable))) {
return i;
}

View File

@@ -7,6 +7,11 @@ import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.scriptdroid.record.Recorder;
import com.stardust.view.accessibility.AccessibilityDelegate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
* Created by Stardust on 2017/2/14.
@@ -27,6 +32,8 @@ public class AccessibilityActionRecorder extends Recorder.DefaultIMPL implements
}
}
private static final Set<Integer> EVENT_TYPES = new HashSet<>(Arrays.asList(AccessibilityEvent.TYPE_VIEW_CLICKED, AccessibilityEvent.TYPE_VIEW_LONG_CLICKED, AccessibilityEvent.TYPE_VIEW_SCROLLED, AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED));
private static final long RECORD_TIME_OUT = 10 * 60 * 1000;
private boolean mShouldIgnoreFirstAction = false;
@@ -64,6 +71,11 @@ public class AccessibilityActionRecorder extends Recorder.DefaultIMPL implements
return false;
}
@Override
public Set<Integer> getEventTypes() {
return EVENT_TYPES;
}
private void checkTimeOut() {
if (System.currentTimeMillis() - mRecordStartMillis > RECORD_TIME_OUT) {
stop();

View File

@@ -1,6 +1,5 @@
package com.stardust.scriptdroid.service;
import android.accessibilityservice.AccessibilityService;
import android.os.Build;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
@@ -10,12 +9,16 @@ import com.stardust.autojs.runtime.JavascriptInterface;
import com.stardust.view.accessibility.AccessibilityDelegate;
import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
import com.stardust.view.accessibility.AccessibilityService;
import com.stardust.view.accessibility.AccessibilityServiceUtils;
import org.greenrobot.eventbus.EventBus;
import java.lang.ref.WeakReference;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.concurrent.Executor;
@@ -32,10 +35,16 @@ public class AccessibilityWatchDogService extends AccessibilityService {
private static final SortedMap<Integer, AccessibilityDelegate> mDelegates = new TreeMap<>();
private static final Object LOCK = new Object();
private static AccessibilityWatchDogService instance;
private Executor mExecutor = Executors.newSingleThreadExecutor();
private static boolean containsAllEventTypes = false;
private static final Set<Integer> eventTypes = new HashSet<>();
public static void addDelegate(int uniquePriority, AccessibilityDelegate delegate) {
mDelegates.put(uniquePriority, delegate);
Set<Integer> set = delegate.getEventTypes();
if (set == null)
containsAllEventTypes = true;
else
eventTypes.addAll(set);
}
public static boolean isEnable() {
@@ -49,25 +58,17 @@ public class AccessibilityWatchDogService extends AccessibilityService {
@Override
public void onAccessibilityEvent(final AccessibilityEvent event) {
Log.v(TAG, "onAccessibilityEvent: " + event);
mExecutor.execute(new Runnable() {
@Override
public void run() {
for (Map.Entry<Integer, AccessibilityDelegate> entry : mDelegates.entrySet()) {
Log.v(TAG, "delegate: " + entry.getValue().getClass().getName());
if (entry.getValue().onAccessibilityEvent(AccessibilityWatchDogService.this, event))
break;
}
}
});
}
@Override
public AccessibilityNodeInfo getRootInActiveWindow() {
try {
return super.getRootInActiveWindow();
} catch (IllegalStateException e) {
e.printStackTrace();
return null;
if (!containsAllEventTypes && !eventTypes.contains(event.getEventType()))
return;
for (Map.Entry<Integer, AccessibilityDelegate> entry : mDelegates.entrySet()) {
AccessibilityDelegate delegate = entry.getValue();
Set<Integer> types = delegate.getEventTypes();
if (types != null && !delegate.getEventTypes().contains(event.getEventType()))
continue;
long start = System.currentTimeMillis();
if (delegate.onAccessibilityEvent(AccessibilityWatchDogService.this, event))
break;
Log.v(TAG, "millis: " + (System.currentTimeMillis() - start) + " delegate: " + entry.getValue().getClass().getName());
}
}

View File

@@ -14,6 +14,7 @@ import android.view.View;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.flurry.android.FlurryAgent;
import com.stardust.pio.PFile;
import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.R;
@@ -59,7 +60,6 @@ public abstract class BaseActivity extends AppCompatActivity {
}
@Override
protected void onPause() {
super.onPause();

View File

@@ -2,14 +2,15 @@ package com.stardust.scriptdroid.ui.console;
import android.content.Intent;
import android.graphics.Color;
import android.support.annotation.Nullable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import com.jraska.console.Console;
import com.jraska.console.timber.ConsoleTree;
import com.stardust.autojs.runtime.api.Console;
import com.stardust.autojs.runtime.AbstractConsole;
import com.stardust.scriptdroid.App;
@@ -19,7 +20,7 @@ import timber.log.Timber;
* Created by Stardust on 2017/4/2.
*/
public class TimberConsole implements Console {
public class TimberConsole extends AbstractConsole {
static {
Timber.plant(new ConsoleTree.Builder()
@@ -34,54 +35,29 @@ public class TimberConsole implements Console {
}
@Override
public void i(@Nullable Object o) {
i(o + "");
}
@Override
public void i(String str) {
Timber.i(str);
}
@Override
public void e(@Nullable String message) {
Timber.e(message);
}
@Override
public void e(@Nullable Object o) {
e(o + "");
}
@Override
public void v(@Nullable String v) {
Timber.v(v);
}
@Override
public void v(@Nullable Object o) {
v(o + "");
}
@Override
public void log(@Nullable Object o) {
log(o + "");
}
@Override
public void log(String str) {
SpannableString spannableString = new SpannableString(str);
spannableString.setSpan(new ForegroundColorSpan(Color.BLACK), 0, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
com.jraska.console.Console.writeLine(spannableString);
}
@Override
public void show() {
App.getApp().startActivity(new Intent(App.getApp(), ConsoleActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
protected void log(int level, CharSequence charSequence) {
if (level == Log.DEBUG) {
SpannableString spannable = new SpannableString(charSequence);
spannable.setSpan(new ForegroundColorSpan(0xdd000000), 0, charSequence.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Console.writeLine(spannable);
} else {
Timber.log(level, charSequence.toString());
}
}
@Override
public void clear() {
com.jraska.console.Console.clear();
}
@Override
public void show() {
App.getApp().startActivity(new Intent(App.getApp(), ConsoleActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
@Override
public void hide() {
throw new UnsupportedOperationException();
}
}

View File

@@ -106,7 +106,7 @@ public class CodeCompletion implements TextWatcher {
mFunctions = functions;
}
private String[] mFunctions = {"toast", "launchPackage", "launch", "launchApp", "click", "longClick", "scrollUp", "scrollDown", "select", "focus", "paste", "input", "sleep", "isStopped", "notStopped", "log", "err", "openConsole", "clearConsole", "shell", "getTexts", "getPackageName", "getActivityName", "setClip", "addAccessibilityDelegate"};
private String[] mFunctions = {"toast", "launchPackage", "launch", "launchApp", "click", "longClick", "scrollUp", "scrollDown", "select", "focus", "paste", "input", "sleep", "isStopped", "notStopped", "println", "err", "openConsole", "clearConsole", "shell", "getTexts", "getPackageName", "getActivityName", "setClip", "addAccessibilityDelegate"};
private boolean searchCodeCompletion(String str) {
Collection<CodeCompletionItem> c = searchWordCompletion(str);

View File

@@ -34,7 +34,7 @@ public abstract class ScriptFileOperation {
@Override
public void onStart(JavaScriptEngine engine, ScriptSource source) {
AutoJs.getInstance().getScriptEngineService().getDefaultListener().onStart(engine, source);
AutoJs.getInstance().getScriptEngineService().getDefaultScriptExecutionListener().onStart(engine, source);
}
@Override

View File

@@ -18,6 +18,7 @@ import com.stardust.autojs.engine.JavaScriptEngine;
import com.stardust.autojs.engine.JavaScriptEngineManager;
import com.stardust.autojs.script.ScriptSource;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs;
import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;
import java.util.ArrayList;
@@ -46,8 +47,10 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView implements Java
}
};
private final List<JavaScriptEngine> mScriptEngines = new ArrayList<>();
private Adapter mAdapter;
private final ScriptEngineService mScriptEngineService = AutoJs.getInstance().getScriptEngineService();
public TaskListRecyclerView(Context context) {
super(context);
@@ -78,14 +81,14 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView implements Java
public void updateEngineList() {
mScriptEngines.clear();
mScriptEngines.addAll(ScriptEngineService.getInstance().getEngines());
mScriptEngines.addAll(mScriptEngineService.getEngines());
mAdapter.notifyDataSetChanged();
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
ScriptEngineService.getInstance().registerEngineLifecycleCallback(this);
mScriptEngineService.registerEngineLifecycleCallback(this);
}
@Override
@@ -97,7 +100,7 @@ public class TaskListRecyclerView extends ThemeColorRecyclerView implements Java
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
ScriptEngineService.getInstance().unregisterEngineLifecycleCallback(this);
mScriptEngineService.unregisterEngineLifecycleCallback(this);
}
@Override

View File

@@ -11,6 +11,7 @@ import android.view.ViewGroup;
import com.stardust.app.Fragment;
import com.stardust.autojs.ScriptEngineService;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.view.ViewBinder;
import com.stardust.view.ViewBinding;
import com.stardust.widget.SimpleAdapterDataObserver;
@@ -74,6 +75,6 @@ public class TaskManagerFragment extends Fragment {
@ViewBinding.Click(R.id.close_all)
private void closeAllRunningScripts() {
ScriptEngineService.getInstance().stopAll();
AutoJs.getInstance().getScriptEngineService().stopAll();
}
}