mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-03 09:27:41 +08:00
新增:主动控制·客户端增加服务地址历史记录(测试接口通过后自动加入)
This commit is contained in:
parent
04207e0911
commit
b74beba37c
@ -32,8 +32,11 @@ import com.xuexiang.xui.utils.DensityUtils
|
|||||||
import com.xuexiang.xui.utils.ResUtils
|
import com.xuexiang.xui.utils.ResUtils
|
||||||
import com.xuexiang.xui.utils.WidgetUtils
|
import com.xuexiang.xui.utils.WidgetUtils
|
||||||
import com.xuexiang.xui.widget.actionbar.TitleBar
|
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
|
import com.xuexiang.xutil.XUtil
|
||||||
|
|
||||||
|
|
||||||
@Suppress("PrivatePropertyName", "PropertyName")
|
@Suppress("PrivatePropertyName", "PropertyName")
|
||||||
@Page(name = "主动控制·客户端")
|
@Page(name = "主动控制·客户端")
|
||||||
class ClientFragment : BaseFragment<FragmentClientBinding?>(),
|
class ClientFragment : BaseFragment<FragmentClientBinding?>(),
|
||||||
@ -43,6 +46,7 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(),
|
|||||||
val TAG: String = ClientFragment::class.java.simpleName
|
val TAG: String = ClientFragment::class.java.simpleName
|
||||||
private var appContext: App? = null
|
private var appContext: App? = null
|
||||||
private var serverConfig: ConfigData? = null
|
private var serverConfig: ConfigData? = null
|
||||||
|
private var serverHistory: MutableMap<String, String> = mutableMapOf()
|
||||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||||
|
|
||||||
override fun initViews() {
|
override fun initViews() {
|
||||||
@ -65,6 +69,12 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(),
|
|||||||
widgetItemAdapter.setOnItemClickListener(this)
|
widgetItemAdapter.setOnItemClickListener(this)
|
||||||
binding!!.recyclerView.adapter = widgetItemAdapter
|
binding!!.recyclerView.adapter = widgetItemAdapter
|
||||||
|
|
||||||
|
//取出历史记录
|
||||||
|
val history = HttpServerUtils.serverHistory
|
||||||
|
if (!TextUtils.isEmpty(history)) {
|
||||||
|
serverHistory = Gson().fromJson(history, object : TypeToken<MutableMap<String, String>>() {}.type)
|
||||||
|
}
|
||||||
|
|
||||||
if (CommonUtils.checkUrl(HttpServerUtils.serverAddress)) queryConfig(false)
|
if (CommonUtils.checkUrl(HttpServerUtils.serverAddress)) queryConfig(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,12 +123,39 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(),
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
binding!!.btnServerHistory.setOnClickListener(this)
|
||||||
binding!!.btnServerTest.setOnClickListener(this)
|
binding!!.btnServerTest.setOnClickListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
@SingleClick
|
@SingleClick
|
||||||
override fun onClick(v: View) {
|
override fun onClick(v: View) {
|
||||||
when (v.id) {
|
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 -> {
|
R.id.btn_server_test -> {
|
||||||
if (!CommonUtils.checkUrl(HttpServerUtils.serverAddress)) {
|
if (!CommonUtils.checkUrl(HttpServerUtils.serverAddress)) {
|
||||||
XToastUtils.error(getString(R.string.invalid_service_address))
|
XToastUtils.error(getString(R.string.invalid_service_address))
|
||||||
@ -202,6 +239,9 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(),
|
|||||||
if (resp.code == 200) {
|
if (resp.code == 200) {
|
||||||
serverConfig = resp.data!!
|
serverConfig = resp.data!!
|
||||||
if (needToast) XToastUtils.success(ResUtils.getString(R.string.request_succeeded))
|
if (needToast) XToastUtils.success(ResUtils.getString(R.string.request_succeeded))
|
||||||
|
//添加到历史记录
|
||||||
|
serverHistory[HttpServerUtils.serverAddress.toString()] = HttpServerUtils.clientSignKey ?: ""
|
||||||
|
HttpServerUtils.serverHistory = Gson().toJson(serverHistory)
|
||||||
} else {
|
} else {
|
||||||
if (needToast) XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg)
|
if (needToast) XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg)
|
||||||
}
|
}
|
||||||
|
@ -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_CONTACT_QUERY = "enable_api_contact_query"
|
||||||
const val SP_ENABLE_API_BATTERY_QUERY = "enable_api_battery_query"
|
const val SP_ENABLE_API_BATTERY_QUERY = "enable_api_battery_query"
|
||||||
const val SP_SERVER_ADDRESS = "server_address"
|
const val SP_SERVER_ADDRESS = "server_address"
|
||||||
|
const val SP_SERVER_HISTORY = "server_history"
|
||||||
const val SP_CLIENT_SIGN_KEY = "client_sign_key"
|
const val SP_CLIENT_SIGN_KEY = "client_sign_key"
|
||||||
var CLIENT_FRAGMENT_LIST = listOf(
|
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),
|
PageInfo(getString(R.string.api_clone), "com.idormy.sms.forwarder.fragment.client.CloneFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_clone),
|
||||||
|
@ -47,6 +47,14 @@ class HttpServerUtils private constructor() {
|
|||||||
MMKVUtils.put(SP_SERVER_ADDRESS, clientSignKey)
|
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
|
@JvmStatic
|
||||||
var clientSignKey: String?
|
var clientSignKey: String?
|
||||||
|
@ -60,6 +60,17 @@
|
|||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:hint="@string/service_address_hint" />
|
android:hint="@string/service_address_hint" />
|
||||||
|
|
||||||
|
<com.xuexiang.xui.widget.button.ButtonView
|
||||||
|
android:id="@+id/btn_server_history"
|
||||||
|
style="@style/ButtonView.Gray"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:minWidth="70dp"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:text="@string/server_history" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
@ -169,6 +169,7 @@
|
|||||||
<string name="about">About</string>
|
<string name="about">About</string>
|
||||||
<string name="help">Help</string>
|
<string name="help">Help</string>
|
||||||
<string name="clear_logs">Clear logs</string>
|
<string name="clear_logs">Clear logs</string>
|
||||||
|
<string name="clear_history">Clear History</string>
|
||||||
<string name="app_rule">App rule</string>
|
<string name="app_rule">App rule</string>
|
||||||
<string name="call_rule">Call rule</string>
|
<string name="call_rule">Call rule</string>
|
||||||
<string name="sms_rule">Sms rule</string>
|
<string name="sms_rule">Sms rule</string>
|
||||||
@ -807,6 +808,7 @@
|
|||||||
<string name="battery_health">Health: %s</string>
|
<string name="battery_health">Health: %s</string>
|
||||||
<string name="battery_plugged">Plugged: %s</string>
|
<string name="battery_plugged">Plugged: %s</string>
|
||||||
|
|
||||||
|
<string name="server_history">Server History</string>
|
||||||
<string name="server_test">Server Test</string>
|
<string name="server_test">Server Test</string>
|
||||||
<string name="invalid_service_address">Invalid service address\nFormat: http://127.0.0.1:5000 or https://smsf.demo.com</string>
|
<string name="invalid_service_address">Invalid service address\nFormat: http://127.0.0.1:5000 or https://smsf.demo.com</string>
|
||||||
<string name="click_test_button_first">Click the test button first, to get the list of features enabled by the server</string>
|
<string name="click_test_button_first">Click the test button first, to get the list of features enabled by the server</string>
|
||||||
@ -864,4 +866,5 @@
|
|||||||
<string name="load_app_list">Get installed app info async at startup</string>
|
<string name="load_app_list">Get installed app info async at startup</string>
|
||||||
<string name="load_app_list_tips">Used to speed up entering the application list/editing forwarding rules drop-down selection/replacement {{APP_NAME}}</string>
|
<string name="load_app_list_tips">Used to speed up entering the application list/editing forwarding rules drop-down selection/replacement {{APP_NAME}}</string>
|
||||||
<string name="load_app_list_toast">A type must be selected when enabling asynchronous loading of the list of installed apps</string>
|
<string name="load_app_list_toast">A type must be selected when enabling asynchronous loading of the list of installed apps</string>
|
||||||
|
<string name="no_server_history">There is no history record, it will be added automatically after the interface test is passed</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -170,6 +170,7 @@
|
|||||||
<string name="about">关于软件</string>
|
<string name="about">关于软件</string>
|
||||||
<string name="help">使用帮助</string>
|
<string name="help">使用帮助</string>
|
||||||
<string name="clear_logs">清空日志</string>
|
<string name="clear_logs">清空日志</string>
|
||||||
|
<string name="clear_history">清空记录</string>
|
||||||
<string name="app_rule">通知转发规则</string>
|
<string name="app_rule">通知转发规则</string>
|
||||||
<string name="call_rule">通话转发规则</string>
|
<string name="call_rule">通话转发规则</string>
|
||||||
<string name="sms_rule">短信转发规则</string>
|
<string name="sms_rule">短信转发规则</string>
|
||||||
@ -808,6 +809,7 @@
|
|||||||
<string name="battery_health">健康度:%s</string>
|
<string name="battery_health">健康度:%s</string>
|
||||||
<string name="battery_plugged">充电器:%s</string>
|
<string name="battery_plugged">充电器:%s</string>
|
||||||
|
|
||||||
|
<string name="server_history">历史记录</string>
|
||||||
<string name="server_test">测试接口</string>
|
<string name="server_test">测试接口</string>
|
||||||
<string name="invalid_service_address">无效的服务地址!\n格式:http://127.0.0.1:5000 或 https://smsf.demo.com</string>
|
<string name="invalid_service_address">无效的服务地址!\n格式:http://127.0.0.1:5000 或 https://smsf.demo.com</string>
|
||||||
<string name="click_test_button_first">请先点击【测试接口】按钮,获取服务端已启用的功能列表</string>
|
<string name="click_test_button_first">请先点击【测试接口】按钮,获取服务端已启用的功能列表</string>
|
||||||
@ -865,4 +867,5 @@
|
|||||||
<string name="load_app_list">启动时异步获取已安装App列表</string>
|
<string name="load_app_list">启动时异步获取已安装App列表</string>
|
||||||
<string name="load_app_list_tips">用于加速进入应用列表/编辑转发规则下拉选择/替换{{APP名称}}</string>
|
<string name="load_app_list_tips">用于加速进入应用列表/编辑转发规则下拉选择/替换{{APP名称}}</string>
|
||||||
<string name="load_app_list_toast">开启异步获取已安装App列表时必选一个类型</string>
|
<string name="load_app_list_toast">开启异步获取已安装App列表时必选一个类型</string>
|
||||||
|
<string name="no_server_history">暂无历史记录,接口测试通过后自动加入</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user