diff --git a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt index e919fa41ec..5725564ef4 100644 --- a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt @@ -50,7 +50,8 @@ internal class MainViewModel @Inject constructor( it.isBalanceHidingNotificationEnabled && it.isBalanceHidden } .onEach { - if (state.value.modalNotification?.isShow != true) { + if (state.value.modalNotification?.isShow != true && !it.isUpdateFromToast) { + listenToFlipsUseCase.changeUpdateEnabled(false) stateHolder.updateWithHiddenBalancesNotification() reduxNavController.navigate(NavigationAction.NavigateTo(AppScreen.ModalNotification)) } @@ -79,7 +80,9 @@ internal class MainViewModel @Inject constructor( return@onEach } - displayBalancesHiddenStatusToast(settings) + if (!settings.isUpdateFromToast) { + displayBalancesHiddenStatusToast(settings) + } previousSettings = settings } @@ -96,7 +99,10 @@ internal class MainViewModel @Inject constructor( override fun onHiddenBalanceToastAction() { viewModelScope.launch { updateBalanceHidingSettingsUseCase.invoke { - copy(isBalanceHidden = false) + copy( + isBalanceHidden = false, + isUpdateFromToast = true, + ) } } } @@ -104,7 +110,10 @@ internal class MainViewModel @Inject constructor( override fun onShownBalanceToastAction() { viewModelScope.launch { updateBalanceHidingSettingsUseCase.invoke { - copy(isBalanceHidden = true) + copy( + isBalanceHidden = true, + isUpdateFromToast = true, + ) } } } @@ -112,6 +121,7 @@ internal class MainViewModel @Inject constructor( override fun onHiddenBalanceNotificationAction(isPermanent: Boolean) { onDismissBottomSheet() + stateHolder.updateWithHiddenBalancesToast(true) if (isPermanent) { viewModelScope.launch { updateBalanceHidingSettingsUseCase.invoke { @@ -122,6 +132,8 @@ internal class MainViewModel @Inject constructor( } override fun onDismissBottomSheet() { + listenToFlipsUseCase.changeUpdateEnabled(true) stateHolder.updateWithoutModalNotification() + stateHolder.updateWithHiddenBalancesToast(true) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt b/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt index 2a40e92ef8..ec7cb8d416 100644 --- a/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt @@ -2,12 +2,14 @@ package com.tangem.tap.features.main.ui import android.content.DialogInterface import androidx.activity.compose.BackHandler +import androidx.compose.foundation.background import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.fragment.app.activityViewModels import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeBottomSheetFragment import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.tap.features.main.MainViewModel @@ -37,7 +39,11 @@ internal class ModalNotificationBottomSheetFragment : ComposeBottomSheetFragment when (val content = notification.content) { is ModalNotification -> ModalNotificationContent( - modifier = modifier, + modifier = modifier + .background( + color = TangemTheme.colors.background.primary, + shape = TangemTheme.shapes.bottomSheet, + ), notification = content, ) else -> Unit diff --git a/app/src/main/java/com/tangem/tap/features/main/ui/components/ModalNotificationScreen.kt b/app/src/main/java/com/tangem/tap/features/main/ui/components/ModalNotificationScreen.kt index 3ebb87e8dd..587b734dc0 100644 --- a/app/src/main/java/com/tangem/tap/features/main/ui/components/ModalNotificationScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/main/ui/components/ModalNotificationScreen.kt @@ -88,9 +88,9 @@ private fun ModalNotificationContentPreview_Light( ) { TangemTheme(isDark = false) { ModalNotificationContent( - param, + notification = param, modifier = Modifier.background( - color = TangemTheme.colors.background.plain, + color = TangemTheme.colors.background.primary, shape = TangemTheme.shapes.bottomSheet, ), ) @@ -104,9 +104,9 @@ private fun ModalNotificationContentPreview_Dark( ) { TangemTheme(isDark = true) { ModalNotificationContent( - param, + notification = param, modifier = Modifier.background( - color = TangemTheme.colors.background.plain, + color = TangemTheme.colors.background.primary, shape = TangemTheme.shapes.bottomSheet, ), ) diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt b/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt index fe7c000ae6..4d9bdb266a 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt @@ -17,10 +17,10 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import timber.log.Timber import javax.inject.Inject @@ -44,13 +44,12 @@ internal class SendViewModel @Inject constructor( getBalanceHidingSettingsUseCase() .flowWithLifecycle(owner.lifecycle) .onEach { - withContext(dispatchers.main) { - appStateHolder.mainStore?.dispatch(AmountAction.HideBalance(it.isBalanceHidden)) - } + appStateHolder.mainStore?.dispatch(AmountAction.HideBalance(it.isBalanceHidden)) } + .flowOn(dispatchers.main) .launchIn(viewModelScope) - viewModelScope.launch { + viewModelScope.launch(dispatchers.main) { listenToFlipsUseCase() .flowWithLifecycle(owner.lifecycle) .collect() diff --git a/data/balance-hiding/src/main/java/com/tangem/data/balancehiding/DefaultBalanceHidingRepository.kt b/data/balance-hiding/src/main/java/com/tangem/data/balancehiding/DefaultBalanceHidingRepository.kt index 879bef5f17..780b3705a8 100644 --- a/data/balance-hiding/src/main/java/com/tangem/data/balancehiding/DefaultBalanceHidingRepository.kt +++ b/data/balance-hiding/src/main/java/com/tangem/data/balancehiding/DefaultBalanceHidingRepository.kt @@ -15,6 +15,8 @@ internal class DefaultBalanceHidingRepository( private val dispatchers: CoroutineDispatcherProvider, ) : BalanceHidingRepository { + override var isUpdateEnabled: Boolean = true + override fun getBalanceHidingSettingsFlow(): Flow { return balanceHidingSettingsStore.get() .onStart { emit(getBalanceHidingSettings()) } diff --git a/domain/balance-hiding/models/src/main/kotlin/com/tangem/domain/balancehiding/BalanceHidingSettings.kt b/domain/balance-hiding/models/src/main/kotlin/com/tangem/domain/balancehiding/BalanceHidingSettings.kt index 2432bbc2ec..b646dd8c30 100644 --- a/domain/balance-hiding/models/src/main/kotlin/com/tangem/domain/balancehiding/BalanceHidingSettings.kt +++ b/domain/balance-hiding/models/src/main/kotlin/com/tangem/domain/balancehiding/BalanceHidingSettings.kt @@ -4,4 +4,5 @@ data class BalanceHidingSettings( val isHidingEnabledInSettings: Boolean, val isBalanceHidden: Boolean, val isBalanceHidingNotificationEnabled: Boolean, + val isUpdateFromToast: Boolean = false, ) \ No newline at end of file diff --git a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt index c80577e10e..d518006d05 100644 --- a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt +++ b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt @@ -24,12 +24,13 @@ class ListenToFlipsUseCase( }, ) - if (balanceHidingSettings.isHidingEnabledInSettings) { + if (balanceHidingSettings.isHidingEnabledInSettings && balanceHidingRepository.isUpdateEnabled) { catch( block = { balanceHidingRepository.storeBalanceHidingSettings( balanceHidingSettings.copy( isBalanceHidden = !balanceHidingSettings.isBalanceHidden, + isUpdateFromToast = false, ), ) }, @@ -40,4 +41,8 @@ class ListenToFlipsUseCase( } } } + + fun changeUpdateEnabled(isUpdateEnabled: Boolean) { + balanceHidingRepository.isUpdateEnabled = isUpdateEnabled + } } \ No newline at end of file diff --git a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/repositories/BalanceHidingRepository.kt b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/repositories/BalanceHidingRepository.kt index 84161a07d9..93d21ef4b2 100644 --- a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/repositories/BalanceHidingRepository.kt +++ b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/repositories/BalanceHidingRepository.kt @@ -5,6 +5,8 @@ import kotlinx.coroutines.flow.Flow interface BalanceHidingRepository { + var isUpdateEnabled: Boolean + fun getBalanceHidingSettingsFlow(): Flow suspend fun storeBalanceHidingSettings(isBalanceHidden: BalanceHidingSettings)