From 09cb780a4f6ca21e3f108d273ed32155b51fff80 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 22 Aug 2023 20:41:14 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/di/domain/WalletsDomainModule.kt | 12 +++++++ core/res/src/main/res/values-ru/strings.xml | 5 +++ .../src/main/res/values-zh-rTW/strings.xml | 2 ++ core/res/src/main/res/values/strings.xml | 5 +++ .../wallets/models/DeleteWalletError.kt | 6 ++++ .../wallets/models/UpdateWalletError.kt | 6 ++++ .../wallets/usecase/DeleteWalletUseCase.kt | 31 ++++++++++++++++ .../wallets/usecase/UpdateWalletUseCase.kt | 35 +++++++++++++++++++ .../wallet/viewmodels/WalletClickIntents.kt | 6 ++++ .../wallet/viewmodels/WalletViewModel.kt | 14 ++++++++ 10 files changed, 122 insertions(+) create mode 100644 domain/wallets/src/main/java/com/tangem/domain/wallets/models/DeleteWalletError.kt create mode 100644 domain/wallets/src/main/java/com/tangem/domain/wallets/models/UpdateWalletError.kt create mode 100644 domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/DeleteWalletUseCase.kt create mode 100644 domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UpdateWalletUseCase.kt 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 92f1340058..7eb7a3d2cc 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 @@ -48,4 +48,16 @@ internal object WalletsDomainModule { fun providesSelectWalletUseCase(walletsStateHolder: WalletsStateHolder): SelectWalletUseCase { return SelectWalletUseCase(walletsStateHolder = walletsStateHolder) } + + @Provides + @ViewModelScoped + fun providesUpdateWalletUseCase(walletsStateHolder: WalletsStateHolder): UpdateWalletUseCase { + return UpdateWalletUseCase(walletsStateHolder = walletsStateHolder) + } + + @Provides + @ViewModelScoped + fun providesDeleteWalletUseCase(walletsStateHolder: WalletsStateHolder): DeleteWalletUseCase { + return DeleteWalletUseCase(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 843b3f4be1..820055db8d 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -96,6 +96,8 @@ Получить Отклонить Перезагрузить + Переименовать + Сбросить Сохранить изменения Искать Поиск токенов @@ -116,6 +118,7 @@ Транзакции Перевод Я понял + Необходима разблокировка Недоступно Да Адрес контракта скопирован! @@ -472,6 +475,8 @@ Tangem Twin Это действие необратимо. У вас не будет доступа к старому кошельку. Приложите twin-карту с номером %s и не убирайте до окончания операции + Используйте %s или отсканируйте карту, чтобы получить доступ к своему кошельку + Используйте %s или отсканируйте карту Добавить новый кошелек Вы уверены, что хотите удалить этот кошелек? %d выбрано 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 748251aefa..15209b8a9b 100644 --- a/core/res/src/main/res/values-zh-rTW/strings.xml +++ b/core/res/src/main/res/values-zh-rTW/strings.xml @@ -80,6 +80,8 @@ OK 主卡片 拒絕 + 重新命名 + 重置 保存設置 搜索 搜尋代幣 diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 9d7e67dfea..755f6928a3 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -95,6 +95,8 @@ Receive Reject Reload + Rename + Reset Save changes Search Search tokens @@ -115,6 +117,7 @@ Transactions Transfer I understand + Unlock needed Unreachable Yes Contract address copied! @@ -463,6 +466,8 @@ Tangem Twin This action is irreversible. You will not have access to the old wallet. Tap the twin card with number %s and do not remove until the end of the operation + Use %s or scan a card to have an access to your wallet + Use %s or scan a card Add new wallet Are you sure you want to delete this wallet? %d selected diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/models/DeleteWalletError.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/DeleteWalletError.kt new file mode 100644 index 0000000000..6ed1ab11b9 --- /dev/null +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/DeleteWalletError.kt @@ -0,0 +1,6 @@ +package com.tangem.domain.wallets.models + +sealed interface DeleteWalletError { + + object DataError : DeleteWalletError +} \ No newline at end of file diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/models/UpdateWalletError.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/UpdateWalletError.kt new file mode 100644 index 0000000000..48a93dd33b --- /dev/null +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/UpdateWalletError.kt @@ -0,0 +1,6 @@ +package com.tangem.domain.wallets.models + +sealed interface UpdateWalletError { + + object DataError : UpdateWalletError +} \ No newline at end of file diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/DeleteWalletUseCase.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/DeleteWalletUseCase.kt new file mode 100644 index 0000000000..e4102d98c2 --- /dev/null +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/DeleteWalletUseCase.kt @@ -0,0 +1,31 @@ +package com.tangem.domain.wallets.usecase + +import arrow.core.Either +import arrow.core.left +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.DeleteWalletError +import com.tangem.domain.wallets.models.UserWalletId + +/** + * Use case for updating user wallet + * + * @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager' + * +[REDACTED_AUTHOR] + */ +class DeleteWalletUseCase(private val walletsStateHolder: WalletsStateHolder) { + + suspend operator fun invoke(userWalletId: UserWalletId): Either { + val userWalletsListManager = walletsStateHolder.userWalletsListManager + ?: return DeleteWalletError.DataError.left() + + userWalletsListManager.delete(userWalletIds = listOf(userWalletId)) + .doOnSuccess { return Unit.right() } + .doOnFailure { return DeleteWalletError.DataError.left() } + + return Unit.right() + } +} \ No newline at end of file diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UpdateWalletUseCase.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UpdateWalletUseCase.kt new file mode 100644 index 0000000000..1990c26dda --- /dev/null +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UpdateWalletUseCase.kt @@ -0,0 +1,35 @@ +package com.tangem.domain.wallets.usecase + +import arrow.core.Either +import arrow.core.left +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.UpdateWalletError +import com.tangem.domain.wallets.models.UserWallet +import com.tangem.domain.wallets.models.UserWalletId + +/** + * Use case for updating user wallet + * + * @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager' + * +[REDACTED_AUTHOR] + */ +class UpdateWalletUseCase(private val walletsStateHolder: WalletsStateHolder) { + + suspend operator fun invoke( + userWalletId: UserWalletId, + update: suspend (UserWallet) -> UserWallet, + ): Either { + val userWalletsListManager = walletsStateHolder.userWalletsListManager + ?: return UpdateWalletError.DataError.left() + + userWalletsListManager.update(userWalletId, update) + .doOnSuccess { return Unit.right() } + .doOnFailure { return UpdateWalletError.DataError.left() } + + return Unit.right() + } +} \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt index 48d9423033..ccb9eeeb22 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt @@ -2,7 +2,9 @@ package com.tangem.feature.wallet.presentation.wallet.viewmodels import com.tangem.core.ui.components.transactions.intents.TxHistoryClickIntents import com.tangem.domain.tokens.models.CryptoCurrency +import com.tangem.domain.wallets.models.UserWalletId +@Suppress("TooManyFunctions") internal interface WalletClickIntents : TxHistoryClickIntents { fun onBackClick() @@ -36,4 +38,8 @@ internal interface WalletClickIntents : TxHistoryClickIntents { fun onBottomSheetDismiss() fun onTokenClick(currency: CryptoCurrency) + + fun onRenameClick(userWalletId: UserWalletId, name: String) + + fun onDeleteClick(userWalletId: UserWalletId) } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt index 44ed05d722..af6c22462d 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt @@ -60,6 +60,8 @@ internal class WalletViewModel @Inject constructor( private val saveWalletUseCase: SaveWalletUseCase, private val getSelectedWalletUseCase: GetSelectedWalletUseCase, private val selectWalletUseCase: SelectWalletUseCase, + private val updateWalletUseCase: UpdateWalletUseCase, + private val deleteWalletUseCase: DeleteWalletUseCase, private val getBiometricsStatusUseCase: GetBiometricsStatusUseCase, private val setAccessCodeRequestPolicyUseCase: SetAccessCodeRequestPolicyUseCase, private val getAccessCodeSavingStatusUseCase: GetAccessCodeSavingStatusUseCase, @@ -459,6 +461,18 @@ internal class WalletViewModel @Inject constructor( router.openTokenDetails(currency = currency) } + override fun onRenameClick(userWalletId: UserWalletId, name: String) { + viewModelScope.launch(dispatchers.io) { + updateWalletUseCase(userWalletId = userWalletId, update = { it.copy(name) }) + } + } + + override fun onDeleteClick(userWalletId: UserWalletId) { + viewModelScope.launch(dispatchers.io) { + deleteWalletUseCase(userWalletId) + } + } + private fun createSelectedAppCurrencyFlow(): StateFlow { return getSelectedAppCurrencyUseCase() .map { maybeAppCurrency ->