From 5841bc65f436380faf6625d19078cbd7fa1c2014 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 26 Jun 2023 20:02:31 +0300 Subject: [PATCH] Updated on 2026-08-14 --- app/src/main/AndroidManifest.xml | 6 ++--- .../java/com/tangem/tap/TapApplication.kt | 9 +++++++ .../tangem/tap/features/home/HomeFragment.kt | 12 ++++----- .../features/home/compose/StoriesScreen.kt | 11 +++++--- .../tap/features/wallet/ui/WalletFragment.kt | 25 +++++++++++++++++++ app/src/main/res/layout/fragment_wallet.xml | 9 +++---- .../core/ui/extensions/TextReference.kt | 5 ++++ .../domain/DefaultLearn2earnInteractor.kt | 7 +++--- .../domain/api/Learn2earnInteractor.kt | 2 +- .../presentation/Learn2earnViewModel.kt | 3 ++- .../presentation/ui/GetBonusView.kt | 2 +- .../presentation/ui/state/Learn2earnState.kt | 5 ++-- .../presentation/ui/state/StateBuilder.kt | 2 +- 13 files changed, 68 insertions(+), 30 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7b6142a534..7185ff029d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -138,9 +138,9 @@ android:name="com.tangem.tap.features.sprinklr.ui.SprinklrActivity" android:theme="@style/AppTheme" /> - - - + { private var homeState: MutableState = mutableStateOf(store.state.homeState) - private val learn2earnViewModel by viewModels() + private val learn2earnViewModel by activityViewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) store.dispatch(HomeAction.OnCreate) store.dispatch(HomeAction.Init) - if (learn2earnViewModel.isNeedToShowViewOnStoriesScreen()) { + if (learn2earnViewModel.uiState.storyScreenState.isVisible) { store.dispatch(HomeAction.InsertStory(position = 0, Stories.OneInchPromo)) // re init homeState after inserting learn2earn story homeState = mutableStateOf(store.state.homeState) @@ -90,10 +90,8 @@ class HomeFragment : Fragment(), StoreSubscriber { @Composable private fun ScreenContent() { StoriesScreen( - homeState, - onLearn2earnClick = { - learn2earnViewModel.onStoriesClick() - }, + homeState = homeState, + onLearn2earnClick = learn2earnViewModel.uiState.storyScreenState.onClick, onScanButtonClick = { Analytics.send(IntroductionProcess.ButtonScanCard()) store.dispatch(HomeAction.ReadCard()) diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt index 46ef676001..fa3e832436 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt @@ -26,7 +26,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.tangem.core.ui.res.TangemTheme -import com.tangem.feature.learn2earn.presentation.ui.StoriesScreen +import com.tangem.feature.learn2earn.presentation.ui.Learn2earnStoriesScreen import com.tangem.tap.features.home.compose.content.* import com.tangem.tap.features.home.compose.views.HomeButtons import com.tangem.tap.features.home.compose.views.StoriesProgressBar @@ -54,8 +54,11 @@ fun StoriesScreen( currentStory = state.stories[max(0, currentStep() - 1)] } val goToNextScreen = { - currentStory = - if (currentStep() < state.stories.lastIndex) state.stories[currentStep() + 1] else state.firstStory + currentStory = if (currentStep() < state.stories.lastIndex) { + state.stories[currentStep() + 1] + } else { + state.firstStory + } } val isPressed = remember { mutableStateOf(false) } @@ -153,7 +156,7 @@ fun StoriesScreen( colorFilter = if (currentStory.isDarkBackground) null else ColorFilter.tint(Color.Black), ) when (currentStory) { - Stories.OneInchPromo -> StoriesScreen(onLearn2earnClick) + Stories.OneInchPromo -> Learn2earnStoriesScreen(onLearn2earnClick) Stories.TangemIntro -> FirstStoriesContent(isPaused, currentStory.duration) { hideContent.value = it } Stories.RevolutionaryWallet -> StoriesRevolutionaryWallet(currentStory.duration) Stories.UltraSecureBackup -> StoriesUltraSecureBackup(isPaused, currentStory.duration) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt index 47d07b91b0..ee946fe068 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt @@ -8,7 +8,9 @@ import android.view.View import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity import androidx.compose.runtime.mutableStateOf +import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle import androidx.lifecycle.flowWithLifecycle @@ -22,12 +24,16 @@ import coil.size.Scale import com.badoo.mvicore.modelWatcher import com.tangem.core.analytics.Analytics import com.tangem.core.ui.fragments.setStatusBarColor +import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.utils.OneTouchClickListener import com.tangem.datasource.connection.NetworkConnectionManager +import com.tangem.feature.learn2earn.presentation.Learn2earnViewModel +import com.tangem.feature.learn2earn.presentation.ui.Learn2earnMainPageScreen import com.tangem.feature.swap.api.SwapFeatureToggleManager import com.tangem.feature.swap.domain.SwapInteractor import com.tangem.tap.MainActivity import com.tangem.tap.common.analytics.events.Portfolio +import com.tangem.tap.common.extensions.beginDelayedTransition import com.tangem.tap.common.extensions.show import com.tangem.tap.common.recyclerView.SpaceItemDecoration import com.tangem.tap.common.redux.global.GlobalAction @@ -73,6 +79,7 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), SafeStoreSubscriber() private val viewModel by viewModels() private val totalBalanceWatcher = modelWatcher { @@ -102,6 +109,7 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), SafeStoreSubscriber - + android:visibility="gone" /> = WrappedList(emptyList())) : TextReference + data class PluralRes(@PluralsRes val id: Int, val count: Int, val formatArgs: WrappedList) : TextReference + /** * Text string * @@ -38,6 +42,7 @@ sealed interface TextReference { fun TextReference.resolveReference(): String { return when (this) { is TextReference.Res -> stringResource(id, *formatArgs.toTypedArray()) + is TextReference.PluralRes -> pluralStringResource(id, count, *formatArgs.toTypedArray()) is TextReference.Str -> value } } \ No newline at end of file diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt index 36ef5522e9..8ba760e9f9 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt @@ -15,7 +15,6 @@ import com.tangem.feature.learn2earn.domain.models.toDomainError import com.tangem.lib.crypto.DerivationManager import com.tangem.lib.crypto.UserWalletManager import com.tangem.lib.crypto.models.Currency -import java.text.DecimalFormat /** [REDACTED_AUTHOR] @@ -62,7 +61,7 @@ class DefaultLearn2earnInteractor( return repository.getUserData().isRegisteredInPromotion } - override fun getAwardAmount(): String { + override fun getAwardAmount(): Pair { val userInfo = repository.getUserData() val promotionInfo = promotion.getPromotionInfo() @@ -70,9 +69,9 @@ class DefaultLearn2earnInteractor( promotionInfo.awardForOldCard } else { promotionInfo.awardForNewCard - } + }.toInt() - return DecimalFormat("0.#").format(awardAmount) + return awardAmount to awardAmount.toString() } @Throws(IllegalArgumentException::class) diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt index 5c35867c68..1121665973 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnInteractor.kt @@ -21,7 +21,7 @@ interface Learn2earnInteractor : WebViewRedirectHandler { fun isUserRegisteredInPromotion(): Boolean - fun getAwardAmount(): String + fun getAwardAmount(): Pair @Throws(IllegalArgumentException::class) suspend fun requestAward(): Result diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt index 8cd6e4536c..7f65afe887 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt @@ -109,7 +109,8 @@ class Learn2earnViewModel @Inject constructor( return if (interactor.isUserRegisteredInPromotion()) { MainScreenState.Description.GetBonus } else { - MainScreenState.Description.Learn(interactor.getAwardAmount()) + val (count, award) = interactor.getAwardAmount() + MainScreenState.Description.Learn(count, award) } } diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/GetBonusView.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/GetBonusView.kt index 25cd356f7d..25a1a5d158 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/GetBonusView.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/GetBonusView.kt @@ -146,6 +146,6 @@ private fun OneInchStoriesContentPreview_Dark() { private fun makePreviewState(): MainScreenState = MainScreenState( isVisible = true, onClick = {}, - description = MainScreenState.Description.Learn("0"), + description = MainScreenState.Description.Learn(0, "0"), showProgress = false, ) \ No newline at end of file diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/Learn2earnState.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/Learn2earnState.kt index 7e970ee675..f78993a14f 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/Learn2earnState.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/Learn2earnState.kt @@ -1,6 +1,7 @@ package com.tangem.feature.learn2earn.presentation.ui.state import com.tangem.core.ui.extensions.TextReference +import com.tangem.core.ui.extensions.WrappedList import com.tangem.feature.learn2earn.domain.models.PromotionError import com.tangem.feature.learn2earn.impl.R @@ -30,9 +31,9 @@ data class MainScreenState( sealed class Description(val title: TextReference, val subtitle: TextReference) { - class Learn(awardAmount: String) : Description( + class Learn(count: Int, award: String) : Description( TextReference.Res(R.string.main_learn_title), - TextReference.Res(R.string.main_learn_subtitle, listOf(awardAmount)), + TextReference.PluralRes(R.plurals.main_learn_subtitle, count, WrappedList(listOf(award))), ) object GetBonus : Description( diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt index a0d3929569..0e2e14251c 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/ui/state/StateBuilder.kt @@ -12,7 +12,7 @@ internal fun Learn2earnState.Companion.init(uiActions: UiActions): Learn2earnSta mainScreenState = MainScreenState( isVisible = false, onClick = uiActions.buttonMainClick, - description = MainScreenState.Description.Learn("0"), + description = MainScreenState.Description.Learn(0, "0"), showProgress = false, ), )