Updated on 2026-08-14
This commit is contained in:
parent
43108b25b5
commit
1e4e932954
8 changed files with 41 additions and 28 deletions
|
|
@ -33,7 +33,7 @@ import com.tangem.features.onboarding.v2.multiwallet.impl.child.backup.MultiWall
|
|||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.chooseoption.Wallet1ChooseOptionComponent
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.createwallet.MultiWalletCreateWalletComponent
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.finalize.MultiWalletFinalizeComponent
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.scanprimary.Wallet1ScanPrimaryComponent
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.scanprimary.MultiWalletScanPrimaryComponent
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.seedphrase.MultiWalletSeedPhraseComponent
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.model.OnboardingMultiWalletModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.model.OnboardingMultiWalletState
|
||||
|
|
@ -159,7 +159,7 @@ internal class DefaultOnboardingMultiWalletComponent @AssistedInject constructor
|
|||
backButtonClickFlow = backButtonClickFlow,
|
||||
onBack = { stackNavigation.pop() },
|
||||
)
|
||||
ScanPrimary -> Wallet1ScanPrimaryComponent(
|
||||
ScanPrimary -> MultiWalletScanPrimaryComponent(
|
||||
context = childContext,
|
||||
params = childParams,
|
||||
onDone = { handleNavigationEvent(AddBackupDevice) },
|
||||
|
|
|
|||
|
|
@ -84,6 +84,15 @@ class MultiWalletBackupModel @Inject constructor(
|
|||
}
|
||||
|
||||
analyticsEventHandler.send(OnboardingEvent.Backup.Started)
|
||||
|
||||
// Clear any saved backup before starting the backup process
|
||||
// also clears the primary card if it was set
|
||||
backupService.discardSavedBackup()
|
||||
|
||||
// Primary card from ScanTask or from the ScanPrimaryModel or from MultiWalletCreateWalletModel
|
||||
// always not null for this step
|
||||
val primaryCard = requireNotNull(scanResponse.primaryCard)
|
||||
backupService.setPrimaryCard(primaryCard)
|
||||
}
|
||||
|
||||
private fun getInitState(): MultiWalletBackupUM {
|
||||
|
|
@ -93,24 +102,11 @@ class MultiWalletBackupModel @Inject constructor(
|
|||
finalizeButtonEnabled = false,
|
||||
addBackupButtonEnabled = true,
|
||||
addBackupButtonLoading = false,
|
||||
onAddBackupClick = ::startBackupWallet,
|
||||
onAddBackupClick = ::addBackupCardWithService,
|
||||
onFinalizeButtonClick = ::onFinalizeClick,
|
||||
)
|
||||
}
|
||||
|
||||
private fun startBackupWallet() {
|
||||
if (state.value.numberOfBackupCards == 0 && scanResponse.primaryCard != null) {
|
||||
backupService.discardSavedBackup()
|
||||
}
|
||||
|
||||
val primaryCard = scanResponse.primaryCard
|
||||
if (primaryCard != null) {
|
||||
backupService.setPrimaryCard(primaryCard)
|
||||
}
|
||||
|
||||
addBackupCardWithService()
|
||||
}
|
||||
|
||||
private fun setNumberOfBackupCards(number: Int) {
|
||||
// set state for adding backup cards and disable button if there is more than 2 backup cards
|
||||
_uiState.update { st ->
|
||||
|
|
|
|||
|
|
@ -8,18 +8,18 @@ import com.tangem.core.ui.decompose.ComposableContentComponent
|
|||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.features.onboarding.v2.impl.R
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.MultiWalletChildParams
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.scanprimary.model.Wallet1ScanPrimaryModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.scanprimary.ui.Wallet1ScanPrimary
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.scanprimary.model.MultiWalletScanPrimaryModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.scanprimary.ui.MultiWalletScanPrimary
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
internal class Wallet1ScanPrimaryComponent(
|
||||
internal class MultiWalletScanPrimaryComponent(
|
||||
context: AppComponentContext,
|
||||
params: MultiWalletChildParams,
|
||||
onDone: () -> Unit,
|
||||
) : AppComponentContext by context, ComposableContentComponent {
|
||||
|
||||
private val model: Wallet1ScanPrimaryModel = getOrCreateModel(params)
|
||||
private val model: MultiWalletScanPrimaryModel = getOrCreateModel(params)
|
||||
|
||||
init {
|
||||
params.innerNavigation.update {
|
||||
|
|
@ -38,7 +38,7 @@ internal class Wallet1ScanPrimaryComponent(
|
|||
|
||||
@Composable
|
||||
override fun Content(modifier: Modifier) {
|
||||
Wallet1ScanPrimary(
|
||||
MultiWalletScanPrimary(
|
||||
isRing = model.isRing,
|
||||
onScanPrimaryClick = model::onScanPrimaryClick,
|
||||
)
|
||||
|
|
@ -5,21 +5,24 @@ import com.tangem.common.CompletionResult
|
|||
import com.tangem.core.decompose.di.ModelScoped
|
||||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
import com.tangem.domain.card.repository.CardRepository
|
||||
import com.tangem.domain.common.util.cardTypesResolver
|
||||
import com.tangem.features.onboarding.v2.impl.R
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.MultiWalletChildParams
|
||||
import com.tangem.sdk.api.BackupServiceHolder
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@Stable
|
||||
@ModelScoped
|
||||
internal class Wallet1ScanPrimaryModel @Inject constructor(
|
||||
internal class MultiWalletScanPrimaryModel @Inject constructor(
|
||||
paramsContainer: ParamsContainer,
|
||||
override val dispatchers: CoroutineDispatcherProvider,
|
||||
private val backupServiceHolder: BackupServiceHolder,
|
||||
private val cardRepository: CardRepository,
|
||||
) : Model() {
|
||||
|
||||
private val params = paramsContainer.require<MultiWalletChildParams>()
|
||||
|
|
@ -31,9 +34,20 @@ internal class Wallet1ScanPrimaryModel @Inject constructor(
|
|||
fun onScanPrimaryClick() {
|
||||
val backupService = backupServiceHolder.backupService.get() ?: return
|
||||
val iconScanRes = R.drawable.img_hand_scan_ring.takeIf { isRing }
|
||||
|
||||
backupService.readPrimaryCard(iconScanRes = iconScanRes, cardId = scanResponse.card.cardId) { result ->
|
||||
when (result) {
|
||||
is CompletionResult.Success -> {
|
||||
modelScope.launch {
|
||||
cardRepository.startCardActivation(cardId = scanResponse.card.cardId)
|
||||
}
|
||||
params.multiWalletState.update {
|
||||
it.copy(
|
||||
currentScanResponse = scanResponse.copy(
|
||||
primaryCard = result.data,
|
||||
),
|
||||
)
|
||||
}
|
||||
modelScope.launch { onDone.emit(Unit) }
|
||||
}
|
||||
is CompletionResult.Failure -> Unit
|
||||
|
|
@ -17,7 +17,7 @@ import com.tangem.core.ui.res.TangemThemePreview
|
|||
import com.tangem.features.onboarding.v2.impl.R
|
||||
|
||||
@Composable
|
||||
internal fun Wallet1ScanPrimary(isRing: Boolean, onScanPrimaryClick: () -> Unit, modifier: Modifier = Modifier) {
|
||||
internal fun MultiWalletScanPrimary(isRing: Boolean, onScanPrimaryClick: () -> Unit, modifier: Modifier = Modifier) {
|
||||
Column(
|
||||
modifier = modifier
|
||||
.fillMaxSize()
|
||||
|
|
@ -66,7 +66,7 @@ internal fun Wallet1ScanPrimary(isRing: Boolean, onScanPrimaryClick: () -> Unit,
|
|||
@Composable
|
||||
private fun Preview() {
|
||||
TangemThemePreview {
|
||||
Wallet1ScanPrimary(
|
||||
MultiWalletScanPrimary(
|
||||
isRing = true,
|
||||
onScanPrimaryClick = {},
|
||||
)
|
||||
|
|
@ -9,7 +9,7 @@ import com.tangem.features.onboarding.v2.multiwallet.impl.child.backup.model.Mul
|
|||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.chooseoption.model.Wallet1ChooseOptionModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.createwallet.model.MultiWalletCreateWalletModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.finalize.model.MultiWalletFinalizeModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.scanprimary.model.Wallet1ScanPrimaryModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.scanprimary.model.MultiWalletScanPrimaryModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.seedphrase.model.MultiWalletSeedPhraseModel
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.model.OnboardingMultiWalletModel
|
||||
import dagger.Binds
|
||||
|
|
@ -70,6 +70,6 @@ internal interface ModelModule {
|
|||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ClassKey(Wallet1ScanPrimaryModel::class)
|
||||
fun provideModel8(model: Wallet1ScanPrimaryModel): Model
|
||||
@ClassKey(MultiWalletScanPrimaryModel::class)
|
||||
fun provideModel8(model: MultiWalletScanPrimaryModel): Model
|
||||
}
|
||||
|
|
@ -24,6 +24,9 @@ data class OnboardingMultiWalletState(
|
|||
* -> [Done]
|
||||
*
|
||||
* Wallet2/Ring
|
||||
*
|
||||
* ScanPrimary -> | (BackupService is cleared, no PrimaryCard)
|
||||
* |
|
||||
* CreateWallet -> SeedPhrase -> AddBackupDevice -> Finalize -> [Done]
|
||||
* |
|
||||
* -> AddBackupDevice -> Finalize -> [Done]
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
tangemBlockchainSdk = "releases-5.26.0-1123"
|
||||
#tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds
|
||||
tangemCardSdk = "releases-5.26.0-504"
|
||||
tangemCardSdk = "releases-5.26.0-508"
|
||||
#tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^
|
||||
tangemVico = "2.0.0-alpha.25-tangem12"
|
||||
#tangemVico = "0.0.1" # Keep it! - used for local builds ^
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue