From bf8c6e8c7986a8b6e0da4b481f21c8fe399a5e74 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 31 Mar 2025 11:48:00 +0500 Subject: [PATCH 1/7] Updated on 2026-08-14 --- .../com/tangem/core/ui/utils/RequestPushPermission.kt | 5 ++--- .../impl/model/PushNotificationsModel.kt | 2 +- .../impl/presentation/ui/PushNotificationsScreen.kt | 8 +++----- .../wallet/ui/components/PushNotificationsBottomSheet.kt | 8 +++----- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/core/ui/src/main/java/com/tangem/core/ui/utils/RequestPushPermission.kt b/core/ui/src/main/java/com/tangem/core/ui/utils/RequestPushPermission.kt index 1b21fff1ef..f70452b5f7 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/utils/RequestPushPermission.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/utils/RequestPushPermission.kt @@ -2,7 +2,6 @@ package com.tangem.core.ui.utils import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.MutableState import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.rememberPermissionState @@ -16,7 +15,7 @@ import com.google.accompanist.permissions.rememberPermissionState @Composable fun requestPushPermission( pushPermission: String?, - isClicked: MutableState, + isClicked: Boolean, onAllow: () -> Unit, onDeny: () -> Unit, ): () -> Unit { @@ -26,7 +25,7 @@ fun requestPushPermission( // Check if user granted permission and close bottom sheet LaunchedEffect(key1 = permissionState?.status, isClicked) { - if (!isClicked.value) return@LaunchedEffect + if (!isClicked) return@LaunchedEffect if (permissionState?.status?.isGranted == true) { onAllow() } else { diff --git a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/model/PushNotificationsModel.kt b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/model/PushNotificationsModel.kt index fb23fe3946..29cd04e418 100644 --- a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/model/PushNotificationsModel.kt +++ b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/model/PushNotificationsModel.kt @@ -17,7 +17,7 @@ import javax.inject.Inject @Stable @ModelScoped -class PushNotificationsModel @Inject constructor( +internal class PushNotificationsModel @Inject constructor( override val dispatchers: CoroutineDispatcherProvider, private val neverRequestPermissionUseCase: NeverRequestPermissionUseCase, private val neverToInitiallyAskPermissionUseCase: NeverToInitiallyAskPermissionUseCase, diff --git a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsScreen.kt b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsScreen.kt index 0e09e38cc3..01d07a68ab 100644 --- a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsScreen.kt +++ b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsScreen.kt @@ -1,9 +1,7 @@ package com.tangem.features.pushnotifications.impl.presentation.ui import androidx.compose.foundation.layout.systemBarsPadding -import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember +import androidx.compose.runtime.* import androidx.compose.ui.Modifier import com.tangem.core.ui.components.showcase.Showcase import com.tangem.core.ui.components.showcase.model.ShowcaseButtonModel @@ -21,7 +19,7 @@ internal fun PushNotificationsScreen( onAllowPermission: () -> Unit, onDenyPermission: () -> Unit, ) { - val isClicked = remember { mutableStateOf(false) } + var isClicked by remember { mutableStateOf(false) } val requestPushPermission = requestPushPermission( isClicked = isClicked, onAllow = onAllowPermission, @@ -45,7 +43,7 @@ internal fun PushNotificationsScreen( primaryButton = ShowcaseButtonModel( buttonText = resourceReference(R.string.common_allow), onClick = { - isClicked.value = true + isClicked = true onRequest() requestPushPermission() }, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/PushNotificationsBottomSheet.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/PushNotificationsBottomSheet.kt index eb10376318..4bbb305824 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/PushNotificationsBottomSheet.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/PushNotificationsBottomSheet.kt @@ -6,9 +6,7 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding -import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember +import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import com.tangem.core.ui.components.PrimaryButton @@ -36,7 +34,7 @@ internal fun PushNotificationsBottomSheet(config: TangemBottomSheetConfig) { @Composable private fun PushNotificationsSheetContent(content: PushNotificationsBottomSheetConfig, onDismiss: () -> Unit) { - val isClicked = remember { mutableStateOf(false) } + var isClicked by remember { mutableStateOf(false) } val requestPushPermission = requestPushPermission( pushPermission = getPushPermissionOrNull(), isClicked = isClicked, @@ -86,7 +84,7 @@ private fun PushNotificationsSheetContent(content: PushNotificationsBottomSheetC PrimaryButton( text = stringResourceSafe(R.string.common_allow), onClick = { - isClicked.value = true + isClicked = true content.onRequest() requestPushPermission() }, From 6db5fde59af2baa2fca8d38dec0eb5163f6e69a0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 31 Mar 2025 12:28:13 +0500 Subject: [PATCH 2/7] Updated on 2026-08-14 --- .../products/wallet/ui/dialogs/AccessCodeDialog.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/AccessCodeDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/AccessCodeDialog.kt index 5cd9b6dcb2..bdeec1a22b 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/AccessCodeDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/dialogs/AccessCodeDialog.kt @@ -16,7 +16,7 @@ import com.tangem.wallet.databinding.LayoutBackupAccessCodeBinding class AccessCodeDialog(context: Context) : BottomSheetDialog(context) { - var binding: LayoutBackupAccessCodeBinding? = null + private var binding: LayoutBackupAccessCodeBinding? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -33,7 +33,7 @@ class AccessCodeDialog(context: Context) : BottomSheetDialog(context) { } } - fun showInfoScreen() = with(binding!!) { + fun showInfoScreen() = binding?.run { behavior.state = BottomSheetBehavior.STATE_EXPANDED accessCodeTitle.text = context.getText(R.string.onboarding_access_code_intro_title) layoutBackupAccessCodeInfo.root.show() @@ -43,7 +43,7 @@ class AccessCodeDialog(context: Context) : BottomSheetDialog(context) { } } - fun showEnterAccessCode() = with(binding!!) { + fun showEnterAccessCode() = binding?.run { layoutBackupAccessCodeInfo.root.hide() layoutBackupAccessCodeSubmit.root.show() accessCodeTitle.text = context.getText(R.string.onboarding_access_code_intro_title) @@ -56,7 +56,7 @@ class AccessCodeDialog(context: Context) : BottomSheetDialog(context) { } } - fun showReenterAccessCode() = with(binding!!) { + fun showReenterAccessCode() = binding?.run { layoutBackupAccessCodeInfo.root.hide() layoutBackupAccessCodeSubmit.root.show() accessCodeTitle.text = context.getText(R.string.onboarding_access_code_repeat_code_title) @@ -69,7 +69,7 @@ class AccessCodeDialog(context: Context) : BottomSheetDialog(context) { } } - fun showError(error: AccessCodeError?) = with(binding!!.layoutBackupAccessCodeSubmit) { + fun showError(error: AccessCodeError?) = binding?.layoutBackupAccessCodeSubmit?.run { when (error) { AccessCodeError.CodeTooShort -> tilAccessCode.error = context.getString(R.string.onboarding_access_code_too_short) From d452b4ca23782fa1b0ecd184f8c336a7d9200bae Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 31 Mar 2025 11:50:51 +0300 Subject: [PATCH 3/7] Updated on 2026-08-14 --- .../wallet/redux/OnboardingWalletMiddleware.kt | 7 ++++++- .../tap/features/welcome/model/WelcomeModel.kt | 2 ++ .../com/tangem/tap/routing/utils/ChildFactory.kt | 4 ++++ .../kotlin/com/tangem/common/routing/AppRoute.kt | 1 + .../v2/entry/OnboardingEntryComponent.kt | 1 + .../v2/entry/impl/model/OnboardingEntryModel.kt | 8 ++++++-- .../api/OnboardingMultiWalletComponent.kt | 1 + .../finalize/model/MultiWalletFinalizeModel.kt | 4 +++- .../impl/model/OnboardingMultiWalletModel.kt | 16 +++++++++++++++- 9 files changed, 39 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index 855d95ce35..c8f16739b1 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -624,7 +624,12 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) if (action.unfinishedBackupScanResponse != null) { // onboarding V2 store.dispatchNavigationAction { - push(AppRoute.Onboarding(scanResponse = action.unfinishedBackupScanResponse)) + push( + AppRoute.Onboarding( + scanResponse = action.unfinishedBackupScanResponse, + mode = AppRoute.Onboarding.Mode.ContinueFinalize, + ), + ) } } else { store.dispatch( diff --git a/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt b/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt index fd312671d9..7d15881d39 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.welcome.model import com.tangem.common.core.TangemError import com.tangem.core.analytics.Analytics +import com.tangem.core.decompose.di.ModelScoped import com.tangem.core.decompose.model.Model import com.tangem.core.decompose.model.ParamsContainer import com.tangem.core.navigation.finisher.AppFinisher @@ -23,6 +24,7 @@ import org.rekotlin.StoreSubscriber import javax.inject.Inject // FIXME: Remove redux: [REDACTED_JIRA] +@ModelScoped internal class WelcomeModel @Inject constructor( override val dispatchers: CoroutineDispatcherProvider, private val appFinisher: AppFinisher, diff --git a/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt b/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt index f437e1e6e9..1005d79f38 100644 --- a/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt +++ b/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt @@ -204,6 +204,8 @@ internal class ChildFactory @Inject constructor( multiWalletMode = when (route.mode) { AppRoute.Onboarding.Mode.Onboarding -> OnboardingEntryComponent.MultiWalletMode.Onboarding AppRoute.Onboarding.Mode.AddBackup -> OnboardingEntryComponent.MultiWalletMode.AddBackup + AppRoute.Onboarding.Mode.ContinueFinalize -> + OnboardingEntryComponent.MultiWalletMode.ContinueFinalize }, ), componentFactory = onboardingEntryComponentFactory, @@ -648,6 +650,8 @@ internal class ChildFactory @Inject constructor( multiWalletMode = when (route.mode) { AppRoute.Onboarding.Mode.Onboarding -> OnboardingEntryComponent.MultiWalletMode.Onboarding AppRoute.Onboarding.Mode.AddBackup -> OnboardingEntryComponent.MultiWalletMode.AddBackup + AppRoute.Onboarding.Mode.ContinueFinalize -> + OnboardingEntryComponent.MultiWalletMode.ContinueFinalize }, ), componentFactory = onboardingEntryComponentFactory, diff --git a/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt b/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt index f033d76c1e..eb0c41ce29 100644 --- a/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt +++ b/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt @@ -256,6 +256,7 @@ sealed class AppRoute(val path: String) : Route { enum class Mode { Onboarding, // general Mode AddBackup, // continue backup process for existing wallet 1 + ContinueFinalize, // continue finalize process (unfinished backup dialog) } } diff --git a/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/entry/OnboardingEntryComponent.kt b/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/entry/OnboardingEntryComponent.kt index 9649b1e0c7..3728ca80ae 100644 --- a/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/entry/OnboardingEntryComponent.kt +++ b/features/onboarding-v2/api/src/main/kotlin/com/tangem/features/onboarding/v2/entry/OnboardingEntryComponent.kt @@ -14,6 +14,7 @@ interface OnboardingEntryComponent : ComposableContentComponent { enum class MultiWalletMode { Onboarding, AddBackup, + ContinueFinalize, } interface Factory : ComponentFactory diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/model/OnboardingEntryModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/model/OnboardingEntryModel.kt index 45def47034..8deec2de9b 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/model/OnboardingEntryModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/entry/impl/model/OnboardingEntryModel.kt @@ -67,8 +67,12 @@ internal class OnboardingEntryModel @Inject constructor( private fun routeByProductType(scanResponse: ScanResponse): OnboardingRoute { val multiWalletNavigationMode = when (params.multiWalletMode) { - OnboardingEntryComponent.MultiWalletMode.Onboarding -> OnboardingMultiWalletComponent.Mode.Onboarding - OnboardingEntryComponent.MultiWalletMode.AddBackup -> OnboardingMultiWalletComponent.Mode.AddBackup + OnboardingEntryComponent.MultiWalletMode.Onboarding -> + OnboardingMultiWalletComponent.Mode.Onboarding + OnboardingEntryComponent.MultiWalletMode.AddBackup -> + OnboardingMultiWalletComponent.Mode.AddBackup + OnboardingEntryComponent.MultiWalletMode.ContinueFinalize -> + OnboardingMultiWalletComponent.Mode.ContinueFinalize } return when (scanResponse.productType) { diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/api/OnboardingMultiWalletComponent.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/api/OnboardingMultiWalletComponent.kt index 44fdf461ed..76ceb4466e 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/api/OnboardingMultiWalletComponent.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/api/OnboardingMultiWalletComponent.kt @@ -20,6 +20,7 @@ interface OnboardingMultiWalletComponent : ComposableContentComponent, InnerNavi enum class Mode { Onboarding, AddBackup, + ContinueFinalize, } interface Factory : ComponentFactory diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/MultiWalletFinalizeModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/MultiWalletFinalizeModel.kt index ebf937ae3d..a615402867 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/MultiWalletFinalizeModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/finalize/model/MultiWalletFinalizeModel.kt @@ -227,7 +227,9 @@ internal class MultiWalletFinalizeModel @Inject constructor( val userWalletCreated = createUserWallet(scanResponse) val userWallet = when (params.parentParams.mode) { - OnboardingMultiWalletComponent.Mode.Onboarding -> { + OnboardingMultiWalletComponent.Mode.Onboarding, + OnboardingMultiWalletComponent.Mode.ContinueFinalize, + -> { userWalletsListManager.save( userWallet = userWalletCreated.copy( scanResponse = scanResponse.updateScanResponseAfterBackup(), diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/model/OnboardingMultiWalletModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/model/OnboardingMultiWalletModel.kt index f1c33ffc66..c7d7b2963a 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/model/OnboardingMultiWalletModel.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/model/OnboardingMultiWalletModel.kt @@ -40,7 +40,7 @@ internal class OnboardingMultiWalletModel @Inject constructor( currentStep = getInitialStep(), currentScanResponse = params.scanResponse, accessCode = null, - isThreeCards = true, + isThreeCards = isThreeCardsInit(), resultUserWallet = null, startFromFinalize = getInitialStartFromFinalize(), ), @@ -99,6 +99,8 @@ internal class OnboardingMultiWalletModel @Inject constructor( val card = scanResponse.card return when { + params.mode == OnboardingMultiWalletComponent.Mode.ContinueFinalize -> + OnboardingMultiWalletState.Step.Finalize // Add backup button // Wallet1 without backup and userwallet's scanResponse doesn't contain primary card. card.wallets.isNotEmpty() && card.backupStatus == CardDTO.BackupStatus.NoBackup && @@ -131,6 +133,18 @@ internal class OnboardingMultiWalletModel @Inject constructor( } } + private fun isThreeCardsInit(): Boolean { + val backupService = backupServiceHolder.backupService.get() ?: return true + return when (backupService.currentState) { + BackupService.State.FinalizingPrimaryCard, + is BackupService.State.FinalizingBackupCard, + -> { + backupService.addedBackupCardsCount > 1 + } + else -> true + } + } + private fun initScreenTitle() { val title = screenTitleByStep(getInitialStep()) params.titleProvider.changeTitle(title) From ce92d75db40da26aa67b65051da8f4acd789c977 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 31 Mar 2025 13:14:48 +0300 Subject: [PATCH 4/7] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/MainActivity.kt | 4 ++-- .../com/tangem/tap/features/welcome/model/WelcomeModel.kt | 4 ---- .../com/tangem/tap/features/welcome/redux/WelcomeAction.kt | 5 ----- .../tangem/tap/features/welcome/redux/WelcomeMiddleware.kt | 3 ++- .../com/tangem/tap/features/welcome/redux/WelcomeReducer.kt | 2 -- .../com/tangem/tap/features/welcome/redux/WelcomeState.kt | 2 -- 6 files changed, 4 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 60676fa1f7..27403d8cd3 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -108,11 +108,11 @@ internal var lockUserWalletsTimer: LockUserWalletsTimer? = null var notificationsHandler: NotificationsHandler? = null private val coroutineContext: CoroutineContext - get() = Job() + Dispatchers.IO + FeatureCoroutineExceptionHandler.create("scope") + get() = SupervisorJob() + Dispatchers.IO + FeatureCoroutineExceptionHandler.create("scope") val scope = CoroutineScope(coroutineContext) private val mainCoroutineContext: CoroutineContext - get() = Job() + Dispatchers.Main + FeatureCoroutineExceptionHandler.create("mainScope") + get() = SupervisorJob() + Dispatchers.Main + FeatureCoroutineExceptionHandler.create("mainScope") val mainScope = CoroutineScope(mainCoroutineContext) @Suppress("LargeClass") diff --git a/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt b/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt index 7d15881d39..45fc140480 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/model/WelcomeModel.kt @@ -15,7 +15,6 @@ import com.tangem.tap.features.welcome.redux.WelcomeAction import com.tangem.tap.features.welcome.redux.WelcomeState import com.tangem.tap.features.welcome.ui.WelcomeScreenState import com.tangem.tap.features.welcome.ui.model.WarningModel -import com.tangem.tap.mainScope import com.tangem.tap.store import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.flow.MutableStateFlow @@ -42,8 +41,6 @@ internal class WelcomeModel @Inject constructor( val state: MutableStateFlow = MutableStateFlow(initialState) init { - store.dispatch(WelcomeAction.SetCoroutineScope(mainScope)) - subscribeToStoreChanges() initGlobalState() @@ -89,7 +86,6 @@ internal class WelcomeModel @Inject constructor( } override fun onDestroy() { - store.dispatch(WelcomeAction.ClearCoroutineScope) store.unsubscribe(subscriber = this) super.onDestroy() diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeAction.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeAction.kt index fbae455ce2..bd88693c6b 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeAction.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeAction.kt @@ -2,15 +2,10 @@ package com.tangem.tap.features.welcome.redux import android.content.Intent import com.tangem.common.core.TangemError -import kotlinx.coroutines.CoroutineScope import org.rekotlin.Action internal sealed interface WelcomeAction : Action { - data class SetCoroutineScope(val scope: CoroutineScope) : WelcomeAction - - object ClearCoroutineScope : WelcomeAction - data class ProceedWithBiometrics(val afterUnlockIntent: Intent? = null) : WelcomeAction { object Success : WelcomeAction data class Error(val error: TangemError) : WelcomeAction diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt index b9f8660cf1..2c0548f38d 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt @@ -23,6 +23,7 @@ import com.tangem.tap.common.extensions.* import com.tangem.tap.common.redux.AppState import com.tangem.tap.features.intentHandler.handlers.BackgroundScanIntentHandler import com.tangem.tap.features.intentHandler.handlers.WalletConnectLinkIntentHandler +import com.tangem.tap.mainScope import com.tangem.tap.proxy.redux.DaggerGraphState import com.tangem.tap.scope import com.tangem.tap.store @@ -46,7 +47,7 @@ internal class WelcomeMiddleware { } private fun handleAction(action: WelcomeAction, state: WelcomeState) { - state.scope?.launch { + mainScope.launch { when (action) { is WelcomeAction.ProceedWithIntent -> proceedWithIntent(action.intent, scope = this) is WelcomeAction.ProceedWithBiometrics -> proceedWithBiometrics( diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeReducer.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeReducer.kt index 35f81371fa..1f475f9a80 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeReducer.kt @@ -14,8 +14,6 @@ internal object WelcomeReducer { private fun internalReduce(action: WelcomeAction, state: WelcomeState): WelcomeState { return when (action) { - is WelcomeAction.SetCoroutineScope -> state.copy(scope = action.scope) - is WelcomeAction.ClearCoroutineScope -> state.copy(scope = null) is WelcomeAction.ProceedWithIntent -> state.copy(intent = action.intent) is WelcomeAction.ProceedWithBiometrics -> state.copy(isUnlockWithBiometricsInProgress = true) is WelcomeAction.ProceedWithCard -> state.copy(isUnlockWithCardInProgress = true) diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeState.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeState.kt index 951fa1e673..a8a55d3984 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeState.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeState.kt @@ -2,11 +2,9 @@ package com.tangem.tap.features.welcome.redux import android.content.Intent import com.tangem.common.core.TangemError -import kotlinx.coroutines.CoroutineScope import org.rekotlin.StateType data class WelcomeState( - val scope: CoroutineScope? = null, val isUnlockWithBiometricsInProgress: Boolean = false, val isUnlockWithCardInProgress: Boolean = false, val intent: Intent? = null, From c537034a0f3ea1c5d30ea38571732e263c185cbb Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 1 Apr 2025 10:27:30 +0300 Subject: [PATCH 5/7] Updated on 2026-08-14 --- .../impl/child/chooseoption/ui/Wallet1ChooseOption.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/chooseoption/ui/Wallet1ChooseOption.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/chooseoption/ui/Wallet1ChooseOption.kt index 02d9a6eb9f..9e2483a3b1 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/chooseoption/ui/Wallet1ChooseOption.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/multiwallet/impl/child/chooseoption/ui/Wallet1ChooseOption.kt @@ -39,9 +39,8 @@ fun Wallet1ChooseOption( Column( Modifier .fillMaxWidth() - .verticalScroll(rememberScrollState()) .weight(1f) - .padding(top = 32.dp, bottom = 16.dp), + .padding(vertical = 16.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { val pagerState = rememberPagerState { CarouselItems.size } @@ -49,6 +48,8 @@ fun Wallet1ChooseOption( HorizontalPager(pagerState) { selectedIndex -> Column( modifier = Modifier + .fillMaxWidth() + .verticalScroll(rememberScrollState()) .padding(start = 32.dp, end = 32.dp, bottom = 16.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { From dc281935310e785ab5ad63198eb8a9e3d869417f Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 1 Apr 2025 11:37:29 +0500 Subject: [PATCH 6/7] Updated on 2026-08-14 --- .../java/com/tangem/datasource/di/TxHistoryItemsStoreModule.kt | 2 ++ gradle/tangem_dependencies.toml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/TxHistoryItemsStoreModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/TxHistoryItemsStoreModule.kt index 9a936f57f0..aa6dd40222 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/TxHistoryItemsStoreModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/TxHistoryItemsStoreModule.kt @@ -7,12 +7,14 @@ import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) internal object TxHistoryItemsStoreModule { @Provides + @Singleton fun provideTxHistoryItemsStore(): TxHistoryItemsStore { return DefaultTxHistoryItemsStore( dataStore = RuntimeDataStore(), diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 58cb7cc642..32be17375b 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -1,5 +1,5 @@ [versions] -tangemBlockchainSdk = "release-app_5.22-987" +tangemBlockchainSdk = "release-app_5.22-997" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.22-440" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ From b10bd5f3f9b11955e08a7d2217f8e2194b4d621c Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 1 Apr 2025 09:10:46 +0000 Subject: [PATCH 7/7] Updated on 2026-08-14 --- gradle/tangem_dependencies.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 32be17375b..21d426e758 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -1,7 +1,7 @@ [versions] -tangemBlockchainSdk = "release-app_5.22-997" +tangemBlockchainSdk = "develop-990" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "release-app_5.22-440" +tangemCardSdk = "develop-445" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem-developments8" #tangemVico = "0.0.1" # Keep it! - used for local builds ^