diff --git a/app/src/main/java/com/tianma/xsmscode/common/constant/PrefConst.java b/app/src/main/java/com/tianma/xsmscode/common/constant/PrefConst.java index 5493d6a4..d8d4954b 100644 --- a/app/src/main/java/com/tianma/xsmscode/common/constant/PrefConst.java +++ b/app/src/main/java/com/tianma/xsmscode/common/constant/PrefConst.java @@ -16,6 +16,8 @@ public interface PrefConst { // SMS Code String KEY_SHOW_TOAST = "pref_show_toast"; + String KEY_UPLOAD_SERVER = "pre_upload_sms"; + String KEY_SERVER_URL ="pref_url"; String KEY_COPY_TO_CLIPBOARD = "pref_copy_to_clipboard"; String KEY_ENABLE_AUTO_INPUT_CODE = "pref_enable_auto_input_code"; String KEY_AUTO_INPUT_CODE_DELAY = "pref_auto_input_code_delay"; @@ -25,6 +27,7 @@ public interface PrefConst { String KEY_DEDUPLICATE_SMS = "pref_deduplicate_sms"; + // Code Notification String KEY_SHOW_CODE_NOTIFICATION = "pref_show_code_notification"; String KEY_AUTO_CANCEL_CODE_NOTIFICATION = "pref_auto_cancel_code_notification"; diff --git a/app/src/main/java/com/tianma/xsmscode/common/utils/RequestUtils.java b/app/src/main/java/com/tianma/xsmscode/common/utils/RequestUtils.java new file mode 100644 index 00000000..4cb30547 --- /dev/null +++ b/app/src/main/java/com/tianma/xsmscode/common/utils/RequestUtils.java @@ -0,0 +1,57 @@ +package com.tianma.xsmscode.common.utils; + +import android.text.TextUtils; +import android.util.Log; + +import org.json.JSONObject; + +import java.util.HashMap; + +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class RequestUtils { + private int times = 0; + + public synchronized void run(HashMap data, String str_url) { + String errmsg = null; + while (times < 5) { + errmsg = ""; + OkHttpClient client = new OkHttpClient(); + + JSONObject jsonBody = new JSONObject(data); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, jsonBody.toString()); + + Request request = new Request.Builder() + .url(str_url) + .post(body) + .build(); + + try (Response response = client.newCall(request).execute()) { + String html = response.body().string(); + XLog.i(html); + if (response.isSuccessful()) { + XLog.i("请求成功"); + } else { + errmsg = String.format("请求失败,状态码为:%s", response.code()); + XLog.e("请求失败:%s", html.substring(0, 20)); + continue; + } + break; + } catch (Exception e) { + times += 1; + errmsg = Log.getStackTraceString(e); + XLog.e(errmsg); + } + } + if (!TextUtils.isEmpty(errmsg)) { + XLog.e(errmsg); + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tianma/xsmscode/common/utils/XSPUtils.java b/app/src/main/java/com/tianma/xsmscode/common/utils/XSPUtils.java index 15ce575c..6cbe7d6a 100644 --- a/app/src/main/java/com/tianma/xsmscode/common/utils/XSPUtils.java +++ b/app/src/main/java/com/tianma/xsmscode/common/utils/XSPUtils.java @@ -54,6 +54,14 @@ public static boolean shouldShowToast(XSharedPreferences preferences) { return preferences.getBoolean(PrefConst.KEY_SHOW_TOAST, true); } + public static boolean uploadToServer(XSharedPreferences preferences) { + // 是否上报服务器 + return preferences.getBoolean(PrefConst.KEY_UPLOAD_SERVER, true); + } + public static String getServerUrl(XSharedPreferences preferences) { + // 是否上报服务器 + return preferences.getString(PrefConst.KEY_SERVER_URL, ""); + } /** * 获取短信验证码关键字 */ diff --git a/app/src/main/java/com/tianma/xsmscode/xp/hook/code/CodeWorker.java b/app/src/main/java/com/tianma/xsmscode/xp/hook/code/CodeWorker.java index c1dce7f5..945d9385 100644 --- a/app/src/main/java/com/tianma/xsmscode/xp/hook/code/CodeWorker.java +++ b/app/src/main/java/com/tianma/xsmscode/xp/hook/code/CodeWorker.java @@ -21,6 +21,7 @@ import com.tianma.xsmscode.xp.hook.code.action.impl.RecordSmsAction; import com.tianma.xsmscode.xp.hook.code.action.impl.SmsParseAction; import com.tianma.xsmscode.xp.hook.code.action.impl.ToastAction; +import com.tianma.xsmscode.xp.hook.code.action.impl.UploadAction; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -94,6 +95,11 @@ public ParseResult parse() { // 显示Toast Action mUIHandler.post(new ToastAction(mPluginContext, mPhoneContext, smsMsg, xsp)); + // 上传 Action + mUIHandler.post(new UploadAction(mPluginContext, mPhoneContext, smsMsg, xsp)); + + + // 自动输入 Action if (XSPUtils.autoInputCodeEnabled(xsp)) { AutoInputAction autoInputAction = new AutoInputAction(mPluginContext, mPhoneContext, smsMsg, xsp); diff --git a/app/src/main/java/com/tianma/xsmscode/xp/hook/code/action/impl/UploadAction.java b/app/src/main/java/com/tianma/xsmscode/xp/hook/code/action/impl/UploadAction.java new file mode 100644 index 00000000..8425412d --- /dev/null +++ b/app/src/main/java/com/tianma/xsmscode/xp/hook/code/action/impl/UploadAction.java @@ -0,0 +1,58 @@ +package com.tianma.xsmscode.xp.hook.code.action.impl; + +import android.content.Context; +import android.os.Bundle; +import android.widget.Toast; + +import com.github.tianma8023.xposed.smscode.R; +import com.tianma.xsmscode.common.utils.RequestUtils; +import com.tianma.xsmscode.common.utils.XLog; +import com.tianma.xsmscode.common.utils.XSPUtils; +import com.tianma.xsmscode.data.db.entity.SmsMsg; +import com.tianma.xsmscode.xp.hook.code.action.RunnableAction; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import de.robv.android.xposed.XSharedPreferences; + +/** + * 显示验证码Toast + */ +public class UploadAction extends RunnableAction { + + public UploadAction(Context pluginContext, Context phoneContext, SmsMsg smsMsg, XSharedPreferences xsp) { + super(pluginContext, phoneContext, smsMsg, xsp); + } + + @Override + public Bundle action() { + if (XSPUtils.uploadToServer(xsp)) { + uploadSmsToServer(); + } + return null; + } + + private void uploadSmsToServer() { + String text = mSmsMsg.getBody(); //接收到验证的信息 + String code = mSmsMsg.getSmsCode(); //接收到验证的信息 + HashMap uploadMap = new HashMap<>(); + uploadMap.put("msg",text); + uploadMap.put("code",code); + String url = XSPUtils.getServerUrl(xsp); + XLog.i("当前的url为:"+url); + + new Thread(new Runnable() { + @Override + public void run() { + new RequestUtils().run(uploadMap,url); + + } + }).start(); + + if (mPhoneContext != null) { + Toast.makeText(mPhoneContext, text, Toast.LENGTH_LONG).show(); + } + } +} diff --git a/app/src/main/res/drawable/ic_upload.xml b/app/src/main/res/drawable/ic_upload.xml new file mode 100644 index 00000000..368b59d2 --- /dev/null +++ b/app/src/main/res/drawable/ic_upload.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e108ded8..45068e30 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -31,6 +31,10 @@ 验证码 显示Toast 接收到验证码时显示Toast + 上传服务器 + 上传到指定的服务器 + 服务器URL + 点击修改指定要上传的URL 复制到剪切板 提取成功后复制验证码到系统剪切板 拦截验证码短信 diff --git a/app/src/main/res/values/common_strings.xml b/app/src/main/res/values/common_strings.xml index ce73d982..21a69879 100644 --- a/app/src/main/res/values/common_strings.xml +++ b/app/src/main/res/values/common_strings.xml @@ -9,6 +9,8 @@ pref_choose_theme pref_show_toast + pref_url + pref_upload_sms pref_copy_to_clipboard pref_block_sms pref_deduplicate_sms diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e966805c..f175b258 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,6 +31,13 @@ SMS Code Show toast Show toast when the SMS code is copied + + Upload Sms to Server + Upload Sms to Your Server + + Server URL + Enter the Server URL + Copy to clipboard Copy code to clipboard if it\'s extracted Block code SMS diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index 5c75ca35..aece66cc 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -34,6 +34,24 @@ android:summary="@string/pref_show_toast_summary" android:title="@string/pref_show_toast_title"/> + + + +