diff --git a/.idea/misc.xml b/.idea/misc.xml index ace2cb0d..9a773b88 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -47,7 +47,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 1167f3a3..bfb9e607 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { applicationId "com.stardust.scriptdroid" minSdkVersion 19 targetSdkVersion 23 - versionCode 128 + versionCode 129 versionName "2.0.10c Beta" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true diff --git a/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimePluginClient.java b/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimePluginClient.java index c636d6a7..e0123a86 100644 --- a/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimePluginClient.java +++ b/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimePluginClient.java @@ -1,14 +1,20 @@ package com.stardust.scriptdroid.sublime_plugin_client; +import android.os.Looper; + import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.stardust.util.UiHandler; +import org.greenrobot.eventbus.EventBus; + import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; /** * Created by Stardust on 2017/5/10. @@ -16,18 +22,29 @@ import java.net.Socket; public class SublimePluginClient { + public static class ConnectionStateChangeEvent { + + private boolean mConnected; + + public ConnectionStateChangeEvent(boolean connected) { + mConnected = connected; + } + + public boolean isConnected() { + return mConnected; + } + } private Socket mSocket; private Handler mResponseHandler; private String host; private int port; private OutputStream mOutputStream; - private UiHandler mUiHandler; + private Executor mExecutor; - public SublimePluginClient(UiHandler handler, String host, int port) { + public SublimePluginClient(String host, int port) { this.host = host; this.port = port; - mUiHandler = handler; } public void setResponseHandler(Handler handler) { @@ -43,8 +60,8 @@ public class SublimePluginClient { public void run() { try { mSocket = new Socket(host, port); + EventBus.getDefault().post(new ConnectionStateChangeEvent(true)); mSocket.setTcpNoDelay(true); - mUiHandler.toast("Connected"); mOutputStream = mSocket.getOutputStream(); startReadLoop(mSocket.getInputStream()); } catch (IOException e) { @@ -64,13 +81,30 @@ public class SublimePluginClient { } } - public void send(JsonObject object) throws IOException { + public void send(final JsonObject object) { if (mSocket == null) { throw new IllegalStateException("Socket is not listening "); } - mOutputStream.write(object.toString().getBytes()); - mOutputStream.write("\n".getBytes()); - mOutputStream.flush(); + if (Looper.myLooper() == Looper.getMainLooper()) { + if (mExecutor == null) { + mExecutor = Executors.newSingleThreadExecutor(); + } + mExecutor.execute(new Runnable() { + @Override + public void run() { + send(object); + } + }); + } + try { + mOutputStream.write(object.toString().getBytes()); + mOutputStream.write("\n".getBytes()); + mOutputStream.flush(); + } catch (IOException e) { + e.printStackTrace(); + tryClose(); + } + } public void close() throws IOException { @@ -78,7 +112,7 @@ public class SublimePluginClient { mSocket.close(); mSocket = null; mOutputStream = null; - mUiHandler.toast("Disconnected"); + EventBus.getDefault().post(new ConnectionStateChangeEvent(false)); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimePluginClientManager.java b/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimePluginClientManager.java index 10a63383..bb3df54a 100644 --- a/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimePluginClientManager.java +++ b/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimePluginClientManager.java @@ -34,7 +34,7 @@ public class SublimePluginClientManager { } public static void connect(String host) { - client = new SublimePluginClient(AutoJs.getInstance().getUiHandler(), host, 1209); + client = new SublimePluginClient(host, 1209); client.setResponseHandler(new SublimeResponseHandler()); client.listen(); } @@ -45,10 +45,6 @@ public class SublimePluginClientManager { JsonObject object = new JsonObject(); object.addProperty("type", "log"); object.addProperty("log", log); - try { - client.send(object); - } catch (IOException e) { - e.printStackTrace(); - } + client.send(object); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimeResponseHandler.java b/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimeResponseHandler.java index f38b955e..b2266a17 100644 --- a/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimeResponseHandler.java +++ b/app/src/main/java/com/stardust/scriptdroid/sublime_plugin_client/SublimeResponseHandler.java @@ -3,6 +3,8 @@ package com.stardust.scriptdroid.sublime_plugin_client; import android.text.TextUtils; import android.util.SparseArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; import com.google.gson.JsonObject; import com.stardust.autojs.engine.ScriptEngine; import com.stardust.autojs.execution.ScriptExecution; @@ -24,7 +26,7 @@ public class SublimeResponseHandler implements Handler { @Override public boolean handle(JsonObject data) { String script = data.get("script").getAsString(); - String name = data.get("name").getAsString(); + String name = getName(data); int viewId = data.get("view_id").getAsInt(); runScript(viewId, name, script); return false; @@ -44,7 +46,7 @@ public class SublimeResponseHandler implements Handler { public boolean handle(JsonObject data) { int viewId = data.get("view_id").getAsInt(); String script = data.get("script").getAsString(); - String name = data.get("name").getAsString(); + String name = getName(data); stopScript(viewId); runScript(viewId, name, script); return false; @@ -82,4 +84,12 @@ public class SublimeResponseHandler implements Handler { mScriptExecutions.delete(viewId); } } + + private String getName(JsonObject data) { + JsonElement element = data.get("name"); + if (element instanceof JsonNull) { + return null; + } + return element.getAsString(); + } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/SlideMenuFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/SlideMenuFragment.java index b33e17ea..e66a47a0 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/SlideMenuFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/SlideMenuFragment.java @@ -10,7 +10,9 @@ import android.support.v7.widget.SwitchCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; +import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import com.stardust.app.Fragment; import com.stardust.scriptdroid.R; @@ -18,17 +20,20 @@ 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.SublimePluginClient; 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.IntentUtil; import com.stardust.util.UnderuseExecutors; import com.stardust.view.ViewBinder; import com.stardust.view.ViewBinding; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; import java.util.concurrent.Executor; @@ -157,6 +162,13 @@ public class SlideMenuFragment extends Fragment { SublimePluginClientManager.connect(input.toString()); } }) + .neutralText(R.string.text_help) + .onNeutral(new MaterialDialog.SingleButtonCallback() { + @Override + public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { + IntentUtil.browse(getActivity(), "https://github.com/hyb1996/AutoJs-Sublime-Plugin/blob/master/Readme.md"); + } + }) .show(); } else if (!enabled) { SublimePluginClientManager.disconnectIfNeeded(); @@ -183,4 +195,10 @@ public class SlideMenuFragment extends Fragment { mFloatingWindowSwitch.setChecked(event.state); } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onSublimeClientStateChange(SublimePluginClient.ConnectionStateChangeEvent event) { + mDebugSwith.setChecked(event.isConnected()); + Toast.makeText(getActivity(), event.isConnected() ? R.string.text_connected : R.string.text_disconnected, Toast.LENGTH_SHORT).show(); + } + } diff --git a/app/src/main/res/drawable-xxhdpi/ic_debug.png b/app/src/main/res/drawable-xxhdpi/ic_debug.png deleted file mode 100644 index f1151fa3..00000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_debug.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_debug.png b/app/src/main/res/drawable/ic_debug.png new file mode 100644 index 00000000..251cad64 Binary files /dev/null and b/app/src/main/res/drawable/ic_debug.png differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cba372b0..531a16d4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -178,7 +178,9 @@ 又双 又双叒 又双叒叕 - 连接调试服务器 + 连接电脑 + 已连接 + 已断开连接 diff --git a/version.json b/version.json index 97498dcf..e07549f1 100644 --- a/version.json +++ b/version.json @@ -1,7 +1,7 @@ { - "versionCode": 119, - "versionName": "2.0.8 Beta", - "releaseNotes": "* 新增 文本文件读写(参见示例)\n* 新增 代码格式化(自动缩进,排版,不支持中文)\n* 新增 真正支持作为Tasker插件使用(Tasker新建任务选择插件)\n* 新增 支持加载jar文件和模块化开发(require)\n* 新增 对文件夹的支持\n* 新增 免Root模拟返回键、Home键、电源键等(参见帮助菜单->自动操作函数)\n* 新增 任务管理\n* 优化 自动操作函数的运行方式,提高执行速度\n* 修复 某些情况下脚本运行无反应的问题\n* 修复 部分自动操作函数失效的问题\n* 修复 某些情况下关闭脚本无效的问题\n* 修复 布局范围查看点击后显示错误控件的问题", + "versionCode": 127, + "versionName": "2.0.10b Beta", + "releaseNotes": "* 新增 一些脚本\n* 新增 多种对话框(参见示例 对话框)\n* 新增 悬浮窗控制台(参见示例 控制台)\n* 优化 内存占用\n* 修复 一些Bug", "downloads" : [ { "name": "酷安", @@ -10,6 +10,10 @@ { "name": "应用宝", "url": "http://a.app.qq.com/o/simple.jsp?pkgname=com.stardust.scriptdroid" + }, + { + "name": "百度手机助手", + "url": "https://mobile.baidu.com/item?docid=11462633" } ], "oldVersions": [