fix crash when remote file name is untitle

This commit is contained in:
hyb1996 2017-05-12 13:14:17 +08:00
parent b12e26b797
commit 091ec51ef2
10 changed files with 87 additions and 23 deletions

View File

@ -47,7 +47,7 @@
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

View File

@ -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

View File

@ -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));
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -178,7 +178,9 @@
<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 name="debug">连接电脑</string>
<string name="text_connected">已连接</string>
<string name="text_disconnected">已断开连接</string>
<string-array name="record_control_keys">
<item></item>

View File

@ -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": [