Преглед изворни кода

feat: SmsCountryInfo代码修改

XiaodongLin пре 1 година
родитељ
комит
f055efeb08

+ 8 - 0
app/src/main/java/com/adealink/weparty/module/account/AccountModule.kt

@@ -4,6 +4,7 @@ import com.adealink.frame.aab.BaseDynamicModule
 import com.adealink.frame.aab.constant.AABModuleNotInitError
 import com.adealink.frame.base.Rlt
 import com.adealink.weparty.R
+import com.adealink.weparty.module.account.data.SmsCountryInfo
 
 /**
  * Created by sunxiaodong on 2021/3/27.
@@ -111,6 +112,10 @@ object AccountModule : BaseDynamicModule<IAccountService>(IAccountService::class
 
             }
 
+            override fun getCountryByCountryCode(countryCode: String): SmsCountryInfo? {
+                return null
+            }
+
             override fun onTokenExpire() {
 
             }
@@ -137,4 +142,7 @@ object AccountModule : BaseDynamicModule<IAccountService>(IAccountService::class
         getService().refreshToken()
     }
 
+    override fun getCountryByCountryCode(countryCode: String): SmsCountryInfo? {
+        return getService().getCountryByCountryCode(countryCode)
+    }
 }

+ 3 - 0
app/src/main/java/com/adealink/weparty/module/account/IAccountService.kt

@@ -2,6 +2,7 @@ package com.adealink.weparty.module.account
 
 import com.adealink.frame.aab.IService
 import com.adealink.frame.base.Rlt
+import com.adealink.weparty.module.account.data.SmsCountryInfo
 
 /**
  * Created by sunxiaodong on 2021/3/26.
@@ -37,4 +38,6 @@ interface IAccountService : IService<IAccountService> {
     suspend fun getBindEmail(uid: Long): Rlt<Boolean>
 
     fun checkRemoteVirtualAppConfig()
+
+    fun getCountryByCountryCode(countryCode: String): SmsCountryInfo?
 }

+ 47 - 0
app/src/main/java/com/adealink/weparty/module/account/data/LoginData.kt

@@ -1,11 +1,17 @@
 package com.adealink.weparty.module.account.data
 
+import android.os.Parcelable
+import com.google.gson.annotations.JsonAdapter
 import com.google.gson.annotations.SerializedName
+import com.google.gson.internal.bind.ExtReflectiveTypeAdapterFactory
+import kotlinx.parcelize.Parcelize
+import java.util.Locale
 
 enum class UserKickReason(val value: Long) {
     //客户端自定义的
     REASON_LOCAL_KICK_TOKEN_EXPIRE(-1),//token过期
     REASON_LOCAL_KICK_BLOCK(-2),//封禁账号
+
     //服务端定义的
     REASON_KICK_ONLINE_BY_MULTIPOINT_LOGIN(1),
     REASON_BE_BLOCK(2)//被封禁
@@ -14,4 +20,45 @@ enum class UserKickReason(val value: Long) {
 data class BannerInfoRes(
     @SerializedName("reason") val reason: String,
     @SerializedName("expire") val expire: Long,
+)
+
+
+@Parcelize
+@JsonAdapter(ExtReflectiveTypeAdapterFactory::class)
+data class SmsCountryInfo(
+    @SerializedName("areaCode") val areaCode: String,
+    @SerializedName("countryCode") val countryCode: String,
+    @SerializedName("countryName") var countryName: String,
+    @SerializedName("flag") val flag: String,
+    @SerializedName("supportSms") val supportSms: Boolean,
+    var localeName: String = ""
+) : Parcelable {
+    fun fill(): SmsCountryInfo {
+        localeName = countryName
+        val locale = Locale("", this.countryCode)
+        val lc = locale.displayCountry
+        if (lc.isNotEmpty()) {
+            localeName = lc
+        }
+
+        if (isChinaRegion(this.countryCode)) {
+            val cLocale = Locale("", "CN")
+            val clc = cLocale.displayCountry
+            if (clc.isNotEmpty()) {
+                localeName = "$clc/$localeName"
+            }
+            countryName = "China/$countryName"
+        }
+        return this
+    }
+
+    private fun isChinaRegion(cc: String): Boolean {
+        return "TW" == cc || "MO" == cc || "HK" == cc
+    }
+}
+
+
+data class GetSmsCountryReq(
+    @SerializedName("deviceId") val deviceId: String,
+    @SerializedName("newDeviceId") val newDeviceId: String,
 )

+ 3 - 3
app/src/main/java/com/adealink/weparty/module/profile/view/UserCountryView.kt

@@ -5,6 +5,7 @@ import android.util.AttributeSet
 import com.adealink.frame.image.view.NetworkImageView
 import com.adealink.weparty.commonui.ext.gone
 import com.adealink.weparty.commonui.ext.show
+import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.module.profile.data.UserInfo
 
 /**
@@ -15,7 +16,6 @@ class UserCountryView @JvmOverloads constructor(
     context: Context, attrs: AttributeSet? = null
 ) : NetworkImageView(context, attrs) {
 
-
     fun setUserInfo(userInfo: UserInfo?) {
         //根据用户信息加载国旗
         if (userInfo == null) {
@@ -41,12 +41,12 @@ class UserCountryView @JvmOverloads constructor(
     }
 
     fun setCountryCode(countryCode: String?) {
-        //todo:根据国家代码加载国旗
         if (countryCode.isNullOrEmpty()) {
             gone()
             return
         }
-//        setImageUrl("https://www.countryflags.io/$countryCode/flat/64.png")
+        val countryUrl = AccountModule.getCountryByCountryCode(countryCode)?.flag
+        setCountryUrl(countryUrl)
     }
 
 }

+ 4 - 0
module/account/src/main/java/com/adealink/weparty/account/AccountServiceImpl.kt

@@ -8,6 +8,7 @@ import com.adealink.weparty.account.stat.AccountLogoutStatEvent
 import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.module.account.IAccountService
 import com.adealink.weparty.module.account.ILoginListener
+import com.adealink.weparty.module.account.data.SmsCountryInfo
 
 /**
  * Created by sunxiaodong on 2021/3/25.
@@ -82,4 +83,7 @@ class AccountServiceImpl : IAccountService {
         return this
     }
 
+    override fun getCountryByCountryCode(countryCode: String): SmsCountryInfo? {
+        return loginManager.getCountryByCountryCode(countryCode)
+    }
 }

+ 4 - 2
module/account/src/main/java/com/adealink/weparty/account/countryselect/CountrySelectActivity.kt

@@ -15,11 +15,11 @@ import com.adealink.weparty.account.countryselect.adapter.CountryItemViewBinder
 import com.adealink.weparty.account.countryselect.listener.ICountrySelectListener
 import com.adealink.weparty.account.countryselect.viewmodel.CountrySelectViewModel
 import com.adealink.weparty.account.databinding.ActivityCountrySelectBinding
-import com.adealink.weparty.account.login.data.SmsCountryInfo
 import com.adealink.weparty.commonui.BaseActivity
 import com.adealink.weparty.commonui.ext.gone
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.recycleview.adapter.multitype.MultiTypeAdapter
+import com.adealink.weparty.module.account.data.SmsCountryInfo
 
 /**
  * 国家选择页面
@@ -31,12 +31,14 @@ class CountrySelectActivity : BaseActivity(), ICountrySelectListener {
     companion object {
         val KEY_SELECT_COUNTRY = "select_country"
         val KEY_SHOW_AREA_CODE = "show_area_code"
+        val KEY_FILTER_SUPPORT_SMS = "filter_support_sms"
     }
 
     private val binding by viewBinding(ActivityCountrySelectBinding::inflate)
     private val listAdapter by fastLazy { MultiTypeAdapter() }
     private val countrySelectViewModel by viewModels<CountrySelectViewModel>()
     private val showAreaCode by fastLazy { intent.getBooleanExtra(KEY_SHOW_AREA_CODE, true) }
+    private val filterSupportSms by fastLazy { intent.getBooleanExtra(KEY_FILTER_SUPPORT_SMS, false) }
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -83,7 +85,7 @@ class CountrySelectActivity : BaseActivity(), ICountrySelectListener {
 
     override fun loadData() {
         super.loadData()
-        countrySelectViewModel.getAllCountryList()
+        countrySelectViewModel.getAllCountryList(filterSupportSms)
     }
 
     override fun getSearchKeyword(): String {

+ 1 - 1
module/account/src/main/java/com/adealink/weparty/account/countryselect/SelectCountryContract.kt

@@ -6,7 +6,7 @@ import android.os.Parcelable
 import androidx.activity.result.contract.ActivityResultContract
 import com.adealink.frame.log.Log
 import com.adealink.weparty.account.constant.TAG_ACCOUNT_LOGIN_COUNTRY_SELECT
-import com.adealink.weparty.account.login.data.SmsCountryInfo
+import com.adealink.weparty.module.account.data.SmsCountryInfo
 import kotlinx.parcelize.Parcelize
 
 /**

+ 1 - 1
module/account/src/main/java/com/adealink/weparty/account/countryselect/adapter/CountryItemViewBinder.kt

@@ -10,10 +10,10 @@ import com.adealink.frame.aab.util.getCompatColor
 import com.adealink.frame.ext.safeSetSpan
 import com.adealink.weparty.account.countryselect.listener.ICountrySelectListener
 import com.adealink.weparty.account.databinding.ItemCountryBinding
-import com.adealink.weparty.account.login.data.SmsCountryInfo
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
 import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
+import com.adealink.weparty.module.account.data.SmsCountryInfo
 import java.util.Locale
 import com.adealink.weparty.R as APP_R
 

+ 2 - 1
module/account/src/main/java/com/adealink/weparty/account/countryselect/listener/ICountrySelectListener.kt

@@ -1,6 +1,7 @@
 package com.adealink.weparty.account.countryselect.listener
 
-import com.adealink.weparty.account.login.data.SmsCountryInfo
+import com.adealink.weparty.module.account.data.SmsCountryInfo
+
 
 /**
  * Created by sunxiaodong on 2021/10/9.

+ 5 - 2
module/account/src/main/java/com/adealink/weparty/account/countryselect/viewmodel/CountrySelectViewModel.kt

@@ -3,9 +3,9 @@ package com.adealink.weparty.account.countryselect.viewmodel
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import com.adealink.frame.mvvm.viewmodel.BaseViewModel
-import com.adealink.weparty.account.login.data.SmsCountryInfo
 import com.adealink.weparty.account.login.manager.loginManager
 import com.adealink.weparty.commonui.ext.onSuccess
+import com.adealink.weparty.module.account.data.SmsCountryInfo
 import kotlinx.coroutines.launch
 import java.util.Locale
 
@@ -15,11 +15,14 @@ import java.util.Locale
 class CountrySelectViewModel : BaseViewModel() {
 
 
-    fun getAllCountryList() {
+    fun getAllCountryList(filterSupportSms: Boolean = false) {
         viewModelScope.launch {
             val rlt = loginManager.getAllCountries()
             rlt.onSuccess { list ->
                 allCountryList = list.toMutableList()
+                if (filterSupportSms) {
+                    allCountryList = allCountryList.filter { it.supportSms }.toMutableList()
+                }
                 countryListLD.send(allCountryList)
             }
         }

+ 0 - 39
module/account/src/main/java/com/adealink/weparty/account/login/data/LoginData.kt

@@ -282,42 +282,3 @@ enum class EmailReason(val reason: Int) {
     GOOGLE_LOGIN(2)
 }
 
-
-@Parcelize
-@JsonAdapter(ExtReflectiveTypeAdapterFactory::class)
-data class SmsCountryInfo(
-    @SerializedName("areaCode") val areaCode: String,
-    @SerializedName("countryCode") val countryCode: String,
-    @SerializedName("countryName") var countryName: String,
-    @SerializedName("flag") val flag: String,
-    @SerializedName("supportSms") val supportSms: Boolean,
-    var localeName: String = ""
-) : Parcelable{
-    fun fill(): SmsCountryInfo {
-        localeName = countryName
-        val locale = Locale("", this.countryCode)
-        val lc = locale.displayCountry
-        if (lc.isNotEmpty()) {
-            localeName = lc
-        }
-
-        if (isChinaRegion(this.countryCode)) {
-            val cLocale = Locale("", "CN")
-            val clc = cLocale.displayCountry
-            if (clc.isNotEmpty()) {
-                localeName = "$clc/$localeName"
-            }
-            countryName = "China/$countryName"
-        }
-        return this
-    }
-
-    private fun isChinaRegion(cc: String): Boolean {
-        return "TW" == cc || "MO" == cc || "HK" == cc
-    }
-}
-
-data class GetSmsCountryReq(
-    @SerializedName("deviceId") val deviceId: String,
-    @SerializedName("newDeviceId") val newDeviceId: String,
-)

+ 2 - 2
module/account/src/main/java/com/adealink/weparty/account/login/datasource/remote/LoginService.kt

@@ -9,16 +9,16 @@ import com.adealink.weparty.account.login.data.EmailGoogleAccountReq
 import com.adealink.weparty.account.login.data.EmailLoginReq
 import com.adealink.weparty.account.login.data.EmailResetPwdReq
 import com.adealink.weparty.account.login.data.GetEmailReq
-import com.adealink.weparty.account.login.data.GetSmsCountryReq
 import com.adealink.weparty.account.login.data.GetVerifyCodeReq
 import com.adealink.weparty.account.login.data.LoginReq
 import com.adealink.weparty.account.login.data.LoginResult
 import com.adealink.weparty.account.login.data.PhoneLoginReq
 import com.adealink.weparty.account.login.data.RefreshTokenReq
 import com.adealink.weparty.account.login.data.SetPhonePasswordReq
-import com.adealink.weparty.account.login.data.SmsCountryInfo
 import com.adealink.weparty.account.login.data.ThirdAccountListResult
 import com.adealink.weparty.account.login.data.VerifyMailCodeReq
+import com.adealink.weparty.module.account.data.GetSmsCountryReq
+import com.adealink.weparty.module.account.data.SmsCountryInfo
 import com.adealink.weparty.setting.data.EmailState
 import retrofit2.http.Body
 import retrofit2.http.Core

+ 1 - 1
module/account/src/main/java/com/adealink/weparty/account/login/manager/ILoginManager.kt

@@ -6,10 +6,10 @@ import com.adealink.frame.network.data.Res
 import com.adealink.weparty.account.login.data.EmailCodeResult
 import com.adealink.weparty.account.login.data.GetVerifyCodeReason
 import com.adealink.weparty.account.login.data.LoginResult
-import com.adealink.weparty.account.login.data.SmsCountryInfo
 import com.adealink.weparty.account.login.data.ThirdType
 import com.adealink.weparty.account.login.data.VerifyCodeType
 import com.adealink.weparty.module.account.ILoginListener
+import com.adealink.weparty.module.account.data.SmsCountryInfo
 import com.adealink.weparty.setting.data.EmailState
 
 interface ILoginManager : IBaseFrame<ILoginListener> {

+ 2 - 2
module/account/src/main/java/com/adealink/weparty/account/login/manager/LoginManager.kt

@@ -25,7 +25,6 @@ import com.adealink.weparty.account.login.data.EmailGoogleAccountReq
 import com.adealink.weparty.account.login.data.EmailLoginReq
 import com.adealink.weparty.account.login.data.EmailResetPwdReq
 import com.adealink.weparty.account.login.data.GetEmailReq
-import com.adealink.weparty.account.login.data.GetSmsCountryReq
 import com.adealink.weparty.account.login.data.GetVerifyCodeReason
 import com.adealink.weparty.account.login.data.GetVerifyCodeReq
 import com.adealink.weparty.account.login.data.LoginReq
@@ -34,7 +33,6 @@ import com.adealink.weparty.account.login.data.PhoneLoginReq
 import com.adealink.weparty.account.login.data.RefreshTokenNotify
 import com.adealink.weparty.account.login.data.RefreshTokenReq
 import com.adealink.weparty.account.login.data.SetPhonePasswordReq
-import com.adealink.weparty.account.login.data.SmsCountryInfo
 import com.adealink.weparty.account.login.data.ThirdType
 import com.adealink.weparty.account.login.data.UserKickOutNotify
 import com.adealink.weparty.account.login.data.VerifyCodeType
@@ -52,6 +50,8 @@ import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.module.account.ILoginListener
 import com.adealink.weparty.module.account.data.AccountErrorRefreshTokenEmpty
 import com.adealink.weparty.module.account.data.AccountErrorTokenRefreshing
+import com.adealink.weparty.module.account.data.GetSmsCountryReq
+import com.adealink.weparty.module.account.data.SmsCountryInfo
 import com.adealink.weparty.module.account.data.UserKickReason
 import com.adealink.weparty.module.attribution.AttributionModule
 import com.adealink.weparty.module.operation.OperationModule