diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt index 3152303d57..8f748fd22b 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt @@ -442,6 +442,16 @@ internal class WalletModel @Inject constructor( // Should not show scroll animation if WalletScreen isn't in the background. if (screenLifecycleProvider.isBackgroundState.value) { onConsume() + stateHolder.update( + ScrollToWalletTransformer( + prevIndex = prevIndex, + newIndex = newIndex, + currentStateProvider = Provider(action = stateHolder::value), + withScrollAnimation = false, + stateUpdater = { newState -> stateHolder.update { newState } }, + onConsume = {}, + ), + ) } else { stateHolder.update( ScrollToWalletTransformer( diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletEvent.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletEvent.kt index ee8ed9bee9..662fdca3de 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletEvent.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletEvent.kt @@ -9,6 +9,8 @@ internal sealed class WalletEvent { /** Change wallet with animation. Using [prevIndex] and [newIndex] to calculate offset */ data class ChangeWallet(val prevIndex: Int, val newIndex: Int) : WalletEvent() + data class ChangeWalletWithoutScroll(val newIndex: Int) : WalletEvent() + data class ShowError(val text: TextReference) : WalletEvent() data class ShowAlert(val state: WalletAlertState) : WalletEvent() diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ScrollToWalletTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ScrollToWalletTransformer.kt index 1bbd651f80..4504e5f4d1 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ScrollToWalletTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ScrollToWalletTransformer.kt @@ -10,6 +10,7 @@ internal class ScrollToWalletTransformer( private val prevIndex: Int, private val newIndex: Int, private val currentStateProvider: Provider, + private val withScrollAnimation: Boolean = true, private val stateUpdater: (WalletScreenState) -> Unit, private val onConsume: () -> Unit = {}, ) : WalletScreenStateTransformer { @@ -17,7 +18,11 @@ internal class ScrollToWalletTransformer( override fun transform(prevState: WalletScreenState): WalletScreenState { return prevState.copy( event = triggeredEvent( - data = WalletEvent.ChangeWallet(prevIndex = prevIndex, newIndex = newIndex), + data = if (withScrollAnimation) { + WalletEvent.ChangeWallet(prevIndex = prevIndex, newIndex = newIndex) + } else { + WalletEvent.ChangeWalletWithoutScroll(newIndex = newIndex) + }, onConsume = { stateUpdater( currentStateProvider().copy(event = consumedEvent()), diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletEventEffect.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletEventEffect.kt index a5e177dec1..6553a234d3 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletEventEffect.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletEventEffect.kt @@ -36,6 +36,10 @@ internal fun WalletEventEffect( onAutoScrollSet() walletsListState.animateScrollByIndex(prevIndex = value.prevIndex, newIndex = value.newIndex) } + is WalletEvent.ChangeWalletWithoutScroll -> { + onAutoScrollSet() + walletsListState.scrollToItem(value.newIndex) + } is WalletEvent.ShowError -> { snackbarHostState.showSnackbar(message = value.text.resolveReference(resources)) }