add sublime text plugin support

This commit is contained in:
hyb1996 committed 2017-05-11 17:06:37 +08:00
1 parent 4f25582ce5
commit b12e26b797
51 files changed
+490 -100

No files matched your search

+2 -2
View File
@@ -9,8 +9,8 @@ android {
applicationId "com.stardust.scriptdroid" applicationId "com.stardust.scriptdroid"
minSdkVersion 19 minSdkVersion 19
targetSdkVersion 23 targetSdkVersion 23
versionCode 126 versionCode 128
versionName "2.0.10 Beta" versionName "2.0.10c Beta"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true multiDexEnabled true
ndk { ndk {
+1
View File
@@ -2,6 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.stardust.scriptdroid"> package="com.stardust.scriptdroid">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
@@ -74,7 +74,6 @@ public class App extends MultiDexApplication {
AutoJs.initInstance(this); AutoJs.initInstance(this);
JsBeautifierFactory.initJsBeautify(this, "js/jsbeautify.js"); JsBeautifierFactory.initJsBeautify(this, "js/jsbeautify.js");
initVolumeChangeObserver(); initVolumeChangeObserver();
startService(new Intent(this, AccessibilityWatchDogService.class));
} }
private void initVolumeChangeObserver() { private void initVolumeChangeObserver() {
@@ -20,13 +20,12 @@ import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.Pref; import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.api.Shell; import com.stardust.scriptdroid.autojs.api.Shell;
import com.stardust.scriptdroid.script.StorageScriptProvider;
import com.stardust.scriptdroid.ui.console.StardustConsole; import com.stardust.scriptdroid.ui.console.StardustConsole;
import com.stardust.util.Supplier; import com.stardust.util.Supplier;
import com.stardust.util.UiHandler; import com.stardust.util.UiHandler;
import com.stardust.view.accessibility.AccessibilityInfoProvider; import com.stardust.view.accessibility.AccessibilityInfoProvider;
import com.stardust.scriptdroid.layout_inspector.LayoutInspector; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.LayoutInspector;
import com.stardust.scriptdroid.record.accessibility.AccessibilityActionRecorder; import com.stardust.scriptdroid.external.floating_window.menu.record.accessibility.AccessibilityActionRecorder;
import com.stardust.scriptdroid.service.AccessibilityWatchDogService; import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool; import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
import com.stardust.scriptdroid.ui.console.JraskaConsole; import com.stardust.scriptdroid.ui.console.JraskaConsole;
@@ -11,6 +11,7 @@ import android.view.WindowManager;
import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.autojs.runtime.api.internal.VolatileBox;
import com.stardust.util.UiHandler; import com.stardust.util.UiHandler;
/** /**
@@ -2,15 +2,13 @@ package com.stardust.scriptdroid.autojs.api;
import android.content.Context; import android.content.Context;
import android.content.ContextWrapper; import android.content.ContextWrapper;
import android.content.DialogInterface;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.autojs.runtime.ScriptInterface; import com.stardust.autojs.runtime.ScriptInterface;
import com.stardust.autojs.runtime.ScriptInterruptedException;
import com.stardust.autojs.runtime.api.AppUtils; import com.stardust.autojs.runtime.api.AppUtils;
import com.stardust.scriptdroid.App; import com.stardust.autojs.runtime.api.internal.VolatileBox;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.util.ArrayUtils; import com.stardust.util.ArrayUtils;
import com.stardust.util.UiHandler; import com.stardust.util.UiHandler;
@@ -6,18 +6,12 @@ import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.os.Handler; import android.os.Handler;
import android.support.annotation.IntDef;
import android.view.Gravity; import android.view.Gravity;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import com.stardust.enhancedfloaty.FloatyService; import com.stardust.enhancedfloaty.FloatyService;
import com.stardust.enhancedfloaty.FloatyWindow; import com.stardust.enhancedfloaty.FloatyWindow;
import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.autojs.api.VolatileBox;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
/** /**
* Created by Stardust on 2017/5/9. * Created by Stardust on 2017/5/9.
@@ -20,7 +20,6 @@ import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.external.floating_window.FloatingWindowManger; import com.stardust.scriptdroid.external.floating_window.FloatingWindowManger;
import com.stardust.scriptdroid.external.floating_window.menu.view.FloatingLayoutBoundsView; import com.stardust.scriptdroid.external.floating_window.menu.view.FloatingLayoutBoundsView;
import com.stardust.scriptdroid.external.floating_window.menu.view.FloatingLayoutHierarchyView; import com.stardust.scriptdroid.external.floating_window.menu.view.FloatingLayoutHierarchyView;
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool; import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
import com.stardust.theme.ThemeColorManagerCompat; import com.stardust.theme.ThemeColorManagerCompat;
import com.stardust.util.MessageEvent; import com.stardust.util.MessageEvent;
@@ -12,7 +12,7 @@ import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs; import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService; import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
import com.stardust.scriptdroid.layout_inspector.LayoutInspector; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.LayoutInspector;
import com.stardust.util.ClipboardUtil; import com.stardust.util.ClipboardUtil;
import com.stardust.scriptdroid.ui.main.MainActivity; import com.stardust.scriptdroid.ui.main.MainActivity;
import com.stardust.util.MessageEvent; import com.stardust.util.MessageEvent;
@@ -15,17 +15,15 @@ import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.accessibility.AccessibilityEventHelper; import com.stardust.scriptdroid.accessibility.AccessibilityEventHelper;
import com.stardust.scriptdroid.autojs.AutoJs; import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService; import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
import com.stardust.scriptdroid.record.Recorder; import com.stardust.scriptdroid.external.floating_window.menu.record.Recorder;
import com.stardust.scriptdroid.record.accessibility.AccessibilityActionRecorder; import com.stardust.scriptdroid.external.floating_window.menu.record.accessibility.AccessibilityActionRecorder;
import com.stardust.scriptdroid.record.inputevent.InputEventConverter; import com.stardust.scriptdroid.external.floating_window.menu.record.inputevent.KeyObserver;
import com.stardust.scriptdroid.record.inputevent.KeyObserver; import com.stardust.scriptdroid.external.floating_window.menu.record.inputevent.TouchRecorder;
import com.stardust.scriptdroid.record.inputevent.TouchRecorder;
import com.stardust.scriptdroid.ui.main.MainActivity; import com.stardust.scriptdroid.ui.main.MainActivity;
import com.stardust.util.MessageEvent; import com.stardust.util.MessageEvent;
import com.stardust.view.ViewBinder; import com.stardust.view.ViewBinder;
import com.stardust.view.ViewBinding; import com.stardust.view.ViewBinding;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
import io.mattcarroll.hover.Navigator; import io.mattcarroll.hover.Navigator;
@@ -1,17 +1,12 @@
package com.stardust.scriptdroid.layout_inspector; package com.stardust.scriptdroid.external.floating_window.menu.layout_inspector;
import android.accessibilityservice.AccessibilityService; import android.accessibilityservice.AccessibilityService;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.scriptdroid.service.AccessibilityWatchDogService; import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
import com.stardust.util.UnderuseExecutors; import com.stardust.util.UnderuseExecutors;
import com.stardust.view.accessibility.AccessibilityDelegate;
import java.util.Set;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/** /**
* Created by Stardust on 2017/3/10. * Created by Stardust on 2017/3/10.
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.layout_inspector; package com.stardust.scriptdroid.external.floating_window.menu.layout_inspector;
import android.graphics.Rect; import android.graphics.Rect;
import android.support.annotation.Keep; import android.support.annotation.Keep;
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.layout_inspector.view; package com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view;
import android.content.Context; import android.content.Context;
import android.graphics.Canvas; import android.graphics.Canvas;
@@ -12,12 +12,10 @@ import android.util.AttributeSet;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import com.stardust.scriptdroid.layout_inspector.NodeInfo; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
import com.stardust.util.ViewUtil; import com.stardust.util.ViewUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
/** /**
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.layout_inspector.view; package com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view;
import android.content.Context; import android.content.Context;
import android.graphics.Canvas; import android.graphics.Canvas;
@@ -14,7 +14,7 @@ import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.layout_inspector.NodeInfo; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
import com.stardust.util.ViewUtil; import com.stardust.util.ViewUtil;
import com.stardust.widget.LevelBeamView; import com.stardust.widget.LevelBeamView;
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.layout_inspector.view; package com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
@@ -13,9 +13,7 @@ import android.widget.FrameLayout;
import android.widget.ViewSwitcher; import android.widget.ViewSwitcher;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
import com.stardust.scriptdroid.layout_inspector.LayoutInspector;
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
/** /**
* Created by Stardust on 2017/3/10. * Created by Stardust on 2017/3/10.
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.layout_inspector.view; package com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
@@ -10,7 +10,7 @@ import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.layout_inspector.NodeInfo; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
import com.stardust.util.ClipboardUtil; import com.stardust.util.ClipboardUtil;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@@ -0,0 +1,12 @@
package com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view;
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
/**
* Created by Stardust on 2017/3/10.
*/
public interface OnNodeInfoSelectListener {
void onNodeSelect(NodeInfo info);
}
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.record; package com.stardust.scriptdroid.external.floating_window.menu.record;
import java.util.Arrays; import java.util.Arrays;
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.record.accessibility; package com.stardust.scriptdroid.external.floating_window.menu.record.accessibility;
import android.accessibilityservice.AccessibilityService; import android.accessibilityservice.AccessibilityService;
import android.os.Build; import android.os.Build;
@@ -8,9 +8,8 @@ import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.automator.UiObject; import com.stardust.automator.UiObject;
import com.stardust.automator.simple_action.FilterAction; import com.stardust.automator.simple_action.FilterAction;
import com.stardust.scriptdroid.layout_inspector.NodeInfo; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
import com.stardust.util.SparseArrayEntries; import com.stardust.util.SparseArrayEntries;
import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator;
import com.stardust.view.accessibility.AccessibilityNodeInfoHelper; import com.stardust.view.accessibility.AccessibilityNodeInfoHelper;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
@@ -1,9 +1,9 @@
package com.stardust.scriptdroid.record.accessibility; package com.stardust.scriptdroid.external.floating_window.menu.record.accessibility;
import android.accessibilityservice.AccessibilityService; import android.accessibilityservice.AccessibilityService;
import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityEvent;
import com.stardust.scriptdroid.record.Recorder; import com.stardust.scriptdroid.external.floating_window.menu.record.Recorder;
import com.stardust.view.accessibility.AccessibilityDelegate; import com.stardust.view.accessibility.AccessibilityDelegate;
import java.util.Arrays; import java.util.Arrays;
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.record.inputevent; package com.stardust.scriptdroid.external.floating_window.menu.record.inputevent;
/** /**
* Created by Stardust on 2017/3/7. * Created by Stardust on 2017/3/7.
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.record.inputevent; package com.stardust.scriptdroid.external.floating_window.menu.record.inputevent;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.text.TextUtils; import android.text.TextUtils;
@@ -7,12 +7,9 @@ import android.widget.Toast;
import com.flurry.android.FlurryAgent; import com.flurry.android.FlurryAgent;
import com.stardust.scriptdroid.App; import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs; import com.stardust.scriptdroid.external.floating_window.menu.record.Recorder;
import com.stardust.scriptdroid.record.Recorder;
import com.stardust.util.MapEntries; import com.stardust.util.MapEntries;
import org.greenrobot.eventbus.EventBus;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -1,7 +1,7 @@
package com.stardust.scriptdroid.record.inputevent; package com.stardust.scriptdroid.external.floating_window.menu.record.inputevent;
import com.stardust.scriptdroid.autojs.api.Shell; import com.stardust.scriptdroid.autojs.api.Shell;
import com.stardust.scriptdroid.record.Recorder; import com.stardust.scriptdroid.external.floating_window.menu.record.Recorder;
/** /**
* Created by Stardust on 2017/3/6. * Created by Stardust on 2017/3/6.
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.record.inputevent; package com.stardust.scriptdroid.external.floating_window.menu.record.inputevent;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.record.inputevent; package com.stardust.scriptdroid.external.floating_window.menu.record.inputevent;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.record.inputevent; package com.stardust.scriptdroid.external.floating_window.menu.record.inputevent;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.record.inputevent; package com.stardust.scriptdroid.external.floating_window.menu.record.inputevent;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.record.inputevent; package com.stardust.scriptdroid.external.floating_window.menu.record.inputevent;
/** /**
* Created by Stardust on 2017/3/16. * Created by Stardust on 2017/3/16.
@@ -7,10 +7,10 @@ import android.view.WindowManager;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.Theme; import com.afollestad.materialdialogs.Theme;
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService; import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
import com.stardust.scriptdroid.layout_inspector.NodeInfo; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
import com.stardust.scriptdroid.layout_inspector.view.LayoutBoundsView; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.LayoutBoundsView;
import com.stardust.scriptdroid.layout_inspector.view.NodeInfoView; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.NodeInfoView;
import com.stardust.scriptdroid.layout_inspector.view.OnNodeInfoSelectListener; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.OnNodeInfoSelectListener;
import com.stardust.util.MessageEvent; import com.stardust.util.MessageEvent;
/** /**
@@ -7,10 +7,10 @@ import android.view.WindowManager;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.Theme; import com.afollestad.materialdialogs.Theme;
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService; import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
import com.stardust.scriptdroid.layout_inspector.NodeInfo; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
import com.stardust.scriptdroid.layout_inspector.view.LayoutHierarchyView; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.LayoutHierarchyView;
import com.stardust.scriptdroid.layout_inspector.view.NodeInfoView; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.NodeInfoView;
import com.stardust.scriptdroid.layout_inspector.view.OnNodeInfoSelectListener; import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.OnNodeInfoSelectListener;
import com.stardust.util.MessageEvent; import com.stardust.util.MessageEvent;
/** /**
@@ -40,8 +40,4 @@ public class ImportIntentActivity extends BaseActivity {
finish(); finish();
} }
private void startMainActivity() {
finish();
}
} }
@@ -44,7 +44,11 @@ public class RunIntentActivity extends Activity {
source = new StringScriptSource(script); source = new StringScriptSource(script);
} else if (path != null && new PathChecker(this).checkAndToastError(path)) { } else if (path != null && new PathChecker(this).checkAndToastError(path)) {
ScriptSource fileScriptSource = new FileScriptSource(path); ScriptSource fileScriptSource = new FileScriptSource(path);
source = new SequenceScriptSource(fileScriptSource.getName(), new StringScriptSource(script), fileScriptSource); if (script != null) {
source = new SequenceScriptSource(fileScriptSource.getName(), new StringScriptSource(script), fileScriptSource);
} else {
source = fileScriptSource;
}
directoryPath = new File(path).getParent(); directoryPath = new File(path).getParent();
} }
if (source != null) { if (source != null) {
@@ -1,12 +0,0 @@
package com.stardust.scriptdroid.layout_inspector.view;
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
/**
* Created by Stardust on 2017/3/10.
*/
public interface OnNodeInfoSelectListener {
void onNodeSelect(NodeInfo info);
}
@@ -0,0 +1,12 @@
package com.stardust.scriptdroid.sublime_plugin_client;
import com.google.gson.JsonObject;
/**
* Created by Stardust on 2017/5/11.
*/
public interface Handler {
boolean handle(JsonObject data);
}
@@ -0,0 +1,32 @@
package com.stardust.scriptdroid.sublime_plugin_client;
import com.google.gson.JsonObject;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Stardust on 2017/5/11.
*/
public class Router implements Handler {
private Map<String, Handler> mHandlerMap = new HashMap<>();
private String mKey;
public Router(String key) {
mKey = key;
}
public Router handler(String value, Handler handler) {
mHandlerMap.put(value, handler);
return this;
}
@Override
public boolean handle(JsonObject data) {
Handler handler = mHandlerMap.get(data.get(mKey).getAsString());
return handler != null && handler.handle(data);
}
}
@@ -0,0 +1,102 @@
package com.stardust.scriptdroid.sublime_plugin_client;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.stardust.util.UiHandler;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* Created by Stardust on 2017/5/10.
*/
public class SublimePluginClient {
private Socket mSocket;
private Handler mResponseHandler;
private String host;
private int port;
private OutputStream mOutputStream;
private UiHandler mUiHandler;
public SublimePluginClient(UiHandler handler, String host, int port) {
this.host = host;
this.port = port;
mUiHandler = handler;
}
public void setResponseHandler(Handler handler) {
mResponseHandler = handler;
}
public void listen() {
if (mSocket != null) {
throw new IllegalStateException("Socket listening ");
}
new Thread(new Runnable() {
@Override
public void run() {
try {
mSocket = new Socket(host, port);
mSocket.setTcpNoDelay(true);
mUiHandler.toast("Connected");
mOutputStream = mSocket.getOutputStream();
startReadLoop(mSocket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
} finally {
tryClose();
}
}
}).start();
}
private void tryClose() {
try {
close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void send(JsonObject object) throws IOException {
if (mSocket == null) {
throw new IllegalStateException("Socket is not listening ");
}
mOutputStream.write(object.toString().getBytes());
mOutputStream.write("\n".getBytes());
mOutputStream.flush();
}
public void close() throws IOException {
if (mSocket != null) {
mSocket.close();
mSocket = null;
mOutputStream = null;
mUiHandler.toast("Disconnected");
}
}
private void startReadLoop(InputStream stream) throws IOException {
byte[] buffer = new byte[8192];
while (!Thread.currentThread().isInterrupted()) {
int len = stream.read(buffer);
if (len <= 0) {
return;
}
if (mResponseHandler != null) {
String str = new String(buffer, 0, len);
JsonElement jsonElement = new JsonParser().parse(str);
JsonObject jsonObject = jsonElement.getAsJsonObject();
mResponseHandler.handle(jsonObject);
}
}
}
}
@@ -0,0 +1,54 @@
package com.stardust.scriptdroid.sublime_plugin_client;
import com.google.gson.JsonObject;
import com.stardust.scriptdroid.autojs.AutoJs;
import java.io.IOException;
/**
* Created by Stardust on 2017/5/11.
*/
public class SublimePluginClientManager {
private static SublimePluginClient client;
public static boolean isConnected() {
return client != null;
}
public static void disconnectIfNeeded() {
if (!isConnected())
return;
disconnect();
}
public static void disconnect() {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
client = null;
}
}
public static void connect(String host) {
client = new SublimePluginClient(AutoJs.getInstance().getUiHandler(), host, 1209);
client.setResponseHandler(new SublimeResponseHandler());
client.listen();
}
public static void log(String log) {
if (!isConnected())
return;
JsonObject object = new JsonObject();
object.addProperty("type", "log");
object.addProperty("log", log);
try {
client.send(object);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,85 @@
package com.stardust.scriptdroid.sublime_plugin_client;
import android.text.TextUtils;
import android.util.SparseArray;
import com.google.gson.JsonObject;
import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.execution.ScriptExecution;
import com.stardust.autojs.script.StringScriptSource;
import com.stardust.pio.PFile;
import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.script.Scripts;
/**
* Created by Stardust on 2017/5/11.
*/
public class SublimeResponseHandler implements Handler {
private Router mRouter = new Router("type")
.handler("command", new Router("command")
.handler("run", new Handler() {
@Override
public boolean handle(JsonObject data) {
String script = data.get("script").getAsString();
String name = data.get("name").getAsString();
int viewId = data.get("view_id").getAsInt();
runScript(viewId, name, script);
return false;
}
})
.handler("stop", new Handler() {
@Override
public boolean handle(JsonObject data) {
int viewId = data.get("view_id").getAsInt();
stopScript(viewId);
return true;
}
})
.handler("rerun", new Handler() {
@Override
public boolean handle(JsonObject data) {
int viewId = data.get("view_id").getAsInt();
String script = data.get("script").getAsString();
String name = data.get("name").getAsString();
stopScript(viewId);
runScript(viewId, name, script);
return false;
}
})
.handler("stopAll", new Handler() {
@Override
public boolean handle(JsonObject data) {
AutoJs.getInstance().getScriptEngineService().stopAllAndToast();
return false;
}
}));
private SparseArray<ScriptExecution> mScriptExecutions = new SparseArray<>();
@Override
public boolean handle(JsonObject data) {
return mRouter.handle(data);
}
private void runScript(int viewId, String name, String script) {
if (TextUtils.isEmpty(name)) {
name = "[" + viewId + "]";
} else {
name = PFile.getNameWithoutExtension(name);
}
mScriptExecutions.put(viewId, Scripts.run(new StringScriptSource("<remote>:" + name, script)));
}
private void stopScript(int viewId) {
ScriptExecution execution = mScriptExecutions.get(viewId);
if (execution != null) {
execution.getEngine().forceStop();
mScriptExecutions.delete(viewId);
}
}
}
@@ -7,9 +7,12 @@ package com.stardust.scriptdroid.tool;
import android.content.Intent; import android.content.Intent;
import android.util.Log; import android.util.Log;
import android.view.WindowManager;
import android.widget.Toast;
import com.stardust.scriptdroid.App; import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.util.IntentUtil;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter; import java.io.StringWriter;
@@ -26,6 +29,11 @@ public class CrashHandler implements UncaughtExceptionHandler {
} }
public void uncaughtException(Thread thread, Throwable ex) { public void uncaughtException(Thread thread, Throwable ex) {
if (causedByBadWindowToken(ex)) {
Toast.makeText(App.getApp(), R.string.text_no_floating_window_permission, Toast.LENGTH_SHORT).show();
IntentUtil.goToAppDetailSettings(App.getApp());
return;
}
try { try {
Log.e(TAG, "Uncaught Exception", ex); Log.e(TAG, "Uncaught Exception", ex);
if (crashTooManyTimes()) if (crashTooManyTimes())
@@ -38,6 +46,16 @@ public class CrashHandler implements UncaughtExceptionHandler {
} }
} }
private static boolean causedByBadWindowToken(Throwable e) {
while (e != null) {
if (e instanceof WindowManager.BadTokenException) {
return true;
}
e = e.getCause();
}
return false;
}
private void startErrorReportActivity(String msg, String detail) { private void startErrorReportActivity(String msg, String detail) {
Intent intent = new Intent(App.getApp(), this.mErrorReportClass); Intent intent = new Intent(App.getApp(), this.mErrorReportClass);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
@@ -0,0 +1,24 @@
package com.stardust.scriptdroid.tool;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.text.format.Formatter;
import java.net.InetAddress;
import static android.content.Context.WIFI_SERVICE;
/**
* Created by Stardust on 2017/5/11.
*/
public class WifiTool {
public static String getWifiAddress(Context context) {
WifiManager wifiMgr = (WifiManager) context.getApplicationContext().getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
int ip = wifiInfo.getIpAddress();
return Formatter.formatIpAddress(ip);
}
}
@@ -10,6 +10,7 @@ import android.util.SparseArray;
import com.jraska.console.Console; import com.jraska.console.Console;
import com.stardust.autojs.runtime.api.AbstractConsole; import com.stardust.autojs.runtime.api.AbstractConsole;
import com.stardust.scriptdroid.App; import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.sublime_plugin_client.SublimePluginClientManager;
import com.stardust.util.SparseArrayEntries; import com.stardust.util.SparseArrayEntries;
import com.stardust.util.TextUtils; import com.stardust.util.TextUtils;
@@ -48,12 +49,14 @@ public class JraskaConsole extends AbstractConsole {
public void println(int level, CharSequence charSequence) { public void println(int level, CharSequence charSequence) {
Console.write(getLevelSpannable(level, getTag(level))); Console.write(getLevelSpannable(level, getTag(level)));
Console.writeLine(getLevelSpannable(level, charSequence)); Console.writeLine(getLevelSpannable(level, charSequence));
SublimePluginClientManager.log(getTag(level) + charSequence.toString());
} }
@Override @Override
public void write(int level, CharSequence data) { public void write(int level, CharSequence data) {
Console.write(getLevelSpannable(level, getTag(level))); Console.write(getLevelSpannable(level, getTag(level)));
Console.write(getLevelSpannable(level, data)); Console.write(getLevelSpannable(level, data));
SublimePluginClientManager.log(getTag(level) + data.toString());
} }
private CharSequence getTag(int level) { private CharSequence getTag(int level) {
@@ -16,6 +16,7 @@ import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
@@ -24,6 +25,7 @@ import android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.google.gson.JsonObject;
import com.stardust.app.FragmentPagerAdapterBuilder; import com.stardust.app.FragmentPagerAdapterBuilder;
import com.stardust.app.NotAskAgainDialog; import com.stardust.app.NotAskAgainDialog;
import com.stardust.app.OnActivityResultDelegate; import com.stardust.app.OnActivityResultDelegate;
@@ -36,6 +38,8 @@ import com.stardust.scriptdroid.script.ScriptFile;
import com.stardust.scriptdroid.script.StorageScriptProvider; import com.stardust.scriptdroid.script.StorageScriptProvider;
import com.stardust.scriptdroid.script.sample.Sample; import com.stardust.scriptdroid.script.sample.Sample;
import com.stardust.scriptdroid.service.AccessibilityWatchDogService; import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
import com.stardust.scriptdroid.sublime_plugin_client.SublimePluginClient;
import com.stardust.scriptdroid.sublime_plugin_client.SublimeResponseHandler;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool; import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
import com.stardust.scriptdroid.tool.DrawableSaver; import com.stardust.scriptdroid.tool.DrawableSaver;
import com.stardust.scriptdroid.ui.BaseActivity; import com.stardust.scriptdroid.ui.BaseActivity;
@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.ui.main;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar; import android.support.design.widget.Snackbar;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
@@ -10,13 +11,16 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.app.Fragment; import com.stardust.app.Fragment;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs; import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.external.floating_window.FloatingWindowManger; import com.stardust.scriptdroid.external.floating_window.FloatingWindowManger;
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService; import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
import com.stardust.scriptdroid.service.AccessibilityWatchDogService; import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
import com.stardust.scriptdroid.sublime_plugin_client.SublimePluginClientManager;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool; import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
import com.stardust.scriptdroid.tool.WifiTool;
import com.stardust.scriptdroid.ui.console.LogActivity; import com.stardust.scriptdroid.ui.console.LogActivity;
import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity; import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity;
import com.stardust.util.UnderuseExecutors; import com.stardust.util.UnderuseExecutors;
@@ -42,6 +46,7 @@ public class SlideMenuFragment extends Fragment {
} }
private SwitchCompat mAccessibilityServiceSwitch, mFloatingWindowSwitch; private SwitchCompat mAccessibilityServiceSwitch, mFloatingWindowSwitch;
private SwitchCompat mDebugSwith;
private Executor mExecutor = UnderuseExecutors.getExecutor(); private Executor mExecutor = UnderuseExecutors.getExecutor();
@Override @Override
@@ -94,6 +99,7 @@ public class SlideMenuFragment extends Fragment {
private void setUpSwitchCompat() { private void setUpSwitchCompat() {
mAccessibilityServiceSwitch = $(R.id.sw_auto_operate_service); mAccessibilityServiceSwitch = $(R.id.sw_auto_operate_service);
mFloatingWindowSwitch = $(R.id.sw_floating_window); mFloatingWindowSwitch = $(R.id.sw_floating_window);
mDebugSwith = $(R.id.sw_debug);
} }
@@ -135,6 +141,27 @@ public class SlideMenuFragment extends Fragment {
mFloatingWindowSwitch.toggle(); mFloatingWindowSwitch.toggle();
} }
@ViewBinding.Click(R.id.debug)
private void toggleDebugSwitch() {
mDebugSwith.toggle();
}
@ViewBinding.Check(R.id.sw_debug)
private void setDebugEnabled(boolean enabled) {
if (enabled && !SublimePluginClientManager.isConnected()) {
new MaterialDialog.Builder(getActivity())
.title("服务器地址")
.input("", WifiTool.getWifiAddress(getActivity()), new MaterialDialog.InputCallback() {
@Override
public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {
SublimePluginClientManager.connect(input.toString());
}
})
.show();
} else if (!enabled) {
SublimePluginClientManager.disconnectIfNeeded();
}
}
@ViewBinding.Click(R.id.stop_all_running_scripts) @ViewBinding.Click(R.id.stop_all_running_scripts)
private void stopAllRunningScripts() { private void stopAllRunningScripts() {
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -19,13 +19,13 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<com.stardust.scriptdroid.layout_inspector.view.NodeInfoView <com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.NodeInfoView
android:id="@+id/node_info" android:id="@+id/node_info"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="#ffffff"/> android:background="#ffffff"/>
<com.stardust.scriptdroid.layout_inspector.view.LayoutHierarchyView <com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.LayoutHierarchyView
android:id="@+id/bounds_view" android:id="@+id/bounds_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@@ -116,6 +116,39 @@
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/debug"
android:layout_width="match_parent"
android:layout_height="52dp"
android:background="?selectableItemBackground"
android:gravity="center_vertical">
<com.stardust.theme.widget.ThemeColorImageViewCompat
android:id="@+id/icon_debug"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentLeft="true"
android:layout_margin="16dp"
android:src="@drawable/ic_debug"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_toRightOf="@id/icon_debug"
android:gravity="center"
android:text="@string/debug"
android:textColor="@android:color/primary_text_light"/>
<com.stardust.theme.widget.ThemeColorSwitch
android:id="@+id/sw_debug"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginRight="16dp"/>
</RelativeLayout>
<LinearLayout <LinearLayout
android:id="@+id/stop_all_running_scripts" android:id="@+id/stop_all_running_scripts"
android:layout_width="match_parent" android:layout_width="match_parent"
+1
View File
@@ -178,6 +178,7 @@
<string name="text_again_and_again">又双</string> <string name="text_again_and_again">又双</string>
<string name="text_again_and_again_again">又双叒</string> <string name="text_again_and_again_again">又双叒</string>
<string name="text_again_and_again_again_again">又双叒叕</string> <string name="text_again_and_again_again_again">又双叒叕</string>
<string name="debug">连接调试服务器</string>
<string-array name="record_control_keys"> <string-array name="record_control_keys">
<item>无</item> <item>无</item>
@@ -2,6 +2,7 @@ package com.stardust.autojs.runtime;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.os.Looper;
import com.stardust.autojs.R; import com.stardust.autojs.R;
import com.stardust.autojs.engine.ScriptEngine; import com.stardust.autojs.engine.ScriptEngine;
@@ -10,6 +11,7 @@ import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.api.AppUtils; import com.stardust.autojs.runtime.api.AppUtils;
import com.stardust.autojs.runtime.api.Console; import com.stardust.autojs.runtime.api.Console;
import com.stardust.autojs.runtime.api.UiSelector; import com.stardust.autojs.runtime.api.UiSelector;
import com.stardust.autojs.runtime.api.internal.VolatileBox;
import com.stardust.pio.UncheckedIOException; import com.stardust.pio.UncheckedIOException;
import com.stardust.util.ClipboardUtil; import com.stardust.util.ClipboardUtil;
import com.stardust.autojs.runtime.api.ProcessShell; import com.stardust.autojs.runtime.api.ProcessShell;
@@ -117,6 +119,20 @@ public class ScriptRuntime extends AbstractScriptRuntime {
}); });
} }
public String getClip() {
if (Looper.myLooper() == Looper.getMainLooper()) {
return ClipboardUtil.getClipOrEmpty(mUiHandler.getContext()).toString();
}
final VolatileBox<String> clip = new VolatileBox<>("");
mUiHandler.post(new Runnable() {
@Override
public void run() {
clip.setAndNotify(ClipboardUtil.getClipOrEmpty(mUiHandler.getContext()).toString());
}
});
return clip.blockedGet();
}
@Override @Override
public AbstractShell getRootShell() { public AbstractShell getRootShell() {
ensureRootShell(); ensureRootShell();
@@ -1,11 +0,0 @@
package com.stardust.autojs.runtime;
import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.api.AppUtils;
import com.stardust.autojs.runtime.api.Console;
import com.stardust.util.Supplier;
import com.stardust.util.UiHandler;
public class ScriptRuntimeBuilder {
}
@@ -1,4 +1,4 @@
package com.stardust.scriptdroid.autojs.api; package com.stardust.autojs.runtime.api.internal;
import com.stardust.autojs.runtime.ScriptInterruptedException; import com.stardust.autojs.runtime.ScriptInterruptedException;
@@ -3,6 +3,7 @@ package com.stardust.util;
import android.content.ClipData; import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull;
/** /**
@@ -15,4 +16,17 @@ public class ClipboardUtil {
public static void setClip(Context context, CharSequence text) { public static void setClip(Context context, CharSequence text) {
((ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(ClipData.newPlainText("", text)); ((ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(ClipData.newPlainText("", text));
} }
public static CharSequence getClip(Context context) {
return ((ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE)).getPrimaryClip().getItemAt(0).getText();
}
@NonNull
public static CharSequence getClipOrEmpty(Context context) {
CharSequence clip = getClip(context);
if (clip == null) {
return "";
}
return clip;
}
} }