From 1da0257c8c60538ab205928a98c2dafa3aa3f53f Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Wed, 20 Dec 2023 18:31:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=A4=9A=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E5=88=87=E6=8D=A2=E8=AE=BE=E7=BD=AE=E9=80=82=E5=BA=94?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=20#378=20=E6=95=B4=E7=90=86?= =?UTF-8?q?=EF=BC=9Acode=20review?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms/forwarder/activity/MainActivity.kt | 13 + .../adapter/spinner/AppListAdapterItem.kt | 4 +- .../adapter/spinner/SenderAdapterItem.kt | 23 +- .../adapter/spinner/SenderSpinnerAdapter.kt | 4 +- .../idormy/sms/forwarder/core/BaseActivity.kt | 4 +- .../core/webview/MiddlewareWebViewClient.kt | 4 +- .../core/webview/WebViewInterceptDialog.kt | 9 +- .../sms/forwarder/database/entity/Rule.kt | 44 ++- .../sms/forwarder/entity/BatteryInfo.kt | 17 +- .../sms/forwarder/entity/ContactInfo.kt | 3 +- .../idormy/sms/forwarder/entity/ImageInfo.kt | 4 +- .../sms/forwarder/entity/LocationInfo.kt | 13 +- .../idormy/sms/forwarder/entity/MsgInfo.kt | 22 +- .../entity/condition/ChargeSetting.kt | 22 +- .../sms/forwarder/fragment/AppListFragment.kt | 6 +- .../sms/forwarder/fragment/ClientFragment.kt | 87 +++- .../forwarder/fragment/FrpcEditFragment.kt | 6 +- .../sms/forwarder/fragment/LogsFragment.kt | 43 +- .../forwarder/fragment/RulesEditFragment.kt | 30 +- .../sms/forwarder/fragment/RulesFragment.kt | 5 +- .../sms/forwarder/fragment/SendersFragment.kt | 121 +++++- .../fragment/ServiceProtocolFragment.kt | 3 +- .../forwarder/fragment/SettingsFragment.kt | 19 +- .../forwarder/fragment/TasksEditFragment.kt | 91 +++++ .../sms/forwarder/fragment/TasksFragment.kt | 6 +- .../fragment/action/NotificationFragment.kt | 8 +- .../fragment/action/SendSmsFragment.kt | 5 +- .../fragment/client/BatteryQueryFragment.kt | 27 +- .../fragment/client/CallQueryFragment.kt | 19 +- .../fragment/client/CloneFragment.kt | 26 +- .../fragment/client/ContactAddFragment.kt | 13 +- .../fragment/client/ContactQueryFragment.kt | 15 +- .../fragment/client/LocationFragment.kt | 21 +- .../fragment/client/SmsQueryFragment.kt | 18 +- .../fragment/client/SmsSendFragment.kt | 15 +- .../fragment/client/WolSendFragment.kt | 22 +- .../fragment/senders/BarkFragment.kt | 16 +- .../fragment/senders/EmailFragment.kt | 6 +- .../sms/forwarder/receiver/CallReceiver.kt | 17 +- .../server/component/LoggerInterceptor.kt | 4 +- .../server/controller/CloneController.kt | 4 +- .../server/controller/SmsController.kt | 6 +- .../sms/forwarder/utils/BatteryUtils.kt | 4 +- .../idormy/sms/forwarder/utils/CommonUtils.kt | 20 +- .../idormy/sms/forwarder/utils/Constants.kt | 371 +----------------- .../sms/forwarder/utils/HttpServerUtils.kt | 3 +- .../idormy/sms/forwarder/utils/PhoneUtils.kt | 30 +- .../idormy/sms/forwarder/utils/RuleLine.kt | 4 +- .../sms/forwarder/utils/RuleLineUtils.kt | 4 +- .../idormy/sms/forwarder/utils/SendUtils.kt | 12 +- .../sms/forwarder/utils/SettingUtils.kt | 3 +- .../utils/sender/DingtalkInnerRobotUtils.kt | 3 +- .../sms/forwarder/utils/sender/EmailUtils.kt | 5 +- .../forwarder/utils/sender/FeishuAppUtils.kt | 3 +- .../forwarder/utils/sender/PushplusUtils.kt | 4 +- .../sms/forwarder/utils/sender/SmsUtils.kt | 10 +- .../utils/sender/WeworkAgentUtils.kt | 3 +- .../update/CustomUpdateFailureListener.kt | 6 +- .../forwarder/utils/update/UpdateTipDialog.kt | 8 +- .../update/XHttpUpdateHttpServiceImpl.kt | 5 +- .../sms/forwarder/workers/ActionWorker.kt | 6 +- .../idormy/sms/forwarder/workers/SimWorker.kt | 14 +- app/src/main/res/values-en/strings.xml | 6 +- app/src/main/res/values-zh-rCN/strings.xml | 4 +- app/src/main/res/values-zh-rTW/strings.xml | 4 +- app/src/main/res/values/strings.xml | 6 +- 66 files changed, 674 insertions(+), 709 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt index 0a0b7a4c..1b4bf722 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt @@ -37,6 +37,7 @@ import com.idormy.sms.forwarder.fragment.ServerFragment import com.idormy.sms.forwarder.fragment.SettingsFragment import com.idormy.sms.forwarder.fragment.TasksFragment import com.idormy.sms.forwarder.service.ForegroundService +import com.idormy.sms.forwarder.utils.EVENT_LOAD_APP_LIST import com.idormy.sms.forwarder.utils.FRPC_LIB_DOWNLOAD_URL import com.idormy.sms.forwarder.utils.FRPC_LIB_VERSION import com.idormy.sms.forwarder.utils.SettingUtils @@ -44,6 +45,7 @@ import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.sdkinit.XUpdateInit import com.idormy.sms.forwarder.widget.GuideTipsDialog.Companion.showTips import com.idormy.sms.forwarder.workers.LoadAppListWorker +import com.jeremyliao.liveeventbus.LiveEventBus import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.callback.DownloadProgressCallBack import com.xuexiang.xhttp2.exception.ApiException @@ -78,6 +80,7 @@ class MainActivity : BaseActivity(), DrawerAdapter.OnItemS private val POS_APPS = 9 private val POS_HELP = 11 //10为空行 private val POS_ABOUT = 12 + private var needToAppListFragment = false private lateinit var mTabLayout: TabLayout private lateinit var mSlidingRootNav: SlidingRootNav @@ -126,6 +129,13 @@ class MainActivity : BaseActivity(), DrawerAdapter.OnItemS } } }) + + //监听已安装App信息列表加载完成事件 + LiveEventBus.get(EVENT_LOAD_APP_LIST, String::class.java).observe(this) { + if (needToAppListFragment) { + openNewPage(AppListFragment::class.java) + } + } } override val isSupportSlideBack: Boolean @@ -146,6 +156,7 @@ class MainActivity : BaseActivity(), DrawerAdapter.OnItemS switchPage(LogsFragment::class.java) mTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { + needToAppListFragment = false mAdapter.setSelected(tab.position) when (tab.position) { POS_LOG -> switchPage(LogsFragment::class.java) @@ -255,6 +266,7 @@ class MainActivity : BaseActivity(), DrawerAdapter.OnItemS } override fun onItemSelected(position: Int) { + needToAppListFragment = false when (position) { POS_LOG, POS_RULE, POS_SENDER, POS_SETTING -> { val tab = mTabLayout.getTabAt(position) @@ -293,6 +305,7 @@ class MainActivity : BaseActivity(), DrawerAdapter.OnItemS XToastUtils.info(getString(R.string.loading_app_list)) val request = OneTimeWorkRequestBuilder().build() WorkManager.getInstance(this).enqueue(request) + needToAppListFragment = true return } openNewPage(AppListFragment::class.java) diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/AppListAdapterItem.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/AppListAdapterItem.kt index 409d278c..e2bafc93 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/AppListAdapterItem.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/AppListAdapterItem.kt @@ -1,9 +1,9 @@ package com.idormy.sms.forwarder.adapter.spinner import android.graphics.drawable.Drawable -import com.xuexiang.xui.utils.ResUtils +import com.xuexiang.xutil.resource.ResUtils -@Suppress("unused", "DEPRECATION") +@Suppress("unused") class AppListAdapterItem { var name: String = "" diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderAdapterItem.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderAdapterItem.kt index b63280c2..0829d710 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderAdapterItem.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderAdapterItem.kt @@ -2,9 +2,10 @@ package com.idormy.sms.forwarder.adapter.spinner import android.content.Context import android.graphics.drawable.Drawable -import com.xuexiang.xui.utils.ResUtils +import com.xuexiang.xutil.resource.ResUtils.getDrawable +import com.xuexiang.xutil.resource.ResUtils.getString -@Suppress("unused", "DEPRECATION") +@Suppress("unused") class SenderAdapterItem { //标题内容 @@ -41,15 +42,15 @@ class SenderAdapterItem { this.status = status } - constructor(title: CharSequence, drawableId: Int) : this(title, ResUtils.getDrawable(drawableId)) - constructor(title: CharSequence, drawableId: Int, id: Long) : this(title, ResUtils.getDrawable(drawableId), id) - constructor(title: CharSequence, drawableId: Int, id: Long, status: Int) : this(title, ResUtils.getDrawable(drawableId), id, status) - constructor(context: Context?, titleId: Int, drawableId: Int) : this(ResUtils.getString(titleId), ResUtils.getDrawable(context, drawableId)) - constructor(context: Context?, titleId: Int, drawableId: Int, id: Long) : this(ResUtils.getString(titleId), ResUtils.getDrawable(context, drawableId), id) - constructor(context: Context?, titleId: Int, drawableId: Int, id: Long, status: Int) : this(ResUtils.getString(titleId), ResUtils.getDrawable(context, drawableId), id, status) - constructor(context: Context?, title: CharSequence, drawableId: Int) : this(title, ResUtils.getDrawable(context, drawableId)) - constructor(context: Context?, title: CharSequence, drawableId: Int, id: Long) : this(title, ResUtils.getDrawable(context, drawableId), id) - constructor(context: Context?, title: CharSequence, drawableId: Int, id: Long, status: Int) : this(title, ResUtils.getDrawable(context, drawableId), id, status) + constructor(title: CharSequence, drawableId: Int) : this(title, getDrawable(drawableId)) + constructor(title: CharSequence, drawableId: Int, id: Long) : this(title, getDrawable(drawableId), id) + constructor(title: CharSequence, drawableId: Int, id: Long, status: Int) : this(title, getDrawable(drawableId), id, status) + constructor(context: Context?, titleId: Int, drawableId: Int) : this(getString(titleId), getDrawable(context, drawableId)) + constructor(context: Context?, titleId: Int, drawableId: Int, id: Long) : this(getString(titleId), getDrawable(context, drawableId), id) + constructor(context: Context?, titleId: Int, drawableId: Int, id: Long, status: Int) : this(getString(titleId), getDrawable(context, drawableId), id, status) + constructor(context: Context?, title: CharSequence, drawableId: Int) : this(title, getDrawable(context, drawableId)) + constructor(context: Context?, title: CharSequence, drawableId: Int, id: Long) : this(title, getDrawable(context, drawableId), id) + constructor(context: Context?, title: CharSequence, drawableId: Int, id: Long, status: Int) : this(title, getDrawable(context, drawableId), id, status) fun setStatus(status: Int): SenderAdapterItem { this.status = status diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderSpinnerAdapter.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderSpinnerAdapter.kt index 8315b4c4..ded912a6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderSpinnerAdapter.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderSpinnerAdapter.kt @@ -16,9 +16,9 @@ import androidx.annotation.DrawableRes import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.utils.STATUS_OFF import com.xuexiang.xui.utils.CollectionUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.spinner.editspinner.BaseEditSpinnerAdapter import com.xuexiang.xui.widget.spinner.editspinner.EditSpinnerFilter +import com.xuexiang.xutil.resource.ResUtils.getDrawable @Suppress("unused", "NAME_SHADOWING", "DEPRECATION") class SenderSpinnerAdapter : BaseEditSpinnerAdapter, EditSpinnerFilter { @@ -74,7 +74,7 @@ class SenderSpinnerAdapter : BaseEditSpinnerAdapter, EditSpinnerFilter { val item = CollectionUtils.getListItem(mDataSource, mIndexs[position]) as SenderAdapterItem holder.iconView.setImageDrawable(item.icon) holder.statusView.setImageDrawable( - ResUtils.getDrawable( + getDrawable( 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/core/BaseActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/core/BaseActivity.kt index 813ccb7f..f6e2897c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/core/BaseActivity.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/core/BaseActivity.kt @@ -17,8 +17,8 @@ import com.xuexiang.xpage.base.XPageFragment import com.xuexiang.xpage.core.CoreSwitchBean import com.xuexiang.xrouter.facade.service.SerializationService import com.xuexiang.xrouter.launcher.XRouter -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.slideback.SlideBack +import com.xuexiang.xutil.resource.ResUtils.isRtl /** * 基础容器Activity @@ -144,7 +144,7 @@ open class BaseActivity : XPageActivity() { if (isSupportSlideBack) { SlideBack.with(this) .haveScroll(true) - .edgeMode(if (ResUtils.isRtl()) SlideBack.EDGE_RIGHT else SlideBack.EDGE_LEFT) + .edgeMode(if (isRtl()) SlideBack.EDGE_RIGHT else SlideBack.EDGE_LEFT) .callBack { popPage() } .register() } diff --git a/app/src/main/java/com/idormy/sms/forwarder/core/webview/MiddlewareWebViewClient.kt b/app/src/main/java/com/idormy/sms/forwarder/core/webview/MiddlewareWebViewClient.kt index 50a2f5ad..6280ab5c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/core/webview/MiddlewareWebViewClient.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/core/webview/MiddlewareWebViewClient.kt @@ -10,7 +10,7 @@ import androidx.annotation.RequiresApi import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.core.webview.WebViewInterceptDialog.Companion.show import com.just.agentweb.core.client.MiddlewareWebClientBase -import com.xuexiang.xui.utils.ResUtils +import com.xuexiang.xutil.resource.ResUtils.getStringArray import java.util.Locale /** @@ -121,7 +121,7 @@ open class MiddlewareWebViewClient : MiddlewareWebClientBase() { * @return */ private fun hasAdUrl(url: String): Boolean { - val adUrls = ResUtils.getStringArray(R.array.adBlockUrl) + val adUrls = getStringArray(R.array.adBlockUrl) for (adUrl in adUrls) { if (url.contains(adUrl)) { return true diff --git a/app/src/main/java/com/idormy/sms/forwarder/core/webview/WebViewInterceptDialog.kt b/app/src/main/java/com/idormy/sms/forwarder/core/webview/WebViewInterceptDialog.kt index 1c08bc0d..4f1e0096 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/core/webview/WebViewInterceptDialog.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/core/webview/WebViewInterceptDialog.kt @@ -8,7 +8,6 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.utils.XToastUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.dialog.DialogLoader import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.app.ActivityUtils @@ -28,7 +27,7 @@ class WebViewInterceptDialog : AppCompatActivity(), DialogInterface.OnDismissLis DialogLoader.getInstance().showConfirmDialog( this, getOpenTitle(url), - ResUtils.getString(R.string.lab_yes), + getString(R.string.lab_yes), { dialog: DialogInterface, _: Int -> dialog.dismiss() if (isAppLink(url)) { @@ -37,16 +36,16 @@ class WebViewInterceptDialog : AppCompatActivity(), DialogInterface.OnDismissLis openApp(url) } }, - ResUtils.getString(R.string.lab_no) + getString(R.string.lab_no) ) { dialog: DialogInterface, _: Int -> dialog.dismiss() }.setOnDismissListener(this) } private fun getOpenTitle(url: String): String { val scheme = getScheme(url) return if ("mqqopensdkapi" == scheme) { - ResUtils.getString(R.string.lab_open_qq_app) + getString(R.string.lab_open_qq_app) } else { - ResUtils.getString(R.string.lab_open_third_app) + getString(R.string.lab_open_third_app) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt index fd8e2c32..2021a0d9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt @@ -7,13 +7,12 @@ import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.database.ext.ConvertersSenderList import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.utils.* -import com.xuexiang.xui.utils.ResUtils.getString +import com.xuexiang.xutil.resource.ResUtils.getString import kotlinx.parcelize.Parcelize import java.util.* import java.util.regex.Pattern import java.util.regex.PatternSyntaxException -@Suppress("DEPRECATION") @Parcelize @Entity( tableName = "Rule", @@ -56,6 +55,47 @@ data class Rule( companion object { val TAG: String = Rule::class.java.simpleName + //通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 + val CALL_TYPE_MAP = mapOf( + //"0" to getString(R.string.unknown_call), + "1" to getString(R.string.incoming_call_ended), + "2" to getString(R.string.outgoing_call_ended), + "3" to getString(R.string.missed_call), + "4" to getString(R.string.incoming_call_received), + "5" to getString(R.string.incoming_call_answered), + "6" to getString(R.string.outgoing_call_started), + ) + val FILED_MAP = object : HashMap() { + init { + put("transpond_all", getString(R.string.rule_transpond_all)) + put("phone_num", getString(R.string.rule_phone_num)) + put("msg_content", getString(R.string.rule_msg_content)) + put("multi_match", getString(R.string.rule_multi_match)) + put("package_name", getString(R.string.rule_package_name)) + put("inform_content", getString(R.string.rule_inform_content)) + put("call_type", getString(R.string.rule_call_type)) + put("uid", getString(R.string.rule_uid)) + } + } + val CHECK_MAP = object : HashMap() { + init { + put("is", getString(R.string.rule_is)) + put("notis", getString(R.string.rule_notis)) + put("contain", getString(R.string.rule_contain)) + put("startwith", getString(R.string.rule_startwith)) + put("endwith", getString(R.string.rule_endwith)) + put("notcontain", getString(R.string.rule_notcontain)) + put("regex", getString(R.string.rule_regex)) + } + } + val SIM_SLOT_MAP = object : HashMap() { + init { + put("ALL", getString(R.string.rule_all)) + put("SIM1", "SIM1") + put("SIM2", "SIM2") + } + } + fun getRuleMatch(filed: String?, check: String?, value: String?, simSlot: String?): Any { val sb = StringBuilder() sb.append(SIM_SLOT_MAP[simSlot]).append(getString(R.string.rule_card)) diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/BatteryInfo.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/BatteryInfo.kt index 2940dac3..49267891 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/BatteryInfo.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/BatteryInfo.kt @@ -1,10 +1,9 @@ package com.idormy.sms.forwarder.entity import com.idormy.sms.forwarder.R -import com.xuexiang.xui.utils.ResUtils +import com.xuexiang.xutil.resource.ResUtils.getString import java.io.Serializable -@Suppress("DEPRECATION") data class BatteryInfo( var level: String = "", var scale: String = "", @@ -16,13 +15,13 @@ data class BatteryInfo( ) : Serializable { override fun toString(): String { var msg = "" - msg += "\n" + String.format(ResUtils.getString(R.string.battery_level), level) - if (scale != "") msg += "\n" + String.format(ResUtils.getString(R.string.battery_scale), scale) - if (voltage != "") msg += "\n" + String.format(ResUtils.getString(R.string.battery_voltage), voltage) - if (temperature != "") msg += "\n" + String.format(ResUtils.getString(R.string.battery_temperature), temperature) - msg += "\n" + String.format(ResUtils.getString(R.string.battery_status), status) - msg += "\n" + String.format(ResUtils.getString(R.string.battery_health), health) - msg += "\n" + String.format(ResUtils.getString(R.string.battery_plugged), plugged) + msg += "\n" + String.format(getString(R.string.battery_level), level) + if (scale != "") msg += "\n" + String.format(getString(R.string.battery_scale), scale) + if (voltage != "") msg += "\n" + String.format(getString(R.string.battery_voltage), voltage) + if (temperature != "") msg += "\n" + String.format(getString(R.string.battery_temperature), temperature) + msg += "\n" + String.format(getString(R.string.battery_status), status) + msg += "\n" + String.format(getString(R.string.battery_health), health) + msg += "\n" + String.format(getString(R.string.battery_plugged), plugged) return msg } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/ContactInfo.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/ContactInfo.kt index d30956c1..b409ef0e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/ContactInfo.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/ContactInfo.kt @@ -3,11 +3,10 @@ package com.idormy.sms.forwarder.entity import android.util.Patterns import com.google.gson.annotations.SerializedName import com.idormy.sms.forwarder.R -import com.xuexiang.xui.utils.ResUtils.getString +import com.xuexiang.xutil.resource.ResUtils.getString import java.io.Serializable import java.util.* -@Suppress("DEPRECATION") data class ContactInfo( val name: String = "", @SerializedName("phone_number") diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/ImageInfo.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/ImageInfo.kt index 4cf18520..8a6e4ab2 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/ImageInfo.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/ImageInfo.kt @@ -4,8 +4,8 @@ import android.graphics.Rect import android.os.Parcel import android.os.Parcelable.Creator import com.idormy.sms.forwarder.R -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.imageview.preview.enitity.IPreviewInfo +import com.xuexiang.xutil.resource.ResUtils.getString /** * 图片预览实体类 @@ -20,7 +20,7 @@ data class ImageInfo( //记录坐标 var mBounds: Rect? = null, var mVideoUrl: String? = null, - var description: String? = ResUtils.getString(R.string.description), + var description: String? = getString(R.string.description), ) : IPreviewInfo { constructor(url: String) : this(mUrl = url) diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/LocationInfo.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/LocationInfo.kt index 925fef8e..e4a4306e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/LocationInfo.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/LocationInfo.kt @@ -1,10 +1,9 @@ package com.idormy.sms.forwarder.entity import com.idormy.sms.forwarder.R -import com.xuexiang.xui.utils.ResUtils +import com.xuexiang.xutil.resource.ResUtils.getString import java.io.Serializable -@Suppress("DEPRECATION") data class LocationInfo( var longitude: Double = 0.0, var latitude: Double = 0.0, @@ -15,11 +14,11 @@ data class LocationInfo( override fun toString(): String { var msg = "" - msg += "\n" + String.format(ResUtils.getString(R.string.location_longitude), longitude) - msg += "\n" + String.format(ResUtils.getString(R.string.location_latitude), latitude) - if (address != "") msg += "\n" + String.format(ResUtils.getString(R.string.location_address), address) - if (time != "") msg += "\n" + String.format(ResUtils.getString(R.string.location_time), time) - if (provider != "") msg += "\n" + String.format(ResUtils.getString(R.string.location_provider), provider) + msg += "\n" + String.format(getString(R.string.location_longitude), longitude) + msg += "\n" + String.format(getString(R.string.location_latitude), latitude) + if (address != "") msg += "\n" + String.format(getString(R.string.location_address), address) + if (time != "") msg += "\n" + String.format(getString(R.string.location_time), time) + if (provider != "") msg += "\n" + String.format(getString(R.string.location_provider), provider) return msg + "\n" } diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt index d620bf4b..993ad710 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/MsgInfo.kt @@ -6,20 +6,19 @@ import android.util.Log import com.idormy.sms.forwarder.App import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.utils.BatteryUtils -import com.idormy.sms.forwarder.utils.CALL_TYPE_MAP import com.idormy.sms.forwarder.utils.HttpServerUtils import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils.Companion.enableSmsTemplate import com.idormy.sms.forwarder.utils.SettingUtils.Companion.extraDeviceMark import com.idormy.sms.forwarder.utils.SettingUtils.Companion.smsTemplate import com.idormy.sms.forwarder.utils.task.TaskUtils -import com.xuexiang.xui.utils.ResUtils.getString import com.xuexiang.xutil.app.AppUtils +import com.xuexiang.xutil.resource.ResUtils.getString import java.io.Serializable import java.text.SimpleDateFormat import java.util.* -@Suppress("unused", "DEPRECATION") +@Suppress("unused") data class MsgInfo( var type: String = "sms", var from: String, @@ -32,9 +31,20 @@ data class MsgInfo( var uid: Int = 0, //APP通知的UID ) : Serializable { - val titleForSend: String + private val titleForSend: String get() = getTitleForSend("", "") + //通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 + private val callTypeMap = mapOf( + //"0" to getString(R.string.unknown_call), + "1" to getString(R.string.incoming_call_ended), + "2" to getString(R.string.outgoing_call_ended), + "3" to getString(R.string.missed_call), + "4" to getString(R.string.incoming_call_received), + "5" to getString(R.string.incoming_call_answered), + "6" to getString(R.string.outgoing_call_started), + ) + fun getTitleForSend(titleTemplate: String): String { return getTitleForSend(titleTemplate, "") } @@ -61,7 +71,7 @@ data class MsgInfo( .replace(getString(R.string.tag_current_time), SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())) .replace(getString(R.string.tag_device_name), deviceMark) .replace(getString(R.string.tag_app_version), versionName) - .replace(getString(R.string.tag_call_type), CALL_TYPE_MAP[callType.toString()] ?: getString(R.string.unknown_call)) + .replace(getString(R.string.tag_call_type), callTypeMap[callType.toString()] ?: getString(R.string.unknown_call)) .trim() return replaceLocationTag(replaceAppName(regexReplace(titleForSend, regexReplace), from)) } @@ -110,7 +120,7 @@ data class MsgInfo( .replace(getString(R.string.tag_current_time), SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())) .replace(getString(R.string.tag_device_name), deviceMark) .replace(getString(R.string.tag_app_version), versionName) - .replace(getString(R.string.tag_call_type), CALL_TYPE_MAP[callType.toString()] ?: getString(R.string.unknown_call)) + .replace(getString(R.string.tag_call_type), callTypeMap[callType.toString()] ?: getString(R.string.unknown_call)) .replace(getString(R.string.tag_battery_pct), TaskUtils.batteryPct.toString()) .replace(getString(R.string.tag_battery_status), BatteryUtils.getStatus(TaskUtils.batteryStatus)) .replace(getString(R.string.tag_battery_plugged), BatteryUtils.getPlugged(TaskUtils.batteryPlugged)) diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/condition/ChargeSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/condition/ChargeSetting.kt index 48c402b6..349987ca 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/condition/ChargeSetting.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/condition/ChargeSetting.kt @@ -2,11 +2,9 @@ package com.idormy.sms.forwarder.entity.condition import android.os.BatteryManager import com.idormy.sms.forwarder.R -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xutil.resource.ResUtils.getString import java.io.Serializable -@Suppress("DEPRECATION") data class ChargeSetting( var description: String = "", //描述 var status: Int = BatteryManager.BATTERY_STATUS_UNKNOWN, //状态 @@ -34,12 +32,12 @@ data class ChargeSetting( private fun getStatusStr(status: Int): String { return when (status) { - BatteryManager.BATTERY_STATUS_CHARGING -> ResUtils.getString(R.string.battery_charging) - BatteryManager.BATTERY_STATUS_DISCHARGING -> ResUtils.getString(R.string.battery_discharging) - BatteryManager.BATTERY_STATUS_NOT_CHARGING -> ResUtils.getString(R.string.battery_not_charging) - BatteryManager.BATTERY_STATUS_FULL -> ResUtils.getString(R.string.battery_full) - BatteryManager.BATTERY_STATUS_UNKNOWN -> ResUtils.getString(R.string.battery_unknown) - else -> ResUtils.getString(R.string.battery_unknown) + BatteryManager.BATTERY_STATUS_CHARGING -> getString(R.string.battery_charging) + BatteryManager.BATTERY_STATUS_DISCHARGING -> getString(R.string.battery_discharging) + BatteryManager.BATTERY_STATUS_NOT_CHARGING -> getString(R.string.battery_not_charging) + BatteryManager.BATTERY_STATUS_FULL -> getString(R.string.battery_full) + BatteryManager.BATTERY_STATUS_UNKNOWN -> getString(R.string.battery_unknown) + else -> getString(R.string.battery_unknown) } } @@ -56,10 +54,10 @@ data class ChargeSetting( private fun getPluggedStr(plugged: Int): String { return when (plugged) { - BatteryManager.BATTERY_PLUGGED_AC -> ResUtils.getString(R.string.battery_ac) - BatteryManager.BATTERY_PLUGGED_USB -> ResUtils.getString(R.string.battery_usb) - BatteryManager.BATTERY_PLUGGED_WIRELESS -> ResUtils.getString(R.string.battery_wireless) - else -> ResUtils.getString(R.string.battery_unknown) + BatteryManager.BATTERY_PLUGGED_AC -> getString(R.string.battery_ac) + BatteryManager.BATTERY_PLUGGED_USB -> getString(R.string.battery_usb) + BatteryManager.BATTERY_PLUGGED_WIRELESS -> getString(R.string.battery_wireless) + else -> getString(R.string.battery_unknown) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/AppListFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/AppListFragment.kt index c6ce00a4..086eec9a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/AppListFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/AppListFragment.kt @@ -25,11 +25,11 @@ import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xpage.annotation.Page import com.xuexiang.xui.utils.DensityUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.ThemeUtils import com.xuexiang.xui.utils.WidgetUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xutil.XUtil +import com.xuexiang.xutil.resource.ResUtils.getStringArray @Suppress("PrivatePropertyName", "DEPRECATION") @Page(name = "应用列表") @@ -69,7 +69,7 @@ class AppListFragment : BaseFragment() { WidgetUtils.initRecyclerView(binding!!.recyclerView, DensityUtils.dp2px(5f), ThemeUtils.resolveColor(context, R.attr.xui_config_color_background)) binding!!.recyclerView.adapter = AppListAdapter(true).also { appListAdapter = it } - binding!!.tabBar.setTabTitles(ResUtils.getStringArray(R.array.app_type_option)) + binding!!.tabBar.setTabTitles(getStringArray(R.array.app_type_option)) binding!!.tabBar.setOnTabClickListener { _, position -> //XToastUtils.toast("点击了$title--$position") currentType = when (position) { @@ -101,7 +101,7 @@ class AppListFragment : BaseFragment() { val cm = requireContext().getSystemService(AppCompatActivity.CLIPBOARD_SERVICE) as ClipboardManager val mClipData = ClipData.newPlainText("pkgName", item?.packageName) cm.setPrimaryClip(mClipData) - XToastUtils.toast(ResUtils.getString(R.string.package_name_copied) + item?.packageName, 2000) + XToastUtils.toast(getString(R.string.package_name_copied) + item?.packageName, 2000) } //设置刷新加载时禁止所有列表操作 diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt index 7a4e27e3..54e12452 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt @@ -17,7 +17,6 @@ import com.idormy.sms.forwarder.databinding.FragmentClientBinding import com.idormy.sms.forwarder.server.model.BaseResponse import com.idormy.sms.forwarder.server.model.ConfigData import com.idormy.sms.forwarder.utils.Base64 -import com.idormy.sms.forwarder.utils.CLIENT_FRAGMENT_LIST import com.idormy.sms.forwarder.utils.CommonUtils import com.idormy.sms.forwarder.utils.HttpServerUtils import com.idormy.sms.forwarder.utils.RSACrypt @@ -32,18 +31,19 @@ import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.base.XPageFragment import com.xuexiang.xpage.core.PageOption +import com.xuexiang.xpage.enums.CoreAnim import com.xuexiang.xpage.model.PageInfo import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.adapter.recyclerview.RecyclerViewHolder import com.xuexiang.xui.utils.CountDownButtonHelper import com.xuexiang.xui.utils.DensityUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.WidgetUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.data.ConvertTools +import com.xuexiang.xutil.resource.ResUtils.getColors @Suppress("PrivatePropertyName", "DEPRECATION") @Page(name = "主动控制·客户端") @@ -54,6 +54,71 @@ class ClientFragment : BaseFragment(), View.OnClickListe private var serverConfig: ConfigData? = null private var serverHistory: MutableMap = mutableMapOf() private var mCountDownHelper: CountDownButtonHelper? = null + private 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_sms_query), + "com.idormy.sms.forwarder.fragment.client.SmsQueryFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_api_sms_query + ), + PageInfo( + getString(R.string.api_sms_send), + "com.idormy.sms.forwarder.fragment.client.SmsSendFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_api_sms_send + ), + PageInfo( + getString(R.string.api_call_query), + "com.idormy.sms.forwarder.fragment.client.CallQueryFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_api_call_query + ), + PageInfo( + getString(R.string.api_contact_query), + "com.idormy.sms.forwarder.fragment.client.ContactQueryFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_api_contact_query + ), + PageInfo( + getString(R.string.api_contact_add), + "com.idormy.sms.forwarder.fragment.client.ContactAddFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_api_contact_add + ), + PageInfo( + getString(R.string.api_wol), + "com.idormy.sms.forwarder.fragment.client.WolSendFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_api_wol + ), + PageInfo( + getString(R.string.api_location), + "com.idormy.sms.forwarder.fragment.client.LocationFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_api_location + ), + PageInfo( + getString(R.string.api_battery_query), + "com.idormy.sms.forwarder.fragment.client.BatteryQueryFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_api_battery_query + ), + ) override fun initViews() { appContext = requireActivity().application as App @@ -249,7 +314,7 @@ class ClientFragment : BaseFragment(), View.OnClickListe } } 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? -> + }.positiveText(R.string.select).negativeText(R.string.cancel).neutralText(R.string.clear_history).neutralColor(getColors(R.color.red)).onNeutral { _: MaterialDialog?, _: DialogAction? -> serverHistory.clear() HttpServerUtils.serverHistory = "" }.show() @@ -269,16 +334,16 @@ class ClientFragment : BaseFragment(), View.OnClickListe override fun onItemClick(itemView: View, item: PageInfo, position: Int) { try { - if (item.name != ResUtils.getString(R.string.api_clone) && !CommonUtils.checkUrl(HttpServerUtils.serverAddress)) { + if (item.name != getString(R.string.api_clone) && !CommonUtils.checkUrl(HttpServerUtils.serverAddress)) { XToastUtils.error(getString(R.string.invalid_service_address)) serverConfig = null return } - if (serverConfig == null && item.name != ResUtils.getString(R.string.api_clone)) { + if (serverConfig == null && item.name != getString(R.string.api_clone)) { XToastUtils.error(getString(R.string.click_test_button_first)) return } - if (serverConfig != null && ((item.name == ResUtils.getString(R.string.api_sms_send) && !serverConfig!!.enableApiSmsSend) || (item.name == ResUtils.getString(R.string.api_sms_query) && !serverConfig!!.enableApiSmsQuery) || (item.name == ResUtils.getString(R.string.api_call_query) && !serverConfig!!.enableApiCallQuery) || (item.name == ResUtils.getString(R.string.api_contact_query) && !serverConfig!!.enableApiContactQuery) || (item.name == ResUtils.getString(R.string.api_contact_add) && !serverConfig!!.enableApiContactAdd) || (item.name == ResUtils.getString(R.string.api_battery_query) && !serverConfig!!.enableApiBatteryQuery) || (item.name == ResUtils.getString(R.string.api_wol) && !serverConfig!!.enableApiWol) || (item.name == ResUtils.getString(R.string.api_location) && !serverConfig!!.enableApiLocation))) { + if (serverConfig != null && ((item.name == getString(R.string.api_sms_send) && !serverConfig!!.enableApiSmsSend) || (item.name == getString(R.string.api_sms_query) && !serverConfig!!.enableApiSmsQuery) || (item.name == getString(R.string.api_call_query) && !serverConfig!!.enableApiCallQuery) || (item.name == getString(R.string.api_contact_query) && !serverConfig!!.enableApiContactQuery) || (item.name == getString(R.string.api_contact_add) && !serverConfig!!.enableApiContactAdd) || (item.name == getString(R.string.api_battery_query) && !serverConfig!!.enableApiBatteryQuery) || (item.name == getString(R.string.api_wol) && !serverConfig!!.enableApiWol) || (item.name == getString(R.string.api_location) && !serverConfig!!.enableApiLocation))) { XToastUtils.error(getString(R.string.disabled_on_the_server)) return } @@ -324,7 +389,7 @@ class ClientFragment : BaseFragment(), View.OnClickListe requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - if (needToast) XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + if (needToast) XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -339,7 +404,7 @@ class ClientFragment : BaseFragment(), View.OnClickListe requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - if (needToast) XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + if (needToast) XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -375,7 +440,7 @@ class ClientFragment : BaseFragment(), View.OnClickListe val resp: BaseResponse = Gson().fromJson(json, object : TypeToken>() {}.type) if (resp.code == 200) { serverConfig = resp.data!! - if (needToast) XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) + if (needToast) XToastUtils.success(getString(R.string.request_succeeded)) //删除3.0.8之前保存的记录 serverHistory.remove(HttpServerUtils.serverAddress) //添加到历史记录 @@ -388,13 +453,13 @@ class ClientFragment : BaseFragment(), View.OnClickListe HttpServerUtils.serverHistory = Gson().toJson(serverHistory) HttpServerUtils.serverConfig = Gson().toJson(serverConfig) } else { - if (needToast) XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + if (needToast) XToastUtils.error(getString(R.string.request_failed) + resp.msg) } if (needToast) mCountDownHelper?.finish() } catch (e: Exception) { e.printStackTrace() if (needToast) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) mCountDownHelper?.finish() } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/FrpcEditFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/FrpcEditFragment.kt index 31c7e225..a1d019ae 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/FrpcEditFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/FrpcEditFragment.kt @@ -19,13 +19,13 @@ import com.idormy.sms.forwarder.utils.XToastUtils import com.jeremyliao.liveeventbus.LiveEventBus import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xpage.annotation.Page -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.ThemeUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.button.switchbutton.SwitchButton import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog import com.xuexiang.xui.widget.edittext.materialedittext.MaterialEditText +import com.xuexiang.xutil.resource.ResUtils.getColors @Suppress("DEPRECATION") @Page(name = "Frp内网穿透·编辑配置") @@ -88,13 +88,13 @@ class FrpcEditFragment : BaseFragment() { .cancelable(false) .autoDismiss(false) .neutralText(R.string.action_quit) - .neutralColor(ResUtils.getColors(R.color.red)) + .neutralColor(getColors(R.color.red)) .onNeutral { dialog: MaterialDialog?, _: DialogAction? -> dialog?.dismiss() activity?.onBackPressed() } .negativeText(R.string.action_back) - .negativeColor(ResUtils.getColors(R.color.colorBlueGrey)) + .negativeColor(getColors(R.color.colorBlueGrey)) .onNegative { dialog: MaterialDialog?, _: DialogAction? -> dialog?.dismiss() } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/LogsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/LogsFragment.kt index 70626926..47a0226e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/LogsFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/LogsFragment.kt @@ -21,17 +21,17 @@ import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory import com.idormy.sms.forwarder.database.viewmodel.MsgViewModel import com.idormy.sms.forwarder.databinding.FragmentLogsBinding -import com.idormy.sms.forwarder.utils.FORWARD_STATUS_MAP import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.XToastUtils import com.scwang.smartrefresh.layout.api.RefreshLayout import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xpage.annotation.Page -import com.xuexiang.xui.utils.ResUtils 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.data.DateUtils +import com.xuexiang.xutil.resource.ResUtils.getColors +import com.xuexiang.xutil.resource.ResUtils.getStringArray import io.reactivex.CompletableObserver import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -41,7 +41,7 @@ import kotlinx.coroutines.launch import java.text.SimpleDateFormat import java.util.* -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @Page(name = "转发日志") class LogsFragment : BaseFragment(), MsgPagingAdapter.OnItemClickListener { @@ -50,6 +50,13 @@ class LogsFragment : BaseFragment(), MsgPagingAdapter.OnIt private var adapter = MsgPagingAdapter(this) private val viewModel by viewModels { BaseViewModelFactory(context) } private var currentType: String = "sms" + private val FORWARD_STATUS_MAP = object : HashMap() { + init { + put(0, getString(R.string.failed)) + put(1, getString(R.string.processing)) + put(2, getString(R.string.success)) + } + } override fun viewBindingInflate( inflater: LayoutInflater, @@ -63,12 +70,6 @@ class LogsFragment : BaseFragment(), MsgPagingAdapter.OnIt titleBar!!.setLeftImageResource(R.drawable.ic_action_menu) titleBar!!.setTitle(R.string.menu_logs) titleBar!!.setLeftClickListener { getContainer()?.openMenu() } - /*titleBar!!.addAction(object : TitleBar.ImageAction(R.drawable.ic_menu_notifications_white) { - @SingleClick - override fun performAction(view: View) { - showTipsForce(requireContext()) - } - })*/ titleBar!!.addAction(object : TitleBar.ImageAction(R.drawable.ic_delete) { @SingleClick override fun performAction(view: View) { @@ -114,7 +115,7 @@ class LogsFragment : BaseFragment(), MsgPagingAdapter.OnIt viewPool.setMaxRecycledViews(0, 10) binding!!.recyclerView.isFocusableInTouchMode = false - binding!!.tabBar.setTabTitles(ResUtils.getStringArray(R.array.type_param_option)) + binding!!.tabBar.setTabTitles(getStringArray(R.array.type_param_option)) binding!!.tabBar.setOnTabClickListener { _, position -> //XToastUtils.toast("点击了$title--$position") currentType = when (position) { @@ -147,22 +148,22 @@ class LogsFragment : BaseFragment(), MsgPagingAdapter.OnIt Log.d(TAG, "item: $item") val detailStr = StringBuilder() - detailStr.append(ResUtils.getString(R.string.from)).append(item.msg.from).append("\n\n") + detailStr.append(getString(R.string.from)).append(item.msg.from).append("\n\n") if (!TextUtils.isEmpty(item.msg.simInfo)) { if (item.msg.type == "app") { val splitSimInfo = item.msg.simInfo.split("#####") val title = splitSimInfo.getOrElse(0) { item.msg.simInfo } val scheme = splitSimInfo.getOrElse(1) { "" } - detailStr.append(ResUtils.getString(R.string.title)).append(title).append("\n\n") - detailStr.append(ResUtils.getString(R.string.msg)).append(item.msg.content).append("\n\n") - if (!TextUtils.isEmpty(scheme) && scheme != "null") detailStr.append(ResUtils.getString(R.string.scheme)).append(scheme).append("\n\n") + detailStr.append(getString(R.string.title)).append(title).append("\n\n") + detailStr.append(getString(R.string.msg)).append(item.msg.content).append("\n\n") + if (!TextUtils.isEmpty(scheme) && scheme != "null") detailStr.append(getString(R.string.scheme)).append(scheme).append("\n\n") } else { - detailStr.append(ResUtils.getString(R.string.msg)).append(item.msg.content).append("\n\n") - detailStr.append(ResUtils.getString(R.string.slot)).append(item.msg.simInfo).append("\n\n") + detailStr.append(getString(R.string.msg)).append(item.msg.content).append("\n\n") + detailStr.append(getString(R.string.slot)).append(item.msg.simInfo).append("\n\n") } } @SuppressLint("SimpleDateFormat") val utcFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) - detailStr.append(ResUtils.getString(R.string.time)).append(DateUtils.date2String(item.msg.time, utcFormatter)) + detailStr.append(getString(R.string.time)).append(DateUtils.date2String(item.msg.time, utcFormatter)) MaterialDialog.Builder(requireContext()) .iconRes(item.msg.simImageId) @@ -175,7 +176,7 @@ class LogsFragment : BaseFragment(), MsgPagingAdapter.OnIt XToastUtils.success(R.string.delete_log_toast) } .neutralText(R.string.rematch) - .neutralColor(ResUtils.getColors(R.color.red)) + .neutralColor(getColors(R.color.red)) .onNeutral { _: MaterialDialog?, _: DialogAction? -> XToastUtils.toast(R.string.rematch_toast) SendUtils.rematchSendMsg(item) @@ -188,10 +189,10 @@ class LogsFragment : BaseFragment(), MsgPagingAdapter.OnIt val ruleStr = StringBuilder() ruleStr.append(Rule.getRuleMatch(item.ruleFiled, item.ruleCheck, item.ruleValue, item.ruleSimSlot)).append(item.senderName) val detailStr = StringBuilder() - detailStr.append(ResUtils.getString(R.string.rule)).append(ruleStr.toString()).append("\n\n") + detailStr.append(getString(R.string.rule)).append(ruleStr.toString()).append("\n\n") @SuppressLint("SimpleDateFormat") val utcFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) - detailStr.append(ResUtils.getString(R.string.time)).append(DateUtils.date2String(item.time, utcFormatter)).append("\n\n") - detailStr.append(ResUtils.getString(R.string.result)).append(FORWARD_STATUS_MAP[item.forwardStatus]).append("\n--------------------\n").append(item.forwardResponse) + detailStr.append(getString(R.string.time)).append(DateUtils.date2String(item.time, utcFormatter)).append("\n\n") + detailStr.append(getString(R.string.result)).append(FORWARD_STATUS_MAP[item.forwardStatus]).append("\n--------------------\n").append(item.forwardResponse) MaterialDialog.Builder(requireContext()) .title(R.string.details) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt index 3e46e457..bbca3bf6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt @@ -32,7 +32,6 @@ import com.xuexiang.xpage.annotation.Page import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.utils.TextUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog @@ -40,6 +39,8 @@ import com.xuexiang.xui.widget.picker.widget.builder.OptionsPickerBuilder import com.xuexiang.xui.widget.picker.widget.listener.OnOptionsSelectListener import com.xuexiang.xui.widget.spinner.materialspinner.MaterialSpinner import com.xuexiang.xutil.XUtil +import com.xuexiang.xutil.resource.ResUtils.getColors +import com.xuexiang.xutil.resource.ResUtils.getDrawable import io.reactivex.SingleObserver import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -48,13 +49,24 @@ import kotlinx.coroutines.* import java.util.* @Page(name = "转发规则·编辑器") -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") class RulesEditFragment : BaseFragment(), View.OnClickListener, CompoundButton.OnCheckedChangeListener { private val TAG: String = RulesEditFragment::class.java.simpleName private var titleBar: TitleBar? = null private val viewModel by viewModels { BaseViewModelFactory(context) } + //通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 + private val CALL_TYPE_MAP = mapOf( + //"0" to getString(R.string.unknown_call), + "1" to getString(R.string.incoming_call_ended), + "2" to getString(R.string.outgoing_call_ended), + "3" to getString(R.string.missed_call), + "4" to getString(R.string.incoming_call_received), + "5" to getString(R.string.incoming_call_answered), + "6" to getString(R.string.outgoing_call_started), + ) + private var callType = 1 private var callTypeIndex = 0 @@ -412,8 +424,6 @@ class RulesEditFragment : BaseFragment(), View.OnClic senderSpinnerList.add(SenderAdapterItem(name, sender.imageId, sender.id, sender.status)) } senderSpinnerAdapter = SenderSpinnerAdapter(senderSpinnerList) - //.setTextColor(ResUtils.getColor(R.color.green)) - //.setTextSize(12F) .setIsFilterKey(true).setFilterColor("#EF5362").setBackgroundSelector(R.drawable.selector_custom_spinner_bg) binding!!.spSender.setAdapter(senderSpinnerAdapter) @@ -474,7 +484,7 @@ class RulesEditFragment : BaseFragment(), View.OnClic val tvSenderName = layoutSenderItem.findViewById(R.id.tv_sender_name) ivSenderImage.setImageDrawable(sender.icon) - ivSenderStatus.setImageDrawable(ResUtils.getDrawable(if (STATUS_OFF == sender.status) R.drawable.ic_stop else R.drawable.ic_start)) + ivSenderStatus.setImageDrawable(getDrawable(if (STATUS_OFF == sender.status) R.drawable.ic_stop else R.drawable.ic_start)) val senderItemId = sender.id as Long tvSenderName.text = "ID-$senderItemId:${sender.title}" @@ -762,7 +772,7 @@ class RulesEditFragment : BaseFragment(), View.OnClic spCallType.selectedIndex = callTypeIndexTest } - MaterialDialog.Builder(requireContext()).iconRes(android.R.drawable.ic_dialog_email).title(R.string.rule_tester).customView(dialogTest, true).cancelable(false).autoDismiss(false).neutralText(R.string.action_back).neutralColor(ResUtils.getColors(R.color.darkGrey)).onNeutral { dialog: MaterialDialog?, _: DialogAction? -> + MaterialDialog.Builder(requireContext()).iconRes(android.R.drawable.ic_dialog_email).title(R.string.rule_tester).customView(dialogTest, true).cancelable(false).autoDismiss(false).neutralText(R.string.action_back).neutralColor(getColors(R.color.darkGrey)).onNeutral { dialog: MaterialDialog?, _: DialogAction? -> dialog?.dismiss() }.positiveText(R.string.action_test).onPositive { _: MaterialDialog?, _: DialogAction? -> try { @@ -794,10 +804,10 @@ class RulesEditFragment : BaseFragment(), View.OnClic if (ruleType == "call") { val phoneNumber = etFrom.text.toString() val contacts = PhoneUtils.getContactByNumber(phoneNumber) - val contactName = if (contacts.isNotEmpty()) contacts[0].name else ResUtils.getString(R.string.unknown_number) - msg.append(ResUtils.getString(R.string.contact)).append(contactName).append("\n") - msg.append(ResUtils.getString(R.string.mandatory_type)) - msg.append(CALL_TYPE_MAP[callType.toString()] ?: ResUtils.getString(R.string.unknown_call)) + val contactName = if (contacts.isNotEmpty()) contacts[0].name else getString(R.string.unknown_number) + msg.append(getString(R.string.contact)).append(contactName).append("\n") + msg.append(getString(R.string.mandatory_type)) + msg.append(CALL_TYPE_MAP[callType.toString()] ?: getString(R.string.unknown_call)) } else { msg.append(etContent.text.toString()) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesFragment.kt index 6fd1f161..a3f8b80c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesFragment.kt @@ -23,14 +23,13 @@ import com.scwang.smartrefresh.layout.api.RefreshLayout import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.core.PageOption -import com.xuexiang.xui.utils.ResUtils 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.resource.ResUtils.getStringArray import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch -@Suppress("DEPRECATION") @Page(name = "转发规则") class RulesFragment : BaseFragment(), RulePagingAdapter.OnItemClickListener { @@ -79,7 +78,7 @@ class RulesFragment : BaseFragment(), RulePagingAdapter.O binding!!.recyclerView.setRecycledViewPool(viewPool) viewPool.setMaxRecycledViews(0, 10) - binding!!.tabBar.setTabTitles(ResUtils.getStringArray(R.array.type_param_option)) + binding!!.tabBar.setTabTitles(getStringArray(R.array.type_param_option)) binding!!.tabBar.setOnTabClickListener { _, position -> //XToastUtils.toast("点击了$title--$position") currentType = when (position) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/SendersFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/SendersFragment.kt index 87c2fb52..172b40a6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/SendersFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/SendersFragment.kt @@ -39,7 +39,6 @@ import com.idormy.sms.forwarder.fragment.senders.WeworkRobotFragment import com.idormy.sms.forwarder.utils.KEY_SENDER_CLONE import com.idormy.sms.forwarder.utils.KEY_SENDER_ID import com.idormy.sms.forwarder.utils.KEY_SENDER_TYPE -import com.idormy.sms.forwarder.utils.SENDER_FRAGMENT_LIST import com.idormy.sms.forwarder.utils.TYPE_BARK import com.idormy.sms.forwarder.utils.TYPE_DINGTALK_GROUP_ROBOT import com.idormy.sms.forwarder.utils.TYPE_DINGTALK_INNER_ROBOT @@ -62,15 +61,16 @@ import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.base.XPageFragment import com.xuexiang.xpage.core.PageOption +import com.xuexiang.xpage.enums.CoreAnim import com.xuexiang.xpage.model.PageInfo import com.xuexiang.xui.adapter.recyclerview.RecyclerViewHolder import com.xuexiang.xui.utils.DensityUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.WidgetUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.alpha.XUIAlphaTextView import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog +import com.xuexiang.xutil.resource.ResUtils.getStringArray import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch @@ -87,7 +87,120 @@ class SendersFragment : BaseFragment(), private val viewModel by viewModels { BaseViewModelFactory(context) } private val dialog: BottomSheetDialog by lazy { BottomSheetDialog(requireContext()) } private var currentStatus: Int = 1 - //private val statusValueArray = ResUtils.getIntArray(R.array.status_param_value) + private var SENDER_FRAGMENT_LIST = listOf( + PageInfo( + getString(R.string.dingtalk_robot), + "com.idormy.sms.forwarder.fragment.senders.DingtalkGroupRobotFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_dingtalk + ), + PageInfo( + getString(R.string.email), + "com.idormy.sms.forwarder.fragment.senders.EmailFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_email + ), + PageInfo( + getString(R.string.bark), + "com.idormy.sms.forwarder.fragment.senders.BarkFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_bark + ), + PageInfo( + getString(R.string.webhook), + "com.idormy.sms.forwarder.fragment.senders.WebhookFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_webhook + ), + PageInfo( + getString(R.string.wework_robot), + "com.idormy.sms.forwarder.fragment.senders.WeworkRobotFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_wework_robot + ), + PageInfo( + getString(R.string.wework_agent), + "com.idormy.sms.forwarder.fragment.senders.WeworkAgentFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_wework_agent + ), + PageInfo( + getString(R.string.server_chan), + "com.idormy.sms.forwarder.fragment.senders.ServerchanFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_serverchan + ), + PageInfo( + getString(R.string.telegram), + "com.idormy.sms.forwarder.fragment.senders.TelegramFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_telegram + ), + PageInfo( + getString(R.string.sms_menu), + "com.idormy.sms.forwarder.fragment.senders.SmsFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_sms + ), + PageInfo( + getString(R.string.feishu), + "com.idormy.sms.forwarder.fragment.senders.FeishuFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_feishu + ), + PageInfo( + getString(R.string.pushplus), + "com.idormy.sms.forwarder.fragment.senders.PushplusFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_pushplus + ), + PageInfo( + getString(R.string.gotify), + "com.idormy.sms.forwarder.fragment.senders.GotifyFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_gotify + ), + PageInfo( + getString(R.string.dingtalk_inner_robot), + "com.idormy.sms.forwarder.fragment.senders.DingtalkInnerRobotFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_dingtalk_inner + ), + PageInfo( + getString(R.string.feishu_app), + "com.idormy.sms.forwarder.fragment.senders.FeishuAppFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_feishu_app + ), + PageInfo( + getString(R.string.url_scheme), + "com.idormy.sms.forwarder.fragment.senders.UrlSchemeFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_url_scheme + ), + PageInfo( + getString(R.string.socket), + "com.idormy.sms.forwarder.fragment.senders.SocketFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.icon_socket + ), + ) override fun viewBindingInflate( inflater: LayoutInflater, @@ -140,7 +253,7 @@ class SendersFragment : BaseFragment(), binding!!.recyclerView.setRecycledViewPool(viewPool) viewPool.setMaxRecycledViews(0, 10) - binding!!.tabBar.setTabTitles(ResUtils.getStringArray(R.array.status_param_option)) + binding!!.tabBar.setTabTitles(getStringArray(R.array.status_param_option)) binding!!.tabBar.setOnTabClickListener { _, position -> //XToastUtils.toast("点击了$title--$position") //currentStatus = statusValueArray[position] diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/ServiceProtocolFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/ServiceProtocolFragment.kt index 3dd06a00..1dc3228d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/ServiceProtocolFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/ServiceProtocolFragment.kt @@ -10,7 +10,6 @@ import com.xuexiang.xpage.annotation.Page import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xui.widget.actionbar.TitleBar -import com.xuexiang.xutil.resource.ResUtils import com.xuexiang.xutil.resource.ResourceUtils /** @@ -49,7 +48,7 @@ class ServiceProtocolFragment : BaseFragment() * 初始化控件 */ override fun initViews() { - if (title == ResUtils.getString(R.string.title_user_protocol)) { + if (title == getString(R.string.title_user_protocol)) { binding!!.tvProtocolText.text = accountProtocol } else { binding!!.tvProtocolText.text = privacyProtocol diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt index 80832277..4087bdbe 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt @@ -92,18 +92,7 @@ class SettingsFragment : BaseFragment(), View.OnClickL override fun performAction(view: View) { GuideTipsDialog.showTipsForce(requireContext()) } - })/*titleBar!!.addAction(object : TitleBar.ImageAction(R.drawable.ic_restore) { - @SingleClick - override fun performAction(view: View) { - MaterialDialog.Builder(requireContext()) - .content(R.string.delete_type_log_tips) - .positiveText(R.string.lab_yes) - .negativeText(R.string.lab_no) - .onPositive { _: MaterialDialog?, _: DialogAction? -> - } - .show() - } - })*/ + }) return titleBar } @@ -168,10 +157,8 @@ class SettingsFragment : BaseFragment(), View.OnClickL switchDirectlyToClient(binding!!.sbDirectlyToClient) //纯自动任务模式 switchDirectlyToTask(binding!!.sbDirectlyToTask) - //多语言设置 switchLanguage(binding!!.rgMainLanguages) - } override fun onResume() { @@ -1031,8 +1018,8 @@ class SettingsFragment : BaseFragment(), View.OnClickL // 重启应用 if (restart) { XToastUtils.toast(R.string.multi_languages_toast) - val intent = requireActivity().baseContext.packageManager.getLaunchIntentForPackage(requireActivity().baseContext.packageName) - intent!!.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) + val intent = Intent(App.context, MainActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) startActivity(intent) requireActivity().finish() } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt index 08bd49d5..db4b212b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt @@ -33,6 +33,7 @@ import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.base.XPageFragment import com.xuexiang.xpage.core.PageOption +import com.xuexiang.xpage.enums.CoreAnim import com.xuexiang.xpage.model.PageInfo import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.launcher.XRouter @@ -83,6 +84,96 @@ class TasksEditFragment : BaseFragment(), View.OnClic private var itemListConditions = mutableListOf() private var itemListActions = mutableListOf() + private var TASK_CONDITION_FRAGMENT_LIST = listOf( + PageInfo( + getString(R.string.task_cron), + "com.idormy.sms.forwarder.fragment.condition.CronFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_custom_time, + ), + PageInfo( + getString(R.string.task_to_address), + "com.idormy.sms.forwarder.fragment.condition.ToAddressFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_to_address, + ), + PageInfo( + getString(R.string.task_leave_address), + "com.idormy.sms.forwarder.fragment.condition.LeaveAddressFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_leave_address, + ), + PageInfo( + getString(R.string.task_network), + "com.idormy.sms.forwarder.fragment.condition.NetworkFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_network + ), + PageInfo( + getString(R.string.task_sim), + "com.idormy.sms.forwarder.fragment.condition.SimFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_sim + ), + PageInfo( + getString(R.string.task_battery), + "com.idormy.sms.forwarder.fragment.condition.BatteryFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_battery + ), + PageInfo( + getString(R.string.task_charge), + "com.idormy.sms.forwarder.fragment.condition.ChargeFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_charge + ), + PageInfo( + getString(R.string.task_lock_screen), + "com.idormy.sms.forwarder.fragment.condition.LockScreenFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_lock_screen + ), + ) + + private var TASK_ACTION_FRAGMENT_LIST = listOf( + PageInfo( + getString(R.string.task_sendsms), + "com.idormy.sms.forwarder.fragment.action.SendSmsFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_sms + ), + PageInfo( + getString(R.string.task_notification), + "com.idormy.sms.forwarder.fragment.action.NotificationFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_sender, + ), + PageInfo( + getString(R.string.task_frpc), + "com.idormy.sms.forwarder.fragment.action.FrpcFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_frpc + ), + PageInfo( + getString(R.string.task_server), + "com.idormy.sms.forwarder.fragment.action.HttpServerFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_http_server + ), + ) + override fun initArgs() { XRouter.getInstance().inject(this) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt index 775d72dc..431cf15b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt @@ -22,15 +22,15 @@ import com.scwang.smartrefresh.layout.api.RefreshLayout import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.core.PageOption -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.ThemeUtils 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.resource.ResUtils.getStringArray import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @Page(name = "自动任务") class TasksFragment : BaseFragment(), TaskPagingAdapter.OnItemClickListener { @@ -70,7 +70,7 @@ class TasksFragment : BaseFragment(), TaskPagingAdapter.O binding!!.recyclerView.setRecycledViewPool(viewPool) viewPool.setMaxRecycledViews(0, 10) - binding!!.tabBar.setTabTitles(ResUtils.getStringArray(R.array.task_type_option)) + binding!!.tabBar.setTabTitles(getStringArray(R.array.task_type_option)) binding!!.tabBar.setOnTabClickListener { _, position -> //XToastUtils.toast("点击了$title--$position") currentType = when (position) { 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 a56995cb..cea9d48a 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 @@ -25,10 +25,10 @@ import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.utils.CountDownButtonHelper -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.picker.widget.builder.OptionsPickerBuilder import com.xuexiang.xui.widget.picker.widget.listener.OnOptionsSelectListener +import com.xuexiang.xutil.resource.ResUtils.getDrawable import io.reactivex.SingleObserver import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -37,7 +37,7 @@ import kotlinx.coroutines.* import java.util.* @Page(name = "Notification") -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") class NotificationFragment : BaseFragment(), View.OnClickListener, CompoundButton.OnCheckedChangeListener { private val TAG: String = NotificationFragment::class.java.simpleName @@ -316,8 +316,6 @@ class NotificationFragment : BaseFragment(R.id.tv_sender_name) ivSenderImage.setImageDrawable(sender.icon) - ivSenderStatus.setImageDrawable(ResUtils.getDrawable(if (STATUS_OFF == sender.status) R.drawable.ic_stop else R.drawable.ic_start)) + ivSenderStatus.setImageDrawable(getDrawable(if (STATUS_OFF == sender.status) R.drawable.ic_stop else R.drawable.ic_start)) val senderItemId = sender.id as Long tvSenderName.text = "ID-$senderItemId:${sender.title}" 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 ba1e1929..ca155660 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 @@ -37,7 +37,6 @@ import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.utils.CountDownButtonHelper -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xutil.XUtil @@ -165,7 +164,7 @@ class SendSmsFragment : BaseFragment(), View val mSubscriptionId: Int = App.SimInfoList[simSlotIndex]?.mSubscriptionId ?: -1 val msg = if (ActivityCompat.checkSelfPermission(XUtil.getContext(), Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { - ResUtils.getString(R.string.no_sms_sending_permission) + getString(R.string.no_sms_sending_permission) } else { PhoneUtils.sendSms(mSubscriptionId, settingVo.phoneNumbers, settingVo.msgContent) ?: "success" } @@ -178,7 +177,7 @@ class SendSmsFragment : BaseFragment(), View } override fun onDenied(permissions: List, never: Boolean) { - LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(ResUtils.getString(R.string.no_sms_sending_permission)) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(getString(R.string.no_sms_sending_permission)) } }) return diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/BatteryQueryFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/BatteryQueryFragment.kt index c547e93c..795e9de1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/BatteryQueryFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/BatteryQueryFragment.kt @@ -22,12 +22,11 @@ import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xpage.annotation.Page import com.xuexiang.xrouter.utils.TextUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.grouplist.XUIGroupListView import com.xuexiang.xutil.data.ConvertTools -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @Page(name = "远程查电量") class BatteryQueryFragment : BaseFragment() { @@ -81,7 +80,7 @@ class BatteryQueryFragment : BaseFragment() requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -96,7 +95,7 @@ class BatteryQueryFragment : BaseFragment() requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -129,26 +128,26 @@ class BatteryQueryFragment : BaseFragment() } val resp: BaseResponse = Gson().fromJson(json, object : TypeToken>() {}.type) if (resp.code == 200) { - XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) + XToastUtils.success(getString(R.string.request_succeeded)) val batteryInfo = resp.data ?: return val groupListView = binding!!.infoList val section = XUIGroupListView.newSection(context) - section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.battery_level), batteryInfo.level))) {} - if (batteryInfo.scale != "") section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.battery_scale), batteryInfo.scale))) {} - if (batteryInfo.voltage != "") section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.battery_voltage), batteryInfo.voltage))) {} - if (batteryInfo.temperature != "") section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.battery_temperature), batteryInfo.temperature))) {} - section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.battery_status), batteryInfo.status))) {} - section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.battery_health), batteryInfo.health))) {} - section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.battery_plugged), batteryInfo.plugged))) {} + section.addItemView(groupListView.createItemView(String.format(getString(R.string.battery_level), batteryInfo.level))) {} + if (batteryInfo.scale != "") section.addItemView(groupListView.createItemView(String.format(getString(R.string.battery_scale), batteryInfo.scale))) {} + if (batteryInfo.voltage != "") section.addItemView(groupListView.createItemView(String.format(getString(R.string.battery_voltage), batteryInfo.voltage))) {} + if (batteryInfo.temperature != "") section.addItemView(groupListView.createItemView(String.format(getString(R.string.battery_temperature), batteryInfo.temperature))) {} + section.addItemView(groupListView.createItemView(String.format(getString(R.string.battery_status), batteryInfo.status))) {} + section.addItemView(groupListView.createItemView(String.format(getString(R.string.battery_health), batteryInfo.health))) {} + section.addItemView(groupListView.createItemView(String.format(getString(R.string.battery_plugged), batteryInfo.plugged))) {} section.addTo(groupListView) } else { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + XToastUtils.error(getString(R.string.request_failed) + resp.msg) } } catch (e: Exception) { e.printStackTrace() - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } } }) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CallQueryFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CallQueryFragment.kt index 2a9c0ac3..40e2aaac 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CallQueryFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CallQueryFragment.kt @@ -41,16 +41,17 @@ import com.xuexiang.xpage.base.XPageActivity import com.xuexiang.xpage.core.PageOption import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.adapter.recyclerview.RecyclerViewHolder -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.SnackbarUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.searchview.MaterialSearchView import com.xuexiang.xutil.data.ConvertTools import com.xuexiang.xutil.data.DateUtils +import com.xuexiang.xutil.resource.ResUtils.getColor +import com.xuexiang.xutil.resource.ResUtils.getStringArray import com.xuexiang.xutil.system.ClipboardUtils import me.samlss.broccoli.Broccoli -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @Page(name = "远程查通话") class CallQueryFragment : BaseFragment() { @@ -105,7 +106,7 @@ class CallQueryFragment : BaseFragment() { holder.text(R.id.tv_time, DateUtils.getFriendlyTimeSpanByNow(model.dateLong)) holder.image(R.id.iv_image, model.typeImageId) holder.image(R.id.iv_sim_image, model.simImageId) - holder.text(R.id.tv_duration, ResUtils.getString(R.string.call_duration) + model.duration + ResUtils.getString(R.string.seconds)) + holder.text(R.id.tv_duration, getString(R.string.call_duration) + model.duration + getString(R.string.seconds)) holder.click(R.id.iv_copy) { XToastUtils.info(String.format(getString(R.string.copied_to_clipboard), from)) @@ -140,7 +141,7 @@ class CallQueryFragment : BaseFragment() { delegateAdapter.addAdapter(mAdapter) binding!!.recyclerView.adapter = delegateAdapter - binding!!.tabBar.setTabTitles(ResUtils.getStringArray(R.array.call_type_option)) + binding!!.tabBar.setTabTitles(getStringArray(R.array.call_type_option)) binding!!.tabBar.setOnTabClickListener { _, position -> //XToastUtils.toast("点击了$title--$position") callType = 3 - position @@ -156,7 +157,7 @@ class CallQueryFragment : BaseFragment() { binding!!.searchView.setOnQueryTextListener(object : MaterialSearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { SnackbarUtils.Indefinite(view, String.format(getString(R.string.search_keyword), query)).info() - .actionColor(ResUtils.getColor(R.color.xui_config_color_white)) + .actionColor(getColor(R.color.xui_config_color_white)) .setAction(getString(R.string.clear)) { keyword = "" loadRemoteData(true) @@ -234,7 +235,7 @@ class CallQueryFragment : BaseFragment() { requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -249,7 +250,7 @@ class CallQueryFragment : BaseFragment() { requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -292,11 +293,11 @@ class CallQueryFragment : BaseFragment() { binding!!.refreshLayout.finishLoadMore() } } else { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + XToastUtils.error(getString(R.string.request_failed) + resp.msg) } } catch (e: Exception) { e.printStackTrace() - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } } }) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CloneFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CloneFragment.kt index 9a96b207..f737a63f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CloneFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CloneFragment.kt @@ -31,7 +31,6 @@ import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xpage.annotation.Page import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.utils.CountDownButtonHelper -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog @@ -39,10 +38,11 @@ import com.xuexiang.xutil.app.AppUtils import com.xuexiang.xutil.data.ConvertTools import com.xuexiang.xutil.file.FileIOUtils import com.xuexiang.xutil.file.FileUtils +import com.xuexiang.xutil.resource.ResUtils.getStringArray import java.io.File import java.util.* -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @Page(name = "一键换新机") class CloneFragment : BaseFragment(), View.OnClickListener { @@ -93,7 +93,7 @@ class CloneFragment : BaseFragment(), View.OnClickL } }) - binding!!.tabBar.setTabTitles(ResUtils.getStringArray(R.array.clone_type_option)) + binding!!.tabBar.setTabTitles(getStringArray(R.array.clone_type_option)) binding!!.tabBar.setOnTabClickListener { _, position -> //XToastUtils.toast("点击了$title--$position") if (position == 1) { @@ -268,7 +268,7 @@ class CloneFragment : BaseFragment(), View.OnClickL requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -283,7 +283,7 @@ class CloneFragment : BaseFragment(), View.OnClickL requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -317,13 +317,13 @@ class CloneFragment : BaseFragment(), View.OnClickL } val resp: BaseResponse = Gson().fromJson(json, object : TypeToken>() {}.type) if (resp.code == 200) { - XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) + XToastUtils.success(getString(R.string.request_succeeded)) } else { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + XToastUtils.error(getString(R.string.request_failed) + resp.msg) } } catch (e: Exception) { e.printStackTrace() - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } pushCountDownHelper?.finish() } @@ -369,7 +369,7 @@ class CloneFragment : BaseFragment(), View.OnClickL requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -384,7 +384,7 @@ class CloneFragment : BaseFragment(), View.OnClickL requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -427,7 +427,7 @@ class CloneFragment : BaseFragment(), View.OnClickL Log.d(TAG, "cloneInfo = $cloneInfo") if (cloneInfo == null) { - XToastUtils.error(ResUtils.getString(R.string.request_failed)) + XToastUtils.error(getString(R.string.request_failed)) return } @@ -438,12 +438,12 @@ class CloneFragment : BaseFragment(), View.OnClickL XToastUtils.success(getString(R.string.import_succeeded)) } } else { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + XToastUtils.error(getString(R.string.request_failed) + resp.msg) } } catch (e: Exception) { e.printStackTrace() - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } exportCountDownHelper?.finish() } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactAddFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactAddFragment.kt index 47db836c..e8d54578 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactAddFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactAddFragment.kt @@ -21,7 +21,6 @@ import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xpage.annotation.Page import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.utils.CountDownButtonHelper -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xutil.data.ConvertTools @@ -86,7 +85,7 @@ class ContactAddFragment : BaseFragment(), Vie val phoneNumbers = binding!!.etPhoneNumbers.text.toString() val phoneRegex = getString(R.string.phone_numbers_regex).toRegex() if (!phoneRegex.matches(phoneNumbers)) { - XToastUtils.error(ResUtils.getString(R.string.phone_numbers_error)) + XToastUtils.error(getString(R.string.phone_numbers_error)) return } @@ -114,7 +113,7 @@ class ContactAddFragment : BaseFragment(), Vie requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -129,7 +128,7 @@ class ContactAddFragment : BaseFragment(), Vie requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -164,13 +163,13 @@ class ContactAddFragment : BaseFragment(), Vie } val resp: BaseResponse = Gson().fromJson(json, object : TypeToken>() {}.type) if (resp.code == 200) { - XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) + XToastUtils.success(getString(R.string.request_succeeded)) } else { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + XToastUtils.error(getString(R.string.request_failed) + resp.msg) } } catch (e: Exception) { e.printStackTrace() - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } mCountDownHelper?.finish() } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactQueryFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactQueryFragment.kt index efbba406..0b2d77f2 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactQueryFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactQueryFragment.kt @@ -41,15 +41,15 @@ import com.xuexiang.xpage.base.XPageActivity import com.xuexiang.xpage.core.PageOption import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.adapter.recyclerview.RecyclerViewHolder -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.SnackbarUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.searchview.MaterialSearchView import com.xuexiang.xutil.data.ConvertTools +import com.xuexiang.xutil.resource.ResUtils.getColor import com.xuexiang.xutil.system.ClipboardUtils import me.samlss.broccoli.Broccoli -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @Page(name = "远程查话簿") class ContactQueryFragment : BaseFragment() { @@ -139,7 +139,7 @@ class ContactQueryFragment : BaseFragment() binding!!.searchView.setOnQueryTextListener(object : MaterialSearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { SnackbarUtils.Indefinite(view, String.format(getString(R.string.search_keyword), query)).info() - .actionColor(ResUtils.getColor(R.color.xui_config_color_white)) + .actionColor(getColor(R.color.xui_config_color_white)) .setAction(getString(R.string.clear)) { keyword = "" loadRemoteData() @@ -212,7 +212,7 @@ class ContactQueryFragment : BaseFragment() requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -227,7 +227,7 @@ class ContactQueryFragment : BaseFragment() requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -260,16 +260,15 @@ class ContactQueryFragment : BaseFragment() } val resp: BaseResponse?> = Gson().fromJson(json, object : TypeToken?>>() {}.type) if (resp.code == 200) { - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) mAdapter!!.refresh(resp.data) binding!!.refreshLayout.finishRefresh() binding!!.recyclerView.scrollToPosition(0) } else { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + XToastUtils.error(getString(R.string.request_failed) + resp.msg) } } catch (e: Exception) { e.printStackTrace() - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } } }) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/LocationFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/LocationFragment.kt index 5d1a4c34..903f7a88 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/LocationFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/LocationFragment.kt @@ -25,7 +25,6 @@ import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xpage.annotation.Page import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.utils.CountDownButtonHelper -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.grouplist.XUIGroupListView import com.xuexiang.xutil.data.ConvertTools @@ -110,7 +109,7 @@ class LocationFragment : BaseFragment(), View.On requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -125,7 +124,7 @@ class LocationFragment : BaseFragment(), View.On requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -160,7 +159,7 @@ class LocationFragment : BaseFragment(), View.On } val resp: BaseResponse = Gson().fromJson(json, object : TypeToken>() {}.type) if (resp.code == 200) { - XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) + XToastUtils.success(getString(R.string.request_succeeded)) mCountDownHelper?.finish() val locationInfo = resp.data ?: return @@ -168,18 +167,18 @@ class LocationFragment : BaseFragment(), View.On val groupListView = binding!!.infoList groupListView.removeAllViews() val section = XUIGroupListView.newSection(context) - section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.location_longitude), locationInfo.longitude))) {} - section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.location_latitude), locationInfo.latitude))) {} - if (locationInfo.address != "") section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.location_address), locationInfo.address))) {} - if (locationInfo.time != "") section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.location_time), locationInfo.time))) {} - if (locationInfo.provider != "") section.addItemView(groupListView.createItemView(String.format(ResUtils.getString(R.string.location_provider), locationInfo.provider))) {} + section.addItemView(groupListView.createItemView(String.format(getString(R.string.location_longitude), locationInfo.longitude))) {} + section.addItemView(groupListView.createItemView(String.format(getString(R.string.location_latitude), locationInfo.latitude))) {} + if (locationInfo.address != "") section.addItemView(groupListView.createItemView(String.format(getString(R.string.location_address), locationInfo.address))) {} + if (locationInfo.time != "") section.addItemView(groupListView.createItemView(String.format(getString(R.string.location_time), locationInfo.time))) {} + if (locationInfo.provider != "") section.addItemView(groupListView.createItemView(String.format(getString(R.string.location_provider), locationInfo.provider))) {} section.addTo(groupListView) } else { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + XToastUtils.error(getString(R.string.request_failed) + resp.msg) } } catch (e: Exception) { e.printStackTrace() - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } mCountDownHelper?.finish() } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsQueryFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsQueryFragment.kt index 16eea201..02319d95 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsQueryFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsQueryFragment.kt @@ -40,16 +40,17 @@ import com.xuexiang.xpage.base.XPageActivity import com.xuexiang.xpage.core.PageOption import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.adapter.recyclerview.RecyclerViewHolder -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.SnackbarUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.searchview.MaterialSearchView import com.xuexiang.xui.widget.searchview.MaterialSearchView.SearchViewListener import com.xuexiang.xutil.data.ConvertTools import com.xuexiang.xutil.data.DateUtils +import com.xuexiang.xutil.resource.ResUtils.getColor +import com.xuexiang.xutil.resource.ResUtils.getStringArray import me.samlss.broccoli.Broccoli -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @Page(name = "远程查短信") class SmsQueryFragment : BaseFragment() { @@ -128,7 +129,7 @@ class SmsQueryFragment : BaseFragment() { delegateAdapter.addAdapter(mAdapter) binding!!.recyclerView.adapter = delegateAdapter - binding!!.tabBar.setTabTitles(ResUtils.getStringArray(R.array.sms_type_option)) + binding!!.tabBar.setTabTitles(getStringArray(R.array.sms_type_option)) binding!!.tabBar.setOnTabClickListener { _, position -> //XToastUtils.toast("点击了$title--$position") smsType = position + 1 @@ -144,7 +145,7 @@ class SmsQueryFragment : BaseFragment() { binding!!.searchView.setOnQueryTextListener(object : MaterialSearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { SnackbarUtils.Indefinite(view, String.format(getString(R.string.search_keyword), query)).info() - .actionColor(ResUtils.getColor(R.color.xui_config_color_white)) + .actionColor(getColor(R.color.xui_config_color_white)) .setAction(getString(R.string.clear)) { keyword = "" loadRemoteData(true) @@ -222,7 +223,7 @@ class SmsQueryFragment : BaseFragment() { requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -237,7 +238,7 @@ class SmsQueryFragment : BaseFragment() { requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -270,7 +271,6 @@ class SmsQueryFragment : BaseFragment() { } val resp: BaseResponse?> = Gson().fromJson(json, object : TypeToken?>>() {}.type) if (resp.code == 200) { - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) pageNum++ if (refresh) { mAdapter!!.refresh(resp.data) @@ -281,11 +281,11 @@ class SmsQueryFragment : BaseFragment() { binding!!.refreshLayout.finishLoadMore() } } else { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + XToastUtils.error(getString(R.string.request_failed) + resp.msg) } } catch (e: Exception) { e.printStackTrace() - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } } }) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsSendFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsSendFragment.kt index 14eecbf8..014ce8e7 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsSendFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsSendFragment.kt @@ -22,7 +22,6 @@ import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xpage.annotation.Page import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.utils.CountDownButtonHelper -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xutil.data.ConvertTools @@ -98,14 +97,14 @@ class SmsSendFragment : BaseFragment(), View.OnCl val phoneNumbers = binding!!.etPhoneNumbers.text.toString() val phoneRegex = getString(R.string.phone_numbers_regex).toRegex() if (!phoneRegex.matches(phoneNumbers)) { - XToastUtils.error(ResUtils.getString(R.string.phone_numbers_error)) + XToastUtils.error(getString(R.string.phone_numbers_error)) return } val msgContent = binding!!.etMsgContent.text.toString() val msgRegex = getString(R.string.msg_content_regex).toRegex() if (!msgRegex.matches(msgContent)) { - XToastUtils.error(ResUtils.getString(R.string.msg_content_error)) + XToastUtils.error(getString(R.string.msg_content_error)) return } @@ -132,7 +131,7 @@ class SmsSendFragment : BaseFragment(), View.OnCl requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -147,7 +146,7 @@ class SmsSendFragment : BaseFragment(), View.OnCl requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -182,13 +181,13 @@ class SmsSendFragment : BaseFragment(), View.OnCl } val resp: BaseResponse = Gson().fromJson(json, object : TypeToken>() {}.type) if (resp.code == 200) { - XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) + XToastUtils.success(getString(R.string.request_succeeded)) } else { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + XToastUtils.error(getString(R.string.request_failed) + resp.msg) } } catch (e: Exception) { e.printStackTrace() - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } mCountDownHelper?.finish() } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/WolSendFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/WolSendFragment.kt index b1378d0a..2ea758a0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/WolSendFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/WolSendFragment.kt @@ -24,13 +24,13 @@ import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xpage.annotation.Page import com.xuexiang.xrouter.utils.TextUtils import com.xuexiang.xui.utils.CountDownButtonHelper -import com.xuexiang.xui.utils.ResUtils 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.data.ConvertTools +import com.xuexiang.xutil.resource.ResUtils.getColors -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @Page(name = "远程WOL") class WolSendFragment : BaseFragment(), View.OnClickListener { @@ -101,7 +101,7 @@ class WolSendFragment : BaseFragment(), View.OnCl .positiveText(R.string.select) .negativeText(R.string.cancel) .neutralText(R.string.clear_history) - .neutralColor(ResUtils.getColors(R.color.red)) + .neutralColor(getColors(R.color.red)) .onNeutral { _: MaterialDialog?, _: DialogAction? -> wolHistory.clear() HttpServerUtils.wolHistory = "" @@ -125,21 +125,21 @@ class WolSendFragment : BaseFragment(), View.OnCl val mac = binding!!.etMac.text.toString() val macRegex = getString(R.string.mac_regex).toRegex() if (!macRegex.matches(mac)) { - XToastUtils.error(ResUtils.getString(R.string.mac_error)) + XToastUtils.error(getString(R.string.mac_error)) return } val ip = binding!!.etIp.text.toString() val ipRegex = getString(R.string.ip_regex).toRegex() if (!TextUtils.isEmpty(ip) && !ipRegex.matches(ip)) { - XToastUtils.error(ResUtils.getString(R.string.ip_error)) + XToastUtils.error(getString(R.string.ip_error)) return } val port = binding!!.etPort.text.toString() val portRegex = getString(R.string.wol_port_regex).toRegex() if (!TextUtils.isEmpty(port) && !portRegex.matches(port)) { - XToastUtils.error(ResUtils.getString(R.string.wol_port_error)) + XToastUtils.error(getString(R.string.wol_port_error)) return } @@ -166,7 +166,7 @@ class WolSendFragment : BaseFragment(), View.OnCl requestMsg = RSACrypt.encryptByPublicKey(requestMsg, publicKey) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -181,7 +181,7 @@ class WolSendFragment : BaseFragment(), View.OnCl requestMsg = ConvertTools.bytes2HexString(encryptCBC) Log.i(TAG, "requestMsg: $requestMsg") } catch (e: Exception) { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + e.message) + XToastUtils.error(getString(R.string.request_failed) + e.message) e.printStackTrace() return } @@ -216,16 +216,16 @@ class WolSendFragment : BaseFragment(), View.OnCl } val resp: BaseResponse = Gson().fromJson(json, object : TypeToken>() {}.type) if (resp.code == 200) { - XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) + XToastUtils.success(getString(R.string.request_succeeded)) //添加到历史记录 wolHistory[mac] = ip HttpServerUtils.wolHistory = Gson().toJson(wolHistory) } else { - XToastUtils.error(ResUtils.getString(R.string.request_failed) + resp.msg) + XToastUtils.error(getString(R.string.request_failed) + resp.msg) } } catch (e: Exception) { e.printStackTrace() - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } mCountDownHelper?.finish() } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/BarkFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/BarkFragment.kt index a4e6e45f..b1abe693 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/BarkFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/BarkFragment.kt @@ -17,8 +17,6 @@ import com.idormy.sms.forwarder.database.viewmodel.SenderViewModel import com.idormy.sms.forwarder.databinding.FragmentSendersBarkBinding import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.setting.BarkSetting -import com.idormy.sms.forwarder.utils.BARK_ENCRYPTION_ALGORITHM_MAP -import com.idormy.sms.forwarder.utils.BARK_LEVEL_MAP import com.idormy.sms.forwarder.utils.CommonUtils import com.idormy.sms.forwarder.utils.EVENT_TOAST_ERROR import com.idormy.sms.forwarder.utils.KEY_SENDER_CLONE @@ -55,6 +53,20 @@ class BarkFragment : BaseFragment(), View.OnClickLi private var mCountDownHelper: CountDownButtonHelper? = null private var barkLevel: String = "active" //通知级别 private var transformation: String = "none" //加密算法 + private val BARK_LEVEL_MAP = mapOf( + "active" to getString(R.string.bark_level_active), + "timeSensitive" to getString(R.string.bark_level_timeSensitive), + "passive" to getString(R.string.bark_level_passive) + ) + private val BARK_ENCRYPTION_ALGORITHM_MAP = mapOf( + "none" to getString(R.string.bark_encryption_algorithm_none), + "AES128/CBC/PKCS7Padding" to "AES128/CBC/PKCS7Padding", + "AES128/ECB/PKCS7Padding" to "AES128/ECB/PKCS7Padding", + "AES192/CBC/PKCS7Padding" to "AES192/CBC/PKCS7Padding", + "AES192/ECB/PKCS7Padding" to "AES192/ECB/PKCS7Padding", + "AES256/CBC/PKCS7Padding" to "AES256/CBC/PKCS7Padding", + "AES256/ECB/PKCS7Padding" to "AES256/ECB/PKCS7Padding", + ) @JvmField @AutoWired(name = KEY_SENDER_ID) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/EmailFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/EmailFragment.kt index ca2b85a0..4c75b035 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/EmailFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/senders/EmailFragment.kt @@ -32,11 +32,11 @@ 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.utils.ResUtils 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.xui.widget.spinner.materialspinner.MaterialSpinner +import com.xuexiang.xutil.resource.ResUtils.getStringArray import io.reactivex.SingleObserver import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -44,7 +44,7 @@ import io.reactivex.schedulers.Schedulers import java.util.Date @Page(name = "Email") -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") class EmailFragment : BaseFragment(), View.OnClickListener { private val TAG: String = EmailFragment::class.java.simpleName @@ -97,7 +97,7 @@ class EmailFragment : BaseFragment(), View.OnClick } }) - val mailTypeArray = ResUtils.getStringArray(R.array.MailType) + val mailTypeArray = getStringArray(R.array.MailType) Log.d(TAG, mailTypeArray.toString()) binding!!.spMailType.setOnItemSelectedListener { _: MaterialSpinner?, position: Int, _: Long, item: Any -> mailType = item.toString() diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/CallReceiver.kt b/app/src/main/java/com/idormy/sms/forwarder/receiver/CallReceiver.kt index 4a6c884c..a4ef9d1a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/CallReceiver.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/CallReceiver.kt @@ -9,21 +9,30 @@ import com.google.gson.Gson import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.entity.CallInfo import com.idormy.sms.forwarder.entity.MsgInfo -import com.idormy.sms.forwarder.utils.CALL_TYPE_MAP import com.idormy.sms.forwarder.utils.PhoneUtils import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.Worker import com.idormy.sms.forwarder.workers.SendWorker import com.xuexiang.xrouter.utils.TextUtils -import com.xuexiang.xui.utils.ResUtils.getString -import java.util.* +import com.xuexiang.xutil.resource.ResUtils.getString +import java.util.Date -@Suppress("DEPRECATION") open class CallReceiver : PhoneStateReceiver() { companion object { private val TAG = CallReceiver::class.java.simpleName + //通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 + private val CALL_TYPE_MAP = mapOf( + //"0" to getString(R.string.unknown_call), + "1" to getString(R.string.incoming_call_ended), + "2" to getString(R.string.outgoing_call_ended), + "3" to getString(R.string.missed_call), + "4" to getString(R.string.incoming_call_received), + "5" to getString(R.string.incoming_call_answered), + "6" to getString(R.string.outgoing_call_started), + ) + //const val ACTION_IN = "android.intent.action.PHONE_STATE" const val ACTION_OUT = "android.intent.action.NEW_OUTGOING_CALL" const val EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER" diff --git a/app/src/main/java/com/idormy/sms/forwarder/server/component/LoggerInterceptor.kt b/app/src/main/java/com/idormy/sms/forwarder/server/component/LoggerInterceptor.kt index 71ce6ed5..8cd05546 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/server/component/LoggerInterceptor.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/server/component/LoggerInterceptor.kt @@ -3,7 +3,7 @@ package com.idormy.sms.forwarder.server.component import android.util.Log import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.utils.HttpServerUtils -import com.xuexiang.xui.utils.ResUtils.getString +import com.xuexiang.xutil.resource.ResUtils.getString import com.yanzhenjie.andserver.annotation.Interceptor import com.yanzhenjie.andserver.error.HttpException import com.yanzhenjie.andserver.framework.HandlerInterceptor @@ -13,7 +13,7 @@ import com.yanzhenjie.andserver.http.HttpMethod import com.yanzhenjie.andserver.http.HttpRequest import com.yanzhenjie.andserver.http.HttpResponse -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @Interceptor class LoggerInterceptor : HandlerInterceptor { diff --git a/app/src/main/java/com/idormy/sms/forwarder/server/controller/CloneController.kt b/app/src/main/java/com/idormy/sms/forwarder/server/controller/CloneController.kt index 9100d147..cbc3c20f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/server/controller/CloneController.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/server/controller/CloneController.kt @@ -5,10 +5,10 @@ import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.entity.CloneInfo import com.idormy.sms.forwarder.server.model.BaseRequest import com.idormy.sms.forwarder.utils.HttpServerUtils -import com.xuexiang.xui.utils.ResUtils.getString +import com.xuexiang.xutil.resource.ResUtils.getString import com.yanzhenjie.andserver.annotation.* -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @RestController @RequestMapping(path = ["/clone"]) class CloneController { diff --git a/app/src/main/java/com/idormy/sms/forwarder/server/controller/SmsController.kt b/app/src/main/java/com/idormy/sms/forwarder/server/controller/SmsController.kt index a5b04fbd..c587d099 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/server/controller/SmsController.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/server/controller/SmsController.kt @@ -11,11 +11,11 @@ import com.idormy.sms.forwarder.server.model.BaseRequest import com.idormy.sms.forwarder.server.model.SmsQueryData import com.idormy.sms.forwarder.server.model.SmsSendData import com.idormy.sms.forwarder.utils.PhoneUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xutil.XUtil +import com.xuexiang.xutil.resource.ResUtils.getString import com.yanzhenjie.andserver.annotation.* -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") @RestController @RequestMapping(path = ["/sms"]) class SmsController { @@ -41,7 +41,7 @@ class SmsController { val mSubscriptionId: Int = App.SimInfoList[simSlotIndex]?.mSubscriptionId ?: -1 if (ActivityCompat.checkSelfPermission(XUtil.getContext(), Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { - return ResUtils.getString(R.string.no_sms_sending_permission) + return getString(R.string.no_sms_sending_permission) } return PhoneUtils.sendSms(mSubscriptionId, smsSendData.phoneNumbers, smsSendData.msgContent) ?: "success" diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/BatteryUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/BatteryUtils.kt index 55035086..083da92b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/BatteryUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/BatteryUtils.kt @@ -4,9 +4,9 @@ import android.content.Intent import android.os.BatteryManager import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.entity.BatteryInfo -import com.xuexiang.xui.utils.ResUtils.getString +import com.xuexiang.xutil.resource.ResUtils.getString -@Suppress("DEPRECATION", "MemberVisibilityCanBePrivate") +@Suppress("MemberVisibilityCanBePrivate") object BatteryUtils { //private const val TAG = "BatteryUtils" diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtils.kt index 6bb4d65d..7ded6364 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtils.kt @@ -27,7 +27,6 @@ import com.idormy.sms.forwarder.service.NotificationService import com.xuexiang.xpage.base.XPageFragment import com.xuexiang.xpage.core.PageOption import com.xuexiang.xui.utils.ColorUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.dialog.DialogLoader import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog @@ -35,6 +34,7 @@ import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog.SingleButton import com.xuexiang.xui.widget.imageview.preview.PreviewBuilder import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.common.StringUtils +import com.xuexiang.xutil.resource.ResUtils.getString import java.net.Inet4Address import java.net.Inet6Address import java.net.NetworkInterface @@ -70,19 +70,19 @@ class CommonUtils private constructor() { }.negativeText(R.string.lab_disagree).onNegative { dialog, _ -> dialog.dismiss() DialogLoader.getInstance().showConfirmDialog( - context, ResUtils.getString(R.string.title_reminder), String.format( - ResUtils.getString(R.string.content_privacy_explain_again), ResUtils.getString(R.string.app_name) - ), ResUtils.getString(R.string.lab_look_again), { dialog, _ -> + context, getString(R.string.title_reminder), String.format( + getString(R.string.content_privacy_explain_again), getString(R.string.app_name) + ), getString(R.string.lab_look_again), { dialog, _ -> dialog.dismiss() showPrivacyDialog(context, submitListener) - }, ResUtils.getString(R.string.lab_still_disagree) + }, getString(R.string.lab_still_disagree) ) { dialog, _ -> dialog.dismiss() DialogLoader.getInstance().showConfirmDialog( - context, ResUtils.getString(R.string.content_think_about_it_again), ResUtils.getString(R.string.lab_look_again), { dialog, _ -> + context, getString(R.string.content_think_about_it_again), getString(R.string.lab_look_again), { dialog, _ -> dialog.dismiss() showPrivacyDialog(context, submitListener) - }, ResUtils.getString(R.string.lab_exit_app) + }, getString(R.string.lab_exit_app) ) { dialog, _ -> dialog.dismiss() XUtil.exitApp() @@ -100,7 +100,7 @@ class CommonUtils private constructor() { * @return 隐私政策说明 */ private fun getPrivacyContent(context: Context): SpannableStringBuilder { - return SpannableStringBuilder().append(" ").append(ResUtils.getString(R.string.privacy_content_1)).append(" ").append(ResUtils.getString(R.string.app_name)).append("!\n").append(" ").append(ResUtils.getString(R.string.privacy_content_2)).append(" ").append(ResUtils.getString(R.string.privacy_content_3)).append(getPrivacyLink(context, PRIVACY_URL)).append(ResUtils.getString(R.string.privacy_content_4)).append(" ").append(ResUtils.getString(R.string.privacy_content_5)).append(getPrivacyLink(context, PRIVACY_URL)).append(ResUtils.getString(R.string.privacy_content_6)).append(" ").append(ResUtils.getString(R.string.privacy_content_7)) + return SpannableStringBuilder().append(" ").append(getString(R.string.privacy_content_1)).append(" ").append(getString(R.string.app_name)).append("!\n").append(" ").append(getString(R.string.privacy_content_2)).append(" ").append(getString(R.string.privacy_content_3)).append(getPrivacyLink(context, PRIVACY_URL)).append(getString(R.string.privacy_content_4)).append(" ").append(getString(R.string.privacy_content_5)).append(getPrivacyLink(context, PRIVACY_URL)).append(getString(R.string.privacy_content_6)).append(" ").append(getString(R.string.privacy_content_7)) } /** @@ -110,7 +110,7 @@ class CommonUtils private constructor() { @Suppress("SameParameterValue") private fun getPrivacyLink(context: Context, privacyUrl: String): SpannableString { val privacyName = String.format( - ResUtils.getString(R.string.lab_privacy_name), ResUtils.getString(R.string.app_name) + getString(R.string.lab_privacy_name), getString(R.string.app_name) ) val spannableString = SpannableString(privacyName) spannableString.setSpan(object : ClickableSpan() { @@ -143,7 +143,7 @@ class CommonUtils private constructor() { @JvmStatic fun gotoProtocol(fragment: XPageFragment?, isPrivacy: Boolean, isImmersive: Boolean) { PageOption.to(ServiceProtocolFragment::class.java).putString( - ServiceProtocolFragment.KEY_PROTOCOL_TITLE, if (isPrivacy) ResUtils.getString(R.string.title_privacy_protocol) else ResUtils.getString( + ServiceProtocolFragment.KEY_PROTOCOL_TITLE, if (isPrivacy) getString(R.string.title_privacy_protocol) else getString( R.string.title_user_protocol ) ).putBoolean(ServiceProtocolFragment.KEY_IS_IMMERSIVE, isImmersive).open(fragment!!) 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 e67e3d0a..d52300f2 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 @@ -1,18 +1,13 @@ -@file:Suppress("unused", "DEPRECATION") - package com.idormy.sms.forwarder.utils -import com.idormy.sms.forwarder.R -import com.xuexiang.xpage.enums.CoreAnim -import com.xuexiang.xpage.model.PageInfo -import com.xuexiang.xui.utils.ResUtils.getString - object Worker { const val sendMsgInfo = "send_msg_info" - const val sendLogId = "send_log_id" - const val sendSbnId = "send_sbn_id" + + //const val sendLogId = "send_log_id" + //const val sendSbnId = "send_sbn_id" const val updateLogs = "update_logs" - const val ruleId = "rule_id" + + //const val ruleId = "rule_id" const val rule = "rule" const val senderIndex = "sender_index" const val msgId = "msg_id" @@ -30,7 +25,6 @@ object TaskWorker { //初始化相关 const val AUTO_CHECK_UPDATE = "auto_check_update" -const val IS_FIRST_OPEN_KEY = "is_first_open_key" const val IS_AGREE_PRIVACY_KEY = "is_agree_privacy_key" //数据库 @@ -95,9 +89,6 @@ const val CACTUS_LAST_TIMER = "cactus_last_timer" const val CACTUS_DATE = "cactus_date" const val CACTUS_END_DATE = "cactus_end_date" -//OkHttp 请求超时时间 -const val REQUEST_TIMEOUT_SECONDS = 5 - //规则相关 const val STATUS_ON = 1 const val STATUS_OFF = 0 @@ -125,75 +116,6 @@ const val SENDER_LOGIC_ALL = "ALL" const val SENDER_LOGIC_UNTIL_FAIL = "UntilFail" const val SENDER_LOGIC_UNTIL_SUCCESS = "UntilSuccess" const val SENDER_LOGIC_RETRY = "Retry" -val TYPE_MAP = object : HashMap() { - init { - put("sms", getString(R.string.rule_sms)) - put("call", getString(R.string.rule_call)) - put("app", getString(R.string.rule_app)) - } -} -val FILED_MAP = object : HashMap() { - init { - put("transpond_all", getString(R.string.rule_transpond_all)) - put("phone_num", getString(R.string.rule_phone_num)) - put("msg_content", getString(R.string.rule_msg_content)) - put("multi_match", getString(R.string.rule_multi_match)) - put("package_name", getString(R.string.rule_package_name)) - put("inform_content", getString(R.string.rule_inform_content)) - put("call_type", getString(R.string.rule_call_type)) - put("uid", getString(R.string.rule_uid)) - } -} -val CHECK_MAP = object : HashMap() { - init { - put("is", getString(R.string.rule_is)) - put("notis", getString(R.string.rule_notis)) - put("contain", getString(R.string.rule_contain)) - put("startwith", getString(R.string.rule_startwith)) - put("endwith", getString(R.string.rule_endwith)) - put("notcontain", getString(R.string.rule_notcontain)) - put("regex", getString(R.string.rule_regex)) - } -} -val SIM_SLOT_MAP = object : HashMap() { - init { - put("ALL", getString(R.string.rule_all)) - put("SIM1", "SIM1") - put("SIM2", "SIM2") - } -} -val FORWARD_STATUS_MAP = object : HashMap() { - init { - put(0, getString(R.string.failed)) - put(1, getString(R.string.processing)) - put(2, getString(R.string.success)) - } -} -val BARK_LEVEL_MAP = mapOf( - "active" to getString(R.string.bark_level_active), - "timeSensitive" to getString(R.string.bark_level_timeSensitive), - "passive" to getString(R.string.bark_level_passive) -) -val BARK_ENCRYPTION_ALGORITHM_MAP = mapOf( - "none" to getString(R.string.bark_encryption_algorithm_none), - "AES128/CBC/PKCS7Padding" to "AES128/CBC/PKCS7Padding", - "AES128/ECB/PKCS7Padding" to "AES128/ECB/PKCS7Padding", - "AES192/CBC/PKCS7Padding" to "AES192/CBC/PKCS7Padding", - "AES192/ECB/PKCS7Padding" to "AES192/ECB/PKCS7Padding", - "AES256/CBC/PKCS7Padding" to "AES256/CBC/PKCS7Padding", - "AES256/ECB/PKCS7Padding" to "AES256/ECB/PKCS7Padding", -) - -//通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 -val CALL_TYPE_MAP = mapOf( - //"0" to getString(R.string.unknown_call), - "1" to getString(R.string.incoming_call_ended), - "2" to getString(R.string.outgoing_call_ended), - "3" to getString(R.string.missed_call), - "4" to getString(R.string.incoming_call_received), - "5" to getString(R.string.incoming_call_answered), - "6" to getString(R.string.outgoing_call_started), -) //发送通道 const val TYPE_DINGTALK_GROUP_ROBOT = 0 @@ -212,120 +134,6 @@ const val TYPE_DINGTALK_INNER_ROBOT = 12 const val TYPE_FEISHU_APP = 13 const val TYPE_URL_SCHEME = 14 const val TYPE_SOCKET = 15 -var SENDER_FRAGMENT_LIST = listOf( - PageInfo( - getString(R.string.dingtalk_robot), - "com.idormy.sms.forwarder.fragment.senders.DingtalkGroupRobotFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_dingtalk - ), - PageInfo( - getString(R.string.email), - "com.idormy.sms.forwarder.fragment.senders.EmailFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_email - ), - PageInfo( - getString(R.string.bark), - "com.idormy.sms.forwarder.fragment.senders.BarkFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_bark - ), - PageInfo( - getString(R.string.webhook), - "com.idormy.sms.forwarder.fragment.senders.WebhookFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_webhook - ), - PageInfo( - getString(R.string.wework_robot), - "com.idormy.sms.forwarder.fragment.senders.WeworkRobotFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_wework_robot - ), - PageInfo( - getString(R.string.wework_agent), - "com.idormy.sms.forwarder.fragment.senders.WeworkAgentFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_wework_agent - ), - PageInfo( - getString(R.string.server_chan), - "com.idormy.sms.forwarder.fragment.senders.ServerchanFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_serverchan - ), - PageInfo( - getString(R.string.telegram), - "com.idormy.sms.forwarder.fragment.senders.TelegramFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_telegram - ), - PageInfo( - getString(R.string.sms_menu), - "com.idormy.sms.forwarder.fragment.senders.SmsFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_sms - ), - PageInfo( - getString(R.string.feishu), - "com.idormy.sms.forwarder.fragment.senders.FeishuFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_feishu - ), - PageInfo( - getString(R.string.pushplus), - "com.idormy.sms.forwarder.fragment.senders.PushplusFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_pushplus - ), - PageInfo( - getString(R.string.gotify), - "com.idormy.sms.forwarder.fragment.senders.GotifyFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_gotify - ), - PageInfo( - getString(R.string.dingtalk_inner_robot), - "com.idormy.sms.forwarder.fragment.senders.DingtalkInnerRobotFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_dingtalk_inner - ), - PageInfo( - getString(R.string.feishu_app), - "com.idormy.sms.forwarder.fragment.senders.FeishuAppFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_feishu_app - ), - PageInfo( - getString(R.string.url_scheme), - "com.idormy.sms.forwarder.fragment.senders.UrlSchemeFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_url_scheme - ), - PageInfo( - getString(R.string.socket), - "com.idormy.sms.forwarder.fragment.senders.SocketFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_socket - ), -) //前台服务 const val FRONT_NOTIFY_ID = 0x1010 @@ -343,15 +151,6 @@ const val EVENT_FRPC_RUNNING_SUCCESS = "EVENT_FRPC_RUNNING_SUCCESS" const val INTENT_FRPC_EDIT_FILE = "INTENT_FRPC_EDIT_FILE" const val INTENT_FRPC_APPLY_FILE = "INTENT_FRPC_APPLY_FILE" -//来电监听 -const val ACTION_CALL_IN = "android.intent.action.PHONE_STATE" -const val ACTION_CALL_OUT = "android.intent.action.NEW_OUTGOING_CALL" -const val EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER" - -//Markdown 查看页面 -const val KEY_TITLE = "key_title" -const val KEY_URL = "key_url" - //吐司监听 const val EVENT_TOAST_SUCCESS = "key_toast_success" const val EVENT_TOAST_ERROR = "key_toast_error" @@ -380,17 +179,10 @@ const val EVENT_KEY_PHONE_NUMBERS = "EVENT_KEY_PHONE_NUMBERS" const val KEY_UPDATE_URL = "https://xupdate.ppps.cn/update/checkVersion" //HttpServer相关 -const val ENABLE_HTTP_SERVER = "enable_http_server" const val HTTP_SERVER_PORT = 5000 const val HTTP_SERVER_TIME_OUT = 10 -const val HTTP_SERVER_NOTIFY_ID = 0x1011 -const val HTTP_SERVER_CHANNEL_ID = "http_server_notification_channel" -const val HTTP_SERVER_CHANNEL_NAME = "Http-Server Service" -const val START_ACTION = "start" -const val STOP_ACTION = "stop" const val HTTP_SUCCESS_CODE: Int = 200 const val HTTP_FAILURE_CODE: Int = 500 -const val SP_ENABLE_SERVER = "enable_server" const val SP_ENABLE_SERVER_AUTORUN = "enable_server_autorun" const val SP_SERVER_SAFETY_MEASURES = "server_safety_measures" const val SP_SERVER_SIGN_KEY = "server_sign_key" @@ -416,71 +208,6 @@ const val SP_SERVER_CONFIG = "server_config" const val SP_CLIENT_SAFETY_MEASURES = "client_safety_measures" const val SP_CLIENT_SIGN_KEY = "client_sign_key" -var CLIENT_FRAGMENT_LIST = listOf( - PageInfo( - getString(R.string.api_clone), - "com.idormy.sms.forwarder.fragment.client.CloneFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_api_clone - ), - PageInfo( - getString(R.string.api_sms_query), - "com.idormy.sms.forwarder.fragment.client.SmsQueryFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_api_sms_query - ), - PageInfo( - getString(R.string.api_sms_send), - "com.idormy.sms.forwarder.fragment.client.SmsSendFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_api_sms_send - ), - PageInfo( - getString(R.string.api_call_query), - "com.idormy.sms.forwarder.fragment.client.CallQueryFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_api_call_query - ), - PageInfo( - getString(R.string.api_contact_query), - "com.idormy.sms.forwarder.fragment.client.ContactQueryFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_api_contact_query - ), - PageInfo( - getString(R.string.api_contact_add), - "com.idormy.sms.forwarder.fragment.client.ContactAddFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_api_contact_add - ), - PageInfo( - getString(R.string.api_wol), - "com.idormy.sms.forwarder.fragment.client.WolSendFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_api_wol - ), - PageInfo( - getString(R.string.api_location), - "com.idormy.sms.forwarder.fragment.client.LocationFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_api_location - ), - PageInfo( - getString(R.string.api_battery_query), - "com.idormy.sms.forwarder.fragment.client.BatteryQueryFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.icon_api_battery_query - ), -) //自动任务 const val MAX_SETTING_NUM = 5 //最大条件/动作设置条数 @@ -505,100 +232,12 @@ const val TASK_CONDITION_SIM = 1004 const val TASK_CONDITION_BATTERY = 1005 const val TASK_CONDITION_CHARGE = 1006 const val TASK_CONDITION_LOCK_SCREEN = 1007 -var TASK_CONDITION_FRAGMENT_LIST = listOf( - PageInfo( - getString(R.string.task_cron), - "com.idormy.sms.forwarder.fragment.condition.CronFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_custom_time, - ), - PageInfo( - getString(R.string.task_to_address), - "com.idormy.sms.forwarder.fragment.condition.ToAddressFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_to_address, - ), - PageInfo( - getString(R.string.task_leave_address), - "com.idormy.sms.forwarder.fragment.condition.LeaveAddressFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_leave_address, - ), - PageInfo( - getString(R.string.task_network), - "com.idormy.sms.forwarder.fragment.condition.NetworkFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_network - ), - PageInfo( - getString(R.string.task_sim), - "com.idormy.sms.forwarder.fragment.condition.SimFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_sim - ), - PageInfo( - getString(R.string.task_battery), - "com.idormy.sms.forwarder.fragment.condition.BatteryFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_battery - ), - PageInfo( - getString(R.string.task_charge), - "com.idormy.sms.forwarder.fragment.condition.ChargeFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_charge - ), - PageInfo( - getString(R.string.task_lock_screen), - "com.idormy.sms.forwarder.fragment.condition.LockScreenFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_lock_screen - ), -) //注意:TASK_ACTION_XXX 枚举值 等于 TASK_ACTION_FRAGMENT_LIST 索引加上 KEY_BACK_CODE_ACTION,不可改变 const val TASK_ACTION_SENDSMS = 2000 const val TASK_ACTION_NOTIFICATION = 2001 const val TASK_ACTION_FRPC = 2002 const val TASK_ACTION_HTTPSERVER = 2003 -var TASK_ACTION_FRAGMENT_LIST = listOf( - PageInfo( - getString(R.string.task_sendsms), - "com.idormy.sms.forwarder.fragment.action.SendSmsFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_sms - ), - PageInfo( - getString(R.string.task_notification), - "com.idormy.sms.forwarder.fragment.action.NotificationFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_sender, - ), - PageInfo( - getString(R.string.task_frpc), - "com.idormy.sms.forwarder.fragment.action.FrpcFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_frpc - ), - PageInfo( - getString(R.string.task_server), - "com.idormy.sms.forwarder.fragment.action.HttpServerFragment", - "{\"\":\"\"}", - CoreAnim.slide, - R.drawable.auto_task_icon_http_server - ), -) const val SP_BATTERY_INFO = "battery_info" const val SP_BATTERY_STATUS = "battery_status" diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt index 7a4b4f99..e8f6a49f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/HttpServerUtils.kt @@ -10,8 +10,8 @@ import com.idormy.sms.forwarder.core.Core import com.idormy.sms.forwarder.entity.CloneInfo import com.idormy.sms.forwarder.entity.LocationInfo import com.idormy.sms.forwarder.server.model.BaseRequest -import com.xuexiang.xui.utils.ResUtils.getString import com.xuexiang.xutil.app.AppUtils +import com.xuexiang.xutil.resource.ResUtils.getString import com.yanzhenjie.andserver.error.HttpException import java.net.URLEncoder import java.nio.charset.StandardCharsets @@ -21,7 +21,6 @@ import javax.crypto.spec.SecretKeySpec /** * HttpServer工具类 */ -@Suppress("DEPRECATION") class HttpServerUtils private constructor() { companion object { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.kt index 30d32c3a..cbb2dc92 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.kt @@ -28,7 +28,7 @@ import com.idormy.sms.forwarder.entity.SmsInfo import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.app.IntentUtils import com.xuexiang.xutil.data.DateUtils -import com.xuexiang.xutil.resource.ResUtils +import com.xuexiang.xutil.resource.ResUtils.getString import java.text.SimpleDateFormat import java.util.* @@ -381,31 +381,31 @@ class PhoneUtils private constructor() { //获取通话记录转发内容 fun getCallMsg(callInfo: CallInfo): String { val sb = StringBuilder() - sb.append(ResUtils.getString(R.string.contact)).append(callInfo.name).append("\n") - if (!TextUtils.isEmpty(callInfo.viaNumber)) sb.append(ResUtils.getString(R.string.via_number)).append(callInfo.viaNumber).append("\n") - if (callInfo.dateLong > 0L) sb.append(ResUtils.getString(R.string.call_date)).append( + sb.append(getString(R.string.contact)).append(callInfo.name).append("\n") + if (!TextUtils.isEmpty(callInfo.viaNumber)) sb.append(getString(R.string.via_number)).append(callInfo.viaNumber).append("\n") + if (callInfo.dateLong > 0L) sb.append(getString(R.string.call_date)).append( DateUtils.millis2String( callInfo.dateLong, SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) ) ).append("\n") if (callInfo.duration > 0) { if (callInfo.type == 3) { - sb.append(ResUtils.getString(R.string.ring_duration)) + sb.append(getString(R.string.ring_duration)) } else { - sb.append(ResUtils.getString(R.string.call_duration)) + sb.append(getString(R.string.call_duration)) } sb.append(callInfo.duration).append("s\n") } - sb.append(ResUtils.getString(R.string.mandatory_type)) + sb.append(getString(R.string.mandatory_type)) //通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 when (callInfo.type) { - 1 -> sb.append(ResUtils.getString(R.string.incoming_call_ended)) - 2 -> sb.append(ResUtils.getString(R.string.outgoing_call_ended)) - 3 -> sb.append(ResUtils.getString(R.string.missed_call)) - 4 -> sb.append(ResUtils.getString(R.string.incoming_call_received)) - 5 -> sb.append(ResUtils.getString(R.string.incoming_call_answered)) - 6 -> sb.append(ResUtils.getString(R.string.outgoing_call_started)) - else -> sb.append(ResUtils.getString(R.string.unknown_call)) + 1 -> sb.append(getString(R.string.incoming_call_ended)) + 2 -> sb.append(getString(R.string.outgoing_call_ended)) + 3 -> sb.append(getString(R.string.missed_call)) + 4 -> sb.append(getString(R.string.incoming_call_received)) + 5 -> sb.append(getString(R.string.incoming_call_answered)) + 6 -> sb.append(getString(R.string.outgoing_call_started)) + else -> sb.append(getString(R.string.unknown_call)) } return sb.toString() } @@ -477,7 +477,7 @@ class PhoneUtils private constructor() { val phoneNumber = cursor.getString(indexAddress) // 根据手机号码查询用户名 val contacts = getContactByNumber(phoneNumber) - smsInfo.name = if (contacts.isNotEmpty()) contacts[0].name else ResUtils.getString(R.string.unknown_number) + smsInfo.name = if (contacts.isNotEmpty()) contacts[0].name else getString(R.string.unknown_number) // 联系人号码 smsInfo.number = phoneNumber // 短信内容 diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.kt index ef7835e6..146fb8b1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLine.kt @@ -3,11 +3,11 @@ package com.idormy.sms.forwarder.utils import android.util.Log import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.entity.MsgInfo -import com.xuexiang.xui.utils.ResUtils.getString +import com.xuexiang.xutil.resource.ResUtils.getString import java.util.regex.Pattern import java.util.regex.PatternSyntaxException -@Suppress("unused", "DEPRECATION") +@Suppress("unused") class RuleLine(line: String, lineNum: Int, beforeRuleLine: RuleLine?) { companion object { val CONJUNCTION_AND: String = getString(R.string.CONJUNCTION_AND) diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.kt index 23e2b2ed..4b29a81e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/RuleLineUtils.kt @@ -1,11 +1,9 @@ -@file:Suppress("DEPRECATION") - package com.idormy.sms.forwarder.utils import android.util.Log import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.entity.MsgInfo -import com.xuexiang.xui.utils.ResUtils.getString +import com.xuexiang.xutil.resource.ResUtils.getString import java.util.* @Suppress("unused") diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SendUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/SendUtils.kt index 340f9939..a6051933 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SendUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SendUtils.kt @@ -18,8 +18,8 @@ import com.idormy.sms.forwarder.workers.SendLogicWorker import com.idormy.sms.forwarder.workers.SendWorker import com.idormy.sms.forwarder.workers.UpdateLogsWorker import com.jeremyliao.liveeventbus.LiveEventBus -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xutil.XUtil +import com.xuexiang.xutil.resource.ResUtils.getString import java.text.ParsePosition import java.text.SimpleDateFormat import java.util.Calendar @@ -70,7 +70,7 @@ object SendUtils { val sender = rule.senderList[senderIndex] if (sender.status != 1) { Log.d(TAG, "sender = $sender is disabled") - updateLogs(logId, 0, ResUtils.getString(R.string.sender_disabled)) + updateLogs(logId, 0, getString(R.string.sender_disabled)) senderLogic(0, msgInfo, rule, senderIndex, msgId) return } @@ -98,7 +98,7 @@ object SendUtils { val now = System.currentTimeMillis() if (periodStart != null && periodEnd != null && now in periodStart..periodEnd) { Log.d(TAG, "免打扰(禁用转发)时间段") - updateLogs(logId, 0, ResUtils.getString(R.string.silent_time_period)) + updateLogs(logId, 0, getString(R.string.silent_time_period)) senderLogic(0, msgInfo, rule, senderIndex, msgId) return } @@ -185,7 +185,7 @@ object SendUtils { } else -> { - updateLogs(logId, 0, ResUtils.getString(R.string.unknown_sender)) + updateLogs(logId, 0, getString(R.string.unknown_sender)) senderLogic(0, msgInfo, rule, senderIndex, msgId) } } @@ -223,9 +223,9 @@ object SendUtils { //测试的没有记录ID,这里取巧了 if (logId == null || logId == 0L) { if (status == 2) { - LiveEventBus.get(EVENT_TOAST_SUCCESS, String::class.java).post(ResUtils.getString(R.string.request_succeeded)) + LiveEventBus.get(EVENT_TOAST_SUCCESS, String::class.java).post(getString(R.string.request_succeeded)) } else { - LiveEventBus.get(EVENT_TOAST_ERROR, String::class.java).post(ResUtils.getString(R.string.request_failed) + response) + LiveEventBus.get(EVENT_TOAST_ERROR, String::class.java).post(getString(R.string.request_failed) + response) } return } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt index 30252a8e..483f5031 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt @@ -2,9 +2,8 @@ package com.idormy.sms.forwarder.utils import android.location.Criteria import com.idormy.sms.forwarder.R -import com.xuexiang.xui.utils.ResUtils.getString +import com.xuexiang.xutil.resource.ResUtils.getString -@Suppress("DEPRECATION") class SettingUtils private constructor() { companion object { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/DingtalkInnerRobotUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/DingtalkInnerRobotUtils.kt index 6273f11e..bf372fab 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/DingtalkInnerRobotUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/DingtalkInnerRobotUtils.kt @@ -15,8 +15,8 @@ import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.cache.model.CacheMode import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.exception.ApiException -import com.xuexiang.xui.utils.ResUtils.getString import com.xuexiang.xutil.net.NetworkUtils +import com.xuexiang.xutil.resource.ResUtils.getString import okhttp3.Credentials import okhttp3.Response import okhttp3.Route @@ -26,7 +26,6 @@ import java.net.PasswordAuthentication import java.net.Proxy //钉钉企业内机器人 -@Suppress("DEPRECATION") class DingtalkInnerRobotUtils private constructor() { companion object { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt index d4a21c41..72823f08 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/EmailUtils.kt @@ -9,9 +9,8 @@ import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.mail.Mail import com.idormy.sms.forwarder.utils.mail.MailSender -import com.xuexiang.xui.utils.ResUtils +import com.xuexiang.xutil.resource.ResUtils.getString -@Suppress("DEPRECATION") class EmailUtils { companion object { @@ -154,7 +153,7 @@ class EmailUtils { } override fun onSuccess() { - SendUtils.updateLogs(logId, 2, ResUtils.getString(R.string.request_succeeded)) + SendUtils.updateLogs(logId, 2, getString(R.string.request_succeeded)) SendUtils.senderLogic(2, msgInfo, rule, senderIndex, msgId) } }) diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/FeishuAppUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/FeishuAppUtils.kt index d2cab056..ad3d0d7f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/FeishuAppUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/FeishuAppUtils.kt @@ -15,10 +15,9 @@ import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.cache.model.CacheMode import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.exception.ApiException -import com.xuexiang.xui.utils.ResUtils.getString +import com.xuexiang.xutil.resource.ResUtils.getString //飞书企业应用 -@Suppress("DEPRECATION") class FeishuAppUtils private constructor() { companion object { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/PushplusUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/PushplusUtils.kt index 152ebe4f..f2a505dc 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/PushplusUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/PushplusUtils.kt @@ -14,7 +14,7 @@ import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.cache.model.CacheMode import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.exception.ApiException -import com.xuexiang.xui.utils.ResUtils +import com.xuexiang.xutil.resource.ResUtils.getString @Suppress("DEPRECATION") class PushplusUtils private constructor() { @@ -52,7 +52,7 @@ class PushplusUtils private constructor() { if (!TextUtils.isEmpty(setting.template)) msgMap["template"] = setting.template.toString() if (!TextUtils.isEmpty(setting.topic)) msgMap["topic"] = setting.topic.toString() - if (setting.website == ResUtils.getString(R.string.pushplus_plus)) { + if (setting.website == getString(R.string.pushplus_plus)) { if (!TextUtils.isEmpty(setting.channel)) msgMap["channel"] = setting.channel.toString() if (!TextUtils.isEmpty(setting.webhook)) msgMap["webhook"] = setting.webhook.toString() if (!TextUtils.isEmpty(setting.callbackUrl)) msgMap["callbackUrl"] = setting.callbackUrl.toString() diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SmsUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SmsUtils.kt index c0862b71..78939e50 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SmsUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SmsUtils.kt @@ -12,9 +12,9 @@ import com.idormy.sms.forwarder.entity.setting.SmsSetting import com.idormy.sms.forwarder.utils.PhoneUtils import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SettingUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.net.NetworkUtils +import com.xuexiang.xutil.resource.ResUtils.getString @Suppress("DEPRECATION") class SmsUtils { @@ -32,13 +32,13 @@ class SmsUtils { ) { //仅当无网络时启用 && 判断是否真实有网络 if (setting.onlyNoNetwork == true && NetworkUtils.isHaveInternet() && NetworkUtils.isAvailableByPing()) { - SendUtils.updateLogs(logId, 0, ResUtils.getString(R.string.OnlyNoNetwork)) + SendUtils.updateLogs(logId, 0, getString(R.string.OnlyNoNetwork)) SendUtils.senderLogic(0, msgInfo, rule, senderIndex, msgId) return } if (ActivityCompat.checkSelfPermission(XUtil.getContext(), Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { - SendUtils.updateLogs(logId, 0, ResUtils.getString(R.string.no_sms_sending_permission)) + SendUtils.updateLogs(logId, 0, getString(R.string.no_sms_sending_permission)) SendUtils.senderLogic(0, msgInfo, rule, senderIndex, msgId) return } @@ -59,13 +59,13 @@ class SmsUtils { Log.d(TAG, App.SimInfoList.toString()) //替换 {{来源号码}} 标签 - val mobiles = setting.mobiles.replace(ResUtils.getString(R.string.tag_from), msgInfo.from) + val mobiles = setting.mobiles.replace(getString(R.string.tag_from), msgInfo.from) //TODO:取不到卡槽信息时,采用默认卡槽发送 val mSubscriptionId: Int = App.SimInfoList[simSlotIndex]?.mSubscriptionId ?: -1 val res: String? = PhoneUtils.sendSms(mSubscriptionId, mobiles, content) if (res == null) { - SendUtils.updateLogs(logId, 2, ResUtils.getString(R.string.request_succeeded)) + SendUtils.updateLogs(logId, 2, getString(R.string.request_succeeded)) SendUtils.senderLogic(2, msgInfo, rule, senderIndex, msgId) } else { SendUtils.updateLogs(logId, 0, res) diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt index dcf65a76..557467d9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt @@ -16,8 +16,8 @@ import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.cache.model.CacheMode import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.exception.ApiException -import com.xuexiang.xui.utils.ResUtils.getString import com.xuexiang.xutil.net.NetworkUtils +import com.xuexiang.xutil.resource.ResUtils.getString import okhttp3.Credentials import okhttp3.Response import okhttp3.Route @@ -26,7 +26,6 @@ import java.net.InetSocketAddress import java.net.PasswordAuthentication import java.net.Proxy -@Suppress("DEPRECATION") class WeworkAgentUtils private constructor() { companion object { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/update/CustomUpdateFailureListener.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/update/CustomUpdateFailureListener.kt index e79ef0f0..848c845c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/update/CustomUpdateFailureListener.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/update/CustomUpdateFailureListener.kt @@ -3,9 +3,9 @@ package com.idormy.sms.forwarder.utils.update import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.update.UpdateTipDialog.Companion.show -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xupdate.entity.UpdateError import com.xuexiang.xupdate.listener.OnUpdateFailureListener +import com.xuexiang.xutil.resource.ResUtils.getString /** * 自定义版本更新提示 @@ -28,13 +28,13 @@ class CustomUpdateFailureListener @JvmOverloads constructor( override fun onFailure(error: UpdateError) { if (mNeedErrorTip) { if (error.detailMsg.contains("{\"code\":-1,\"msg\":null,\"data\":null}")) { - XToastUtils.success(ResUtils.getString(R.string.no_new_version)) + XToastUtils.success(getString(R.string.no_new_version)) } else { XToastUtils.error(error) } } if (error.code == UpdateError.ERROR.DOWNLOAD_FAILED) { - show(String.format(ResUtils.getString(R.string.download_failed_switch_download_url), UpdateTipDialog.DOWNLOAD_TYPE_NAME)) + show(String.format(getString(R.string.download_failed_switch_download_url), UpdateTipDialog.DOWNLOAD_TYPE_NAME)) } } } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/update/UpdateTipDialog.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/update/UpdateTipDialog.kt index 9e84ac59..32ac3428 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/update/UpdateTipDialog.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/update/UpdateTipDialog.kt @@ -7,7 +7,6 @@ import android.text.TextUtils import androidx.appcompat.app.AppCompatActivity import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.utils.CommonUtils.Companion.goWeb -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.dialog.DialogLoader import com.xuexiang.xupdate.XUpdate @@ -17,19 +16,18 @@ import com.xuexiang.xupdate.XUpdate * @author xuexiang * @since 2019-06-15 00:06 */ -@Suppress("DEPRECATION") class UpdateTipDialog : AppCompatActivity(), DialogInterface.OnDismissListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) var content = intent.getStringExtra(KEY_CONTENT) if (TextUtils.isEmpty(content)) { - content = String.format(ResUtils.getString(R.string.download_slow_switch_download_url), DOWNLOAD_TYPE_NAME) + content = String.format(getString(R.string.download_slow_switch_download_url), DOWNLOAD_TYPE_NAME) } DialogLoader.getInstance() - .showConfirmDialog(this, content, ResUtils.getString(R.string.yes), { dialog: DialogInterface, _: Int -> + .showConfirmDialog(this, content, getString(R.string.yes), { dialog: DialogInterface, _: Int -> dialog.dismiss() goWeb(this@UpdateTipDialog, DOWNLOAD_URL) - }, ResUtils.getString(R.string.no)) + }, getString(R.string.no)) .setOnDismissListener(this) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/update/XHttpUpdateHttpServiceImpl.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/update/XHttpUpdateHttpServiceImpl.kt index c246682f..43b52ff0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/update/XHttpUpdateHttpServiceImpl.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/update/XHttpUpdateHttpServiceImpl.kt @@ -7,11 +7,11 @@ import com.xuexiang.xhttp2.XHttpSDK import com.xuexiang.xhttp2.callback.DownloadProgressCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.exception.ApiException -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xupdate.proxy.IUpdateHttpService import com.xuexiang.xupdate.proxy.IUpdateHttpService.DownloadCallback import com.xuexiang.xutil.file.FileUtils import com.xuexiang.xutil.net.JsonUtil +import com.xuexiang.xutil.resource.ResUtils.getString /** * XHttp2实现的请求更新 @@ -19,7 +19,6 @@ import com.xuexiang.xutil.net.JsonUtil * @author xuexiang * @since 2018/8/12 上午11:46 */ -@Suppress("DEPRECATION") class XHttpUpdateHttpServiceImpl : IUpdateHttpService { override fun asyncGet( url: String, @@ -88,7 +87,7 @@ class XHttpUpdateHttpServiceImpl : IUpdateHttpService { } override fun cancelDownload(url: String) { - XToastUtils.info(ResUtils.getString(R.string.update_cancelled)) + XToastUtils.info(getString(R.string.update_cancelled)) XHttpSDK.cancelRequest(url) } } \ No newline at end of file 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 8fa8119d..a5bce5b6 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 @@ -32,12 +32,12 @@ import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDSMS import com.idormy.sms.forwarder.utils.TaskWorker import com.jeremyliao.liveeventbus.LiveEventBus import com.xuexiang.xrouter.utils.TextUtils -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xutil.file.FileUtils +import com.xuexiang.xutil.resource.ResUtils.getString import frpclib.Frpclib //执行每个task具体动作任务 -@Suppress("PrivatePropertyName", "DEPRECATION") +@Suppress("PrivatePropertyName") class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { private val TAG: String = ActionWorker::class.java.simpleName @@ -87,7 +87,7 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker val mSubscriptionId: Int = App.SimInfoList[simSlotIndex]?.mSubscriptionId ?: -1 if (ActivityCompat.checkSelfPermission(App.context, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { - val msg = ResUtils.getString(R.string.no_sms_sending_permission) + val msg = getString(R.string.no_sms_sending_permission) writeLog(msg, "ERROR") } else { val msg = PhoneUtils.sendSms(mSubscriptionId, smsSetting.phoneNumbers, smsSetting.msgContent) diff --git a/app/src/main/java/com/idormy/sms/forwarder/workers/SimWorker.kt b/app/src/main/java/com/idormy/sms/forwarder/workers/SimWorker.kt index d13681b1..394478fb 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/workers/SimWorker.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/workers/SimWorker.kt @@ -19,7 +19,7 @@ import com.idormy.sms.forwarder.utils.PhoneUtils import com.idormy.sms.forwarder.utils.TaskWorker import com.idormy.sms.forwarder.utils.task.ConditionUtils import com.idormy.sms.forwarder.utils.task.TaskUtils -import com.xuexiang.xutil.resource.ResUtils +import com.xuexiang.xutil.resource.ResUtils.getString import java.util.Date @Suppress("PrivatePropertyName", "DEPRECATION") @@ -64,19 +64,19 @@ class SimWorker(context: Context, params: WorkerParameters) : CoroutineWorker(co } val msg = StringBuilder() - msg.append(String.format(ResUtils.getString(R.string.sim_state), simStateStr)).append("\n") + msg.append(String.format(getString(R.string.sim_state), simStateStr)).append("\n") if (TaskUtils.simState == TelephonyManager.SIM_STATE_READY) { // 获取 SIM 卡信息 App.SimInfoList = PhoneUtils.getSimMultiInfo() //Log.d(TAG, App.SimInfoList.toString()) App.SimInfoList.forEach { msg.append("[SIM-").append(it.key + 1).append("]\n") - msg.append(ResUtils.getString(R.string.carrier_name)).append(": ").append(it.value.mCarrierName).append("\n") + msg.append(getString(R.string.carrier_name)).append(": ").append(it.value.mCarrierName).append("\n") //msg.append(getString(R.string.icc_id)).append(": ").append(it.value.mIccId).append("\n") - msg.append(ResUtils.getString(R.string.sim_slot_index)).append(": ").append(it.value.mSimSlotIndex).append("\n") - msg.append(ResUtils.getString(R.string.number)).append(": ").append(it.value.mNumber).append("\n") - msg.append(ResUtils.getString(R.string.country_iso)).append(": ").append(it.value.mCountryIso).append("\n") - msg.append(ResUtils.getString(R.string.subscription_id)).append(": ").append(it.value.mSubscriptionId).append("\n") + msg.append(getString(R.string.sim_slot_index)).append(": ").append(it.value.mSimSlotIndex).append("\n") + msg.append(getString(R.string.number)).append(": ").append(it.value.mNumber).append("\n") + msg.append(getString(R.string.country_iso)).append(": ").append(it.value.mCountryIso).append("\n") + msg.append(getString(R.string.subscription_id)).append(": ").append(it.value.mSubscriptionId).append("\n") } } diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 3cd083b3..957e3cfd 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -436,8 +436,8 @@ SSL Local IP: - Instructions: \n[Note] The APP version of the sender and receiver must be the same!\n1. Please keep the SOURCE and DESTINATION phones in the same Wi-Fi network, and do not turn on isolation. \n2. Tap "Send" on SOURCE mobile phone, and get "server IP" \n3. After filling in "Server IP" on DESTINATION phone, tap "Receive". \n [NOTE:] sender(s), forwarding rule(s) and log(s) will be overwritten after cloning! - [NOTE:] sender(s), forwarding rule(s) and log(s) will be overwritten after cloning! + Important Note:\nThis feature is intended solely for personal use in switching between old and new phones. Any consequences arising from illegal use are the user\'s responsibility!\n\nInstructions:\n1. Connect both old and new phones to the same WiFi network (disable AP isolation). If internal network penetration is needed, configure Frpc first.\n2. [Choose One] On the old phone, tap the "Push" button to send this device\'s configuration to the server.\n3. [Choose One] On the new phone, tap the "Pull" button to fetch the server\'s configuration to this device.\n\nNotes:\n1. The client and server app versions must match for successful cloning.\n2. Upon successful import, the sending channels and forwarding rules will be entirely replaced, clearing the historical records.\n3. Active requests, keep-alive measures, and personal settings are not included in the cloning scope.\n4. After successful import, it\'s crucial to re-enter the [General Settings] and toggle on the functions you need! (Or manually grant permissions in system settings). + Important Note:\nThis feature is strictly intended for personal use in switching between old and new phones. Any consequences arising from illegal use are the user\'s responsibility!\n\nNotes:\n1. The exporting and importing apps must have identical versions for one-click cloning to work!\n2. Upon successful import on the new phone, the sending channels and forwarding rules will be entirely replaced, clearing the history records!\n3. Active requests, keep-alive measures, and personal settings are not included in the cloning process.\n4. After a successful import, it\'s crucial to re-enter the [General Settings] and toggle on the functions you need! (Or manually grant permissions in system settings). Push Pull Stop @@ -1139,7 +1139,7 @@ Are you sure to delete this task? The task has deleted. Add Condition - Example: Below 20% battery + Example: Below 20% battery Continue to add condition Add Action Example: Disable all forwarding diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 9743d536..0267b653 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -437,8 +437,8 @@ SSL 本机IP: - 严正声明:\n该功能仅限个人新旧手机切换使用,用于非法用途后果自负!\n\n操作说明:\n1.新旧手机连接同一个WiFi网络(禁用AP隔离),如需穿透内网请先配置Frpc\n2.【二选一】旧手机点【推送】按钮,将本机的配置推送到服务端\n3.【二选一】新手机点【拉取】按钮,将拉取服务端的配置到本机\n\n注意事项:\n1.客户端与服务端的APP版本必须一致,才能克隆!\n2.导入成功后,发送通道、转发规则将完全被覆盖,清空历史记录!\n3.主动请求、保活措施、个性设置不在克隆范围 - 严正声明:\n该功能仅限个人新旧手机切换使用,用于非法用途后果自负!\n\n注意事项:\n1.导出方与导入方的APP版本必须一致,才能一键克隆!\n2.新手机导入成功后,发送通道、转发规则将完全被覆盖,清空历史记录!\n3.主动请求、保活措施、个性设置不在克隆范围 + 严正声明:\n该功能仅限个人新旧手机切换使用,用于非法用途后果自负!\n\n操作说明:\n1.新旧手机连接同一个WiFi网络(禁用AP隔离),如需穿透内网请先配置Frpc\n2.【二选一】旧手机点【推送】按钮,将本机的配置推送到服务端\n3.【二选一】新手机点【拉取】按钮,将拉取服务端的配置到本机\n\n注意事项:\n1.客户端与服务端的APP版本必须一致,才能克隆!\n2.导入成功后,发送通道、转发规则将完全被覆盖,清空历史记录!\n3.主动请求、保活措施、个性设置不在克隆范围\n4.导入成功后,务必再次进入【通用设置】开关一次你需要的功能!(或去系统设置手动授权权限) + 严正声明:\n该功能仅限个人新旧手机切换使用,用于非法用途后果自负!\n\n注意事项:\n1.导出方与导入方的APP版本必须一致,才能一键克隆!\n2.新手机导入成功后,发送通道、转发规则将完全被覆盖,清空历史记录!\n3.主动请求、保活措施、个性设置不在克隆范围\n4.导入成功后,务必再次进入【通用设置】开关一次你需要的功能!(或去系统设置手动授权权限) 推送 拉取 停止 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 203e7893..bea5a22a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -437,8 +437,8 @@ SSL 本機IP: - 嚴正聲明:\n該功能僅限個人新舊手機切換使用,用於非法用途後果自負!\n\n操作說明:\n1.新舊手機連接同一個WiFi網絡(禁用AP隔離),如需穿透內網請先配置Frpc\n2.【二選一】舊手機點【推送】按鈕,將本機的配置推送到服務端\n3.【二選一】新手機點【拉取】按鈕,將拉取服務端的配置到本機\n\n注意事項:\n1.客戶端與服務端的APP版本必須一致,才能克隆!\n2.導入成功後,發送通道、轉發規則將完全被覆蓋,清空歷史記錄!\n3.主動請求、保活措施、個性設置不在克隆範圍 - 嚴正聲明:\n該功能僅限個人新舊手機切換使用,用於非法用途後果自負!\n\n注意事項:\n1.導出方與導入方的APP版本必須一致,才能一鍵克隆!\n2.新手機導入成功後,發送通道、轉發規則將完全被覆蓋,清空歷史記錄!\n3.主動請求、保活措施、個性設置不在克隆範圍 + 嚴正聲明:\n該功能僅限個人新舊手機切換使用,用於非法用途後果自負!\n\n操作說明:\n1.新舊手機連接同一個WiFi網絡(禁用AP隔離),如需穿透內網請先配置Frpc\n2.【二選一】舊手機點【推送】按鈕,將本機的配置推送到服務端\n3.【二選一】新手機點【拉取】按鈕,將拉取服務端的配置到本機\n\n注意事項:\n1.客戶端與服務端的APP版本必須一致,才能克隆!\n2.導入成功後,發送通道、轉發規則將完全被覆蓋,清空歷史記錄!\n3.主動請求、保活措施、個性設置不在克隆範圍\n4.導入成功後,務必再次進入【通用設置】開關一次你需要的功能!(或去系統設置手動授權權限) + 嚴正聲明:\n該功能僅限個人新舊手機切換使用,用於非法用途後果自負!\n\n注意事項:\n1.導出方與導入方的APP版本必須一致,才能一鍵克隆!\n2.新手機導入成功後,發送通道、轉發規則將完全被覆蓋,清空歷史記錄!\n3.主動請求、保活措施、個性設置不在克隆範圍\n4.導入成功後,務必再次進入【通用設置】開關一次你需要的功能!(或去系統設置手動授權權限) 推送 拉取 停止 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7ae89f7a..0f4ebd22 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -437,8 +437,8 @@ SSL 本机IP: - 严正声明:\n该功能仅限个人新旧手机切换使用,用于非法用途后果自负!\n\n操作说明:\n1.新旧手机连接同一个WiFi网络(禁用AP隔离),如需穿透内网请先配置Frpc\n2.【二选一】旧手机点【推送】按钮,将本机的配置推送到服务端\n3.【二选一】新手机点【拉取】按钮,将拉取服务端的配置到本机\n\n注意事项:\n1.客户端与服务端的APP版本必须一致,才能克隆!\n2.导入成功后,发送通道、转发规则将完全被覆盖,清空历史记录!\n3.主动请求、保活措施、个性设置不在克隆范围 - 严正声明:\n该功能仅限个人新旧手机切换使用,用于非法用途后果自负!\n\n注意事项:\n1.导出方与导入方的APP版本必须一致,才能一键克隆!\n2.新手机导入成功后,发送通道、转发规则将完全被覆盖,清空历史记录!\n3.主动请求、保活措施、个性设置不在克隆范围 + 严正声明:\n该功能仅限个人新旧手机切换使用,用于非法用途后果自负!\n\n操作说明:\n1.新旧手机连接同一个WiFi网络(禁用AP隔离),如需穿透内网请先配置Frpc\n2.【二选一】旧手机点【推送】按钮,将本机的配置推送到服务端\n3.【二选一】新手机点【拉取】按钮,将拉取服务端的配置到本机\n\n注意事项:\n1.客户端与服务端的APP版本必须一致,才能克隆!\n2.导入成功后,发送通道、转发规则将完全被覆盖,清空历史记录!\n3.主动请求、保活措施、个性设置不在克隆范围\n4.导入成功后,务必再次进入【通用设置】开关一次你需要的功能!(或去系统设置手动授权权限) + 严正声明:\n该功能仅限个人新旧手机切换使用,用于非法用途后果自负!\n\n注意事项:\n1.导出方与导入方的APP版本必须一致,才能一键克隆!\n2.新手机导入成功后,发送通道、转发规则将完全被覆盖,清空历史记录!\n3.主动请求、保活措施、个性设置不在克隆范围\n4.导入成功后,务必再次进入【通用设置】开关一次你需要的功能!(或去系统设置手动授权权限) 推送 拉取 停止 @@ -1140,7 +1140,7 @@ 删除任务操作确认 删除任务操作确认 添加条件 - 例如:如果电量低于20%时 + 例如:如果电量低于20%时 继续添加条件 添加动作 例如:禁用所有转发通道