From b74beba37c210ed3bd5473ec35577766fd7b153e Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Thu, 16 Jun 2022 16:00:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=C2=B7=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=9C=8D=E5=8A=A1=E5=9C=B0=E5=9D=80=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=EF=BC=88=E6=B5=8B=E8=AF=95=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E5=90=8E=E8=87=AA=E5=8A=A8=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms/forwarder/fragment/ClientFragment.kt | 40 +++++++++++++++++++ .../idormy/sms/forwarder/utils/Constants.kt | 1 + .../sms/forwarder/utils/HttpServerUtils.kt | 8 ++++ app/src/main/res/layout/fragment_client.xml | 11 +++++ app/src/main/res/values-en/strings.xml | 3 ++ app/src/main/res/values/strings.xml | 3 ++ 6 files changed, 66 insertions(+) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt index e7ded512..65857257 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt @@ -32,8 +32,11 @@ import com.xuexiang.xui.utils.DensityUtils import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.WidgetUtils import com.xuexiang.xui.widget.actionbar.TitleBar +import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction +import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog import com.xuexiang.xutil.XUtil + @Suppress("PrivatePropertyName", "PropertyName") @Page(name = "主动控制·客户端") class ClientFragment : BaseFragment(), @@ -43,6 +46,7 @@ class ClientFragment : BaseFragment(), val TAG: String = ClientFragment::class.java.simpleName private var appContext: App? = null private var serverConfig: ConfigData? = null + private var serverHistory: MutableMap = mutableMapOf() private var mCountDownHelper: CountDownButtonHelper? = null override fun initViews() { @@ -65,6 +69,12 @@ class ClientFragment : BaseFragment(), widgetItemAdapter.setOnItemClickListener(this) binding!!.recyclerView.adapter = widgetItemAdapter + //取出历史记录 + val history = HttpServerUtils.serverHistory + if (!TextUtils.isEmpty(history)) { + serverHistory = Gson().fromJson(history, object : TypeToken>() {}.type) + } + if (CommonUtils.checkUrl(HttpServerUtils.serverAddress)) queryConfig(false) } @@ -113,12 +123,39 @@ class ClientFragment : BaseFragment(), } }) + binding!!.btnServerHistory.setOnClickListener(this) binding!!.btnServerTest.setOnClickListener(this) } @SingleClick override fun onClick(v: View) { when (v.id) { + R.id.btn_server_history -> { + if (serverHistory.isEmpty()) { + XToastUtils.warning(getString(R.string.no_server_history)) + return + } + Log.d(TAG, "serverHistory = $serverHistory") + + MaterialDialog.Builder(context!!) + .title(R.string.server_history) + .items(serverHistory.keys) + .itemsCallbackSingleChoice(0) { _: MaterialDialog?, _: View?, _: Int, text: CharSequence -> + //XToastUtils.info("$which: $text") + binding!!.etServerAddress.setText(text) + binding!!.etSignKey.setText(serverHistory[text]) + true // allow selection + } + .positiveText(R.string.select) + .negativeText(R.string.cancel) + .neutralText(R.string.clear_history) + .neutralColor(ResUtils.getColors(R.color.red)) + .onNeutral { _: MaterialDialog?, _: DialogAction? -> + serverHistory.clear() + HttpServerUtils.serverHistory = "" + } + .show() + } R.id.btn_server_test -> { if (!CommonUtils.checkUrl(HttpServerUtils.serverAddress)) { XToastUtils.error(getString(R.string.invalid_service_address)) @@ -202,6 +239,9 @@ class ClientFragment : BaseFragment(), if (resp.code == 200) { serverConfig = resp.data!! if (needToast) XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) + //添加到历史记录 + serverHistory[HttpServerUtils.serverAddress.toString()] = HttpServerUtils.clientSignKey ?: "" + HttpServerUtils.serverHistory = Gson().toJson(serverHistory) } else { if (needToast) XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt index 8bf8c776..b8ce8372 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt @@ -237,6 +237,7 @@ const val SP_ENABLE_API_CALL_QUERY = "enable_api_call_query" const val SP_ENABLE_API_CONTACT_QUERY = "enable_api_contact_query" const val SP_ENABLE_API_BATTERY_QUERY = "enable_api_battery_query" const val SP_SERVER_ADDRESS = "server_address" +const val SP_SERVER_HISTORY = "server_history" const val SP_CLIENT_SIGN_KEY = "client_sign_key" var CLIENT_FRAGMENT_LIST = listOf( PageInfo(getString(R.string.api_clone), "com.idormy.sms.forwarder.fragment.client.CloneFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_clone), diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt index d8ec4c60..13eadbd9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt @@ -47,6 +47,14 @@ class HttpServerUtils private constructor() { MMKVUtils.put(SP_SERVER_ADDRESS, clientSignKey) } + //服务地址历史记录 + @JvmStatic + var serverHistory: String? + get() = MMKVUtils.getString(SP_SERVER_HISTORY, "") + set(serverHistory) { + MMKVUtils.put(SP_SERVER_HISTORY, serverHistory) + } + //客户端签名密钥 @JvmStatic var clientSignKey: String? diff --git a/app/src/main/res/layout/fragment_client.xml b/app/src/main/res/layout/fragment_client.xml index 69acdcfb..35be8eea 100644 --- a/app/src/main/res/layout/fragment_client.xml +++ b/app/src/main/res/layout/fragment_client.xml @@ -60,6 +60,17 @@ android:layout_weight="1" android:hint="@string/service_address_hint" /> + + About Help Clear logs + Clear History App rule Call rule Sms rule @@ -807,6 +808,7 @@ Health: %s Plugged: %s + Server History Server Test Invalid service address\nFormat: http://127.0.0.1:5000 or https://smsf.demo.com Click the test button first, to get the list of features enabled by the server @@ -864,4 +866,5 @@ Get installed app info async at startup Used to speed up entering the application list/editing forwarding rules drop-down selection/replacement {{APP_NAME}} A type must be selected when enabling asynchronous loading of the list of installed apps + There is no history record, it will be added automatically after the interface test is passed diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6040a616..d24849bd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -170,6 +170,7 @@ 关于软件 使用帮助 清空日志 + 清空记录 通知转发规则 通话转发规则 短信转发规则 @@ -808,6 +809,7 @@ 健康度:%s 充电器:%s + 历史记录 测试接口 无效的服务地址!\n格式:http://127.0.0.1:5000 或 https://smsf.demo.com 请先点击【测试接口】按钮,获取服务端已启用的功能列表 @@ -865,4 +867,5 @@ 启动时异步获取已安装App列表 用于加速进入应用列表/编辑转发规则下拉选择/替换{{APP名称}} 开启异步获取已安装App列表时必选一个类型 + 暂无历史记录,接口测试通过后自动加入