Updated on 2026-08-14
This commit is contained in:
parent
eb1a711732
commit
cee1bec47e
6 changed files with 246 additions and 280 deletions
6
.idea/inspectionProfiles/Project_Default.xml
generated
6
.idea/inspectionProfiles/Project_Default.xml
generated
|
|
@ -84,9 +84,9 @@
|
||||||
<inspection_tool class="SimpleRedundantLet" enabled="true" level="ERROR" enabled_by_default="true" />
|
<inspection_tool class="SimpleRedundantLet" enabled="true" level="ERROR" enabled_by_default="true" />
|
||||||
<inspection_tool class="SimplifyWhenWithBooleanConstantCondition" enabled="true" level="ERROR" enabled_by_default="true" />
|
<inspection_tool class="SimplifyWhenWithBooleanConstantCondition" enabled="true" level="ERROR" enabled_by_default="true" />
|
||||||
<inspection_tool class="UnnecessaryOptInAnnotation" enabled="true" level="ERROR" enabled_by_default="true" />
|
<inspection_tool class="UnnecessaryOptInAnnotation" enabled="true" level="ERROR" enabled_by_default="true" />
|
||||||
<inspection_tool class="UnnecessaryVariable" enabled="true" level="ERROR" enabled_by_default="true" />
|
<inspection_tool class="UnnecessaryVariable" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
<inspection_tool class="UnusedReceiverParameter" enabled="true" level="ERROR" enabled_by_default="true" />
|
<inspection_tool class="UnusedReceiverParameter" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
<inspection_tool class="UnusedSymbol" enabled="true" level="ERROR" enabled_by_default="true" />
|
<inspection_tool class="UnusedSymbol" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
<inspection_tool class="WhenWithOnlyElse" enabled="true" level="ERROR" enabled_by_default="true" />
|
<inspection_tool class="WhenWithOnlyElse" enabled="true" level="ERROR" enabled_by_default="true" />
|
||||||
</profile>
|
</profile>
|
||||||
</component>
|
</component>
|
||||||
|
|
@ -1,19 +1,14 @@
|
||||||
package com.tangem.tap.features.onboarding.products.note
|
package com.tangem.tap.features.onboarding.products.note
|
||||||
|
|
||||||
import android.graphics.Bitmap
|
|
||||||
import android.graphics.drawable.BitmapDrawable
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.OvershootInterpolator
|
import android.view.animation.OvershootInterpolator
|
||||||
import android.widget.ImageView
|
|
||||||
import androidx.annotation.LayoutRes
|
import androidx.annotation.LayoutRes
|
||||||
import androidx.constraintlayout.widget.ConstraintSet
|
import androidx.constraintlayout.widget.ConstraintSet
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.transition.TransitionManager
|
import androidx.transition.TransitionManager
|
||||||
import coil.load
|
import coil.load
|
||||||
import com.tangem.blockchain.common.Blockchain
|
import com.tangem.blockchain.common.Blockchain
|
||||||
import com.tangem.tangem_sdk_new.extensions.fadeIn
|
|
||||||
import com.tangem.tangem_sdk_new.extensions.fadeOut
|
|
||||||
import com.tangem.tap.common.extensions.getDrawableCompat
|
import com.tangem.tap.common.extensions.getDrawableCompat
|
||||||
import com.tangem.tap.common.extensions.stripZeroPlainString
|
import com.tangem.tap.common.extensions.stripZeroPlainString
|
||||||
import com.tangem.tap.common.redux.navigation.ShareElement
|
import com.tangem.tap.common.redux.navigation.ShareElement
|
||||||
|
|
@ -33,23 +28,18 @@ import com.tangem.wallet.R
|
||||||
class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
|
|
||||||
private var previousStep: OnboardingNoteStep = OnboardingNoteStep.None
|
private var previousStep: OnboardingNoteStep = OnboardingNoteStep.None
|
||||||
|
private val mainBinding by lazy { binding.vMain }
|
||||||
|
|
||||||
private lateinit var btnRefreshBalanceWidget: RefreshBalanceWidget
|
private lateinit var btnRefreshBalanceWidget: RefreshBalanceWidget
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
postponeEnterTransition()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
addBackPressHandler(this)
|
addBackPressHandler(this)
|
||||||
|
|
||||||
binding.onboardingTopContainer.imvFrontCard.transitionName = ShareElement.imvFrontCard
|
mainBinding.onboardingTopContainer.imvFrontCard.transitionName = ShareElement.imvFrontCard
|
||||||
startPostponedEnterTransition()
|
|
||||||
|
|
||||||
binding.toolbar.setTitle(R.string.onboarding_title)
|
binding.toolbar.setTitle(R.string.onboarding_title)
|
||||||
btnRefreshBalanceWidget = RefreshBalanceWidget(binding.onboardingTopContainer.onboardingWalletContainer)
|
btnRefreshBalanceWidget = RefreshBalanceWidget(mainBinding.onboardingTopContainer.onboardingWalletContainer)
|
||||||
|
|
||||||
store.dispatch(OnboardingNoteAction.LoadCardArtwork)
|
store.dispatch(OnboardingNoteAction.LoadCardArtwork)
|
||||||
store.dispatch(OnboardingNoteAction.DetermineStepOfScreen)
|
store.dispatch(OnboardingNoteAction.DetermineStepOfScreen)
|
||||||
|
|
@ -67,7 +57,7 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
override fun newState(state: OnboardingNoteState) {
|
override fun newState(state: OnboardingNoteState) {
|
||||||
if (activity == null || view == null) return
|
if (activity == null || view == null) return
|
||||||
|
|
||||||
binding.onboardingTopContainer.imvFrontCard.load(state.cardArtworkUrl) {
|
mainBinding.onboardingTopContainer.imvFrontCard.load(state.cardArtworkUrl) {
|
||||||
placeholder(R.drawable.card_placeholder_black)
|
placeholder(R.drawable.card_placeholder_black)
|
||||||
error(R.drawable.card_placeholder_black)
|
error(R.drawable.card_placeholder_black)
|
||||||
fallback(R.drawable.card_placeholder_black)
|
fallback(R.drawable.card_placeholder_black)
|
||||||
|
|
@ -90,7 +80,7 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
private fun setBalance(state: OnboardingNoteState) {
|
private fun setBalance(state: OnboardingNoteState) {
|
||||||
if (state.walletBalance.currency.blockchain == Blockchain.Unknown) return
|
if (state.walletBalance.currency.blockchain == Blockchain.Unknown) return
|
||||||
|
|
||||||
with (binding.onboardingTopContainer.onboardingTvBalance) {
|
with(mainBinding.onboardingTopContainer.onboardingTvBalance) {
|
||||||
if (state.balanceCriticalError == null) {
|
if (state.balanceCriticalError == null) {
|
||||||
val balanceValue = state.walletBalance.value.stripZeroPlainString()
|
val balanceValue = state.walletBalance.value.stripZeroPlainString()
|
||||||
tvBalanceValue.text = balanceValue
|
tvBalanceValue.text = balanceValue
|
||||||
|
|
@ -102,7 +92,7 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupNoneState() = with(binding.onboardingActionContainer) {
|
private fun setupNoneState() = with(mainBinding.onboardingActionContainer) {
|
||||||
btnMainAction.isVisible = false
|
btnMainAction.isVisible = false
|
||||||
btnAlternativeAction.isVisible = false
|
btnAlternativeAction.isVisible = false
|
||||||
btnRefreshBalanceWidget.show(false)
|
btnRefreshBalanceWidget.show(false)
|
||||||
|
|
@ -116,7 +106,7 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupCreateWalletState(state: OnboardingNoteState) =
|
private fun setupCreateWalletState(state: OnboardingNoteState) =
|
||||||
with(binding.onboardingActionContainer) {
|
with(mainBinding.onboardingActionContainer) {
|
||||||
btnMainAction.setText(R.string.onboarding_create_wallet_button_create_wallet)
|
btnMainAction.setText(R.string.onboarding_create_wallet_button_create_wallet)
|
||||||
btnMainAction.setOnClickListener { store.dispatch(OnboardingNoteAction.CreateWallet) }
|
btnMainAction.setOnClickListener { store.dispatch(OnboardingNoteAction.CreateWallet) }
|
||||||
btnAlternativeAction.setText(R.string.onboarding_button_what_does_it_mean)
|
btnAlternativeAction.setText(R.string.onboarding_button_what_does_it_mean)
|
||||||
|
|
@ -127,15 +117,15 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
tvHeader.setText(R.string.onboarding_create_wallet_header)
|
tvHeader.setText(R.string.onboarding_create_wallet_header)
|
||||||
tvBody.setText(R.string.onboarding_create_wallet_body)
|
tvBody.setText(R.string.onboarding_create_wallet_body)
|
||||||
|
|
||||||
binding.onboardingTopContainer.imvCardBackground.setBackgroundDrawable(
|
mainBinding.onboardingTopContainer.imvCardBackground.setBackgroundDrawable(
|
||||||
requireContext().getDrawableCompat(R.drawable.shape_circle)
|
requireContext().getDrawableCompat(R.drawable.shape_circle),
|
||||||
)
|
)
|
||||||
updateConstraints(state.currentStep, R.layout.lp_onboarding_create_wallet)
|
updateConstraints(state.currentStep, R.layout.lp_onboarding_create_wallet)
|
||||||
|
|
||||||
btnAlternativeAction.isVisible = false // temporary
|
btnAlternativeAction.isVisible = false // temporary
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupTopUpWalletState(state: OnboardingNoteState) = with(binding.onboardingActionContainer) {
|
private fun setupTopUpWalletState(state: OnboardingNoteState) = with(mainBinding.onboardingActionContainer) {
|
||||||
if (state.isBuyAllowed) {
|
if (state.isBuyAllowed) {
|
||||||
btnMainAction.setText(R.string.onboarding_top_up_button_but_crypto)
|
btnMainAction.setText(R.string.onboarding_top_up_button_but_crypto)
|
||||||
btnMainAction.setOnClickListener {
|
btnMainAction.setOnClickListener {
|
||||||
|
|
@ -163,7 +153,7 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
state.walletBalance.amountToCreateAccount?.let { amount ->
|
state.walletBalance.amountToCreateAccount?.let { amount ->
|
||||||
val tvBodyMessage = getString(
|
val tvBodyMessage = getString(
|
||||||
R.string.onboarding_top_up_body_no_account_error,
|
R.string.onboarding_top_up_body_no_account_error,
|
||||||
amount, state.walletBalance.currency.currencySymbol
|
amount, state.walletBalance.currency.currencySymbol,
|
||||||
)
|
)
|
||||||
tvBody.text = tvBodyMessage
|
tvBody.text = tvBodyMessage
|
||||||
}
|
}
|
||||||
|
|
@ -175,12 +165,13 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
store.dispatch(OnboardingNoteAction.Balance.Update)
|
store.dispatch(OnboardingNoteAction.Balance.Update)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.onboardingTopContainer.imvCardBackground
|
|
||||||
.setBackgroundDrawable(requireContext().getDrawableCompat(R.drawable.shape_rectangle_rounded_8))
|
val drawable = requireContext().getDrawableCompat(R.drawable.shape_rectangle_rounded_8)
|
||||||
|
mainBinding.onboardingTopContainer.imvCardBackground.setBackgroundDrawable(drawable)
|
||||||
updateConstraints(state.currentStep, R.layout.lp_onboarding_topup_wallet)
|
updateConstraints(state.currentStep, R.layout.lp_onboarding_topup_wallet)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupDoneState(state: OnboardingNoteState) = with(binding.onboardingActionContainer) {
|
private fun setupDoneState(state: OnboardingNoteState) = with(mainBinding.onboardingActionContainer) {
|
||||||
btnMainAction.setText(R.string.onboarding_done_button_continue)
|
btnMainAction.setText(R.string.onboarding_done_button_continue)
|
||||||
btnMainAction.setOnClickListener {
|
btnMainAction.setOnClickListener {
|
||||||
showConfetti(false)
|
showConfetti(false)
|
||||||
|
|
@ -188,15 +179,15 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
btnAlternativeAction.isVisible = false
|
btnAlternativeAction.isVisible = false
|
||||||
btnAlternativeAction.setText("")
|
btnAlternativeAction.text = ""
|
||||||
btnAlternativeAction.setOnClickListener { }
|
btnAlternativeAction.setOnClickListener { }
|
||||||
btnRefreshBalanceWidget.mainView.setOnClickListener(null)
|
btnRefreshBalanceWidget.mainView.setOnClickListener(null)
|
||||||
|
|
||||||
tvHeader.setText(R.string.onboarding_done_header)
|
tvHeader.setText(R.string.onboarding_done_header)
|
||||||
tvBody.setText(R.string.onboarding_done_body)
|
tvBody.setText(R.string.onboarding_done_body)
|
||||||
|
|
||||||
binding.onboardingTopContainer.imvCardBackground.setBackgroundDrawable(
|
mainBinding.onboardingTopContainer.imvCardBackground.setBackgroundDrawable(
|
||||||
requireContext().getDrawableCompat(R.drawable.shape_rectangle_rounded_8)
|
requireContext().getDrawableCompat(R.drawable.shape_rectangle_rounded_8),
|
||||||
)
|
)
|
||||||
updateConstraints(state.currentStep, R.layout.lp_onboarding_done_activation)
|
updateConstraints(state.currentStep, R.layout.lp_onboarding_done_activation)
|
||||||
}
|
}
|
||||||
|
|
@ -204,7 +195,7 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
private fun updateConstraints(currentStep: OnboardingNoteStep, @LayoutRes layoutId: Int) {
|
private fun updateConstraints(currentStep: OnboardingNoteStep, @LayoutRes layoutId: Int) {
|
||||||
if (this.previousStep == currentStep) return
|
if (this.previousStep == currentStep) return
|
||||||
|
|
||||||
with(binding.onboardingTopContainer) {
|
with(mainBinding.onboardingTopContainer) {
|
||||||
val constraintSet = ConstraintSet()
|
val constraintSet = ConstraintSet()
|
||||||
constraintSet.clone(requireContext(), layoutId)
|
constraintSet.clone(requireContext(), layoutId)
|
||||||
constraintSet.applyTo(onboardingWalletContainer)
|
constraintSet.applyTo(onboardingWalletContainer)
|
||||||
|
|
@ -213,13 +204,4 @@ class OnboardingNoteFragment : BaseOnboardingFragment<OnboardingNoteState>() {
|
||||||
TransitionManager.beginDelayedTransition(onboardingWalletContainer, transition)
|
TransitionManager.beginDelayedTransition(onboardingWalletContainer, transition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fun ImageView.swapToBitmapDrawable(bitmap: Bitmap?, duration: Long = 200) {
|
|
||||||
if (drawable is BitmapDrawable && (drawable as BitmapDrawable).bitmap == bitmap) return
|
|
||||||
|
|
||||||
fadeOut(duration) {
|
|
||||||
setImageBitmap(bitmap)
|
|
||||||
fadeIn(duration)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -24,17 +24,13 @@ import com.tangem.wallet.R
|
||||||
*/
|
*/
|
||||||
class OnboardingOtherCardsFragment : BaseOnboardingFragment<OnboardingOtherCardsState>() {
|
class OnboardingOtherCardsFragment : BaseOnboardingFragment<OnboardingOtherCardsState>() {
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
private val mainBinding by lazy { binding.vMain }
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
postponeEnterTransition()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
addBackPressHandler(this)
|
addBackPressHandler(this)
|
||||||
|
|
||||||
binding.onboardingTopContainer.imvFrontCard.transitionName = ShareElement.imvFrontCard
|
mainBinding.onboardingTopContainer.imvFrontCard.transitionName = ShareElement.imvFrontCard
|
||||||
startPostponedEnterTransition()
|
|
||||||
|
|
||||||
binding.toolbar.setTitle(R.string.onboarding_title)
|
binding.toolbar.setTitle(R.string.onboarding_title)
|
||||||
store.dispatch(OnboardingOtherCardsAction.LoadCardArtwork)
|
store.dispatch(OnboardingOtherCardsAction.LoadCardArtwork)
|
||||||
|
|
@ -54,7 +50,7 @@ class OnboardingOtherCardsFragment : BaseOnboardingFragment<OnboardingOtherCards
|
||||||
if (activity == null || view == null) return
|
if (activity == null || view == null) return
|
||||||
if (state.currentStep == OnboardingOtherCardsStep.None) return
|
if (state.currentStep == OnboardingOtherCardsStep.None) return
|
||||||
|
|
||||||
binding.onboardingTopContainer.imvFrontCard.load(state.cardArtworkUrl) {
|
mainBinding.onboardingTopContainer.imvFrontCard.load(state.cardArtworkUrl) {
|
||||||
placeholder(R.drawable.card_placeholder_black)
|
placeholder(R.drawable.card_placeholder_black)
|
||||||
error(R.drawable.card_placeholder_black)
|
error(R.drawable.card_placeholder_black)
|
||||||
fallback(R.drawable.card_placeholder_black)
|
fallback(R.drawable.card_placeholder_black)
|
||||||
|
|
@ -70,29 +66,25 @@ class OnboardingOtherCardsFragment : BaseOnboardingFragment<OnboardingOtherCards
|
||||||
showConfetti(state.showConfetti)
|
showConfetti(state.showConfetti)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupCreateWalletState() = with(binding) {
|
private fun setupCreateWalletState() = with(mainBinding.onboardingActionContainer) {
|
||||||
|
btnMainAction.setText(R.string.onboarding_create_wallet_button_create_wallet)
|
||||||
|
btnMainAction.setOnClickListener { store.dispatch(OnboardingOtherCardsAction.CreateWallet) }
|
||||||
|
btnAlternativeAction.setText(R.string.onboarding_button_what_does_it_mean)
|
||||||
|
btnAlternativeAction.setOnClickListener { }
|
||||||
|
|
||||||
with(onboardingActionContainer) {
|
tvHeader.setText(R.string.onboarding_create_wallet_header)
|
||||||
btnMainAction.setText(R.string.onboarding_create_wallet_button_create_wallet)
|
tvBody.setText(R.string.onboarding_create_wallet_body)
|
||||||
btnMainAction.setOnClickListener { store.dispatch(OnboardingOtherCardsAction.CreateWallet) }
|
|
||||||
btnAlternativeAction.setText(R.string.onboarding_button_what_does_it_mean)
|
|
||||||
btnAlternativeAction.setOnClickListener { }
|
|
||||||
|
|
||||||
tvHeader.setText(R.string.onboarding_create_wallet_header)
|
btnAlternativeAction.isVisible = false // temporary
|
||||||
tvBody.setText(R.string.onboarding_create_wallet_body)
|
|
||||||
|
|
||||||
btnAlternativeAction.isVisible = false // temporary
|
mainBinding.onboardingTopContainer.imvCardBackground.setBackgroundDrawable(
|
||||||
}
|
requireContext().getDrawableCompat(R.drawable.shape_circle),
|
||||||
|
|
||||||
|
|
||||||
binding.onboardingTopContainer.imvCardBackground.setBackgroundDrawable(
|
|
||||||
requireContext().getDrawableCompat(R.drawable.shape_circle)
|
|
||||||
)
|
)
|
||||||
updateConstraints(R.layout.lp_onboarding_create_wallet)
|
updateConstraints(R.layout.lp_onboarding_create_wallet)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupDoneState() = with(binding.onboardingActionContainer) {
|
private fun setupDoneState() = with(mainBinding.onboardingActionContainer) {
|
||||||
btnMainAction.setText(R.string.onboarding_done_button_continue)
|
btnMainAction.setText(R.string.onboarding_done_button_continue)
|
||||||
btnMainAction.setOnClickListener {
|
btnMainAction.setOnClickListener {
|
||||||
showConfetti(false)
|
showConfetti(false)
|
||||||
|
|
@ -106,20 +98,18 @@ class OnboardingOtherCardsFragment : BaseOnboardingFragment<OnboardingOtherCards
|
||||||
tvHeader.setText(R.string.onboarding_done_header)
|
tvHeader.setText(R.string.onboarding_done_header)
|
||||||
tvBody.setText(R.string.onboarding_done_body)
|
tvBody.setText(R.string.onboarding_done_body)
|
||||||
|
|
||||||
binding.onboardingTopContainer.imvCardBackground?.setBackgroundDrawable(
|
mainBinding.onboardingTopContainer.imvCardBackground?.setBackgroundDrawable(
|
||||||
requireContext().getDrawableCompat(R.drawable.shape_rectangle_rounded_8)
|
requireContext().getDrawableCompat(R.drawable.shape_rectangle_rounded_8),
|
||||||
)
|
)
|
||||||
updateConstraints(R.layout.lp_onboarding_done)
|
updateConstraints(R.layout.lp_onboarding_done)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateConstraints(@LayoutRes layoutId: Int) {
|
private fun updateConstraints(@LayoutRes layoutId: Int) = with(mainBinding.onboardingTopContainer) {
|
||||||
with(binding.onboardingTopContainer) {
|
val constraintSet = ConstraintSet()
|
||||||
val constraintSet = ConstraintSet()
|
constraintSet.clone(requireContext(), layoutId)
|
||||||
constraintSet.clone(requireContext(), layoutId)
|
constraintSet.applyTo(onboardingWalletContainer)
|
||||||
constraintSet.applyTo(onboardingWalletContainer)
|
val transition = InternalNoteLayoutTransition()
|
||||||
val transition = InternalNoteLayoutTransition()
|
transition.interpolator = OvershootInterpolator()
|
||||||
transition.interpolator = OvershootInterpolator()
|
TransitionManager.beginDelayedTransition(onboardingWalletContainer, transition)
|
||||||
TransitionManager.beginDelayedTransition(onboardingWalletContainer, transition)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -40,6 +40,7 @@ import com.tangem.wallet.databinding.LayoutOnboardingContainerTopBinding
|
||||||
|
|
||||||
class TwinsCardsFragment : BaseOnboardingFragment<TwinCardsState>() {
|
class TwinsCardsFragment : BaseOnboardingFragment<TwinCardsState>() {
|
||||||
|
|
||||||
|
private val mainBinding by lazy { binding.vMain }
|
||||||
private var previousStep = TwinCardsStep.None
|
private var previousStep = TwinCardsStep.None
|
||||||
|
|
||||||
private lateinit var twinsWidget: TwinsCardWidget
|
private lateinit var twinsWidget: TwinsCardWidget
|
||||||
|
|
@ -47,7 +48,6 @@ class TwinsCardsFragment : BaseOnboardingFragment<TwinCardsState>() {
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
postponeEnterTransition()
|
|
||||||
store.dispatch(TwinCardsAction.Init)
|
store.dispatch(TwinCardsAction.Init)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,30 +66,30 @@ class TwinsCardsFragment : BaseOnboardingFragment<TwinCardsState>() {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
addBackPressHandler(this)
|
addBackPressHandler(this)
|
||||||
|
|
||||||
reconfigureLayoutForTwins(binding.onboardingTopContainer)
|
reconfigureLayoutForTwins(mainBinding.onboardingTopContainer)
|
||||||
|
|
||||||
val typedValue = TypedValue()
|
val typedValue = TypedValue()
|
||||||
resources.getValue(R.dimen.device_scale_factor_for_twins_welcome, typedValue, true)
|
resources.getValue(R.dimen.device_scale_factor_for_twins_welcome, typedValue, true)
|
||||||
val deviceScaleFactorForWelcomeState = typedValue.float
|
val deviceScaleFactorForWelcomeState = typedValue.float
|
||||||
|
|
||||||
twinsWidget = TwinsCardWidget(
|
twinsWidget = TwinsCardWidget(
|
||||||
LeapfrogWidget(binding.onboardingTopContainer.cardsContainer),
|
LeapfrogWidget(mainBinding.onboardingTopContainer.cardsContainer),
|
||||||
deviceScaleFactorForWelcomeState
|
deviceScaleFactorForWelcomeState,
|
||||||
) {
|
) {
|
||||||
285f * deviceScaleFactorForWelcomeState
|
285f * deviceScaleFactorForWelcomeState
|
||||||
}
|
}
|
||||||
btnRefreshBalanceWidget =
|
btnRefreshBalanceWidget =
|
||||||
RefreshBalanceWidget(binding.onboardingTopContainer.onboardingWalletContainer)
|
RefreshBalanceWidget(mainBinding.onboardingTopContainer.onboardingWalletContainer)
|
||||||
|
|
||||||
binding.toolbar.title = getText(R.string.twins_recreate_toolbar)
|
binding.toolbar.title = getText(R.string.twins_recreate_toolbar)
|
||||||
|
|
||||||
binding.onboardingTopContainer.imvTwinFrontCard.load(Artwork.TWIN_CARD_1) {
|
mainBinding.onboardingTopContainer.imvTwinFrontCard.load(Artwork.TWIN_CARD_1) {
|
||||||
placeholder(R.drawable.card_placeholder_black)
|
placeholder(R.drawable.card_placeholder_black)
|
||||||
error(R.drawable.card_placeholder_black)
|
error(R.drawable.card_placeholder_black)
|
||||||
fallback(R.drawable.card_placeholder_black)
|
fallback(R.drawable.card_placeholder_black)
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.onboardingTopContainer.imvTwinBackCard.load(Artwork.TWIN_CARD_2) {
|
mainBinding.onboardingTopContainer.imvTwinBackCard.load(Artwork.TWIN_CARD_2) {
|
||||||
placeholder(R.drawable.card_placeholder_white)
|
placeholder(R.drawable.card_placeholder_white)
|
||||||
error(R.drawable.card_placeholder_white)
|
error(R.drawable.card_placeholder_white)
|
||||||
fallback(R.drawable.card_placeholder_white)
|
fallback(R.drawable.card_placeholder_white)
|
||||||
|
|
@ -143,7 +143,7 @@ class TwinsCardsFragment : BaseOnboardingFragment<TwinCardsState>() {
|
||||||
private fun setBalance(state: TwinCardsState) {
|
private fun setBalance(state: TwinCardsState) {
|
||||||
if (state.walletBalance.currency.blockchain == Blockchain.Unknown) return
|
if (state.walletBalance.currency.blockchain == Blockchain.Unknown) return
|
||||||
|
|
||||||
with(binding.onboardingTopContainer.onboardingTvBalance) {
|
with(mainBinding.onboardingTopContainer.onboardingTvBalance) {
|
||||||
if (state.balanceCriticalError == null) {
|
if (state.balanceCriticalError == null) {
|
||||||
val balanceValue = state.walletBalance.value.stripZeroPlainString()
|
val balanceValue = state.walletBalance.value.stripZeroPlainString()
|
||||||
tvBalanceValue.text = balanceValue
|
tvBalanceValue.text = balanceValue
|
||||||
|
|
@ -167,26 +167,26 @@ class TwinsCardsFragment : BaseOnboardingFragment<TwinCardsState>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupWelcomeState(state: TwinCardsState, mainAction: VoidCallback) =
|
private fun setupWelcomeState(state: TwinCardsState, mainAction: VoidCallback) =
|
||||||
with(binding.onboardingActionContainer) {
|
with(mainBinding.onboardingActionContainer) {
|
||||||
twinsWidget.toWelcome(false) { startPostponedEnterTransition() }
|
twinsWidget.toWelcome(false)
|
||||||
|
|
||||||
binding.onboardingTopContainer.onboardingTwinsWelcomeBg.root.show()
|
mainBinding.onboardingTopContainer.onboardingTwinsWelcomeBg.root.show()
|
||||||
pbBinding.pbState.hide()
|
pbBinding.pbState.hide()
|
||||||
|
|
||||||
tvHeader.setText(R.string.twins_onboarding_subtitle)
|
tvHeader.setText(R.string.twins_onboarding_subtitle)
|
||||||
tvBody.text = getString(
|
tvBody.text = getString(
|
||||||
R.string.twins_onboarding_description_format,
|
R.string.twins_onboarding_description_format,
|
||||||
state.cardNumber?.pairIndexNumber()
|
state.cardNumber?.pairIndexNumber(),
|
||||||
)
|
)
|
||||||
|
|
||||||
btnMainAction.setText(R.string.common_continue)
|
btnMainAction.setText(R.string.common_continue)
|
||||||
btnMainAction.setOnClickListener { mainAction() }
|
btnMainAction.setOnClickListener { mainAction() }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupWarningState(state: TwinCardsState) = with(binding.onboardingActionContainer) {
|
private fun setupWarningState(state: TwinCardsState) = with(mainBinding.onboardingActionContainer) {
|
||||||
twinsWidget.toWelcome(false) { startPostponedEnterTransition() }
|
twinsWidget.toWelcome(false)
|
||||||
|
|
||||||
binding.onboardingTopContainer.onboardingTwinsWelcomeBg.root.hide()
|
mainBinding.onboardingTopContainer.onboardingTwinsWelcomeBg.root.hide()
|
||||||
pbBinding.pbState.hide()
|
pbBinding.pbState.hide()
|
||||||
chbUnderstand.show()
|
chbUnderstand.show()
|
||||||
|
|
||||||
|
|
@ -203,184 +203,175 @@ class TwinsCardsFragment : BaseOnboardingFragment<TwinCardsState>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupCreateFirstWalletState(state: TwinCardsState) =
|
private fun setupCreateFirstWalletState(state: TwinCardsState) = with(mainBinding.onboardingActionContainer) {
|
||||||
with(binding.onboardingActionContainer) {
|
mainBinding.onboardingTopContainer.onboardingTwinsWelcomeBg.root.hide()
|
||||||
binding.onboardingTopContainer.onboardingTwinsWelcomeBg.root.hide()
|
mainBinding.onboardingTopContainer.onboardingTwinsWelcomeBg.bgCircleLarge.hide()
|
||||||
binding.onboardingTopContainer.onboardingTwinsWelcomeBg.bgCircleLarge.hide()
|
mainBinding.onboardingTopContainer.onboardingTwinsWelcomeBg.bgCircleMedium.hide()
|
||||||
binding.onboardingTopContainer.onboardingTwinsWelcomeBg.bgCircleMedium.hide()
|
mainBinding.onboardingTopContainer.onboardingTwinsWelcomeBg.bgCircleMin.hide()
|
||||||
binding.onboardingTopContainer.onboardingTwinsWelcomeBg.bgCircleMin.hide()
|
chbUnderstand.hide()
|
||||||
chbUnderstand.hide()
|
pbBinding.pbState.show()
|
||||||
pbBinding.pbState.show()
|
|
||||||
|
|
||||||
binding.onboardingTopContainer.onboardingWalletContainer.beginDelayedTransition()
|
mainBinding.onboardingTopContainer.onboardingWalletContainer.beginDelayedTransition()
|
||||||
|
|
||||||
when (previousStep) {
|
when (previousStep) {
|
||||||
TwinCardsStep.None -> {
|
TwinCardsStep.None -> {
|
||||||
twinsWidget.toLeapfrog(false) {
|
twinsWidget.toLeapfrog(false) {
|
||||||
when (state.cardNumber) {
|
|
||||||
TwinCardNumber.First -> startPostponedEnterTransition()
|
|
||||||
TwinCardNumber.Second -> {
|
|
||||||
switchToCard(
|
|
||||||
state.cardNumber,
|
|
||||||
false
|
|
||||||
) { startPostponedEnterTransition() }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
TwinCardsStep.Welcome, TwinCardsStep.Warning -> {
|
|
||||||
twinsWidget.toLeapfrog(onEnd = { switchToCard(state.cardNumber) })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val twinIndexNumber = state.cardNumber?.indexNumber()
|
|
||||||
tvHeader.text = getString(R.string.twins_recreate_title_format, twinIndexNumber)
|
|
||||||
tvBody.setText(R.string.onboarding_twins_interrupt_warning)
|
|
||||||
|
|
||||||
btnMainAction.text = getString(R.string.twins_recreate_button_format, twinIndexNumber)
|
|
||||||
btnMainAction.setOnClickListener {
|
|
||||||
store.dispatch(
|
|
||||||
TwinCardsAction.Wallet.LaunchFirstStep(
|
|
||||||
Message(getString(R.string.twins_recreate_title_format, twinIndexNumber)),
|
|
||||||
AndroidAssetReader(requireContext()),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
btnAlternativeAction.isVisible = false
|
|
||||||
btnAlternativeAction.isClickable = false
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupCreateSecondWalletState(state: TwinCardsState) =
|
|
||||||
with(binding.onboardingActionContainer) {
|
|
||||||
switchToCard(state.cardNumber?.pairNumber())
|
|
||||||
|
|
||||||
val twinPairIndexNumber = state.cardNumber?.pairIndexNumber()
|
|
||||||
tvHeader.text = getString(R.string.twins_recreate_title_format, twinPairIndexNumber)
|
|
||||||
tvBody.setText(R.string.onboarding_twins_interrupt_warning)
|
|
||||||
|
|
||||||
btnMainAction.text =
|
|
||||||
getString(R.string.twins_recreate_button_format, twinPairIndexNumber)
|
|
||||||
btnMainAction.setOnClickListener {
|
|
||||||
store.dispatch(
|
|
||||||
TwinCardsAction.Wallet.LaunchSecondStep(
|
|
||||||
Message(
|
|
||||||
getString(
|
|
||||||
R.string.twins_recreate_title_format,
|
|
||||||
twinPairIndexNumber
|
|
||||||
)
|
|
||||||
),
|
|
||||||
Message(getString(R.string.twins_recreate_title_preparing)),
|
|
||||||
Message(getString(R.string.twins_recreate_title_creating_wallet)),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupCreateThirdWalletState(state: TwinCardsState) =
|
|
||||||
with(binding.onboardingActionContainer) {
|
|
||||||
switchToCard(state.cardNumber)
|
|
||||||
|
|
||||||
val twinIndexNumber = state.cardNumber?.indexNumber()
|
|
||||||
tvHeader.text = getString(R.string.twins_recreate_title_format, twinIndexNumber)
|
|
||||||
tvBody.setText(R.string.onboarding_twins_interrupt_warning)
|
|
||||||
|
|
||||||
btnMainAction.text = getString(R.string.twins_recreate_button_format, twinIndexNumber)
|
|
||||||
btnMainAction.setOnClickListener {
|
|
||||||
store.dispatch(
|
|
||||||
TwinCardsAction.Wallet.LaunchThirdStep(
|
|
||||||
Message(getString(R.string.twins_recreate_title_format, twinIndexNumber))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private fun setupTopUpWalletState(state: TwinCardsState) =
|
|
||||||
with(binding.onboardingActionContainer) {
|
|
||||||
when (previousStep) {
|
|
||||||
TwinCardsStep.None -> {
|
|
||||||
when (state.cardNumber) {
|
when (state.cardNumber) {
|
||||||
TwinCardNumber.First -> {
|
TwinCardNumber.First -> {}
|
||||||
twinsWidget.leapfrogWidget.unfold(false) {
|
|
||||||
twinsWidget.toActivate(false) {
|
|
||||||
startPostponedEnterTransition()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
TwinCardNumber.Second -> {
|
TwinCardNumber.Second -> {
|
||||||
switchToCard(state.cardNumber, false) {
|
switchToCard(
|
||||||
twinsWidget.toActivate(false)
|
state.cardNumber,
|
||||||
startPostponedEnterTransition()
|
false,
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TwinCardsStep.CreateThirdWallet -> {
|
|
||||||
twinsWidget.toActivate()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
TwinCardsStep.Welcome, TwinCardsStep.Warning -> {
|
||||||
if (state.isBuyAllowed) {
|
twinsWidget.toLeapfrog(onEnd = { switchToCard(state.cardNumber) })
|
||||||
btnMainAction.setText(R.string.onboarding_top_up_button_but_crypto)
|
|
||||||
btnMainAction.setOnClickListener {
|
|
||||||
store.dispatch(TwinCardsAction.TopUp)
|
|
||||||
}
|
|
||||||
|
|
||||||
btnAlternativeAction.isVisible = true
|
|
||||||
btnAlternativeAction.setText(R.string.onboarding_top_up_button_show_wallet_address)
|
|
||||||
btnAlternativeAction.setOnClickListener {
|
|
||||||
store.dispatch(TwinCardsAction.ShowAddressInfoDialog)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
btnMainAction.setText(R.string.onboarding_button_receive_crypto)
|
|
||||||
btnMainAction.setOnClickListener {
|
|
||||||
store.dispatch(TwinCardsAction.ShowAddressInfoDialog)
|
|
||||||
}
|
|
||||||
|
|
||||||
btnAlternativeAction.isVisible = false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tvHeader.setText(R.string.onboarding_top_up_header)
|
|
||||||
tvBody.setText(R.string.onboarding_top_up_body)
|
|
||||||
|
|
||||||
btnRefreshBalanceWidget.changeState(state.walletBalance.state)
|
|
||||||
if (btnRefreshBalanceWidget.isShowing != true) {
|
|
||||||
btnRefreshBalanceWidget.mainView.setOnClickListener {
|
|
||||||
store.dispatch(TwinCardsAction.Balance.Update)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
binding.onboardingTopContainer.imvCardBackground.setBackgroundDrawable(
|
|
||||||
requireContext().getDrawableCompat(R.drawable.shape_rectangle_rounded_8)
|
|
||||||
)
|
|
||||||
updateConstraints(state.currentStep, R.layout.lp_onboarding_topup_wallet_twins)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupDoneState(state: TwinCardsState) =
|
val twinIndexNumber = state.cardNumber?.indexNumber()
|
||||||
with(binding.onboardingActionContainer) {
|
tvHeader.text = getString(R.string.twins_recreate_title_format, twinIndexNumber)
|
||||||
btnMainAction.setText(R.string.onboarding_done_button_continue)
|
tvBody.setText(R.string.onboarding_twins_interrupt_warning)
|
||||||
|
|
||||||
|
btnMainAction.text = getString(R.string.twins_recreate_button_format, twinIndexNumber)
|
||||||
|
btnMainAction.setOnClickListener {
|
||||||
|
store.dispatch(
|
||||||
|
TwinCardsAction.Wallet.LaunchFirstStep(
|
||||||
|
Message(getString(R.string.twins_recreate_title_format, twinIndexNumber)),
|
||||||
|
AndroidAssetReader(requireContext()),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
btnAlternativeAction.isVisible = false
|
||||||
|
btnAlternativeAction.isClickable = false
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupCreateSecondWalletState(state: TwinCardsState) = with(mainBinding.onboardingActionContainer) {
|
||||||
|
switchToCard(state.cardNumber?.pairNumber())
|
||||||
|
|
||||||
|
val twinPairIndexNumber = state.cardNumber?.pairIndexNumber()
|
||||||
|
tvHeader.text = getString(R.string.twins_recreate_title_format, twinPairIndexNumber)
|
||||||
|
tvBody.setText(R.string.onboarding_twins_interrupt_warning)
|
||||||
|
|
||||||
|
btnMainAction.text =
|
||||||
|
getString(R.string.twins_recreate_button_format, twinPairIndexNumber)
|
||||||
|
btnMainAction.setOnClickListener {
|
||||||
|
store.dispatch(
|
||||||
|
TwinCardsAction.Wallet.LaunchSecondStep(
|
||||||
|
Message(
|
||||||
|
getString(
|
||||||
|
R.string.twins_recreate_title_format,
|
||||||
|
twinPairIndexNumber,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Message(getString(R.string.twins_recreate_title_preparing)),
|
||||||
|
Message(getString(R.string.twins_recreate_title_creating_wallet)),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupCreateThirdWalletState(state: TwinCardsState) = with(mainBinding.onboardingActionContainer) {
|
||||||
|
switchToCard(state.cardNumber)
|
||||||
|
|
||||||
|
val twinIndexNumber = state.cardNumber?.indexNumber()
|
||||||
|
tvHeader.text = getString(R.string.twins_recreate_title_format, twinIndexNumber)
|
||||||
|
tvBody.setText(R.string.onboarding_twins_interrupt_warning)
|
||||||
|
|
||||||
|
btnMainAction.text = getString(R.string.twins_recreate_button_format, twinIndexNumber)
|
||||||
|
btnMainAction.setOnClickListener {
|
||||||
|
store.dispatch(
|
||||||
|
TwinCardsAction.Wallet.LaunchThirdStep(
|
||||||
|
Message(getString(R.string.twins_recreate_title_format, twinIndexNumber)),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupTopUpWalletState(state: TwinCardsState) = with(mainBinding.onboardingActionContainer) {
|
||||||
|
when (previousStep) {
|
||||||
|
TwinCardsStep.None -> {
|
||||||
|
when (state.cardNumber) {
|
||||||
|
TwinCardNumber.First -> {
|
||||||
|
twinsWidget.leapfrogWidget.unfold(false) {
|
||||||
|
twinsWidget.toActivate(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TwinCardNumber.Second -> {
|
||||||
|
switchToCard(state.cardNumber, false) {
|
||||||
|
twinsWidget.toActivate(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TwinCardsStep.CreateThirdWallet -> {
|
||||||
|
twinsWidget.toActivate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state.isBuyAllowed) {
|
||||||
|
btnMainAction.setText(R.string.onboarding_top_up_button_but_crypto)
|
||||||
btnMainAction.setOnClickListener {
|
btnMainAction.setOnClickListener {
|
||||||
store.dispatch(TwinCardsAction.Confetti.Hide)
|
store.dispatch(TwinCardsAction.TopUp)
|
||||||
store.dispatch(TwinCardsAction.Done)
|
}
|
||||||
|
|
||||||
|
btnAlternativeAction.isVisible = true
|
||||||
|
btnAlternativeAction.setText(R.string.onboarding_top_up_button_show_wallet_address)
|
||||||
|
btnAlternativeAction.setOnClickListener {
|
||||||
|
store.dispatch(TwinCardsAction.ShowAddressInfoDialog)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
btnMainAction.setText(R.string.onboarding_button_receive_crypto)
|
||||||
|
btnMainAction.setOnClickListener {
|
||||||
|
store.dispatch(TwinCardsAction.ShowAddressInfoDialog)
|
||||||
}
|
}
|
||||||
|
|
||||||
btnAlternativeAction.isVisible = false
|
btnAlternativeAction.isVisible = false
|
||||||
btnAlternativeAction.isClickable = false
|
|
||||||
|
|
||||||
tvHeader.setText(R.string.onboarding_done_header)
|
|
||||||
tvBody.setText(R.string.onboarding_done_body)
|
|
||||||
|
|
||||||
val layout = when (state.mode) {
|
|
||||||
CreateTwinWalletMode.CreateWallet -> R.layout.lp_onboarding_done_activation_twins
|
|
||||||
CreateTwinWalletMode.RecreateWallet -> R.layout.lp_onboarding_done
|
|
||||||
}
|
|
||||||
updateConstraints(state.currentStep, layout)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tvHeader.setText(R.string.onboarding_top_up_header)
|
||||||
|
tvBody.setText(R.string.onboarding_top_up_body)
|
||||||
|
|
||||||
|
btnRefreshBalanceWidget.changeState(state.walletBalance.state)
|
||||||
|
if (btnRefreshBalanceWidget.isShowing != true) {
|
||||||
|
btnRefreshBalanceWidget.mainView.setOnClickListener {
|
||||||
|
store.dispatch(TwinCardsAction.Balance.Update)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mainBinding.onboardingTopContainer.imvCardBackground.setBackgroundDrawable(
|
||||||
|
requireContext().getDrawableCompat(R.drawable.shape_rectangle_rounded_8),
|
||||||
|
)
|
||||||
|
updateConstraints(state.currentStep, R.layout.lp_onboarding_topup_wallet_twins)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupDoneState(state: TwinCardsState) = with(mainBinding.onboardingActionContainer) {
|
||||||
|
btnMainAction.setText(R.string.onboarding_done_button_continue)
|
||||||
|
btnMainAction.setOnClickListener {
|
||||||
|
store.dispatch(TwinCardsAction.Confetti.Hide)
|
||||||
|
store.dispatch(TwinCardsAction.Done)
|
||||||
|
}
|
||||||
|
|
||||||
|
btnAlternativeAction.isVisible = false
|
||||||
|
btnAlternativeAction.isClickable = false
|
||||||
|
|
||||||
|
tvHeader.setText(R.string.onboarding_done_header)
|
||||||
|
tvBody.setText(R.string.onboarding_done_body)
|
||||||
|
|
||||||
|
val layout = when (state.mode) {
|
||||||
|
CreateTwinWalletMode.CreateWallet -> R.layout.lp_onboarding_done_activation_twins
|
||||||
|
CreateTwinWalletMode.RecreateWallet -> R.layout.lp_onboarding_done
|
||||||
|
}
|
||||||
|
updateConstraints(state.currentStep, layout)
|
||||||
|
}
|
||||||
|
|
||||||
private fun updateConstraints(currentStep: TwinCardsStep, @LayoutRes layoutId: Int) {
|
private fun updateConstraints(currentStep: TwinCardsStep, @LayoutRes layoutId: Int) {
|
||||||
if (this.previousStep == currentStep) return
|
if (this.previousStep == currentStep) return
|
||||||
|
|
||||||
with(binding.onboardingTopContainer) {
|
with(mainBinding.onboardingTopContainer) {
|
||||||
val constraintSet = ConstraintSet()
|
val constraintSet = ConstraintSet()
|
||||||
constraintSet.clone(requireContext(), layoutId)
|
constraintSet.clone(requireContext(), layoutId)
|
||||||
constraintSet.applyTo(onboardingWalletContainer)
|
constraintSet.applyTo(onboardingWalletContainer)
|
||||||
|
|
@ -390,11 +381,7 @@ class TwinsCardsFragment : BaseOnboardingFragment<TwinCardsState>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun switchToCard(
|
private fun switchToCard(cardNumber: TwinCardNumber?, animate: Boolean = true, onEnd: VoidCallback = {}) {
|
||||||
cardNumber: TwinCardNumber?,
|
|
||||||
animate: Boolean = true,
|
|
||||||
onEnd: VoidCallback = {}
|
|
||||||
) {
|
|
||||||
val position = cardNumber?.number ?: return
|
val position = cardNumber?.number ?: return
|
||||||
|
|
||||||
if (twinsWidget.leapfrogWidget.getViewPositionByIndex(1) != position - 1) {
|
if (twinsWidget.leapfrogWidget.getViewPositionByIndex(1) != position - 1) {
|
||||||
|
|
@ -405,12 +392,14 @@ class TwinsCardsFragment : BaseOnboardingFragment<TwinCardsState>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handleOnBackPressed() {
|
override fun handleOnBackPressed() {
|
||||||
store.dispatch(TwinCardsAction.Wallet.HandleOnBackPressed { should, popAction ->
|
store.dispatch(
|
||||||
store.dispatch(TwinCardsAction.Confetti.Hide)
|
TwinCardsAction.Wallet.HandleOnBackPressed { should, popAction ->
|
||||||
showConfetti(false)
|
store.dispatch(TwinCardsAction.Confetti.Hide)
|
||||||
if (should) switchToCard(TwinCardNumber.First, true, popAction)
|
showConfetti(false)
|
||||||
else popAction()
|
if (should) switchToCard(TwinCardNumber.First, true, popAction)
|
||||||
})
|
else popAction()
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,29 +27,9 @@
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<androidx.appcompat.widget.LinearLayoutCompat
|
<include
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/v_main"
|
||||||
android:layout_height="match_parent"
|
layout="@layout/layout_onboarding_main" />
|
||||||
android:clipChildren="false"
|
|
||||||
android:orientation="vertical"
|
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
|
||||||
|
|
||||||
<include
|
|
||||||
android:id="@+id/onboarding_top_container"
|
|
||||||
layout="@layout/layout_onboarding_container_top"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_weight="@dimen/home_top_weight"
|
|
||||||
android:clipChildren="false" />
|
|
||||||
|
|
||||||
<include
|
|
||||||
android:id="@+id/onboarding_action_container"
|
|
||||||
layout="@layout/layout_onboarding_container_bottom"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_weight="@dimen/home_bottom_weight" />
|
|
||||||
|
|
||||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/v_confetti"
|
android:id="@+id/v_confetti"
|
||||||
|
|
|
||||||
25
app/src/main/res/layout/layout_onboarding_main.xml
Normal file
25
app/src/main/res/layout/layout_onboarding_main.xml
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:clipChildren="false"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/onboarding_top_container"
|
||||||
|
layout="@layout/layout_onboarding_container_top"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="@dimen/home_top_weight"
|
||||||
|
android:clipChildren="false" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/onboarding_action_container"
|
||||||
|
layout="@layout/layout_onboarding_container_bottom"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="@dimen/home_bottom_weight" />
|
||||||
|
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue