diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt index 5782c7b0e2..c2112f12fe 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt @@ -1,8 +1,7 @@ package com.tangem.tap.features.details.redux -import com.tangem.blockchain.common.Wallet -import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.common.CardTypesResolver +import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.ScanResponse import com.tangem.tap.common.entities.FiatCurrency import org.rekotlin.Action @@ -11,7 +10,6 @@ sealed class DetailsAction : Action { data class PrepareScreen( val scanResponse: ScanResponse, - val wallets: List, ) : DetailsAction() object ReCreateTwinsWallet : DetailsAction() diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt index e28b9cd398..71e4d6b2dd 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt @@ -9,7 +9,7 @@ import com.tangem.tap.preferencesStorage import com.tangem.tap.store import com.tangem.tap.tangemSdkManager import org.rekotlin.Action -import java.util.* +import java.util.EnumSet object DetailsReducer { fun reduce(action: Action, state: AppState): DetailsState = internalReduce(action, state) @@ -49,7 +49,6 @@ private fun internalReduce(action: Action, state: AppState): DetailsState { private fun handlePrepareScreen(action: DetailsAction.PrepareScreen): DetailsState { return DetailsState( scanResponse = action.scanResponse, - wallets = action.wallets, createBackupAllowed = action.scanResponse.card.backupStatus == CardDTO.BackupStatus.NoBackup, appCurrency = store.state.globalState.appCurrency, appSettingsState = AppSettingsState( diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt index 6fd17a4119..6ad80685b2 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt @@ -1,16 +1,14 @@ package com.tangem.tap.features.details.redux -import com.tangem.blockchain.common.Wallet import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.ScanResponse import com.tangem.tap.common.entities.Button import com.tangem.tap.common.entities.FiatCurrency import org.rekotlin.StateType -import java.util.* +import java.util.EnumSet data class DetailsState( val scanResponse: ScanResponse? = null, - val wallets: List = emptyList(), val cardSettingsState: CardSettingsState? = null, val privacyPolicyUrl: String? = null, val createBackupAllowed: Boolean = false, diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt index 8301791338..208d964f58 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsViewModel.kt @@ -7,16 +7,25 @@ import com.tangem.core.navigation.AppScreen import com.tangem.core.navigation.NavigationAction import com.tangem.domain.common.util.cardTypesResolver import com.tangem.tap.common.analytics.events.Settings +import com.tangem.tap.common.extensions.dispatchWithMain import com.tangem.tap.common.feedback.FeedbackEmail import com.tangem.tap.common.feedback.SupportInfo import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.global.GlobalAction +import com.tangem.tap.features.details.redux.DetailsAction import com.tangem.tap.features.details.redux.DetailsState import com.tangem.tap.features.disclaimer.redux.DisclaimerAction import com.tangem.tap.features.home.LocaleRegionProvider import com.tangem.tap.features.home.RUSSIA_COUNTRY_CODE import com.tangem.tap.features.wallet.redux.WalletAction +import com.tangem.tap.scope +import com.tangem.tap.userWalletsListManager import com.tangem.wallet.BuildConfig +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import org.rekotlin.Store class DetailsViewModel(private val store: Store) { @@ -24,29 +33,13 @@ class DetailsViewModel(private val store: Store) { var detailsScreenState: MutableState = mutableStateOf(updateState(store.state.detailsState)) private set - @Suppress("ComplexMethod") - fun updateState(state: DetailsState): DetailsScreenState { - val cardTypesResolver = state.scanResponse?.cardTypesResolver - val settings = SettingsElement.values().mapNotNull { - when (it) { - SettingsElement.WalletConnect -> { - if (cardTypesResolver?.isMultiwalletAllowed() == true) it else null - } - SettingsElement.SendFeedback -> it - SettingsElement.LinkMoreCards -> if (state.createBackupAllowed) it else null - SettingsElement.PrivacyPolicy -> { - if (state.privacyPolicyUrl != null) it else null - } - SettingsElement.AppSettings -> if (state.appSettingsState.isBiometricsAvailable) it else null - SettingsElement.AppCurrency -> if (cardTypesResolver?.isMultiwalletAllowed() != true) it else null - SettingsElement.ReferralProgram -> if (cardTypesResolver?.isTangemWallet() == true) it else null - SettingsElement.TesterMenu -> if (BuildConfig.TESTER_MENU_ENABLED) it else null - else -> it - } - } + init { + bootstrapScreenState() + } + fun updateState(state: DetailsState): DetailsScreenState { return DetailsScreenState( - elements = settings, + elements = createSettingsItems(state), tangemLinks = getSocialLinks(), tangemVersion = getTangemAppVersion(), appCurrency = state.appCurrency.name, @@ -55,6 +48,26 @@ class DetailsViewModel(private val store: Store) { ) } + @Suppress("ComplexMethod") + private fun createSettingsItems(state: DetailsState): List { + val scanResponse = state.scanResponse ?: return emptyList() + val cardTypesResolver = scanResponse.cardTypesResolver + + return SettingsElement.values().mapNotNull { + when (it) { + SettingsElement.WalletConnect -> if (cardTypesResolver.isMultiwalletAllowed()) it else null + SettingsElement.SendFeedback -> it + SettingsElement.LinkMoreCards -> if (state.createBackupAllowed) it else null + SettingsElement.PrivacyPolicy -> if (state.privacyPolicyUrl != null) it else null + SettingsElement.AppSettings -> if (state.appSettingsState.isBiometricsAvailable) it else null + SettingsElement.AppCurrency -> if (cardTypesResolver.isMultiwalletAllowed()) null else it + SettingsElement.ReferralProgram -> if (cardTypesResolver.isTangemWallet()) it else null + SettingsElement.TesterMenu -> if (BuildConfig.TESTER_MENU_ENABLED) it else null + else -> it + } + } + } + private fun handleSocialNetworkClick(link: SocialNetworkLink) { Analytics.send(Settings.ButtonSocialNetwork(link.network)) store.dispatch(NavigationAction.OpenUrl(link.url)) @@ -118,4 +131,14 @@ class DetailsViewModel(private val store: Store) { val versionName: String = BuildConfig.VERSION_NAME return "$versionName ($versionCode)" } + + private fun bootstrapScreenState() { + userWalletsListManager.selectedUserWallet + .distinctUntilChanged() + .onEach { selectedUserWallet -> + store.dispatchWithMain(DetailsAction.PrepareScreen(selectedUserWallet.scanResponse)) + } + .flowOn(Dispatchers.IO) + .launchIn(scope) + } } \ No newline at end of file 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 cec1e05dd8..2164a5028d 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 @@ -43,7 +43,6 @@ import com.tangem.tap.common.utils.SafeStoreSubscriber import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.statePrinter.printScanResponseState import com.tangem.tap.domain.statePrinter.printWalletState -import com.tangem.tap.features.details.redux.DetailsAction import com.tangem.tap.features.wallet.redux.ErrorType import com.tangem.tap.features.wallet.redux.ProgressState import com.tangem.tap.features.wallet.redux.WalletAction @@ -313,17 +312,9 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), SafeStoreSubscriber { store.dispatch(GlobalAction.UpdateFeedbackInfo(store.state.walletState.walletManagers)) - store.state.globalState.scanResponse?.let { scanResponse -> - store.dispatch( - DetailsAction.PrepareScreen( - scanResponse = scanResponse, - wallets = store.state.walletState.walletManagers.map { it.wallet }, - ), - ) - store.dispatch(NavigationAction.NavigateTo(AppScreen.Details)) - true - } - false + store.dispatch(NavigationAction.NavigateTo(AppScreen.Details)) + + true } else -> super.onOptionsItemSelected(item) }