diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5cbee035..fcbac990 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -322,6 +322,18 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcRecyclerAdapter.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcRecyclerAdapter.kt
index 1e02cbbc..5b31d483 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcRecyclerAdapter.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcRecyclerAdapter.kt
@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.adapter.base.ItemMoveCallback
import com.idormy.sms.forwarder.database.entity.Frpc
+import com.idormy.sms.forwarder.utils.STATUS_OFF
import java.util.Collections
@Suppress("DEPRECATION")
@@ -71,7 +72,12 @@ class FrpcRecyclerAdapter(
fun bind(frpc: Frpc) {
image.setImageResource(frpc.imageId)
- status.setImageResource(frpc.autorunImageId)
+ status.setImageResource(
+ when (frpc.status) {
+ STATUS_OFF -> R.drawable.ic_stop
+ else -> R.drawable.ic_start
+ }
+ )
title.text = frpc.name
}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/FrpcSpinnerAdapter.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/FrpcSpinnerAdapter.kt
index 9f1ea6e2..196ce50f 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/FrpcSpinnerAdapter.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/FrpcSpinnerAdapter.kt
@@ -14,7 +14,7 @@ import androidx.annotation.ColorInt
import androidx.annotation.DrawableRes
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.utils.Log
-import com.idormy.sms.forwarder.utils.STATUS_ON
+import com.idormy.sms.forwarder.utils.STATUS_OFF
import com.xuexiang.xui.utils.CollectionUtils
import com.xuexiang.xui.widget.spinner.editspinner.BaseEditSpinnerAdapter
import com.xuexiang.xui.widget.spinner.editspinner.EditSpinnerFilter
@@ -75,9 +75,13 @@ class FrpcSpinnerAdapter : BaseEditSpinnerAdapter, EditSpinnerFilter {
holder.iconView.setImageDrawable(item.icon)
holder.statusView.setImageDrawable(
getDrawable(
- when (item.autorun) {
+ /*when (item.autorun) {
STATUS_ON -> R.drawable.ic_autorun
else -> R.drawable.ic_manual
+ }*/
+ when (item.status) {
+ STATUS_OFF -> R.drawable.ic_stop
+ else -> R.drawable.ic_start
}
)
)
diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/FrpcSpinnerItem.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/FrpcSpinnerItem.kt
index 5ea8632b..1cd141f8 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/FrpcSpinnerItem.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/FrpcSpinnerItem.kt
@@ -7,7 +7,8 @@ class FrpcSpinnerItem(
var title: CharSequence,
var icon: Drawable? = null,
var uid: String = "",
- var autorun: Int? = 1
+ //var autorun: Int? = 1,
+ var status: Int? = 1
) {
fun setTitle(title: CharSequence): FrpcSpinnerItem {
@@ -25,9 +26,14 @@ class FrpcSpinnerItem(
return this
}
- fun setAutorun(autorun: Int): FrpcSpinnerItem {
+ /*fun setAutorun(autorun: Int): FrpcSpinnerItem {
this.autorun = autorun
return this
+ }*/
+
+ fun setStatus(status: Int): FrpcSpinnerItem {
+ this.status = status
+ return this
}
// 注意:自定义实体需要重写对象的 toString 方法
diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Frpc.kt b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Frpc.kt
index 2bd81beb..77593b0d 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Frpc.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Frpc.kt
@@ -6,7 +6,9 @@ import androidx.room.Entity
import androidx.room.Ignore
import androidx.room.PrimaryKey
import com.idormy.sms.forwarder.R
+import com.idormy.sms.forwarder.utils.STATUS_OFF
import com.idormy.sms.forwarder.utils.STATUS_ON
+import frpclib.Frpclib
import kotlinx.parcelize.Parcelize
import java.util.Date
@@ -31,4 +33,7 @@ data class Frpc(
else -> R.drawable.ic_manual
}
+ val status: Int
+ get() = if (connecting || Frpclib.isRunning(uid)) STATUS_ON else STATUS_OFF
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/CleanerFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/CleanerFragment.kt
index b5e110a7..6f2d221c 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/CleanerFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/CleanerFragment.kt
@@ -5,28 +5,34 @@ import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.work.Data
+import androidx.work.OneTimeWorkRequestBuilder
+import androidx.work.WorkManager
import com.google.gson.Gson
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.core.BaseFragment
import com.idormy.sms.forwarder.databinding.FragmentTasksActionCleanerBinding
+import com.idormy.sms.forwarder.entity.MsgInfo
+import com.idormy.sms.forwarder.entity.TaskSetting
import com.idormy.sms.forwarder.entity.action.CleanerSetting
import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_ACTION
import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION
-import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.TASK_ACTION_CLEANER
+import com.idormy.sms.forwarder.utils.TaskWorker
import com.idormy.sms.forwarder.utils.XToastUtils
-import com.jeremyliao.liveeventbus.LiveEventBus
+import com.idormy.sms.forwarder.workers.ActionWorker
import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired
import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar
+import java.util.Date
@Page(name = "Cleaner")
-@Suppress("PrivatePropertyName")
+@Suppress("PrivatePropertyName", "DEPRECATION")
class CleanerFragment : BaseFragment(), View.OnClickListener {
private val TAG: String = CleanerFragment::class.java.simpleName
@@ -58,7 +64,7 @@ class CleanerFragment : BaseFragment(), View
*/
override fun initViews() {
//测试按钮增加倒计时,避免重复点击
- mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3)
+ mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 1)
mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener {
override fun onCountDown(time: Int) {
binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time)
@@ -83,15 +89,6 @@ class CleanerFragment : BaseFragment(), View
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this)
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) {
- mCountDownHelper?.finish()
-
- if (it == "success") {
- XToastUtils.success("测试通过", 30000)
- } else {
- XToastUtils.error(it, 30000)
- }
- }
}
@SingleClick
@@ -100,17 +97,21 @@ class CleanerFragment : BaseFragment(), View
when (v.id) {
R.id.btn_test -> {
mCountDownHelper?.start()
- Thread {
- try {
- val settingVo = checkSetting()
- Log.d(TAG, settingVo.toString())
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post("success")
- } catch (e: Exception) {
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString())
- e.printStackTrace()
- Log.e(TAG, "onClick error: ${e.message}")
- }
- }.start()
+ try {
+ val settingVo = checkSetting()
+ Log.d(TAG, settingVo.toString())
+ val taskAction = TaskSetting(TASK_ACTION_CLEANER, getString(R.string.task_cleaner), settingVo.description, Gson().toJson(settingVo), requestCode)
+ val taskActionsJson = Gson().toJson(arrayListOf(taskAction))
+ val msgInfo = MsgInfo("task", getString(R.string.task_cleaner), settingVo.description, Date(), getString(R.string.task_cleaner))
+ val actionData = Data.Builder().putLong(TaskWorker.taskId, 0).putString(TaskWorker.taskActions, taskActionsJson).putString(TaskWorker.msgInfo, Gson().toJson(msgInfo)).build()
+ val actionRequest = OneTimeWorkRequestBuilder().setInputData(actionData).build()
+ WorkManager.getInstance().enqueue(actionRequest)
+ } catch (e: Exception) {
+ mCountDownHelper?.finish()
+ e.printStackTrace()
+ Log.e(TAG, "onClick error: ${e.message}")
+ XToastUtils.error(e.message.toString(), 30000)
+ }
return
}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt
index 9da76fd1..052e0f96 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt
@@ -9,6 +9,9 @@ import android.widget.AdapterView
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
+import androidx.work.Data
+import androidx.work.OneTimeWorkRequestBuilder
+import androidx.work.WorkManager
import com.google.gson.Gson
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.adapter.FrpcRecyclerAdapter
@@ -19,15 +22,17 @@ import com.idormy.sms.forwarder.core.BaseFragment
import com.idormy.sms.forwarder.core.Core
import com.idormy.sms.forwarder.database.entity.Frpc
import com.idormy.sms.forwarder.databinding.FragmentTasksActionFrpcBinding
+import com.idormy.sms.forwarder.entity.MsgInfo
+import com.idormy.sms.forwarder.entity.TaskSetting
import com.idormy.sms.forwarder.entity.action.FrpcSetting
import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_ACTION
import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION
-import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.TASK_ACTION_FRPC
+import com.idormy.sms.forwarder.utils.TaskWorker
import com.idormy.sms.forwarder.utils.XToastUtils
-import com.jeremyliao.liveeventbus.LiveEventBus
+import com.idormy.sms.forwarder.workers.ActionWorker
import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired
@@ -39,9 +44,10 @@ import io.reactivex.SingleObserver
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
+import java.util.Date
@Page(name = "Frpc")
-@Suppress("PrivatePropertyName")
+@Suppress("PrivatePropertyName", "DEPRECATION")
class FrpcFragment : BaseFragment(), View.OnClickListener {
private val TAG: String = FrpcFragment::class.java.simpleName
@@ -84,7 +90,7 @@ class FrpcFragment : BaseFragment(), View.OnCli
*/
override fun initViews() {
//测试按钮增加倒计时,避免重复点击
- mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3)
+ mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 2)
mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener {
override fun onCountDown(time: Int) {
binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time)
@@ -92,6 +98,8 @@ class FrpcFragment : BaseFragment(), View.OnCli
override fun onFinished() {
binding!!.btnTest.text = getString(R.string.test)
+ //获取Frpc列表
+ getFrpcList()
}
})
@@ -111,15 +119,6 @@ class FrpcFragment : BaseFragment(), View.OnCli
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this)
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) {
- mCountDownHelper?.finish()
-
- if (it == "success") {
- XToastUtils.success("测试通过", 30000)
- } else {
- XToastUtils.error(it, 30000)
- }
- }
}
@SingleClick
@@ -128,17 +127,21 @@ class FrpcFragment : BaseFragment(), View.OnCli
when (v.id) {
R.id.btn_test -> {
mCountDownHelper?.start()
- Thread {
- try {
- val settingVo = checkSetting()
- Log.d(TAG, settingVo.toString())
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post("success")
- } catch (e: Exception) {
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString())
- e.printStackTrace()
- Log.e(TAG, "onClick error: ${e.message}")
- }
- }.start()
+ try {
+ val settingVo = checkSetting()
+ Log.d(TAG, settingVo.toString())
+ val taskAction = TaskSetting(TASK_ACTION_FRPC, getString(R.string.task_frpc), settingVo.description, Gson().toJson(settingVo), requestCode)
+ val taskActionsJson = Gson().toJson(arrayListOf(taskAction))
+ val msgInfo = MsgInfo("task", getString(R.string.task_frpc), settingVo.description, Date(), getString(R.string.task_frpc))
+ val actionData = Data.Builder().putLong(TaskWorker.taskId, 0).putString(TaskWorker.taskActions, taskActionsJson).putString(TaskWorker.msgInfo, Gson().toJson(msgInfo)).build()
+ val actionRequest = OneTimeWorkRequestBuilder().setInputData(actionData).build()
+ WorkManager.getInstance().enqueue(actionRequest)
+ } catch (e: Exception) {
+ mCountDownHelper?.finish()
+ e.printStackTrace()
+ Log.e(TAG, "onClick error: ${e.message}")
+ XToastUtils.error(e.message.toString(), 30000)
+ }
return
}
@@ -244,7 +247,7 @@ class FrpcFragment : BaseFragment(), View.OnCli
frpcListAll = frpcList as MutableList
for (frpc in frpcList) {
val name = if (frpc.name.length > 20) frpc.name.substring(0, 19) else frpc.name
- frpcSpinnerList.add(FrpcSpinnerItem(name, getDrawable(R.drawable.auto_task_icon_frpc), frpc.uid, frpc.autorun))
+ frpcSpinnerList.add(FrpcSpinnerItem(name, getDrawable(frpc.imageId), frpc.uid, frpc.status))
}
frpcSpinnerAdapter = FrpcSpinnerAdapter(frpcSpinnerList).setIsFilterKey(true).setFilterColor("#EF5362").setBackgroundSelector(R.drawable.selector_custom_spinner_bg)
binding!!.spFrpc.setAdapter(frpcSpinnerAdapter)
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt
index 561868af..302a7051 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt
@@ -6,6 +6,9 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.CompoundButton
+import androidx.work.Data
+import androidx.work.OneTimeWorkRequestBuilder
+import androidx.work.WorkManager
import com.google.gson.Gson
import com.hjq.permissions.OnPermissionCallback
import com.hjq.permissions.Permission
@@ -13,25 +16,28 @@ import com.hjq.permissions.XXPermissions
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.core.BaseFragment
import com.idormy.sms.forwarder.databinding.FragmentTasksActionHttpServerBinding
+import com.idormy.sms.forwarder.entity.MsgInfo
+import com.idormy.sms.forwarder.entity.TaskSetting
import com.idormy.sms.forwarder.entity.action.HttpServerSetting
import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_ACTION
import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION
-import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.TASK_ACTION_HTTPSERVER
+import com.idormy.sms.forwarder.utils.TaskWorker
import com.idormy.sms.forwarder.utils.XToastUtils
-import com.jeremyliao.liveeventbus.LiveEventBus
+import com.idormy.sms.forwarder.workers.ActionWorker
import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired
import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar
+import java.util.Date
@Page(name = "HttpServer")
-@Suppress("PrivatePropertyName")
+@Suppress("PrivatePropertyName", "DEPRECATION")
class HttpServerFragment : BaseFragment(), View.OnClickListener {
private val TAG: String = HttpServerFragment::class.java.simpleName
@@ -63,7 +69,7 @@ class HttpServerFragment : BaseFragment()
*/
override fun initViews() {
//测试按钮增加倒计时,避免重复点击
- mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3)
+ mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 1)
mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener {
override fun onCountDown(time: Int) {
binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time)
@@ -97,15 +103,6 @@ class HttpServerFragment : BaseFragment()
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this)
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) {
- mCountDownHelper?.finish()
-
- if (it == "success") {
- XToastUtils.success("测试通过", 30000)
- } else {
- XToastUtils.error(it, 30000)
- }
- }
binding!!.sbApiSendSms.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
if (isChecked) checkSendSmsPermission()
@@ -142,17 +139,21 @@ class HttpServerFragment : BaseFragment()
when (v.id) {
R.id.btn_test -> {
mCountDownHelper?.start()
- Thread {
- try {
- val settingVo = checkSetting()
- Log.d(TAG, settingVo.toString())
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post("success")
- } catch (e: Exception) {
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString())
- e.printStackTrace()
- Log.e(TAG, "onClick error: ${e.message}")
- }
- }.start()
+ try {
+ val settingVo = checkSetting()
+ Log.d(TAG, settingVo.toString())
+ val taskAction = TaskSetting(TASK_ACTION_HTTPSERVER, getString(R.string.task_http_server), settingVo.description, Gson().toJson(settingVo), requestCode)
+ val taskActionsJson = Gson().toJson(arrayListOf(taskAction))
+ val msgInfo = MsgInfo("task", getString(R.string.task_http_server), settingVo.description, Date(), getString(R.string.task_http_server))
+ val actionData = Data.Builder().putLong(TaskWorker.taskId, 0).putString(TaskWorker.taskActions, taskActionsJson).putString(TaskWorker.msgInfo, Gson().toJson(msgInfo)).build()
+ val actionRequest = OneTimeWorkRequestBuilder().setInputData(actionData).build()
+ WorkManager.getInstance().enqueue(actionRequest)
+ } catch (e: Exception) {
+ mCountDownHelper?.finish()
+ e.printStackTrace()
+ Log.e(TAG, "onClick error: ${e.message}")
+ XToastUtils.error(e.message.toString(), 30000)
+ }
return
}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt
index 5a1491b2..d08f99a7 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt
@@ -9,6 +9,9 @@ import android.widget.*
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
+import androidx.work.Data
+import androidx.work.OneTimeWorkRequestBuilder
+import androidx.work.WorkManager
import com.google.gson.Gson
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.adapter.SenderRecyclerAdapter
@@ -21,8 +24,9 @@ import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.database.entity.Sender
import com.idormy.sms.forwarder.databinding.FragmentTasksActionNotificationBinding
import com.idormy.sms.forwarder.entity.MsgInfo
+import com.idormy.sms.forwarder.entity.TaskSetting
import com.idormy.sms.forwarder.utils.*
-import com.jeremyliao.liveeventbus.LiveEventBus
+import com.idormy.sms.forwarder.workers.ActionWorker
import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired
@@ -41,7 +45,7 @@ import kotlinx.coroutines.*
import java.util.*
@Page(name = "Notification")
-@Suppress("PrivatePropertyName")
+@Suppress("PrivatePropertyName", "DEPRECATION")
class NotificationFragment : BaseFragment(), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
private val TAG: String = NotificationFragment::class.java.simpleName
@@ -71,6 +75,8 @@ class NotificationFragment : BaseFragment {
- val settingVo = checkSetting()
- val from = "测试号码"
- val content = "测试内容"
- val simInfo = "SIM1_123456789"
- val msgInfo = MsgInfo(ruleType, from, content, Date(), simInfo)
- if (!settingVo.checkMsg(msgInfo)) {
- throw Exception(getString(R.string.unmatched_rule))
+ mCountDownHelper?.start()
+ try {
+ val settingVo = checkSetting()
+ Log.d(TAG, settingVo.toString())
+ val taskAction = TaskSetting(TASK_ACTION_NOTIFICATION, getString(R.string.task_notification), description, Gson().toJson(settingVo), requestCode)
+ val taskActionsJson = Gson().toJson(arrayListOf(taskAction))
+ val msgInfo = MsgInfo("task", getString(R.string.task_notification), description, Date(), getString(R.string.task_notification))
+ val actionData = Data.Builder().putLong(TaskWorker.taskId, 0).putString(TaskWorker.taskActions, taskActionsJson).putString(TaskWorker.msgInfo, Gson().toJson(msgInfo)).build()
+ val actionRequest = OneTimeWorkRequestBuilder().setInputData(actionData).build()
+ WorkManager.getInstance().enqueue(actionRequest)
+ } catch (e: Exception) {
+ mCountDownHelper?.finish()
+ e.printStackTrace()
+ Log.e(TAG, "onClick error: ${e.message}")
+ XToastUtils.error(e.message.toString(), 30000)
}
-
- Thread {
- try {
- SendUtils.sendMsgSender(msgInfo, settingVo)
- } catch (e: Exception) {
- e.printStackTrace()
- Log.e(TAG, "onClick error: ${e.message}")
- LiveEventBus.get(EVENT_TOAST_ERROR, String::class.java).post(e.message.toString())
- }
- }.start()
return
}
@@ -275,15 +279,6 @@ class NotificationFragment : BaseFragment {
val settingVo = checkSetting()
- var description = getString(R.string.task_notification) + ": "
- description += settingVo.senderList.joinToString(",") { it.name }
- if (settingVo.senderList.size > 1) {
- description += "; " + getString(R.string.sender_logic) + ": " + when (settingVo.senderLogic) {
- SENDER_LOGIC_UNTIL_FAIL -> getString(R.string.sender_logic_until_fail)
- SENDER_LOGIC_UNTIL_SUCCESS -> getString(R.string.sender_logic_until_success)
- else -> getString(R.string.sender_logic_all)
- }
- }
val intent = Intent()
intent.putExtra(KEY_BACK_DESCRIPTION_ACTION, description)
intent.putExtra(KEY_BACK_DATA_ACTION, Gson().toJson(settingVo))
@@ -444,7 +439,7 @@ class NotificationFragment : BaseFragment SENDER_LOGIC_ALL
}
- return Rule(
+ val settingVo = Rule(
ruleId,
ruleType,
filed,
@@ -461,6 +456,18 @@ class NotificationFragment : BaseFragment 1) {
+ description += "; " + getString(R.string.sender_logic) + ": " + when (settingVo.senderLogic) {
+ SENDER_LOGIC_UNTIL_FAIL -> getString(R.string.sender_logic_until_fail)
+ SENDER_LOGIC_UNTIL_SUCCESS -> getString(R.string.sender_logic_until_success)
+ else -> getString(R.string.sender_logic_all)
+ }
+ }
+
+ return settingVo
}
//检查正则替换填写是否正确
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt
index 260b8a88..e114feb8 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt
@@ -1,22 +1,23 @@
package com.idormy.sms.forwarder.fragment.action
-import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
-import android.content.pm.PackageManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.core.app.ActivityCompat
+import androidx.work.Data
+import androidx.work.OneTimeWorkRequestBuilder
+import androidx.work.WorkManager
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.hjq.permissions.OnPermissionCallback
import com.hjq.permissions.Permission
import com.hjq.permissions.XXPermissions
-import com.idormy.sms.forwarder.App
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.core.BaseFragment
import com.idormy.sms.forwarder.databinding.FragmentTasksActionSendSmsBinding
+import com.idormy.sms.forwarder.entity.MsgInfo
+import com.idormy.sms.forwarder.entity.TaskSetting
import com.idormy.sms.forwarder.entity.action.SmsSetting
import com.idormy.sms.forwarder.server.model.ConfigData
import com.idormy.sms.forwarder.utils.EVENT_KEY_PHONE_NUMBERS
@@ -25,11 +26,11 @@ import com.idormy.sms.forwarder.utils.HttpServerUtils
import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_ACTION
import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION
-import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION
import com.idormy.sms.forwarder.utils.Log
-import com.idormy.sms.forwarder.utils.PhoneUtils
import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDSMS
+import com.idormy.sms.forwarder.utils.TaskWorker
import com.idormy.sms.forwarder.utils.XToastUtils
+import com.idormy.sms.forwarder.workers.ActionWorker
import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page
@@ -38,10 +39,10 @@ import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xrouter.utils.TextUtils
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar
-import com.xuexiang.xutil.XUtil
+import java.util.Date
@Page(name = "SendSms")
-@Suppress("PrivatePropertyName")
+@Suppress("PrivatePropertyName", "DEPRECATION")
class SendSmsFragment : BaseFragment(), View.OnClickListener {
private val TAG: String = SendSmsFragment::class.java.simpleName
@@ -79,7 +80,7 @@ class SendSmsFragment : BaseFragment(), View
@SuppressLint("SetTextI18n")
override fun initViews() {
//测试按钮增加倒计时,避免重复点击
- mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3)
+ mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 1)
mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener {
override fun onCountDown(time: Int) {
binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time)
@@ -124,15 +125,6 @@ class SendSmsFragment : BaseFragment(), View
LiveEventBus.get(EVENT_KEY_PHONE_NUMBERS, String::class.java).observeSticky(this) { value: String ->
binding!!.etPhoneNumbers.setText(value)
}
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) {
- mCountDownHelper?.finish()
-
- if (it == "success") {
- XToastUtils.success("测试通过", 30000)
- } else {
- XToastUtils.error(it, 30000)
- }
- }
}
@SingleClick
@@ -147,38 +139,27 @@ class SendSmsFragment : BaseFragment(), View
.permission(Permission.SEND_SMS)
.request(object : OnPermissionCallback {
override fun onGranted(permissions: List, all: Boolean) {
- Thread {
- try {
- val settingVo = checkSetting()
- Log.d(TAG, settingVo.toString())
-
- //获取卡槽信息
- if (App.SimInfoList.isEmpty()) {
- App.SimInfoList = PhoneUtils.getSimMultiInfo()
- }
- Log.d(TAG, App.SimInfoList.toString())
-
- //发送卡槽: 1=SIM1, 2=SIM2
- val simSlotIndex = settingVo.simSlot - 1
- //TODO:取不到卡槽信息时,采用默认卡槽发送
- val mSubscriptionId: Int = App.SimInfoList[simSlotIndex]?.mSubscriptionId ?: -1
-
- val msg = if (ActivityCompat.checkSelfPermission(XUtil.getContext(), Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
- getString(R.string.no_sms_sending_permission)
- } else {
- PhoneUtils.sendSms(mSubscriptionId, settingVo.phoneNumbers, settingVo.msgContent) ?: "success"
- }
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(msg)
- } catch (e: Exception) {
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString())
- e.printStackTrace()
- Log.e(TAG, "onClick error: ${e.message}")
- }
- }.start()
+ mCountDownHelper?.start()
+ try {
+ val settingVo = checkSetting()
+ Log.d(TAG, settingVo.toString())
+ val taskAction = TaskSetting(TASK_ACTION_SENDSMS, getString(R.string.task_sendsms), settingVo.description, Gson().toJson(settingVo), requestCode)
+ val taskActionsJson = Gson().toJson(arrayListOf(taskAction))
+ val msgInfo = MsgInfo("task", getString(R.string.task_sendsms), settingVo.description, Date(), getString(R.string.task_sendsms))
+ val actionData = Data.Builder().putLong(TaskWorker.taskId, 0).putString(TaskWorker.taskActions, taskActionsJson).putString(TaskWorker.msgInfo, Gson().toJson(msgInfo)).build()
+ val actionRequest = OneTimeWorkRequestBuilder().setInputData(actionData).build()
+ WorkManager.getInstance().enqueue(actionRequest)
+ } catch (e: Exception) {
+ mCountDownHelper?.finish()
+ e.printStackTrace()
+ Log.e(TAG, "onClick error: ${e.message}")
+ XToastUtils.error(e.message.toString(), 30000)
+ }
+ return
}
override fun onDenied(permissions: List, never: Boolean) {
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(getString(R.string.no_sms_sending_permission))
+ XToastUtils.error(getString(R.string.no_sms_sending_permission), 30000)
}
})
return
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SettingsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SettingsFragment.kt
index b52de1bc..92965605 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SettingsFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SettingsFragment.kt
@@ -12,6 +12,7 @@ import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.CompoundButton
import androidx.lifecycle.Observer
+import androidx.work.Data
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import com.google.gson.Gson
@@ -24,17 +25,20 @@ import com.idormy.sms.forwarder.adapter.spinner.AppListAdapterItem
import com.idormy.sms.forwarder.adapter.spinner.AppListSpinnerAdapter
import com.idormy.sms.forwarder.core.BaseFragment
import com.idormy.sms.forwarder.databinding.FragmentTasksActionSettingsBinding
+import com.idormy.sms.forwarder.entity.MsgInfo
+import com.idormy.sms.forwarder.entity.TaskSetting
import com.idormy.sms.forwarder.entity.action.SettingsSetting
import com.idormy.sms.forwarder.utils.CommonUtils
import com.idormy.sms.forwarder.utils.EVENT_LOAD_APP_LIST
import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_ACTION
import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION
-import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.TASK_ACTION_SETTINGS
+import com.idormy.sms.forwarder.utils.TaskWorker
import com.idormy.sms.forwarder.utils.XToastUtils
+import com.idormy.sms.forwarder.workers.ActionWorker
import com.idormy.sms.forwarder.workers.LoadAppListWorker
import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick
@@ -44,9 +48,10 @@ import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar
import com.xuexiang.xutil.XUtil
+import java.util.Date
@Page(name = "Settings")
-@Suppress("PrivatePropertyName")
+@Suppress("PrivatePropertyName", "DEPRECATION")
class SettingsFragment : BaseFragment(), View.OnClickListener {
private val TAG: String = SettingsFragment::class.java.simpleName
@@ -86,7 +91,7 @@ class SettingsFragment : BaseFragment(), Vi
*/
override fun initViews() {
//测试按钮增加倒计时,避免重复点击
- mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3)
+ mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 1)
mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener {
override fun onCountDown(time: Int) {
binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time)
@@ -148,15 +153,6 @@ class SettingsFragment : BaseFragment(), Vi
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this)
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) {
- mCountDownHelper?.finish()
-
- if (it == "success") {
- XToastUtils.success("测试通过", 30000)
- } else {
- XToastUtils.error(it, 30000)
- }
- }
//监听已安装App信息列表加载完成事件
LiveEventBus.get(EVENT_LOAD_APP_LIST, String::class.java).observeStickyForever(appListObserver)
@@ -335,17 +331,21 @@ class SettingsFragment : BaseFragment(), Vi
when (v.id) {
R.id.btn_test -> {
mCountDownHelper?.start()
- Thread {
- try {
- val settingVo = checkSetting()
- Log.d(TAG, settingVo.toString())
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post("success")
- } catch (e: Exception) {
- LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString())
- e.printStackTrace()
- Log.e(TAG, "onClick error: ${e.message}")
- }
- }.start()
+ try {
+ val settingVo = checkSetting()
+ Log.d(TAG, settingVo.toString())
+ val taskAction = TaskSetting(TASK_ACTION_SETTINGS, getString(R.string.task_settings), settingVo.description, Gson().toJson(settingVo), requestCode)
+ val taskActionsJson = Gson().toJson(arrayListOf(taskAction))
+ val msgInfo = MsgInfo("task", getString(R.string.task_settings), settingVo.description, Date(), getString(R.string.task_settings))
+ val actionData = Data.Builder().putLong(TaskWorker.taskId, 0).putString(TaskWorker.taskActions, taskActionsJson).putString(TaskWorker.msgInfo, Gson().toJson(msgInfo)).build()
+ val actionRequest = OneTimeWorkRequestBuilder().setInputData(actionData).build()
+ WorkManager.getInstance().enqueue(actionRequest)
+ } catch (e: Exception) {
+ mCountDownHelper?.finish()
+ e.printStackTrace()
+ Log.e(TAG, "onClick error: ${e.message}")
+ XToastUtils.error(e.message.toString(), 30000)
+ }
return
}
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 75cd6ffb..1dde559a 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
@@ -216,7 +216,6 @@ const val KEY_BACK_CODE_CONDITION = 1000
const val KEY_BACK_DATA_CONDITION = "back_data_condition"
const val KEY_BACK_DESCRIPTION_CONDITION = "back_description_condition"
-const val KEY_TEST_ACTION = "key_test_action"
const val KEY_EVENT_DATA_ACTION = "event_data_action"
const val KEY_BACK_CODE_ACTION = 2000
const val KEY_BACK_DATA_ACTION = "back_data_action"
diff --git a/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt b/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt
index ef7741ee..1d8d971c 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt
@@ -103,23 +103,26 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
//TODO:取不到卡槽信息时,采用默认卡槽发送
val mSubscriptionId: Int = App.SimInfoList[simSlotIndex]?.mSubscriptionId ?: -1
- if (ActivityCompat.checkSelfPermission(App.context, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
- val msg = getString(R.string.no_sms_sending_permission)
- writeLog(msg, "ERROR")
+ val msg = if (ActivityCompat.checkSelfPermission(App.context, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
+ getString(R.string.no_sms_sending_permission)
} else {
- val msg = PhoneUtils.sendSms(mSubscriptionId, smsSetting.phoneNumbers, smsSetting.msgContent)
+ PhoneUtils.sendSms(mSubscriptionId, smsSetting.phoneNumbers, smsSetting.msgContent)
+ }
+ if (msg == null || msg == "") {
successNum++
- writeLog("send sms result: $msg", "SUCCESS")
+ writeLog(String.format(getString(R.string.successful_execution), smsSetting.description), "SUCCESS")
+ } else {
+ writeLog(msg, "ERROR")
}
}
TASK_ACTION_NOTIFICATION -> {
- val settingVo = Gson().fromJson(action.setting, Rule::class.java)
+ val ruleSetting = Gson().fromJson(action.setting, Rule::class.java)
//自动任务的不需要吐司或者更新日志,特殊处理 logId = -1,msgId = -1
- SendUtils.sendMsgSender(msgInfo, settingVo, 0, -1L, -1L)
+ SendUtils.sendMsgSender(msgInfo, ruleSetting, 0, -1L, -1L)
successNum++
- writeLog("send notification success", "SUCCESS")
+ writeLog(String.format(getString(R.string.successful_execution), ruleSetting.name), "SUCCESS")
}
TASK_ACTION_CLEANER -> {
@@ -140,7 +143,7 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
CacheUtils.clearAllCache(App.context)
successNum++
- writeLog("cleaner success", "SUCCESS")
+ writeLog(String.format(getString(R.string.successful_execution), cleanerSetting.description), "SUCCESS")
}
TASK_ACTION_SETTINGS -> {
@@ -186,7 +189,7 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
}
successNum++
- writeLog("send settings success", "SUCCESS")
+ writeLog(String.format(getString(R.string.successful_execution), settingsSetting.description), "SUCCESS")
}
TASK_ACTION_FRPC -> {
@@ -225,7 +228,7 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
}
successNum++
- writeLog("frpc success", "SUCCESS")
+ writeLog(String.format(getString(R.string.successful_execution), frpcSetting.description), "SUCCESS")
}
TASK_ACTION_HTTPSERVER -> {
@@ -253,7 +256,7 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
}
successNum++
- writeLog("httpServer success", "SUCCESS")
+ writeLog(String.format(getString(R.string.successful_execution), httpServerSetting.description), "SUCCESS")
}
TASK_ACTION_RULE -> {
@@ -269,7 +272,7 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
}
successNum++
- writeLog("update rule success", "SUCCESS")
+ writeLog(String.format(getString(R.string.successful_execution), ruleSetting.description), "SUCCESS")
}
TASK_ACTION_SENDER -> {
@@ -285,7 +288,7 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
}
successNum++
- writeLog("update sender success", "SUCCESS")
+ writeLog(String.format(getString(R.string.successful_execution), senderSetting.description), "SUCCESS")
}
else -> {
diff --git a/app/src/main/res/drawable/ic_app.xml b/app/src/main/res/drawable/ic_app.xml
index cb11fd06..6e94dfa7 100644
--- a/app/src/main/res/drawable/ic_app.xml
+++ b/app/src/main/res/drawable/ic_app.xml
@@ -6,7 +6,7 @@
android:viewportHeight="50.0">
diff --git a/app/src/main/res/drawable/ic_menu_about.xml b/app/src/main/res/drawable/ic_menu_about.xml
index a9a820f7..842bd4f3 100644
--- a/app/src/main/res/drawable/ic_menu_about.xml
+++ b/app/src/main/res/drawable/ic_menu_about.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_menu_app.xml b/app/src/main/res/drawable/ic_menu_app.xml
index 2c6574e8..355a6ee5 100644
--- a/app/src/main/res/drawable/ic_menu_app.xml
+++ b/app/src/main/res/drawable/ic_menu_app.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_menu_client.xml b/app/src/main/res/drawable/ic_menu_client.xml
index c440ed1c..70e37fc5 100644
--- a/app/src/main/res/drawable/ic_menu_client.xml
+++ b/app/src/main/res/drawable/ic_menu_client.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_menu_frpc.xml b/app/src/main/res/drawable/ic_menu_frpc.xml
index b36740fb..b4f9c0d5 100644
--- a/app/src/main/res/drawable/ic_menu_frpc.xml
+++ b/app/src/main/res/drawable/ic_menu_frpc.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_menu_help.xml b/app/src/main/res/drawable/ic_menu_help.xml
index d5a9186a..84202836 100644
--- a/app/src/main/res/drawable/ic_menu_help.xml
+++ b/app/src/main/res/drawable/ic_menu_help.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_menu_logs.xml b/app/src/main/res/drawable/ic_menu_logs.xml
index 7cdf16ea..526b28b6 100644
--- a/app/src/main/res/drawable/ic_menu_logs.xml
+++ b/app/src/main/res/drawable/ic_menu_logs.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_menu_rule.xml b/app/src/main/res/drawable/ic_menu_rule.xml
index 3a2d232e..fc1265be 100644
--- a/app/src/main/res/drawable/ic_menu_rule.xml
+++ b/app/src/main/res/drawable/ic_menu_rule.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_menu_send.xml b/app/src/main/res/drawable/ic_menu_send.xml
index cfe7e693..10390272 100644
--- a/app/src/main/res/drawable/ic_menu_send.xml
+++ b/app/src/main/res/drawable/ic_menu_send.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_menu_server.xml b/app/src/main/res/drawable/ic_menu_server.xml
index abdf390c..c74400bd 100644
--- a/app/src/main/res/drawable/ic_menu_server.xml
+++ b/app/src/main/res/drawable/ic_menu_server.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_menu_settings.xml b/app/src/main/res/drawable/ic_menu_settings.xml
index ce137d8c..6b57804f 100644
--- a/app/src/main/res/drawable/ic_menu_settings.xml
+++ b/app/src/main/res/drawable/ic_menu_settings.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_menu_task.xml b/app/src/main/res/drawable/ic_menu_task.xml
index 97b80314..d2e3d1ff 100644
--- a/app/src/main/res/drawable/ic_menu_task.xml
+++ b/app/src/main/res/drawable/ic_menu_task.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_phone_in.xml b/app/src/main/res/drawable/ic_phone_in.xml
index af795c06..d03b9b75 100644
--- a/app/src/main/res/drawable/ic_phone_in.xml
+++ b/app/src/main/res/drawable/ic_phone_in.xml
@@ -5,6 +5,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
diff --git a/app/src/main/res/drawable/ic_phone_missed.xml b/app/src/main/res/drawable/ic_phone_missed.xml
index d9d24e08..96a077d7 100644
--- a/app/src/main/res/drawable/ic_phone_missed.xml
+++ b/app/src/main/res/drawable/ic_phone_missed.xml
@@ -5,6 +5,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
diff --git a/app/src/main/res/drawable/ic_phone_out.xml b/app/src/main/res/drawable/ic_phone_out.xml
index cbb2d678..ff6e4d43 100644
--- a/app/src/main/res/drawable/ic_phone_out.xml
+++ b/app/src/main/res/drawable/ic_phone_out.xml
@@ -5,6 +5,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
diff --git a/app/src/main/res/drawable/ic_reply.xml b/app/src/main/res/drawable/ic_reply.xml
index 94727d7d..e854634d 100644
--- a/app/src/main/res/drawable/ic_reply.xml
+++ b/app/src/main/res/drawable/ic_reply.xml
@@ -5,6 +5,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
diff --git a/app/src/main/res/drawable/ic_sim.xml b/app/src/main/res/drawable/ic_sim.xml
index 94f2f907..04e7cd53 100644
--- a/app/src/main/res/drawable/ic_sim.xml
+++ b/app/src/main/res/drawable/ic_sim.xml
@@ -6,7 +6,7 @@
android:viewportHeight="50.0">
diff --git a/app/src/main/res/drawable/ic_sim2.xml b/app/src/main/res/drawable/ic_sim2.xml
index 8401ebcc..a2c81d67 100644
--- a/app/src/main/res/drawable/ic_sim2.xml
+++ b/app/src/main/res/drawable/ic_sim2.xml
@@ -6,7 +6,7 @@
android:viewportHeight="50.0">
diff --git a/app/src/main/res/drawable/ic_sms.xml b/app/src/main/res/drawable/ic_sms.xml
index cd0889aa..2d125643 100644
--- a/app/src/main/res/drawable/ic_sms.xml
+++ b/app/src/main/res/drawable/ic_sms.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
diff --git a/app/src/main/res/layout/adapter_contact_card_view_list_item.xml b/app/src/main/res/layout/adapter_contact_card_view_list_item.xml
index 2800deea..e04a31d8 100644
--- a/app/src/main/res/layout/adapter_contact_card_view_list_item.xml
+++ b/app/src/main/res/layout/adapter_contact_card_view_list_item.xml
@@ -28,7 +28,7 @@
android:text=""
android:textSize="@dimen/text_size_big"
app:sShapeType="oval"
- app:sSolidColor="?attr/colorControlNormal"
+ app:sSolidColor="#BEC2C7"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
+ android:lines="2"
+ android:textSize="@dimen/text_size_small" />
\ No newline at end of file
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index c114ae2d..0afe189b 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -1319,4 +1319,5 @@
Log exported successfully! Path:
All auto-started Frpc
Specified Frpc
+ Execution successful: %s
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 10af3bea..80403bcc 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -1320,4 +1320,5 @@
导出日志成功!存放路径:
所有自启动的Frpc
指定的Frpc
+ 执行成功:%s
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index d8f7fd87..09fd3e0d 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -1321,4 +1321,5 @@
日誌匯出成功!儲存路徑:
所有自動啟動的Frpc
特定的Frpc
+ 執行成功:%s
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9065b279..d7fb5d20 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1320,4 +1320,5 @@
导出日志成功!存放路径:
所有自启动的Frpc
指定的Frpc
+ 执行成功:%s