add sublime text plugin support
This commit is contained in:
@@ -9,8 +9,8 @@ android {
|
||||
applicationId "com.stardust.scriptdroid"
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 23
|
||||
versionCode 126
|
||||
versionName "2.0.10 Beta"
|
||||
versionCode 128
|
||||
versionName "2.0.10c Beta"
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
multiDexEnabled true
|
||||
ndk {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
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.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
|
||||
|
||||
@@ -74,7 +74,6 @@ public class App extends MultiDexApplication {
|
||||
AutoJs.initInstance(this);
|
||||
JsBeautifierFactory.initJsBeautify(this, "js/jsbeautify.js");
|
||||
initVolumeChangeObserver();
|
||||
startService(new Intent(this, AccessibilityWatchDogService.class));
|
||||
}
|
||||
|
||||
private void initVolumeChangeObserver() {
|
||||
|
||||
@@ -20,13 +20,12 @@ import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.api.Shell;
|
||||
import com.stardust.scriptdroid.script.StorageScriptProvider;
|
||||
import com.stardust.scriptdroid.ui.console.StardustConsole;
|
||||
import com.stardust.util.Supplier;
|
||||
import com.stardust.util.UiHandler;
|
||||
import com.stardust.view.accessibility.AccessibilityInfoProvider;
|
||||
import com.stardust.scriptdroid.layout_inspector.LayoutInspector;
|
||||
import com.stardust.scriptdroid.record.accessibility.AccessibilityActionRecorder;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.LayoutInspector;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.record.accessibility.AccessibilityActionRecorder;
|
||||
import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
|
||||
import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
|
||||
import com.stardust.scriptdroid.ui.console.JraskaConsole;
|
||||
|
||||
@@ -11,6 +11,7 @@ import android.view.WindowManager;
|
||||
|
||||
import com.afollestad.materialdialogs.DialogAction;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.stardust.autojs.runtime.api.internal.VolatileBox;
|
||||
import com.stardust.util.UiHandler;
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,15 +2,13 @@ package com.stardust.scriptdroid.autojs.api;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.ContextWrapper;
|
||||
import android.content.DialogInterface;
|
||||
import android.text.TextUtils;
|
||||
import android.view.ContextThemeWrapper;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.stardust.autojs.runtime.ScriptInterface;
|
||||
import com.stardust.autojs.runtime.ScriptInterruptedException;
|
||||
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.util.ArrayUtils;
|
||||
import com.stardust.util.UiHandler;
|
||||
|
||||
@@ -6,18 +6,12 @@ import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.IntDef;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.stardust.enhancedfloaty.FloatyService;
|
||||
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.
|
||||
|
||||
@@ -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.menu.view.FloatingLayoutBoundsView;
|
||||
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.theme.ThemeColorManagerCompat;
|
||||
import com.stardust.util.MessageEvent;
|
||||
|
||||
@@ -12,7 +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.scriptdroid.external.floating_window.menu.layout_inspector.LayoutInspector;
|
||||
import com.stardust.util.ClipboardUtil;
|
||||
import com.stardust.scriptdroid.ui.main.MainActivity;
|
||||
import com.stardust.util.MessageEvent;
|
||||
|
||||
@@ -15,17 +15,15 @@ import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.accessibility.AccessibilityEventHelper;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.scriptdroid.record.Recorder;
|
||||
import com.stardust.scriptdroid.record.accessibility.AccessibilityActionRecorder;
|
||||
import com.stardust.scriptdroid.record.inputevent.InputEventConverter;
|
||||
import com.stardust.scriptdroid.record.inputevent.KeyObserver;
|
||||
import com.stardust.scriptdroid.record.inputevent.TouchRecorder;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.record.Recorder;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.record.accessibility.AccessibilityActionRecorder;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.record.inputevent.KeyObserver;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.record.inputevent.TouchRecorder;
|
||||
import com.stardust.scriptdroid.ui.main.MainActivity;
|
||||
import com.stardust.util.MessageEvent;
|
||||
import com.stardust.view.ViewBinder;
|
||||
import com.stardust.view.ViewBinding;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
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.util.Log;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
|
||||
import com.stardust.scriptdroid.service.AccessibilityWatchDogService;
|
||||
import com.stardust.util.UnderuseExecutors;
|
||||
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.
|
||||
@@ -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.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.graphics.Canvas;
|
||||
@@ -12,12 +12,10 @@ import android.util.AttributeSet;
|
||||
import android.view.MotionEvent;
|
||||
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 java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
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.graphics.Canvas;
|
||||
@@ -14,7 +14,7 @@ import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
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.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.os.Build;
|
||||
@@ -13,9 +13,7 @@ import android.widget.FrameLayout;
|
||||
import android.widget.ViewSwitcher;
|
||||
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.layout_inspector.LayoutInspector;
|
||||
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
|
||||
|
||||
/**
|
||||
* 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.graphics.Color;
|
||||
@@ -10,7 +10,7 @@ import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
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 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;
|
||||
|
||||
@@ -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.os.Build;
|
||||
@@ -8,9 +8,8 @@ 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.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
|
||||
import com.stardust.util.SparseArrayEntries;
|
||||
import com.stardust.view.accessibility.AccessibilityNodeInfoAllocator;
|
||||
import com.stardust.view.accessibility.AccessibilityNodeInfoHelper;
|
||||
|
||||
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.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 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.
|
||||
@@ -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.text.TextUtils;
|
||||
@@ -7,12 +7,9 @@ import android.widget.Toast;
|
||||
import com.flurry.android.FlurryAgent;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.record.Recorder;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.record.Recorder;
|
||||
import com.stardust.util.MapEntries;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
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.record.Recorder;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.record.Recorder;
|
||||
|
||||
/**
|
||||
* 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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
@@ -7,10 +7,10 @@ import android.view.WindowManager;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.afollestad.materialdialogs.Theme;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.LayoutBoundsView;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.NodeInfoView;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.OnNodeInfoSelectListener;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.LayoutBoundsView;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.NodeInfoView;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.OnNodeInfoSelectListener;
|
||||
import com.stardust.util.MessageEvent;
|
||||
|
||||
/**
|
||||
|
||||
@@ -7,10 +7,10 @@ import android.view.WindowManager;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.afollestad.materialdialogs.Theme;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
import com.stardust.scriptdroid.layout_inspector.NodeInfo;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.LayoutHierarchyView;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.NodeInfoView;
|
||||
import com.stardust.scriptdroid.layout_inspector.view.OnNodeInfoSelectListener;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.NodeInfo;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.LayoutHierarchyView;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.NodeInfoView;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.layout_inspector.view.OnNodeInfoSelectListener;
|
||||
import com.stardust.util.MessageEvent;
|
||||
|
||||
/**
|
||||
|
||||
@@ -40,8 +40,4 @@ public class ImportIntentActivity extends BaseActivity {
|
||||
finish();
|
||||
}
|
||||
|
||||
private void startMainActivity() {
|
||||
|
||||
finish();
|
||||
}
|
||||
}
|
||||
@@ -44,7 +44,11 @@ public class RunIntentActivity extends Activity {
|
||||
source = new StringScriptSource(script);
|
||||
} else if (path != null && new PathChecker(this).checkAndToastError(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();
|
||||
}
|
||||
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.util.Log;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.util.IntentUtil;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
@@ -26,6 +29,11 @@ public class CrashHandler implements UncaughtExceptionHandler {
|
||||
}
|
||||
|
||||
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 {
|
||||
Log.e(TAG, "Uncaught Exception", ex);
|
||||
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) {
|
||||
Intent intent = new Intent(App.getApp(), this.mErrorReportClass);
|
||||
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.stardust.autojs.runtime.api.AbstractConsole;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.sublime_plugin_client.SublimePluginClientManager;
|
||||
import com.stardust.util.SparseArrayEntries;
|
||||
import com.stardust.util.TextUtils;
|
||||
|
||||
@@ -48,12 +49,14 @@ public class JraskaConsole extends AbstractConsole {
|
||||
public void println(int level, CharSequence charSequence) {
|
||||
Console.write(getLevelSpannable(level, getTag(level)));
|
||||
Console.writeLine(getLevelSpannable(level, charSequence));
|
||||
SublimePluginClientManager.log(getTag(level) + charSequence.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(int level, CharSequence data) {
|
||||
Console.write(getLevelSpannable(level, getTag(level)));
|
||||
Console.write(getLevelSpannable(level, data));
|
||||
SublimePluginClientManager.log(getTag(level) + data.toString());
|
||||
}
|
||||
|
||||
private CharSequence getTag(int level) {
|
||||
|
||||
@@ -16,6 +16,7 @@ import android.support.v4.view.ViewPager;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v7.app.ActionBarDrawerToggle;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
@@ -24,6 +25,7 @@ import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.DialogAction;
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.stardust.app.FragmentPagerAdapterBuilder;
|
||||
import com.stardust.app.NotAskAgainDialog;
|
||||
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.sample.Sample;
|
||||
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.DrawableSaver;
|
||||
import com.stardust.scriptdroid.ui.BaseActivity;
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.ui.main;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
@@ -10,13 +11,16 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.stardust.app.Fragment;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.autojs.AutoJs;
|
||||
import com.stardust.scriptdroid.external.floating_window.FloatingWindowManger;
|
||||
import com.stardust.scriptdroid.external.floating_window.menu.HoverMenuService;
|
||||
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.WifiTool;
|
||||
import com.stardust.scriptdroid.ui.console.LogActivity;
|
||||
import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity;
|
||||
import com.stardust.util.UnderuseExecutors;
|
||||
@@ -42,6 +46,7 @@ public class SlideMenuFragment extends Fragment {
|
||||
}
|
||||
|
||||
private SwitchCompat mAccessibilityServiceSwitch, mFloatingWindowSwitch;
|
||||
private SwitchCompat mDebugSwith;
|
||||
private Executor mExecutor = UnderuseExecutors.getExecutor();
|
||||
|
||||
@Override
|
||||
@@ -94,6 +99,7 @@ public class SlideMenuFragment extends Fragment {
|
||||
private void setUpSwitchCompat() {
|
||||
mAccessibilityServiceSwitch = $(R.id.sw_auto_operate_service);
|
||||
mFloatingWindowSwitch = $(R.id.sw_floating_window);
|
||||
mDebugSwith = $(R.id.sw_debug);
|
||||
}
|
||||
|
||||
|
||||
@@ -135,6 +141,27 @@ public class SlideMenuFragment extends Fragment {
|
||||
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)
|
||||
private void stopAllRunningScripts() {
|
||||
|
||||
BIN
app/src/main/res/drawable-xxhdpi/ic_debug.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/ic_debug.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -19,13 +19,13 @@
|
||||
android:layout_width="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:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
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:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
@@ -116,6 +116,39 @@
|
||||
|
||||
</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
|
||||
android:id="@+id/stop_all_running_scripts"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -178,6 +178,7 @@
|
||||
<string name="text_again_and_again">又双</string>
|
||||
<string name="text_again_and_again_again">又双叒</string>
|
||||
<string name="text_again_and_again_again_again">又双叒叕</string>
|
||||
<string name="debug">连接调试服务器</string>
|
||||
|
||||
<string-array name="record_control_keys">
|
||||
<item>无</item>
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.stardust.autojs.runtime;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Looper;
|
||||
|
||||
import com.stardust.autojs.R;
|
||||
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.Console;
|
||||
import com.stardust.autojs.runtime.api.UiSelector;
|
||||
import com.stardust.autojs.runtime.api.internal.VolatileBox;
|
||||
import com.stardust.pio.UncheckedIOException;
|
||||
import com.stardust.util.ClipboardUtil;
|
||||
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
|
||||
public AbstractShell getRootShell() {
|
||||
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;
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.stardust.util;
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
|
||||
/**
|
||||
@@ -15,4 +16,17 @@ public class ClipboardUtil {
|
||||
public static void setClip(Context context, CharSequence 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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user