diff --git a/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt index 6c0ebccfc6..92f1340058 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt @@ -2,10 +2,7 @@ package com.tangem.tap.di.domain import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.domain.wallets.legacy.WalletsStateHolder -import com.tangem.domain.wallets.usecase.GetExploreUrlUseCase -import com.tangem.domain.wallets.usecase.GetWalletsUseCase -import com.tangem.domain.wallets.usecase.SaveWalletUseCase -import com.tangem.domain.wallets.usecase.UnlockWalletsUseCase +import com.tangem.domain.wallets.usecase.* import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -22,6 +19,12 @@ internal object WalletsDomainModule { return GetWalletsUseCase(walletsStateHolder = walletsStateHolder) } + @Provides + @ViewModelScoped + fun providesGetSelectedWalletUseCase(walletsStateHolder: WalletsStateHolder): GetSelectedWalletUseCase { + return GetSelectedWalletUseCase(walletsStateHolder = walletsStateHolder) + } + @Provides @ViewModelScoped fun providesSaveWalletUseCase(walletsStateHolder: WalletsStateHolder): SaveWalletUseCase { @@ -39,4 +42,10 @@ internal object WalletsDomainModule { fun providesUnlockWalletUseCase(walletsStateHolder: WalletsStateHolder): UnlockWalletsUseCase { return UnlockWalletsUseCase(walletsStateHolder = walletsStateHolder) } + + @Provides + @ViewModelScoped + fun providesSelectWalletUseCase(walletsStateHolder: WalletsStateHolder): SelectWalletUseCase { + return SelectWalletUseCase(walletsStateHolder = walletsStateHolder) + } } \ No newline at end of file diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 7076371f81..6966257f9a 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -177,6 +177,7 @@ По вашему промокоду не было покупки кошелька, а значит вы не можете получить бонус. Купите кошелек Tangem, отсканируйте его в приложении и получите бонус. Чтобы получить доступ ко всем сетям, вам необходимо отсканировать карту Отсканируйте карту + Токены Вам необходимо установить единый код доступа для защиты всех ваших карт Защита Позже вы сможете установить индивидуальный код доступа для каждой карты diff --git a/core/res/src/main/res/values-zh-rTW/strings.xml b/core/res/src/main/res/values-zh-rTW/strings.xml index 0b2d148627..87318128aa 100644 --- a/core/res/src/main/res/values-zh-rTW/strings.xml +++ b/core/res/src/main/res/values-zh-rTW/strings.xml @@ -150,6 +150,7 @@ 該金額不包括您的部分資金 要訪問所有的網路您需要掃描卡片 掃描卡片 + 代幣 您必須設置一個單一的訪問代碼來保護您的所有錢包 保護 您可以稍後在每張卡上設置單獨的訪問密碼 diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index e207afb74d..b958ba0f9f 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -174,6 +174,7 @@ There was no purchase of a wallet using your promo code, which means you cannot receive a bonus. Buy Tangem wallet, scan it in the app, and get the bonus. To access all the networks you need to scan the card Scan your card + Tokens You have to set up a single access code to protect all your wallets Protect You can set up an individual access code on each card later diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/models/GetSelectedWalletError.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/GetSelectedWalletError.kt new file mode 100644 index 0000000000..ad0867fa6e --- /dev/null +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/GetSelectedWalletError.kt @@ -0,0 +1,8 @@ +package com.tangem.domain.wallets.models + +sealed interface GetSelectedWalletError { + + object DataError : GetSelectedWalletError + + object NoUserWalletSelected : GetSelectedWalletError +} \ No newline at end of file diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/models/SelectWalletError.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/SelectWalletError.kt new file mode 100644 index 0000000000..a357f06ca9 --- /dev/null +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/SelectWalletError.kt @@ -0,0 +1,8 @@ +package com.tangem.domain.wallets.models + +sealed interface SelectWalletError { + + object DataError : SelectWalletError + + object UnableToSelectUserWallet : SelectWalletError +} \ No newline at end of file diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GetSelectedWalletUseCase.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GetSelectedWalletUseCase.kt new file mode 100644 index 0000000000..89d6fe1405 --- /dev/null +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GetSelectedWalletUseCase.kt @@ -0,0 +1,32 @@ +package com.tangem.domain.wallets.usecase + +import arrow.core.Either +import arrow.core.raise.either +import arrow.core.raise.ensureNotNull +import com.tangem.domain.wallets.legacy.WalletsStateHolder +import com.tangem.domain.wallets.models.GetSelectedWalletError +import com.tangem.domain.wallets.models.UserWallet + +/** + * Use case for getting selected wallet + * + * @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager' + * +[REDACTED_AUTHOR] + */ +class GetSelectedWalletUseCase(private val walletsStateHolder: WalletsStateHolder) { + + operator fun invoke(): Either { + return either { + val userWalletsListManager = ensureNotNull( + value = walletsStateHolder.userWalletsListManager, + raise = { GetSelectedWalletError.DataError }, + ) + + ensureNotNull( + value = userWalletsListManager.selectedUserWalletSync, + raise = { GetSelectedWalletError.NoUserWalletSelected }, + ) + } + } +} \ No newline at end of file diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/SelectWalletUseCase.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/SelectWalletUseCase.kt new file mode 100644 index 0000000000..aa16ad812b --- /dev/null +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/SelectWalletUseCase.kt @@ -0,0 +1,37 @@ +package com.tangem.domain.wallets.usecase + +import arrow.core.Either +import arrow.core.left +import arrow.core.raise.either +import arrow.core.raise.ensureNotNull +import arrow.core.right +import com.tangem.common.doOnFailure +import com.tangem.common.doOnSuccess +import com.tangem.domain.wallets.legacy.WalletsStateHolder +import com.tangem.domain.wallets.models.SelectWalletError +import com.tangem.domain.wallets.models.UserWalletId + +/** + * Use case for selecting wallet + * + * @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager' + * +[REDACTED_AUTHOR] + */ +class SelectWalletUseCase(private val walletsStateHolder: WalletsStateHolder) { + + suspend operator fun invoke(userWalletId: UserWalletId): Either { + return either { + val userWalletsListManager = ensureNotNull( + value = walletsStateHolder.userWalletsListManager, + raise = { SelectWalletError.DataError }, + ) + + userWalletsListManager.select(userWalletId) + .doOnSuccess { return Unit.right() } + .doOnFailure { return SelectWalletError.UnableToSelectUserWallet.left() } + + return Unit.right() + } + } +} \ No newline at end of file diff --git a/features/wallet/impl/src/main/res/drawable/ic_currency_24.xml b/features/wallet/impl/src/main/res/drawable/ic_currency_24.xml new file mode 100644 index 0000000000..bee87c2b68 --- /dev/null +++ b/features/wallet/impl/src/main/res/drawable/ic_currency_24.xml @@ -0,0 +1,9 @@ + + +