DoggyZhang 2 месяцев назад
Родитель
Сommit
9eee4151d8

+ 4 - 0
app/src/main/java/com/adealink/weparty/module/setting/ISettingService.kt

@@ -1,9 +1,13 @@
 package com.adealink.weparty.module.setting
 
 import androidx.fragment.app.FragmentManager
+import androidx.lifecycle.ViewModelStoreOwner
 import com.adealink.weparty.aab.IService
+import com.adealink.weparty.module.setting.viewmodel.ISettingViewModel
 
 interface ISettingService : IService<ISettingService> {
     fun showLanguageSettingDialog(fragmentManager: FragmentManager)
 
+    fun getSettingViewModel(owner: ViewModelStoreOwner): ISettingViewModel?
+
 }

+ 10 - 0
app/src/main/java/com/adealink/weparty/module/setting/SettingModule.kt

@@ -1,8 +1,10 @@
 package com.adealink.weparty.module.setting
 
 import androidx.fragment.app.FragmentManager
+import androidx.lifecycle.ViewModelStoreOwner
 import com.adealink.frame.aab.BaseDynamicModule
 import com.adealink.weparty.R
+import com.adealink.weparty.module.setting.viewmodel.ISettingViewModel
 
 object SettingModule : BaseDynamicModule<ISettingService>(ISettingService::class),
     ISettingService {
@@ -23,6 +25,10 @@ object SettingModule : BaseDynamicModule<ISettingService>(ISettingService::class
             override fun showLanguageSettingDialog(fragmentManager: FragmentManager) {
             }
 
+            override fun getSettingViewModel(owner: ViewModelStoreOwner): ISettingViewModel? {
+                return null
+            }
+
             override fun onLogout() {
 
             }
@@ -33,6 +39,10 @@ object SettingModule : BaseDynamicModule<ISettingService>(ISettingService::class
         getService().showLanguageSettingDialog(fragmentManager)
     }
 
+    override fun getSettingViewModel(owner: ViewModelStoreOwner): ISettingViewModel? {
+        return getService().getSettingViewModel(owner)
+    }
+
     override fun onLogout() {
         getService().onLogout()
     }

+ 5 - 0
app/src/main/java/com/adealink/weparty/module/setting/viewmodel/ISettingViewModel.kt

@@ -1,4 +1,9 @@
 package com.adealink.weparty.module.setting.viewmodel
 
+import com.adealink.frame.locale.language.data.Language
+
 interface ISettingViewModel {
+
+    fun reportLanguage(language: Language)
+
 }

+ 11 - 2
app/src/main/java/com/adealink/weparty/ui/MainStartUpFragment.kt

@@ -5,6 +5,7 @@ import android.os.SystemClock
 import androidx.core.app.NotificationManagerCompat
 import androidx.lifecycle.lifecycleScope
 import com.adealink.frame.aab.AAB
+import com.adealink.frame.base.fastLazy
 import com.adealink.frame.coroutine.dispatcher.Dispatcher
 import com.adealink.frame.log.Log
 import com.adealink.frame.push.manager.pushService
@@ -14,10 +15,12 @@ import com.adealink.weparty.App
 import com.adealink.weparty.BuildConfig
 import com.adealink.weparty.commonui.BaseActivity
 import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.commonui.ext.isUiValid
 import com.adealink.weparty.config.globalConfigManager
 import com.adealink.weparty.location.viewmodel.LocationReporter
 import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.setting.SettingModule
 import com.adealink.weparty.module.wallet.WalletModule
 import com.adealink.weparty.push.PushStatEvent
 import com.google.firebase.crashlytics.ktx.crashlytics
@@ -60,6 +63,13 @@ class MainStartUpFragment : BaseFragment() {
 //            null
 //        }
 //    }
+    private val settingViewModel by fastLazy {
+        if (activity?.isUiValid() == true) {
+            SettingModule.getSettingViewModel(requireActivity())
+        } else {
+            null
+        }
+    }
 
     private suspend fun importantTask() {
         withContext(Dispatcher.WENEXT_THREAD_POOL) {
@@ -120,8 +130,6 @@ class MainStartUpFragment : BaseFragment() {
         WalletModule.fetchCurrency()
         WalletModule.queryAndHandleUnDealPurchases()
         globalConfigManager.getAllGlobalConfig(true)
-
-
         Log.d(TAG, "minorLoad-end, cost:${SystemClock.elapsedRealtime() - startTs}ms")
     }
 
@@ -135,6 +143,7 @@ class MainStartUpFragment : BaseFragment() {
         val startTs = SystemClock.elapsedRealtime()
         Log.d(TAG, "otherLoad-start")
         reportPushSwitch()
+        settingViewModel?.reportLanguage(App.instance.languageManager.getLanguage())
         Log.d(TAG, "otherLoad-end, cost:${SystemClock.elapsedRealtime() - startTs}ms")
     }
 

+ 8 - 0
module/setting/src/main/java/com/adealink/weparty/setting/SettingServiceImpl.kt

@@ -1,10 +1,14 @@
 package com.adealink.weparty.setting
 
 import androidx.fragment.app.FragmentManager
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.ViewModelStoreOwner
 import com.adealink.frame.spi.RegisterService
 import com.adealink.weparty.module.setting.ISettingService
 import com.adealink.weparty.module.setting.Setting
+import com.adealink.weparty.module.setting.viewmodel.ISettingViewModel
 import com.adealink.weparty.setting.language.LanguageSettingDialog
+import com.adealink.weparty.setting.viewmodel.SettingViewModel
 
 @RegisterService(ISettingService::class)
 class SettingServiceImpl : ISettingService {
@@ -13,6 +17,10 @@ class SettingServiceImpl : ISettingService {
         LanguageSettingDialog().show(fragmentManager, Setting.Language.PATH)
     }
 
+    override fun getSettingViewModel(owner: ViewModelStoreOwner): ISettingViewModel? {
+        return ViewModelProvider(owner)[SettingViewModel::class.java]
+    }
+
     override fun getService(): ISettingService {
         return this
     }

+ 5 - 1
module/setting/src/main/java/com/adealink/weparty/setting/datasource/remote/SettingHttpService.kt

@@ -3,6 +3,7 @@ package com.adealink.weparty.setting.datasource.remote
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.network.data.Res
 import com.adealink.weparty.setting.report.FeedbackReq
+import com.adealink.weparty.setting.report.ReportLanguageReq
 import com.adealink.weparty.setting.report.ReportReq
 import retrofit2.http.Body
 import retrofit2.http.POST
@@ -12,7 +13,10 @@ interface SettingHttpService {
     @POST("report/user")
     suspend fun report(@Body req: ReportReq): Rlt<Res<Any>>
 
-
     @POST("feedback/submit")
     suspend fun feedback(@Body req: FeedbackReq): Rlt<Res<Any>>
+
+    @POST("user/set/appLocaleLangSet")
+    suspend fun reportLanguage(@Body req: ReportLanguageReq): Rlt<Res<Any>>
+
 }

+ 5 - 0
module/setting/src/main/java/com/adealink/weparty/setting/language/LanguageSettingDialog.kt

@@ -1,6 +1,7 @@
 package com.adealink.weparty.setting.language
 
 import android.content.Intent
+import androidx.fragment.app.activityViewModels
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.adealink.frame.base.fastLazy
@@ -18,6 +19,8 @@ import com.adealink.weparty.setting.R
 import com.adealink.weparty.setting.databinding.DialogLanguageSettingBinding
 import com.adealink.weparty.setting.language.adapter.LanguageItemViewBinder
 import com.adealink.weparty.setting.language.data.LanguageItemData
+import com.adealink.weparty.setting.viewmodel.SettingViewModel
+import com.adealink.weparty.setting.viewmodel.SettingViewModelFactory
 
 @RouterUri(path = [Setting.Language.PATH], desc = "语言设置弹窗")
 class LanguageSettingDialog : BottomDialogFragment(R.layout.dialog_language_setting),
@@ -26,6 +29,7 @@ class LanguageSettingDialog : BottomDialogFragment(R.layout.dialog_language_sett
     private val binding by viewBinding(DialogLanguageSettingBinding::bind)
     private val listAdapter by fastLazy { MultiTypeListAdapter<LanguageItemData>() }
 
+    private val settingViewModel by activityViewModels<SettingViewModel> { SettingViewModelFactory() }
     private var currentLanguage: Language? = null
 
     override fun initViews() {
@@ -61,6 +65,7 @@ class LanguageSettingDialog : BottomDialogFragment(R.layout.dialog_language_sett
         }
         currentLanguage = language
         languageManager?.updateLanguage(language)
+        settingViewModel.reportLanguage(language)
         startNewMain()
     }
 

+ 5 - 0
module/setting/src/main/java/com/adealink/weparty/setting/report/ReportData.kt

@@ -12,4 +12,9 @@ data class ReportReq(
 data class FeedbackReq(
     @SerializedName("content") val content: String,
     @SerializedName("images") val images: List<String>
+)
+
+
+data class ReportLanguageReq(
+    @SerializedName("langCode") val langCode: String,
 )

+ 19 - 2
module/setting/src/main/java/com/adealink/weparty/setting/viewmodel/SettingViewModel.kt

@@ -3,21 +3,30 @@ package com.adealink.weparty.setting.viewmodel
 import androidx.fragment.app.FragmentActivity
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
+import com.adealink.frame.base.fastLazy
 import com.adealink.frame.coroutine.dispatcher.Dispatcher
 import com.adealink.frame.image.imageService
+import com.adealink.frame.locale.language.data.Language
 import com.adealink.frame.log.XLogHelper
 import com.adealink.frame.mvvm.livedata.OnceMutableLiveData
 import com.adealink.frame.mvvm.viewmodel.BaseViewModel
+import com.adealink.weparty.App
 import com.adealink.weparty.imageselect.util.clearAllProcessedImage
 import com.adealink.weparty.imageselect.util.getProcessedImageCacheSize
-import com.adealink.weparty.module.activity.viewmodel.IActivityViewModel
+import com.adealink.weparty.module.setting.viewmodel.ISettingViewModel
 import com.adealink.weparty.module.webview.WebModule
+import com.adealink.weparty.setting.datasource.remote.SettingHttpService
+import com.adealink.weparty.setting.report.ReportLanguageReq
 import com.adealink.weparty.update.listener.IUpdateListener
 import com.adealink.weparty.update.updateManager
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 
-class SettingViewModel : BaseViewModel(), IActivityViewModel, IUpdateListener {
+class SettingViewModel : BaseViewModel(), ISettingViewModel, IUpdateListener {
+
+    private val settingHttpService by fastLazy {
+        App.instance.networkService.getHttpService(SettingHttpService::class.java)
+    }
 
     init {
         updateManager.addListener(this)
@@ -64,4 +73,12 @@ class SettingViewModel : BaseViewModel(), IActivityViewModel, IUpdateListener {
     override fun notifyHasNewVersion(newVersion: Boolean) {
         newVersionLD.send(newVersion)
     }
+
+    override fun reportLanguage(language: Language) {
+        viewModelScope.launch {
+            settingHttpService.reportLanguage(
+                ReportLanguageReq(language.code)
+            )
+        }
+    }
 }