Skip to content

Commit

Permalink
新增:多语言切换设置适应国际化 #378
Browse files Browse the repository at this point in the history
整理:code review
  • Loading branch information
pppscn committed Dec 20, 2023
1 parent 2b4468b commit 1da0257
Show file tree
Hide file tree
Showing 66 changed files with 674 additions and 709 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,15 @@ 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
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
Expand Down Expand Up @@ -78,6 +80,7 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(), 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
Expand Down Expand Up @@ -126,6 +129,13 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(), DrawerAdapter.OnItemS
}
}
})

//监听已安装App信息列表加载完成事件
LiveEventBus.get(EVENT_LOAD_APP_LIST, String::class.java).observe(this) {
if (needToAppListFragment) {
openNewPage(AppListFragment::class.java)
}
}
}

override val isSupportSlideBack: Boolean
Expand All @@ -146,6 +156,7 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(), 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)
Expand Down Expand Up @@ -255,6 +266,7 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(), DrawerAdapter.OnItemS
}

override fun onItemSelected(position: Int) {
needToAppListFragment = false
when (position) {
POS_LOG, POS_RULE, POS_SENDER, POS_SETTING -> {
val tab = mTabLayout.getTabAt(position)
Expand Down Expand Up @@ -293,6 +305,7 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(), DrawerAdapter.OnItemS
XToastUtils.info(getString(R.string.loading_app_list))
val request = OneTimeWorkRequestBuilder<LoadAppListWorker>().build()
WorkManager.getInstance(this).enqueue(request)
needToAppListFragment = true
return
}
openNewPage(AppListFragment::class.java)
Expand Down
Original file line number Diff line number Diff line change
@@ -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 = ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

//标题内容
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<T> : BaseEditSpinnerAdapter<T>, EditSpinnerFilter {
Expand Down Expand Up @@ -74,7 +74,7 @@ class SenderSpinnerAdapter<T> : BaseEditSpinnerAdapter<T>, 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -144,7 +144,7 @@ open class BaseActivity<Binding : ViewBinding?> : 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()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

/**
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)) {
Expand All @@ -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)
}
}

Expand Down
44 changes: 42 additions & 2 deletions app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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<String, String>() {
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<String, String>() {
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<String, String>() {
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))
Expand Down
17 changes: 8 additions & 9 deletions app/src/main/java/com/idormy/sms/forwarder/entity/BatteryInfo.kt
Original file line number Diff line number Diff line change
@@ -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 = "",
Expand All @@ -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
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

/**
* 图片预览实体类
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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"
}

Expand Down
Loading

0 comments on commit 1da0257

Please sign in to comment.