diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletAction.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletAction.kt index c624e36825..3538c3bb27 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletAction.kt @@ -23,7 +23,9 @@ sealed class OnboardingWalletAction : Action { data object ResumeBackup : OnboardingWalletAction() data class LoadArtwork(val cardArtworkUriForUnfinishedBackup: Uri? = null) : OnboardingWalletAction() - class SetArtworkUrl(val artworkUri: Uri?) : OnboardingWalletAction() + class SetPrimaryCardArtworkUrl(val artworkUri: Uri?) : OnboardingWalletAction() + class SetSecondCardArtworkUrl(val artworkUri: Uri?) : OnboardingWalletAction() + class SetThirdCardArtworkUrl(val artworkUri: Uri?) : OnboardingWalletAction() data object OnBackPressed : OnboardingWalletAction() } 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 0e32a392c4..95b2fd2452 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 @@ -3,6 +3,7 @@ package com.tangem.tap.features.onboarding.products.wallet.redux import android.net.Uri import com.google.firebase.crashlytics.FirebaseCrashlytics import com.tangem.common.CompletionResult +import com.tangem.common.card.Card import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.guard import com.tangem.common.extensions.ifNotNull @@ -11,6 +12,7 @@ import com.tangem.common.routing.AppRoute import com.tangem.common.routing.AppRouter import com.tangem.common.services.Result import com.tangem.core.analytics.Analytics +import com.tangem.domain.common.extensions.withIOContext import com.tangem.domain.common.extensions.withMainContext import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.models.scan.CardDTO @@ -106,7 +108,7 @@ private fun handleWalletAction(action: Action) { val cardPublicKey = backupService.primaryPublicKey if (primaryCardId != null && cardPublicKey != null) { // uses when no scanResponse and backup state restored - loadArtworkForUnfinishedBackup( + loadArtworkForCard( cardId = primaryCardId, cardPublicKey = cardPublicKey, defaultArtwork = action.cardArtworkUriForUnfinishedBackup, @@ -119,7 +121,7 @@ private fun handleWalletAction(action: Action) { .takeIf { it != Artwork.DEFAULT_IMG_URL } ?.let { Uri.parse(it) } } - store.dispatchOnMain(OnboardingWalletAction.SetArtworkUrl(cardArtwork)) + store.dispatchOnMain(OnboardingWalletAction.SetPrimaryCardArtworkUrl(cardArtwork)) } } is OnboardingWalletAction.CreateWallet -> { @@ -232,11 +234,7 @@ private suspend fun readCard(onSuccess: (ScanResponse) -> Unit) { ) } -private suspend fun loadArtworkForUnfinishedBackup( - cardId: String, - cardPublicKey: ByteArray, - defaultArtwork: Uri?, -): Uri { +private suspend fun loadArtworkForCard(cardId: String, cardPublicKey: ByteArray, defaultArtwork: Uri?): Uri { return when (val cardInfo = OnlineCardVerifier().getCardInfo(cardId, cardPublicKey)) { is Result.Success -> { val artworkId = cardInfo.data.artwork?.id @@ -443,6 +441,7 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) store.dispatchOnMain(BackupAction.AddBackupCard.ChangeButtonLoading(false)) when (result) { is CompletionResult.Success -> { + updateArtworks(backupService.addedBackupCardsCount, result.data) store.dispatchOnMain(BackupAction.AddBackupCard.Success) } is CompletionResult.Failure -> { @@ -630,6 +629,22 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) } } +fun updateArtworks(addedBackupCardsCount: Int, card: Card) { + mainScope.launch { + withIOContext { + val imageUri = loadArtworkForCard(card.cardId, card.cardPublicKey, Uri.EMPTY) + when (addedBackupCardsCount) { + 1 -> { + store.dispatchOnMain(OnboardingWalletAction.SetSecondCardArtworkUrl(imageUri)) + } + 2 -> { + store.dispatchOnMain(OnboardingWalletAction.SetThirdCardArtworkUrl(imageUri)) + } + } + } + } +} + internal fun gatherCardIds(backupState: BackupState, card: CardDTO?): List { return (listOf(backupState.primaryCardId, card?.cardId) + backupState.backupCardIds) .filterNotNull() diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt index 1a400ea778..035db68bae 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt @@ -21,8 +21,20 @@ private fun internalReduce(action: Action, appState: AppState): OnboardingWallet step = OnboardingWalletStep.CreateWallet, ) is OnboardingWalletAction.ResumeBackup -> state.copy(step = OnboardingWalletStep.Backup) - is OnboardingWalletAction.SetArtworkUrl -> { - state.copy(cardArtworkUri = action.artworkUri) + is OnboardingWalletAction.SetPrimaryCardArtworkUrl -> { + state.copy( + walletImages = state.walletImages.copy(primaryCardImage = action.artworkUri), + ) + } + is OnboardingWalletAction.SetSecondCardArtworkUrl -> { + state.copy( + walletImages = state.walletImages.copy(secondCardImage = action.artworkUri), + ) + } + is OnboardingWalletAction.SetThirdCardArtworkUrl -> { + state.copy( + walletImages = state.walletImages.copy(thirdCardImage = action.artworkUri), + ) } is OnboardingWalletAction.Done -> state.copy(step = OnboardingWalletStep.Done) else -> state diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletState.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletState.kt index 6663311df8..853678f202 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletState.kt @@ -12,7 +12,7 @@ data class OnboardingWalletState( val step: OnboardingWalletStep = OnboardingWalletStep.None, val wallet2State: OnboardingWallet2State? = null, val backupState: BackupState = BackupState(), - val cardArtworkUri: Uri? = null, + val walletImages: WalletImages = WalletImages(), val showConfetti: Boolean = false, val isRingOnboarding: Boolean = false, ) : StateType { @@ -49,6 +49,12 @@ data class OnboardingWalletState( private fun getWallet2Progress(): Int = wallet2State?.maxProgress ?: 0 } +data class WalletImages( + val primaryCardImage: Uri? = null, + val secondCardImage: Uri? = null, + val thirdCardImage: Uri? = null, +) + data class OnboardingWallet2State( val maxProgress: Int, ) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt index e0577994f9..fb9acfefd5 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt @@ -26,6 +26,7 @@ import com.tangem.core.analytics.Analytics import com.tangem.core.analytics.models.AnalyticsParam import com.tangem.core.analytics.models.Basic import com.tangem.core.ui.extensions.setStatusBarColor +import com.tangem.datasource.utils.isNullOrEmpty import com.tangem.domain.common.util.cardTypesResolver import com.tangem.feature.onboarding.data.model.CreateWalletResponse import com.tangem.feature.onboarding.presentation.wallet2.analytics.SeedPhraseSource @@ -186,30 +187,27 @@ class OnboardingWalletFragment : when { state.wallet2State != null -> { seedPhraseStateHandler.newState(this, state, seedPhraseViewModel) - state.cardArtworkUri?.let { - seedPhraseViewModel.setCardArtworkUri(it.toString()) - if (state.isRingOnboarding) { - binding.imvFrontCard.load(R.drawable.img_ring_placeholder) - } else { - loadImageIntoImageView(state.cardArtworkUri, binding.imvFrontCard) - } - loadImageIntoImageView(it, binding.imvFirstBackupCard) - loadImageIntoImageView(it, binding.imvSecondBackupCard) - } + updateWalletImagesState(state.walletImages) } else -> { - if (state.isRingOnboarding) { - binding.imvFrontCard.load(R.drawable.img_ring_placeholder) - } else { - loadImageIntoImageView(state.cardArtworkUri, binding.imvFrontCard) - } - loadImageIntoImageView(state.cardArtworkUri, binding.imvFirstBackupCard) - loadImageIntoImageView(state.cardArtworkUri, binding.imvSecondBackupCard) + updateWalletImagesState(state.walletImages) handleOnboardingStep(state) } } } + private fun updateWalletImagesState(walletImages: WalletImages) { + if (!walletImages.primaryCardImage.isNullOrEmpty()) { + loadImageIntoImageView(walletImages.primaryCardImage, binding.imvFrontCard) + } + if (!walletImages.secondCardImage.isNullOrEmpty()) { + loadImageIntoImageView(walletImages.secondCardImage, binding.imvFirstBackupCard) + } + if (!walletImages.thirdCardImage.isNullOrEmpty()) { + loadImageIntoImageView(walletImages.thirdCardImage, binding.imvSecondBackupCard) + } + } + private fun loadImageIntoImageView(uri: Uri?, view: ImageView) { view.load(uri) { placeholder(R.drawable.card_placeholder_black) diff --git a/core/datasource/src/main/java/com/tangem/datasource/utils/UriExt.kt b/core/datasource/src/main/java/com/tangem/datasource/utils/UriExt.kt new file mode 100644 index 0000000000..dc9fda4985 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/utils/UriExt.kt @@ -0,0 +1,7 @@ +package com.tangem.datasource.utils + +import android.net.Uri + +fun Uri?.isNullOrEmpty(): Boolean { + return this == null || this == Uri.EMPTY +} \ No newline at end of file diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 511d96e96e..4b1fb256b2 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -90,7 +90,7 @@ markdown = "0.7.2" # region Tangem tangemBlockchainSdk = "develop-759" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "develop-378" +tangemCardSdk = "develop-380" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem16" #tangemVico = "0.0.1" # Keep it! - used for local builds ^