separate interceptors; added language interceptor for api responses
This commit is contained in:
@@ -27,6 +27,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.google.accompanist.permissions.ExperimentalPermissionsApi
|
||||
import com.google.accompanist.permissions.rememberPermissionState
|
||||
import com.meloda.app.fast.common.UiText
|
||||
import com.meloda.app.fast.common.extensions.ifEmpty
|
||||
import com.meloda.app.fast.common.extensions.isSdkAtLeast
|
||||
import com.meloda.app.fast.datastore.SettingsController
|
||||
import com.meloda.app.fast.datastore.SettingsKeys
|
||||
@@ -55,6 +56,23 @@ class MainActivity : AppCompatActivity() {
|
||||
setContent {
|
||||
KoinContext {
|
||||
val userSettings: UserSettings = koinInject()
|
||||
|
||||
LifecycleResumeEffect(true) {
|
||||
userSettings.onLanguageChanged(
|
||||
AppCompatDelegate.getApplicationLocales()
|
||||
.toLanguageTags()
|
||||
.ifEmpty { null }
|
||||
?: LocaleListCompat.getDefault()
|
||||
.toLanguageTags()
|
||||
.split(",")
|
||||
.firstOrNull()
|
||||
.orEmpty()
|
||||
.take(5)
|
||||
)
|
||||
|
||||
onPauseOrDispose {}
|
||||
}
|
||||
|
||||
LaunchedEffect(true) {
|
||||
userSettings.updateUsingDarkTheme()
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import androidx.preference.PreferenceManager
|
||||
import com.meloda.app.fast.MainViewModelImpl
|
||||
import com.meloda.app.fast.auth.authModule
|
||||
import com.meloda.app.fast.chatmaterials.di.chatMaterialsModule
|
||||
import com.meloda.app.fast.common.provider.Provider
|
||||
import com.meloda.app.fast.conversations.di.conversationsModule
|
||||
import com.meloda.app.fast.data.di.dataModule
|
||||
import com.meloda.app.fast.friends.di.friendsModule
|
||||
@@ -14,12 +15,14 @@ import com.meloda.app.fast.languagepicker.di.languagePickerModule
|
||||
import com.meloda.app.fast.messageshistory.di.messagesHistoryModule
|
||||
import com.meloda.app.fast.photoviewer.di.photoViewModule
|
||||
import com.meloda.app.fast.profile.di.profileModule
|
||||
import com.meloda.app.fast.provider.ApiLanguageProvider
|
||||
import com.meloda.app.fast.service.longpolling.di.longPollModule
|
||||
import com.meloda.app.fast.settings.di.settingsModule
|
||||
import org.koin.android.ext.koin.androidContext
|
||||
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
||||
import org.koin.core.module.dsl.singleOf
|
||||
import org.koin.core.qualifier.qualifier
|
||||
import org.koin.dsl.bind
|
||||
import org.koin.dsl.module
|
||||
|
||||
val applicationModule = module {
|
||||
@@ -43,6 +46,8 @@ val applicationModule = module {
|
||||
single<Resources> { androidContext().resources }
|
||||
factory<PowerManager> { androidContext().getSystemService(Context.POWER_SERVICE) as PowerManager }
|
||||
|
||||
singleOf(::ApiLanguageProvider) bind Provider::class
|
||||
|
||||
viewModelOf(::MainViewModelImpl) {
|
||||
qualifier = qualifier("main")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.meloda.app.fast.provider
|
||||
|
||||
import com.meloda.app.fast.common.ApiLanguage
|
||||
import com.meloda.app.fast.common.provider.Provider
|
||||
import com.meloda.app.fast.datastore.UserSettings
|
||||
|
||||
class ApiLanguageProvider(private val userSettings: UserSettings) : Provider<ApiLanguage> {
|
||||
|
||||
override fun provide(): ApiLanguage? {
|
||||
val language = userSettings.language.value
|
||||
|
||||
return when {
|
||||
language == "ru-RU" -> "ru"
|
||||
language.startsWith("en") -> "en"
|
||||
language == "uk-UA" -> "ua"
|
||||
else -> null
|
||||
}?.let(::ApiLanguage)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user