From 5a92e5c56457b05418c6b486e37f61593c06380a Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 15 Dec 2023 17:00:42 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E8=B0=83=E6=95=B4RegionBean?= =?UTF-8?q?=E7=AD=89=E9=94=99=E8=AF=AF=E5=8C=85=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/chwl/app/ui/login/AreaCodeActivity.kt | 2 +- .../chwl/app/ui/login/BindPhoneActivity.kt | 3 +- .../app/ui/login/LoginPasswordActivity.java | 2 +- .../chwl/app/ui/login/LoginPhoneActivity.kt | 2 +- .../chwl/app/ui/login/RegionListAdapter.kt | 2 +- .../app/ui/setting/ResetPasswordActivity.kt | 2 +- .../app/ui/setting/VerifyPhoneActivity.kt | 2 +- .../main/java/com/chwl/core/RegionHelper.kt | 118 ++++++++++++++++++ .../java/com/chwl/core/bean/RegionBean.kt | 47 +++++++ 9 files changed, 172 insertions(+), 8 deletions(-) create mode 100644 core/src/main/java/com/chwl/core/RegionHelper.kt create mode 100644 core/src/main/java/com/chwl/core/bean/RegionBean.kt diff --git a/app/src/main/java/com/chwl/app/ui/login/AreaCodeActivity.kt b/app/src/main/java/com/chwl/app/ui/login/AreaCodeActivity.kt index 5b4f5036f..70847d251 100644 --- a/app/src/main/java/com/chwl/app/ui/login/AreaCodeActivity.kt +++ b/app/src/main/java/com/chwl/app/ui/login/AreaCodeActivity.kt @@ -12,7 +12,7 @@ import com.chwl.app.databinding.ActivityAreaCodeBinding import com.chwl.app.ui.widget.SideBarView import com.example.lib_utils.UiUtils import com.example.lib_utils.ktx.getColorById -import com.yizhuan.xchat_android_core.region.RegionHelper +import com.chwl.core.RegionHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext diff --git a/app/src/main/java/com/chwl/app/ui/login/BindPhoneActivity.kt b/app/src/main/java/com/chwl/app/ui/login/BindPhoneActivity.kt index 4057fdce0..bf9b6d538 100644 --- a/app/src/main/java/com/chwl/app/ui/login/BindPhoneActivity.kt +++ b/app/src/main/java/com/chwl/app/ui/login/BindPhoneActivity.kt @@ -16,14 +16,13 @@ import com.trello.rxlifecycle3.android.ActivityEvent import com.chwl.app.R import com.chwl.app.base.BaseViewBindingActivity import com.chwl.app.databinding.ActivityBindPhoneBinding -import com.chwl.app.ui.login.BindPhoneActivity import com.chwl.core.auth.AuthModel import com.chwl.core.code.CodeType import com.chwl.core.user.UserModel import com.chwl.core.user.bean.UserInfo import com.chwl.library.utils.NetworkUtils import com.chwl.library.utils.ResUtil -import com.yizhuan.xchat_android_core.region.RegionHelper +import com.chwl.core.RegionHelper import io.reactivex.SingleObserver import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable diff --git a/app/src/main/java/com/chwl/app/ui/login/LoginPasswordActivity.java b/app/src/main/java/com/chwl/app/ui/login/LoginPasswordActivity.java index 00757aae2..906487e4c 100644 --- a/app/src/main/java/com/chwl/app/ui/login/LoginPasswordActivity.java +++ b/app/src/main/java/com/chwl/app/ui/login/LoginPasswordActivity.java @@ -34,7 +34,7 @@ import com.chwl.core.code.CodeType; import com.chwl.library.common.SpConstants; import com.chwl.library.common.util.SPUtils; import com.chwl.library.utils.TextWatcherWrapper; -import com.yizhuan.xchat_android_core.region.RegionHelper; +import com.chwl.core.RegionHelper; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; diff --git a/app/src/main/java/com/chwl/app/ui/login/LoginPhoneActivity.kt b/app/src/main/java/com/chwl/app/ui/login/LoginPhoneActivity.kt index 35864c80d..36e3a7d1b 100644 --- a/app/src/main/java/com/chwl/app/ui/login/LoginPhoneActivity.kt +++ b/app/src/main/java/com/chwl/app/ui/login/LoginPhoneActivity.kt @@ -16,7 +16,7 @@ import com.chwl.app.databinding.ActivityLoginPhoneBinding import com.chwl.core.auth.AuthModel import com.chwl.core.auth.event.LoginEvent import com.chwl.core.code.CodeType -import com.yizhuan.xchat_android_core.region.RegionHelper +import com.chwl.core.RegionHelper import io.reactivex.SingleObserver import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable diff --git a/app/src/main/java/com/chwl/app/ui/login/RegionListAdapter.kt b/app/src/main/java/com/chwl/app/ui/login/RegionListAdapter.kt index 31a92f618..227493f65 100644 --- a/app/src/main/java/com/chwl/app/ui/login/RegionListAdapter.kt +++ b/app/src/main/java/com/chwl/app/ui/login/RegionListAdapter.kt @@ -3,7 +3,7 @@ package com.chwl.app.ui.login import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.chwl.app.R -import com.yizhuan.xchat_android_core.region.bean.RegionBean +import com.chwl.core.bean.RegionBean /** * Created by Max on 2023/12/7 19:34 diff --git a/app/src/main/java/com/chwl/app/ui/setting/ResetPasswordActivity.kt b/app/src/main/java/com/chwl/app/ui/setting/ResetPasswordActivity.kt index 010eb2bc8..4b48265d8 100644 --- a/app/src/main/java/com/chwl/app/ui/setting/ResetPasswordActivity.kt +++ b/app/src/main/java/com/chwl/app/ui/setting/ResetPasswordActivity.kt @@ -23,7 +23,7 @@ import com.chwl.core.code.CodeType import com.chwl.core.user.UserModel import com.chwl.library.utils.ResUtil import com.chwl.library.utils.TextWatcherWrapper -import com.yizhuan.xchat_android_core.region.RegionHelper +import com.chwl.core.RegionHelper import io.reactivex.SingleObserver import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable diff --git a/app/src/main/java/com/chwl/app/ui/setting/VerifyPhoneActivity.kt b/app/src/main/java/com/chwl/app/ui/setting/VerifyPhoneActivity.kt index 3adf7bc70..a36067e41 100644 --- a/app/src/main/java/com/chwl/app/ui/setting/VerifyPhoneActivity.kt +++ b/app/src/main/java/com/chwl/app/ui/setting/VerifyPhoneActivity.kt @@ -21,7 +21,7 @@ import com.chwl.core.code.CodeType import com.chwl.core.pay.PayModel import com.chwl.core.utils.net.BeanObserver import com.chwl.library.utils.ResUtil -import com.yizhuan.xchat_android_core.region.RegionHelper +import com.chwl.core.RegionHelper class VerifyPhoneActivity : BaseViewBindingActivity(), View.OnClickListener, TextWatcher { diff --git a/core/src/main/java/com/chwl/core/RegionHelper.kt b/core/src/main/java/com/chwl/core/RegionHelper.kt new file mode 100644 index 000000000..b9247e8b8 --- /dev/null +++ b/core/src/main/java/com/chwl/core/RegionHelper.kt @@ -0,0 +1,118 @@ +package com.chwl.core + +import android.widget.TextView +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.coroutineScope +import com.example.lib_utils.AppUtils +import com.example.lib_utils.TelephonyUtils +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.chwl.core.bean.RegionBean +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.InputStream + +/** + * Created by Max on 2023/12/7 18:23 + * Desc:地区 + **/ +class RegionHelper { + + fun loadRecommendRegion(lifecycle: Lifecycle, textView: TextView){ + lifecycle.coroutineScope.launch { + RegionHelper().getCurrentOrDefRegion().let { + textView.text = it.fullCode + } + } + } + + private fun getDefaultRegion(): RegionBean { + return RegionBean(name = "Taiwan", abbr = "TW", mcc = "466", code = "886") + } + + /** + * 获取当前地区或默认 + */ + private suspend fun getCurrentOrDefRegion(): RegionBean { + return withContext(Dispatchers.IO) { + var operator = TelephonyUtils.getNetWorkOperator() + if (operator.isNullOrEmpty()) { + operator = TelephonyUtils.getSimOperator() + } + val mcc = operator?.take(3) + val region = getAllRegionList().firstOrNull { + it.mcc == mcc + } + region ?: getDefaultRegion() + } + } + + /** + * 获取地区选择器列表 + */ + suspend fun getRegionSelectorList(groupItemType: Int): List { + return withContext(Dispatchers.IO) { + val list = ArrayList() + list.addAll(getHotRegionList()) + var lastGroup: Char? = null + list.addAll(getAllRegionList() + .map { + val firstName = it.name?.firstOrNull()?.uppercaseChar() ?: '#' + if (firstName in 'A'..'Z') { + it.groupName = firstName + it.sortedBy = "$firstName${it.name?.uppercase()}" + } else { + it.groupName = '#' + it.sortedBy = "${'Z' + 1}${it.name?.uppercase()}" + } + it + } + .sortedBy { + it.sortedBy + }.map { + val groupName = it.groupName ?: '#' + if (groupName != lastGroup) { + it.itemType = groupItemType + } + lastGroup = groupName + it + } + ) + list + } + } + + /** + * 获取热门地区 + */ + suspend fun getHotRegionList(): List { + return getRegionListFromAssets("hot_region.json") + } + + /** + * 获取全部地区 + */ + suspend fun getAllRegionList(): List { + return getRegionListFromAssets("region.json") + } + + /** + * 从资源文件中获取地区列表 + */ + private fun getRegionListFromAssets(fileName: String): MutableList { + //获取IO流 + try { + val inputStream: InputStream = + AppUtils.getApp().applicationContext.assets.open(fileName) + val json: String + inputStream.use { + json = it.bufferedReader().readText() + } + return Gson().fromJson(json, object : TypeToken>() {}.type) + } catch (e: Exception) { + e.printStackTrace() + } + return mutableListOf() + } +} \ No newline at end of file diff --git a/core/src/main/java/com/chwl/core/bean/RegionBean.kt b/core/src/main/java/com/chwl/core/bean/RegionBean.kt new file mode 100644 index 000000000..d5167eb28 --- /dev/null +++ b/core/src/main/java/com/chwl/core/bean/RegionBean.kt @@ -0,0 +1,47 @@ +package com.chwl.core.bean + +import com.chad.library.adapter.base.entity.MultiItemEntity + +/** + * Created by Max on 2023/12/7 18:48 + * Desc:地区 + **/ +data class RegionBean( + // 名称(英文) + val name: String?, + // 简称 + val abbr: String?, + // 区号 + val code: String?, + // MCC + val mcc: String? +) : MultiItemEntity { + + val fullCode: String? + get() { + if (code == null) { + return null + } + return if (code.startsWith("+")) { + code + } else { + "+$code" + } + } + + // 本地分组用到 + var groupName: Char? = null + + // 本地排序用到 + var sortedBy: String? = null + + private var itemType: Int = 0 + + fun setItemType(itemType: Int) { + this.itemType = itemType + } + + override fun getItemType(): Int { + return itemType + } +} \ No newline at end of file