From 091ec51ef2ad0d7ea8f9d7fcd8fe7acddf8ab116 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Fri, 12 May 2017 13:14:17 +0800 Subject: [PATCH] fix crash when remote file name is untitle --- .idea/misc.xml | 2 +- app/build.gradle | 2 +- .../SublimePluginClient.java | 52 +++++++++++++++--- .../SublimePluginClientManager.java | 8 +-- .../SublimeResponseHandler.java | 14 ++++- .../ui/main/SlideMenuFragment.java | 18 ++++++ app/src/main/res/drawable-xxhdpi/ic_debug.png | Bin 1136 -> 0 bytes app/src/main/res/drawable/ic_debug.png | Bin 0 -> 1103 bytes app/src/main/res/values/strings.xml | 4 +- version.json | 10 +++- 10 files changed, 87 insertions(+), 23 deletions(-) delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_debug.png create mode 100644 app/src/main/res/drawable/ic_debug.png 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 f1151fa34d11b2252d3a17fe03ac28b4af1dfc11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 zcmV-$1dscPP)&Okf_@EO35Scez@4tfs&m1VmH;HyyKniyC6?Y!ce?r0GY0MI(Tjh6Ot?t}nv zabNIz3;@lK0EG4o073CIt~e*}X^#QC^K>vzmKGQq0hp{Y2H+`xSCJ5Xk*jBIJtiN< zzU#CES`oP?v<1`{fSUlmL_##dE5_N=jo257u1BLT*BzYjH&KFpO30rx9 zCQH)k+1>!4m1KRsSym;N^i7afzZ* z8STzg_5Tt8ULF_;KuPBkfK~r5b>`)P)PK-K?iXnJ^HBnd7dtN^X1|JMNU z@IdN!0$s%-nr*P@|1|(c?&adyb{5Qnm&*rm+>{48>#|9AOZ*>?UIHK&4{V}!r$G5JC-TJq{r8jA&tEP!ZDu=TsTfWiU*m0zmqH#PPz&tQvYw2%rZsJGs0TC0$HCgWNYR8X^Bjh2XY*c7Dq_8n6*HV zOg^}asYuFGCPxtHKBJDyG<%*!q!&3%WpWz-&k++jfz{&i-A zZpG#Tp>V6)Tzsg}Y(-fvZn&ks3~S8_uc-Ifq5c7ky7N8C_eS{u00006R~&&Lka4`kr{M=JHcXZzcVb^hVN$nullZy({TN z(sfDiruVy#9GI&-_+Apl^@I6K?-0a-GML z?l><=zC2^ft^mOGiTha2C2<`K$MRxIT=6xM81Y*pT>(HsBkRYKOd69by)yS7O8QuV zKvw|RjEURh?m4kZrZx<^0-!}1LL<%x$5Y6ZI>GP&Sg#q{1E{_CBhz7BazILGFaRKy zp#h*lcy1I*HV#w2fD4xl z=n&)HI##Hqh3yUi6eJgTon9`pGc%+)s+H~lK!I8iT9xO&x&$DAfJOOSOPH0I=l4x! zZruV9>s;F+*Mz|k08j;N&u8bd=0JYy-ud zWLuPb@f1Io)wi7kXtby*bDd-0@uAvUr8@vn9@e>Z($vZ}2f(@lpjP>K64tuz&=mk4 z-++=oBGwttxas(NEz#1Q2Y6h=?}=-$D>YuuL803XYmwb}fVYm2W1Bn>a`&f_WH$g< zz7e-i5i3C%R-WTs5ZwY$q6`Zxk0Omu9U5+~JT3qjgf49|WUYyNlhkt3vQpJ; z2>ka+Fh#io41Iqrw8`EY{?KI*1yhX>;SiSJX@tD$Fnl8f0JUs$@CwLRsI!(yQ8!f} zC{qi*g`R?WdUb!RI0m3fGk`z&V8+#DD^ne(Qg%)3E z@%?U;ytGz0)$%SOu!O+wLV&K4ov*R5(EH4D$9>Y`yRHI+6e又双 又双叒 又双叒叕 - 连接调试服务器 + 连接电脑 + 已连接 + 已断开连接 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": [