diff --git a/app/src/main/java/com/tangem/tap/domain/TapErrors.kt b/app/src/main/java/com/tangem/tap/domain/TapErrors.kt index 0b4acf90e2..1141048a49 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapErrors.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapErrors.kt @@ -8,4 +8,5 @@ sealed class TapError(@StringRes val localizedMessage: Int): Throwable() { object PayIdCreatingError: TapError(R.string.error_creating_payid) object PayIdEmptyField: TapError(R.string.wallet_create_payid_empty) object UnknownBlockchain: TapError(R.string.wallet_unknown_blockchain) + object NoInternetConnection: TapError(R.string.notification_no_internet) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index 216a6c2053..373d4d5f41 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -3,6 +3,7 @@ package com.tangem.tap.domain import com.tangem.blockchain.common.Wallet import com.tangem.blockchain.common.WalletManager import com.tangem.commands.Card +import com.tangem.commands.CardStatus import com.tangem.commands.common.network.Result import com.tangem.commands.common.network.TangemService import com.tangem.common.extensions.toHexString @@ -73,7 +74,7 @@ class TapWalletManager { store.dispatch(GlobalAction.SaveScanNoteResponse(data)) if (data.walletManager != null) { if (!NetworkConnectivity.getInstance().isOnlineOrConnecting()) { - store.dispatch(WalletAction.LoadData.NoInternetConnection) + store.dispatch(WalletAction.LoadData.Failure(TapError.NoInternetConnection)) return@withContext } data.verifyResponse?.artworkInfo?.id?.let { @@ -82,8 +83,10 @@ class TapWalletManager { store.dispatch(WalletAction.LoadWallet) store.dispatch(WalletAction.LoadFiatRate) store.dispatch(WalletAction.LoadPayId) - } else { + } else if (data.card.status == CardStatus.Empty){ store.dispatch(WalletAction.EmptyWallet) + } else { + store.dispatch(WalletAction.LoadData.Failure(TapError.UnknownBlockchain)) } } } diff --git a/app/src/main/java/com/tangem/tap/domain/tasks/ScanNoteTask.kt b/app/src/main/java/com/tangem/tap/domain/tasks/ScanNoteTask.kt index b0e055939e..80cf0fd3be 100644 --- a/app/src/main/java/com/tangem/tap/domain/tasks/ScanNoteTask.kt +++ b/app/src/main/java/com/tangem/tap/domain/tasks/ScanNoteTask.kt @@ -6,7 +6,6 @@ import com.tangem.TangemSdkError import com.tangem.blockchain.common.WalletManager import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.commands.Card -import com.tangem.commands.CardStatus import com.tangem.commands.CommandResponse import com.tangem.commands.verifycard.VerifyCardCommand import com.tangem.commands.verifycard.VerifyCardResponse @@ -24,12 +23,11 @@ class ScanNoteTask : CardSessionRunnable { override fun run(session: CardSession, callback: (result: CompletionResult) -> Unit) { val card = session.environment.card card ?: return callback(CompletionResult.Failure(TangemSdkError.CardError())) - if (card.status == CardStatus.Empty) { + val walletManager = try { + WalletManagerFactory.makeWalletManager(card) + } catch (exception: Exception) { return callback(CompletionResult.Success(ScanNoteResponse(null, card))) } - val walletManager = WalletManagerFactory.makeWalletManager(card) - ?: return callback(CompletionResult.Failure(TangemSdkError.CardError())) - VerifyCardCommand(true).run(session) { result -> when (result) { is CompletionResult.Success -> { @@ -48,10 +46,10 @@ class ScanNoteTask : CardSessionRunnable { fun Card?.toScanNoteCompletionResult(): CompletionResult { this ?: return CompletionResult.Failure(TangemSdkError.CardError()) - if (this.status == CardStatus.Empty) { + val walletManager = try { + WalletManagerFactory.makeWalletManager(this) + } catch (exception: Exception) { return CompletionResult.Success(ScanNoteResponse(null, this)) } - val walletManager = WalletManagerFactory.makeWalletManager(this) - ?: return CompletionResult.Failure(TangemSdkError.CardError()) return CompletionResult.Success(ScanNoteResponse(walletManager, this)) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt index 4d37900796..9272568e7a 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt @@ -13,7 +13,7 @@ import java.math.BigDecimal sealed class WalletAction : Action { object LoadData : WalletAction() { - object NoInternetConnection : WalletAction() + data class Failure(val error: TapError): WalletAction() } object LoadWallet : WalletAction() { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletReducer.kt index 5c832714be..29f7740272 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletReducer.kt @@ -7,6 +7,7 @@ import com.tangem.tap.common.extensions.toFiatString import com.tangem.tap.common.extensions.toFormattedString import com.tangem.tap.common.extensions.toQrCode import com.tangem.tap.common.redux.AppState +import com.tangem.tap.domain.TapError import com.tangem.tap.features.wallet.models.toPendingTransactions import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData @@ -31,22 +32,33 @@ private fun internalReduce(action: Action, state: AppState): WalletState { currencyData = BalanceWidgetData(BalanceStatus.EmptyCard), mainButton = WalletMainButton.CreateWalletButton(true) ) - is WalletAction.LoadData.NoInternetConnection -> { - val wallet = state.globalState.scanNoteResponse?.walletManager?.wallet - val addressData = if (wallet == null) { - null - } else { - AddressData(wallet.address, wallet.shareUrl, wallet.exploreUrl) + is WalletAction.LoadData.Failure -> { + when (action.error) { + is TapError.NoInternetConnection -> { + val wallet = state.globalState.scanNoteResponse?.walletManager?.wallet + val addressData = if (wallet == null) { + null + } else { + AddressData(wallet.address, wallet.shareUrl, wallet.exploreUrl) + } + newState = WalletState( + state = ProgressState.Error, + error = ErrorType.NoInternetConnection, + addressData = addressData, + currencyData = BalanceWidgetData( + status = BalanceStatus.Unreachable, + currency = wallet?.blockchain?.fullName), + mainButton = WalletMainButton.SendButton(false) + ) + } + is TapError.UnknownBlockchain -> { + newState = WalletState( + state = ProgressState.Done, + currencyData = BalanceWidgetData(BalanceStatus.UnknownBlockchain) + ) + } } - newState = WalletState( - state = ProgressState.Error, - error = ErrorType.NoInternetConnection, - addressData = addressData, - currencyData = BalanceWidgetData( - status = BalanceStatus.Unreachable, - currency = wallet?.blockchain?.fullName), - mainButton = WalletMainButton.SendButton(false) - ) + } is WalletAction.LoadWallet -> { val wallet = state.globalState.scanNoteResponse?.walletManager?.wallet diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/BalanceWidget.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/BalanceWidget.kt index 1e1ad65d42..78a165d4c1 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/BalanceWidget.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/BalanceWidget.kt @@ -15,7 +15,8 @@ enum class BalanceStatus { Unreachable, Loading, NoAccount, - EmptyCard + EmptyCard, + UnknownBlockchain } data class BalanceWidgetData( @@ -84,8 +85,9 @@ class BalanceWidget( fragment.tv_currency.text = data.currency fragment.tv_currency_symbol.text = "-" fragment.tv_amount.text = "" + fragment.tv_status_error_message.text = data.errorMessage - showStatus(R.id.tv_status_error) + showStatus(R.id.group_error) } BalanceStatus.EmptyCard -> { fragment.l_balance.hide() @@ -103,11 +105,18 @@ class BalanceWidget( data.amountToCreateAccount?.toString(), data.currencySymbol ) } + BalanceStatus.UnknownBlockchain -> { + fragment.l_balance.hide() + fragment.l_balance_error.show() + fragment.tv_error_title.text = fragment.getText(R.string.wallet_unknown_blockchain_title) + fragment.tv_error_descriptions.text = + fragment.getString(R.string.wallet_unknown_blockchain) + } } } private fun showStatus(@IdRes viewRes: Int) { - fragment.tv_status_error.show(viewRes == R.id.tv_status_error) + fragment.group_error.show(viewRes == R.id.group_error) fragment.tv_status_loading.show(viewRes == R.id.tv_status_loading) fragment.tv_status_verified.show(viewRes == R.id.tv_status_verified) } diff --git a/app/src/main/res/layout/layout_balance.xml b/app/src/main/res/layout/layout_balance.xml index 8dc16afa30..5fbdf694c6 100644 --- a/app/src/main/res/layout/layout_balance.xml +++ b/app/src/main/res/layout/layout_balance.xml @@ -53,6 +53,26 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_currency" /> + + + + Create PayID Verified Balance Blockchain is unreachable - Uh oh!\nYour Tangem card was made to work with a different application. Please see the name and instructions on your card, and install the correct app. + Your Tangem card was made to work with a different application. Please see the name and instructions on your card, and install the correct app. + Uh oh! Balance is loading… Account is not created Empty Card