Updated on 2026-08-14
This commit is contained in:
commit
d2465287b3
7 changed files with 55 additions and 12 deletions
|
|
@ -39,6 +39,7 @@ import com.tangem.utils.coroutines.saveIn
|
|||
import com.tangem.wallet.R
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.*
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.rekotlin.Action
|
||||
|
|
@ -217,7 +218,7 @@ class DetailsMiddleware {
|
|||
}
|
||||
}
|
||||
is DetailsAction.AppSettings.CheckBiometricsStatus -> {
|
||||
observeBiometricsStatusChanges(state, action.lifecycleScope)
|
||||
observeBiometricsStatusChanges(action.lifecycleScope)
|
||||
}
|
||||
is DetailsAction.AppSettings.EnrollBiometrics -> {
|
||||
enrollBiometrics()
|
||||
|
|
@ -239,20 +240,27 @@ class DetailsMiddleware {
|
|||
}
|
||||
}
|
||||
|
||||
private fun observeBiometricsStatusChanges(state: DetailsState, lifecycleScope: LifecycleCoroutineScope) {
|
||||
lifecycleScope.launch(Dispatchers.IO) {
|
||||
private fun observeBiometricsStatusChanges(lifecycleScope: LifecycleCoroutineScope) {
|
||||
val needEnrollBiometricsFlow = flow {
|
||||
do {
|
||||
val needEnrollBiometrics = runCatching(tangemSdkManager::needEnrollBiometrics).getOrNull()
|
||||
|
||||
if (needEnrollBiometrics != null &&
|
||||
needEnrollBiometrics != state.appSettingsState.needEnrollBiometrics
|
||||
) {
|
||||
store.dispatchWithMain(DetailsAction.AppSettings.BiometricsStatusChanged(needEnrollBiometrics))
|
||||
if (needEnrollBiometrics != null) {
|
||||
emit(needEnrollBiometrics)
|
||||
}
|
||||
|
||||
delay(timeMillis = 500)
|
||||
delay(timeMillis = 200)
|
||||
} while (true)
|
||||
}.saveIn(checkBiometricsStatusJobHolder)
|
||||
}
|
||||
|
||||
needEnrollBiometricsFlow
|
||||
.distinctUntilChanged()
|
||||
.onEach { needEnrollBiometrics ->
|
||||
store.dispatchWithMain(DetailsAction.AppSettings.BiometricsStatusChanged(needEnrollBiometrics))
|
||||
}
|
||||
.flowOn(Dispatchers.IO)
|
||||
.launchIn(lifecycleScope)
|
||||
.saveIn(checkBiometricsStatusJobHolder)
|
||||
}
|
||||
|
||||
private fun enrollBiometrics() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
package com.tangem.tap.network.auth
|
||||
|
||||
import com.tangem.lib.auth.AppVersionProvider
|
||||
import com.tangem.wallet.BuildConfig
|
||||
|
||||
internal class DefaultAppVersionProvider : AppVersionProvider {
|
||||
|
||||
override fun getAppVersion(): String {
|
||||
return BuildConfig.VERSION_NAME
|
||||
}
|
||||
}
|
||||
|
|
@ -2,8 +2,10 @@ package com.tangem.tap.network.auth.di
|
|||
|
||||
import com.tangem.datasource.config.ConfigManager
|
||||
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
||||
import com.tangem.lib.auth.AppVersionProvider
|
||||
import com.tangem.lib.auth.AuthProvider
|
||||
import com.tangem.lib.auth.ExpressAuthProvider
|
||||
import com.tangem.tap.network.auth.DefaultAppVersionProvider
|
||||
import com.tangem.tap.network.auth.DefaultAuthProvider
|
||||
import com.tangem.tap.network.auth.DefaultExpressAuthProvider
|
||||
import com.tangem.tap.proxy.AppStateHolder
|
||||
|
|
@ -34,4 +36,10 @@ class AuthModule {
|
|||
configManager = configManager,
|
||||
)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideAppVersionProvider(): AppVersionProvider {
|
||||
return DefaultAppVersionProvider()
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ import com.tangem.datasource.api.tangemTech.TangemTechApi
|
|||
import com.tangem.datasource.utils.RequestHeader.*
|
||||
import com.tangem.datasource.utils.addHeaders
|
||||
import com.tangem.datasource.utils.addLoggers
|
||||
import com.tangem.lib.auth.AppVersionProvider
|
||||
import com.tangem.lib.auth.ExpressAuthProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
|
|
@ -30,6 +31,7 @@ class NetworkModule {
|
|||
@NetworkMoshi moshi: Moshi,
|
||||
@ApplicationContext context: Context,
|
||||
expressAuthProvider: ExpressAuthProvider,
|
||||
appVersionProvider: AppVersionProvider,
|
||||
): TangemExpressApi {
|
||||
val url = if (BuildConfig.ENVIRONMENT == "dev") {
|
||||
DEV_EXPRESS_BASE_URL
|
||||
|
|
@ -43,6 +45,7 @@ class NetworkModule {
|
|||
.client(
|
||||
OkHttpClient.Builder()
|
||||
.addHeaders(Express(expressAuthProvider))
|
||||
.addHeaders(AppVersionPlatformHeaders(appVersionProvider))
|
||||
.addLoggers(context)
|
||||
.build(),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.datasource.utils
|
||||
|
||||
import com.tangem.lib.auth.AppVersionProvider
|
||||
import com.tangem.lib.auth.AuthBearerProvider
|
||||
import com.tangem.lib.auth.AuthProvider
|
||||
import com.tangem.lib.auth.ExpressAuthProvider
|
||||
|
|
@ -30,4 +31,9 @@ sealed class RequestHeader(vararg pairs: Pair<String, () -> String>) {
|
|||
class AuthBearerHeader(authBearerProvider: AuthBearerProvider) : RequestHeader(
|
||||
"Authorization" to { "Bearer " + authBearerProvider.getApiKey() },
|
||||
)
|
||||
|
||||
class AppVersionPlatformHeaders(appVersionProvider: AppVersionProvider) : RequestHeader(
|
||||
"version" to { appVersionProvider.getAppVersion() },
|
||||
"platform" to { "android" },
|
||||
)
|
||||
}
|
||||
|
|
@ -80,11 +80,10 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
override fun onAddBackupCardClick() {
|
||||
analyticsEventHandler.send(MainScreen.NoticeBackupYourWalletTapped)
|
||||
|
||||
prepareOnboardingProcess()
|
||||
router.openOnboardingScreen()
|
||||
prepareAndStartOnboardingProcess()
|
||||
}
|
||||
|
||||
private fun prepareOnboardingProcess() {
|
||||
private fun prepareAndStartOnboardingProcess() {
|
||||
viewModelScope.launch(dispatchers.main) {
|
||||
getSelectedUserWallet()?.let {
|
||||
reduxStateHolder.dispatch(
|
||||
|
|
@ -94,6 +93,8 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
),
|
||||
)
|
||||
}
|
||||
// navigation action shouldn't be out of coroutine to avoid race
|
||||
router.openOnboardingScreen()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
package com.tangem.lib.auth
|
||||
|
||||
interface AppVersionProvider {
|
||||
|
||||
fun getAppVersion(): String
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue