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列表时必选一个类型 + 暂无历史记录,接口测试通过后自动加入