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