Updated on 2026-08-14

This commit is contained in:
Tangem 2021-10-28 19:40:34 +03:00
parent 641d7fa37d
commit a1d9aa6461
13 changed files with 52 additions and 41 deletions

View file

@ -21,6 +21,7 @@ class PicassoHelper {
.downloader(OkHttp3Downloader(getOkHttpForPicasso(application)))
.build()
picasso.isLoggingEnabled = BuildConfig.DEBUG
picasso.setIndicatorsEnabled(BuildConfig.DEBUG)
Picasso.setSingletonInstance(picasso)
}

View file

@ -10,20 +10,14 @@ import com.tangem.operations.attestation.OnlineCardVerifier
import com.tangem.tap.common.extensions.isPositive
import com.tangem.tap.common.extensions.safeUpdate
import com.tangem.tap.domain.TapError
import com.tangem.tap.domain.UrlBitmapLoader
import com.tangem.tap.domain.extensions.getOrLoadCardArtworkUrl
import com.tangem.tap.domain.tasks.product.ScanResponse
import com.tangem.tap.features.wallet.models.hasPendingTransactions
import com.tangem.tap.features.wallet.redux.Artwork
import com.tangem.tap.features.wallet.redux.Currency
import com.tangem.tap.features.wallet.redux.ProgressState
import com.tangem.tap.persistence.UsedCardsPrefStorage
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import timber.log.Timber
import java.math.BigDecimal
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
/**
[REDACTED_AUTHOR]
@ -36,24 +30,31 @@ class OnboardingManager(
var cardInfo: Result<CardVerifyAndGetInfo.Response.Item>? = null
private set
suspend fun loadArtwork(): Artwork {
cardInfo = OnlineCardVerifier().getCardInfo(scanResponse.card.cardId, scanResponse.card.cardPublicKey)
return loadArtwork(scanResponse.card.getOrLoadCardArtworkUrl(cardInfo))
suspend fun loadArtworkUrl(): String {
val cardInfo = cardInfo
?: OnlineCardVerifier().getCardInfo(scanResponse.card.cardId, scanResponse.card.cardPublicKey)
this.cardInfo = cardInfo
return scanResponse.card.getOrLoadCardArtworkUrl(cardInfo)
}
suspend fun loadArtwork(url: String): Artwork {
return withContext(Dispatchers.Main) {
suspendCoroutine { continuation ->
UrlBitmapLoader().loadBitmap(url) {
val result = when (it) {
is Result.Success -> Artwork(url, it.data)
is Result.Failure -> Artwork(url, null)
}
continuation.resume(result)
}
}
}
}
// suspend fun loadArtwork(): Artwork {
// cardInfo = OnlineCardVerifier().getCardInfo(scanResponse.card.cardId, scanResponse.card.cardPublicKey)
// return loadArtwork(scanResponse.card.getOrLoadCardArtworkUrl(cardInfo))
// }
//
// suspend fun loadArtwork(url: String): Artwork {
// return withContext(Dispatchers.Main) {
// suspendCoroutine { continuation ->
// UrlBitmapLoader().loadBitmap(url) {
// val result = when (it) {
// is Result.Success -> Artwork(url, it.data)
// is Result.Failure -> Artwork(url, null)
// }
// continuation.resume(result)
// }
// }
// }
// }
suspend fun updateBalance(walletManager: WalletManager): OnboardingWalletBalance {
val balance = when (val result = walletManager.safeUpdate()) {

View file

@ -10,6 +10,7 @@ import androidx.annotation.LayoutRes
import androidx.constraintlayout.widget.ConstraintSet
import androidx.core.view.isVisible
import androidx.transition.TransitionManager
import com.squareup.picasso.Picasso
import com.tangem.blockchain.common.Blockchain
import com.tangem.tangem_sdk_new.extensions.fadeIn
import com.tangem.tangem_sdk_new.extensions.fadeOut
@ -73,7 +74,12 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
override fun newState(state: OnboardingNoteState) {
if (activity == null) return
state.cardArtwork?.let { imv_front_card.swapToBitmapDrawable(it.artwork) }
Picasso.get()
.load(state.cardArtworkUrl)
.error(R.drawable.card_placeholder_black)
.placeholder(R.drawable.card_placeholder_black)
?.into(imv_front_card)
pb_state.max = state.steps.size - 1
pb_state.progress = state.progress

View file

@ -3,7 +3,6 @@ package com.tangem.tap.features.onboarding.products.note.redux
import com.tangem.blockchain.common.WalletManager
import com.tangem.tap.domain.TapError
import com.tangem.tap.features.onboarding.OnboardingWalletBalance
import com.tangem.tap.features.wallet.redux.Artwork
import org.rekotlin.Action
/**
@ -17,7 +16,7 @@ sealed class OnboardingNoteAction : Action {
object ShowAddressInfoDialog : OnboardingNoteAction()
// from redux
class SetArtwork(val artwork: Artwork) : OnboardingNoteAction()
class SetArtworkUrl(val artworkUrl: String) : OnboardingNoteAction()
data class SetWalletManager(val walletManager: WalletManager) : OnboardingNoteAction()
object DetermineStepOfScreen : OnboardingNoteAction()
object Done : OnboardingNoteAction()

View file

@ -51,8 +51,8 @@ private fun handleNoteAction(action: Action, dispatch: DispatchFunction) {
when (action) {
is OnboardingNoteAction.LoadCardArtwork -> {
scope.launch {
val artwork = onboardingManager.loadArtwork()
withMainContext { store.dispatch(OnboardingNoteAction.SetArtwork(artwork)) }
val artworkUrl = onboardingManager.loadArtworkUrl()
withMainContext { store.dispatch(OnboardingNoteAction.SetArtworkUrl(artworkUrl)) }
}
}
is OnboardingNoteAction.DetermineStepOfScreen -> {

View file

@ -17,8 +17,8 @@ private fun internalReduce(action: Action, appState: AppState): OnboardingNoteSt
is GlobalAction.Onboarding.Start -> {
state = OnboardingNoteState()
}
is OnboardingNoteAction.SetArtwork -> {
state = state.copy(cardArtwork = action.artwork)
is OnboardingNoteAction.SetArtworkUrl -> {
state = state.copy(cardArtworkUrl = action.artworkUrl)
}
is OnboardingNoteAction.SetWalletManager -> {
state = state.copy(walletManager = action.walletManager)

View file

@ -3,7 +3,6 @@ package com.tangem.tap.features.onboarding.products.note.redux
import com.tangem.blockchain.common.WalletManager
import com.tangem.tap.domain.TapError
import com.tangem.tap.features.onboarding.OnboardingWalletBalance
import com.tangem.tap.features.wallet.redux.Artwork
import org.rekotlin.StateType
/**
@ -12,7 +11,7 @@ import org.rekotlin.StateType
data class OnboardingNoteState(
val walletManager: WalletManager? = null,
// UI
val cardArtwork: Artwork? = null,
val cardArtworkUrl: String? = null,
val walletBalance: OnboardingWalletBalance = OnboardingWalletBalance.loading(),
val balanceNonCriticalError: TapError? = null,
val balanceCriticalError: TapError? = null,

View file

@ -7,12 +7,12 @@ import androidx.annotation.LayoutRes
import androidx.constraintlayout.widget.ConstraintSet
import androidx.core.view.isVisible
import androidx.transition.TransitionManager
import com.squareup.picasso.Picasso
import com.tangem.tap.common.extensions.getDrawableCompat
import com.tangem.tap.common.redux.navigation.ShareElement
import com.tangem.tap.common.transitions.InternalNoteLayoutTransition
import com.tangem.tap.features.addBackPressHandler
import com.tangem.tap.features.onboarding.products.BaseOnboardingFragment
import com.tangem.tap.features.onboarding.products.note.swapToBitmapDrawable
import com.tangem.tap.features.onboarding.products.otherCards.redux.OnboardingOtherCardsAction
import com.tangem.tap.features.onboarding.products.otherCards.redux.OnboardingOtherCardsState
import com.tangem.tap.features.onboarding.products.otherCards.redux.OnboardingOtherCardsStep
@ -60,7 +60,12 @@ class OnboardingOtherCardsFragment : BaseOnboardingFragment<OnboardingOtherCards
if (activity == null) return
if (state.currentStep == OnboardingOtherCardsStep.None) return
state.cardArtwork?.let { imv_front_card.swapToBitmapDrawable(it.artwork) }
Picasso.get()
.load(state.cardArtworkUrl)
.error(R.drawable.card_placeholder_black)
.placeholder(R.drawable.card_placeholder_black)
?.into(imv_front_card)
pb_state.max = state.steps.size - 1
pb_state.progress = state.progress

View file

@ -1,6 +1,5 @@
package com.tangem.tap.features.onboarding.products.otherCards.redux
import com.tangem.tap.features.wallet.redux.Artwork
import org.rekotlin.Action
/**
@ -12,7 +11,7 @@ sealed class OnboardingOtherCardsAction : Action {
object CreateWallet : OnboardingOtherCardsAction()
// from redux
class SetArtwork(val artwork: Artwork) : OnboardingOtherCardsAction()
class SetArtworkUrl(val artworkUrl: String) : OnboardingOtherCardsAction()
object DetermineStepOfScreen : OnboardingOtherCardsAction()
object Done : OnboardingOtherCardsAction()

View file

@ -44,8 +44,8 @@ private fun handleOtherCardsAction(action: Action, dispatch: DispatchFunction) {
when (action) {
is OnboardingOtherCardsAction.LoadCardArtwork -> {
scope.launch {
val artwork = onboardingManager.loadArtwork()
withMainContext { store.dispatch(OnboardingOtherCardsAction.SetArtwork(artwork)) }
val artworkUrl = onboardingManager.loadArtworkUrl()
withMainContext { store.dispatch(OnboardingOtherCardsAction.SetArtworkUrl(artworkUrl)) }
}
}
is OnboardingOtherCardsAction.DetermineStepOfScreen -> {

View file

@ -17,8 +17,8 @@ private fun internalReduce(action: Action, appState: AppState): OnboardingOtherC
is GlobalAction.Onboarding.Start -> {
state = OnboardingOtherCardsState()
}
is OnboardingOtherCardsAction.SetArtwork -> {
state = state.copy(cardArtwork = action.artwork)
is OnboardingOtherCardsAction.SetArtworkUrl -> {
state = state.copy(cardArtworkUrl = action.artworkUrl)
}
is OnboardingOtherCardsAction.SetStepOfScreen -> {
if (action.step != state.currentStep && state.steps.contains(action.step)) {

View file

@ -1,6 +1,5 @@
package com.tangem.tap.features.onboarding.products.otherCards.redux
import com.tangem.tap.features.wallet.redux.Artwork
import org.rekotlin.StateType
/**
@ -8,7 +7,7 @@ import org.rekotlin.StateType
*/
data class OnboardingOtherCardsState(
// UI
val cardArtwork: Artwork? = null,
val cardArtworkUrl: String? = null,
val showConfetti: Boolean = false,
val currentStep: OnboardingOtherCardsStep = OnboardingOtherCardsStep.None,
val steps: List<OnboardingOtherCardsStep> = OnboardingOtherCardsStep.values().toList(),

View file

@ -84,11 +84,13 @@ class TwinsCardsFragment : BaseOnboardingFragment<TwinCardsState>() {
Picasso.get()
.load(Artwork.TWIN_CARD_1)
.error(R.drawable.card_placeholder_black)
.placeholder(R.drawable.card_placeholder_black)
?.into(imv_twin_front_card)
Picasso.get()
.load(Artwork.TWIN_CARD_2)
.error(R.drawable.card_placeholder_white)
.placeholder(R.drawable.card_placeholder_white)
?.into(imv_twin_back_card)
}