Dying...
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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*/,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user