diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config
index 64ae04d208..f50133547b 160000
--- a/app/src/main/assets/tangem-app-config
+++ b/app/src/main/assets/tangem-app-config
@@ -1 +1 @@
-Subproject commit 64ae04d2086e5a605dd4da3cba4af32a60d46c79
+Subproject commit f50133547b5e19fb7ad32e64370573d60f6791fd
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 123c26f691..92fc72c0bf 100644
--- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt
+++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt
@@ -1,6 +1,12 @@
package com.tangem.tap.domain
-import com.tangem.blockchain.common.*
+import com.tangem.blockchain.common.Blockchain
+import com.tangem.blockchain.common.BlockchainSdkConfig
+import com.tangem.blockchain.common.Token
+import com.tangem.blockchain.common.Wallet
+import com.tangem.blockchain.common.WalletManager
+import com.tangem.blockchain.common.WalletManagerFactory
+import com.tangem.common.card.Card
import com.tangem.common.services.Result
import com.tangem.domain.common.ScanResponse
import com.tangem.domain.common.TapWorkarounds.isStart2Coin
@@ -85,6 +91,12 @@ class TapWalletManager {
store.dispatch(GlobalAction.SaveScanNoteResponse(data))
store.dispatch(WalletAction.SetIfTestnetCard(data.card.isTestCard))
store.dispatch(WalletAction.MultiWallet.SetIsMultiwalletAllowed(data.card.isMultiwalletAllowed))
+ store.dispatch(
+ WalletAction.MultiWallet.ShowWalletBackupWarning(
+ show = data.card.settings.isBackupAllowed
+ && data.card.backupStatus == Card.BackupStatus.NoBackup
+ )
+ )
loadData(data)
}
}
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 eefae0bcf6..edc6be9c6e 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
@@ -75,10 +75,15 @@ sealed class WalletAction : Action {
) : MultiWallet()
data class SelectWallet(val walletData: WalletData?) : MultiWallet()
- data class RemoveWallet(val walletData: WalletData, val fromWalletDetails: Boolean = true) : MultiWallet()
+ data class RemoveWallet(val walletData: WalletData, val fromWalletDetails: Boolean = true) :
+ MultiWallet()
+
data class TryToRemoveWallet(val walletData: WalletData) : MultiWallet()
data class SetPrimaryBlockchain(val blockchain: Blockchain) : MultiWallet()
data class SetPrimaryToken(val token: Token) : MultiWallet()
+
+ data class ShowWalletBackupWarning(val show: Boolean) : MultiWallet()
+ object BackupWallet : MultiWallet()
}
sealed class Warnings : WalletAction() {
diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt
index ce660968f6..557b32f260 100644
--- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt
+++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt
@@ -1,7 +1,11 @@
package com.tangem.tap.features.wallet.redux
import android.graphics.Bitmap
-import com.tangem.blockchain.common.*
+import com.tangem.blockchain.common.Amount
+import com.tangem.blockchain.common.Blockchain
+import com.tangem.blockchain.common.Token
+import com.tangem.blockchain.common.Wallet
+import com.tangem.blockchain.common.WalletManager
import com.tangem.blockchain.common.address.AddressType
import com.tangem.common.extensions.isZero
import com.tangem.domain.common.extensions.canHandleToken
@@ -16,16 +20,23 @@ import com.tangem.tap.domain.extensions.buyIsAllowed
import com.tangem.tap.domain.extensions.sellIsAllowed
import com.tangem.tap.domain.tokens.models.BlockchainNetwork
import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsState
-import com.tangem.tap.features.wallet.models.*
+import com.tangem.tap.features.wallet.models.Currency
+import com.tangem.tap.features.wallet.models.PendingTransaction
+import com.tangem.tap.features.wallet.models.TotalBalance
+import com.tangem.tap.features.wallet.models.WalletRent
+import com.tangem.tap.features.wallet.models.WalletWarning
+import com.tangem.tap.features.wallet.models.hasPendingTransactions
+import com.tangem.tap.features.wallet.models.hasSendableAmounts
+import com.tangem.tap.features.wallet.models.isSendableAmount
import com.tangem.tap.features.wallet.redux.reducers.calculateTotalFiatAmount
import com.tangem.tap.features.wallet.redux.reducers.findProgressState
import com.tangem.tap.features.wallet.ui.BalanceStatus
import com.tangem.tap.features.wallet.ui.BalanceWidgetData
import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager
import com.tangem.tap.store
-import org.rekotlin.StateType
import java.math.BigDecimal
import kotlin.properties.ReadOnlyProperty
+import org.rekotlin.StateType
data class WalletState(
val state: ProgressState = ProgressState.Done,
@@ -41,6 +52,7 @@ data class WalletState(
val primaryToken: Token? = null,
val isTestnet: Boolean = false,
val totalBalance: TotalBalance? = null,
+ val showBackupWarning: Boolean = false,
) : StateType {
// if you do not delegate - the application crashes on startup,
diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt
index 97a35f59c2..e3af462d5d 100644
--- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt
+++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt
@@ -6,6 +6,7 @@ import com.tangem.blockchain.common.WalletManager
import com.tangem.common.extensions.guard
import com.tangem.tap.common.extensions.dispatchDialogShow
import com.tangem.tap.common.extensions.safeUpdate
+import com.tangem.tap.common.redux.global.GlobalAction
import com.tangem.tap.common.redux.global.GlobalState
import com.tangem.tap.common.redux.navigation.AppScreen
import com.tangem.tap.common.redux.navigation.NavigationAction
@@ -20,10 +21,10 @@ import com.tangem.tap.features.wallet.redux.WalletState
import com.tangem.tap.features.wallet.redux.models.WalletDialog
import com.tangem.tap.scope
import com.tangem.tap.store
+import java.math.BigDecimal
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-import java.math.BigDecimal
class MultiWalletMiddleware {
fun handle(
@@ -142,6 +143,13 @@ class MultiWalletMiddleware {
store.dispatch(NavigationAction.PopBackTo())
}
}
+ is WalletAction.MultiWallet.ShowWalletBackupWarning -> Unit
+ is WalletAction.MultiWallet.BackupWallet -> {
+ store.state.globalState.scanResponse?.let {
+ store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingWallet))
+ store.dispatch(GlobalAction.Onboarding.Start(it, fromHomeScreen = false))
+ }
+ }
// is WalletAction.MultiWallet.FindBlockchainsInUse -> {
// val scanResponse = globalState.scanResponse ?: return
// if (scanResponse.supportsHdWallet()) return
diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt
index 648479c03a..03cee11142 100644
--- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt
+++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt
@@ -12,8 +12,12 @@ import com.tangem.tap.features.wallet.models.WalletRent
import com.tangem.tap.features.wallet.models.filterByToken
import com.tangem.tap.features.wallet.models.getPendingTransactions
import com.tangem.tap.features.wallet.models.removeUnknownTransactions
-import com.tangem.tap.features.wallet.redux.*
+import com.tangem.tap.features.wallet.redux.WalletAction
+import com.tangem.tap.features.wallet.redux.WalletData
+import com.tangem.tap.features.wallet.redux.WalletMainButton
+import com.tangem.tap.features.wallet.redux.WalletState
import com.tangem.tap.features.wallet.redux.WalletState.Companion.UNKNOWN_AMOUNT_SIGN
+import com.tangem.tap.features.wallet.redux.WalletStore
import com.tangem.tap.features.wallet.ui.BalanceStatus
import com.tangem.tap.features.wallet.ui.BalanceWidgetData
import com.tangem.tap.features.wallet.ui.TokenData
@@ -161,6 +165,10 @@ class MultiWalletReducer {
// is WalletAction.MultiWallet.FindBlockchainsInUse -> state
is WalletAction.MultiWallet.SaveCurrencies -> state
is WalletAction.MultiWallet.TryToRemoveWallet -> state
+ is WalletAction.MultiWallet.ShowWalletBackupWarning -> state.copy(
+ showBackupWarning = action.show
+ )
+ is WalletAction.MultiWallet.BackupWallet -> state
}
}
diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt
index 5646b437f0..994a491ac2 100644
--- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt
+++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt
@@ -91,6 +91,7 @@ class MultiWalletView : WalletView {
val binding = binding ?: return
handleTotalBalance(binding, state.totalBalance)
+ handleBackupWarning(binding, state.showBackupWarning)
walletsAdapter.submitList(state.walletsData, state.primaryBlockchain, state.primaryToken)
binding.btnAddToken.setOnClickListener {
@@ -120,6 +121,16 @@ class MultiWalletView : WalletView {
handleErrorStates(state = state, binding = binding, fragment = fragment)
}
+ private fun handleBackupWarning(
+ binding: FragmentWalletBinding,
+ showBackupWarning: Boolean
+ ) = with(binding.lWalletBackupWarning) {
+ root.isVisible = showBackupWarning
+ root.setOnClickListener {
+ store.dispatch(WalletAction.MultiWallet.BackupWallet)
+ }
+ }
+
private fun handleTotalBalance(
binding: FragmentWalletBinding,
totalBalance: TotalBalance?,
diff --git a/app/src/main/res/drawable/img_warning_triangle_24.xml b/app/src/main/res/drawable/img_warning_triangle_24.xml
new file mode 100644
index 0000000000..c54d7d8f8b
--- /dev/null
+++ b/app/src/main/res/drawable/img_warning_triangle_24.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/layout/card_total_balance.xml b/app/src/main/res/layout/card_total_balance.xml
deleted file mode 100644
index 1f97649e18..0000000000
--- a/app/src/main/res/layout/card_total_balance.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/fragment_wallet.xml b/app/src/main/res/layout/fragment_wallet.xml
index 17bf714628..1545257fc9 100644
--- a/app/src/main/res/layout/fragment_wallet.xml
+++ b/app/src/main/res/layout/fragment_wallet.xml
@@ -57,12 +57,13 @@
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="12dp"
- android:adjustViewBounds="true"
- android:elevation="3dp"
- android:maxHeight="215dp"
- android:scaleType="fitCenter"
- android:src="@drawable/card_placeholder_black"
- app:layout_constraintTop_toTopOf="parent" />
+ android:adjustViewBounds="true"
+ android:elevation="3dp"
+ android:maxHeight="215dp"
+ android:scaleType="fitCenter"
+ android:src="@drawable/card_placeholder_black"
+ android:contentDescription="@null"
+ app:layout_constraintTop_toTopOf="parent" />
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="12dp"
+ android:minHeight="0dp"
+ android:nestedScrollingEnabled="false"
+ android:overScrollMode="never"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/barrier" />
+ android:id="@+id/l_wallet_backup_warning"
+ layout="@layout/layout_wallet_backup_warning"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="16dp"
+ android:visibility="gone"
+ app:layout_constraintTop_toBottomOf="@id/rv_warning_messages" />
+
+
+ android:id="@+id/rv_multiwallet"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:nestedScrollingEnabled="false"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/rv_pending_transaction" />
+
+
+
+
@@ -171,28 +208,6 @@
android:text="@string/main_manage_tokens"
android:elevation="4dp"
app:cornerRadius="8dp"
- tools:visibility="gone" />
-
-
-
-
+ app:layout_constraintBottom_toBottomOf="parent" />
diff --git a/app/src/main/res/layout/layout_card_total_balance.xml b/app/src/main/res/layout/layout_card_total_balance.xml
new file mode 100644
index 0000000000..fe3484f373
--- /dev/null
+++ b/app/src/main/res/layout/layout_card_total_balance.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/layout_wallet_backup_warning.xml b/app/src/main/res/layout/layout_wallet_backup_warning.xml
new file mode 100644
index 0000000000..119ab12734
--- /dev/null
+++ b/app/src/main/res/layout/layout_wallet_backup_warning.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml
index 1dca54fc84..d6324862d0 100644
--- a/app/src/main/res/values-ru/strings_final.xml
+++ b/app/src/main/res/values-ru/strings_final.xml
@@ -64,4 +64,7 @@
Сеть %s не найдена. Пожалуйста, добавьте её и попробуйте заново.
Сеть %s
+
+ Бэкап кошелька не был произведен
+ Чтобы защитить свои активы, мы советуем вам выполнить эту процедуру
diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml
index bedeb1ae12..bedbde3100 100644
--- a/app/src/main/res/values/strings_final.xml
+++ b/app/src/main/res/values/strings_final.xml
@@ -64,4 +64,7 @@
%s network not found. Please, add it first and try again.
%s network
+
+ Your wallet has not been backed up
+ To protect your assets, we advise you to carry out this procedure