diff --git a/app/build.gradle b/app/build.gradle index f33cc3b36b..c046c5a34f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -64,7 +64,7 @@ dependencies { implementation 'com.google.android.material:material:1.2.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10' - implementation 'com.tangem:blockchain:1.67.0' + implementation 'com.tangem:blockchain:1.68.0' implementation 'com.tangem:core:1.63.0' implementation 'com.tangem:sdk:1.63.0' 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 90e19278fd..c6e77e8a9f 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -81,6 +81,12 @@ class TapWalletManager { withContext(Dispatchers.Main) { store.dispatch(WalletAction.ResetState) store.dispatch(GlobalAction.SaveScanNoteResponse(data)) + loadData(data) + } + } + + suspend fun loadData(data: ScanNoteResponse) { + withContext(Dispatchers.Main) { store.dispatch(WalletAction.CheckIfWarningNeeded) val artworkId = data.verifyResponse?.artworkInfo?.id if (data.walletManager != null) { 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 cd19178850..93a2617258 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 @@ -31,7 +31,10 @@ class ScanNoteTask(val card: Card? = null) : CardSessionRunnable callback(CompletionResult.Failure(result.error)) is CompletionResult.Success -> { - val card = this.card ?: result.data + val card = this.card?.copy( + isPin1Default = result.data.isPin1Default, + isPin2Default = result.data.isPin2Default + ) ?: result.data val error = getErrorIfExcludedCard(card) if (error != null) { 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 9982112cbc..de11a23644 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 @@ -134,7 +134,8 @@ private fun handleSecurityAction( } state.copy(securityScreenState = state.securityScreenState?.copy( - allowedOptions = allowedSecurityOptions + allowedOptions = allowedSecurityOptions, + selectedOption = state.securityScreenState.currentOption )) } is DetailsAction.ManageSecurity.SelectOption -> { diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsSecurityFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsSecurityFragment.kt index f5a81039f2..caa822e069 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsSecurityFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsSecurityFragment.kt @@ -47,7 +47,6 @@ class DetailsSecurityFragment : Fragment(R.layout.fragment_details_security), override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - toolbar.setNavigationOnClickListener { store.dispatch(NavigationAction.PopBackTo()) } @@ -55,15 +54,6 @@ class DetailsSecurityFragment : Fragment(R.layout.fragment_details_security), } private fun setOnClickListeners() { - v_long_tap.setOnClickListener { - store.dispatch(DetailsAction.ManageSecurity.SelectOption(SecurityOption.LongTap)) - } - v_passcode.setOnClickListener { - store.dispatch(DetailsAction.ManageSecurity.SelectOption(SecurityOption.PassCode)) - } - v_access_code.setOnClickListener { - store.dispatch(DetailsAction.ManageSecurity.SelectOption(SecurityOption.AccessCode)) - } btn_save_changes.setOnClickListener { store.state.detailsState.securityScreenState?.selectedOption?.let { store.dispatch(DetailsAction.ManageSecurity.ConfirmSelection(it)) @@ -75,7 +65,7 @@ class DetailsSecurityFragment : Fragment(R.layout.fragment_details_security), if (activity == null) return selectSecurityOption(state.securityScreenState?.selectedOption) for (option in SecurityOption.values()) { - enableOptions( + setupOption( option, state.securityScreenState?.allowedOptions ?: EnumSet.noneOf(SecurityOption::class.java) @@ -92,11 +82,11 @@ class DetailsSecurityFragment : Fragment(R.layout.fragment_details_security), securityOption == SecurityOption.AccessCode && radiobutton_access_code.isEnabled } - private fun enableOptions(option: SecurityOption, allowedOptions: EnumSet) { + private fun setupOption(option: SecurityOption, allowedOptions: EnumSet) { when (option) { - SecurityOption.LongTap -> enableLongTap(allowedOptions.contains(option)) - SecurityOption.PassCode -> enablePasscode(allowedOptions.contains(option)) - SecurityOption.AccessCode -> enableAccessCode(allowedOptions.contains(option)) + SecurityOption.LongTap -> { enableLongTap(allowedOptions.contains(option)) } + SecurityOption.PassCode -> { enablePasscode(allowedOptions.contains(option)) } + SecurityOption.AccessCode -> { enableAccessCode(allowedOptions.contains(option)) } } } @@ -106,6 +96,12 @@ class DetailsSecurityFragment : Fragment(R.layout.fragment_details_security), tv_long_tap_title.alpha = alpha radiobutton_long_tap.alpha = alpha radiobutton_long_tap.isEnabled = enable + v_long_tap.isClickable = enable + if (enable) { + v_long_tap.setOnClickListener { + store.dispatch(DetailsAction.ManageSecurity.SelectOption(SecurityOption.LongTap)) + } + } } private fun enablePasscode(enable: Boolean) { @@ -114,6 +110,12 @@ class DetailsSecurityFragment : Fragment(R.layout.fragment_details_security), tv_passcode_title.alpha = alpha radiobutton_passcode.alpha = alpha radiobutton_passcode.isEnabled = enable + v_passcode.isClickable = enable + if (enable) { + v_passcode.setOnClickListener { + store.dispatch(DetailsAction.ManageSecurity.SelectOption(SecurityOption.PassCode)) + } + } } private fun enableAccessCode(enable: Boolean) { @@ -122,5 +124,11 @@ class DetailsSecurityFragment : Fragment(R.layout.fragment_details_security), tv_access_code_title.alpha = alpha radiobutton_access_code.alpha = alpha radiobutton_access_code.isEnabled = enable + v_access_code.isClickable = enable + if (enable) { + v_access_code.setOnClickListener { + store.dispatch(DetailsAction.ManageSecurity.SelectOption(SecurityOption.AccessCode)) + } + } } } \ 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 7cd1653037..5717bdf1ef 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 @@ -34,6 +34,7 @@ sealed class WalletAction : Action { object SaveCardId : WalletAction() object UpdateWallet : WalletAction() { + object ScheduleUpdatingWallet : WalletAction() data class Success(val wallet: Wallet) : WalletAction() data class Failure(val errorMessage: String? = null) : WalletAction() } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletMiddleware.kt index 8644404390..da8dc6eeed 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletMiddleware.kt @@ -22,6 +22,7 @@ import com.tangem.tap.domain.PayIdManager import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.toSendableAmounts import com.tangem.tap.features.send.redux.PrepareSendScreen +import com.tangem.tap.features.wallet.models.toPendingTransactions import com.tangem.tap.network.NetworkConnectivity import com.tangem.tap.network.NetworkStateChanged import com.tangem.tap.preferencesStorage @@ -74,7 +75,7 @@ val walletMiddleware: Middleware = { dispatch, state -> is WalletAction.UpdateWallet.Success -> setupWalletUpdate(action.wallet) is WalletAction.LoadWallet.Success -> { store.dispatch(WalletAction.CheckHashesCountOnline) - setupWalletUpdate(action.wallet) + if (!store.state.walletState.updatingWallet) setupWalletUpdate(action.wallet) } is WalletAction.CreatePayId.CompleteCreatingPayId -> { scope.launch { @@ -113,7 +114,7 @@ val walletMiddleware: Middleware = { dispatch, state -> is WalletAction.LoadData -> { scope.launch { store.state.globalState.scanNoteResponse?.let { - store.state.globalState.tapWalletManager.onCardScanned(it) + store.state.globalState.tapWalletManager.loadData(it) } } } @@ -164,7 +165,8 @@ val walletMiddleware: Middleware = { dispatch, state -> } private fun setupWalletUpdate(wallet: Wallet) { - if (!wallet.recentTransactions.isNullOrEmpty() && !store.state.walletState.updatingWallet) { + if (!wallet.recentTransactions.toPendingTransactions(wallet.address).isNullOrEmpty()) { + store.dispatch(WalletAction.UpdateWallet.ScheduleUpdatingWallet) scope.launch(Dispatchers.IO) { delay(10000) withContext(Dispatchers.Main) { 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 d362a40a2d..9e1930ca1e 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 @@ -111,7 +111,12 @@ private fun internalReduce(action: Action, state: AppState): WalletState { ) ) is WalletAction.UpdateWallet -> newState = newState.copy(updatingWallet = true) - is WalletAction.UpdateWallet.Success -> newState = onWalletLoaded(action.wallet, newState) + is WalletAction.UpdateWallet.ScheduleUpdatingWallet -> + newState = newState.copy(updatingWallet = true) + is WalletAction.UpdateWallet.Success -> { + newState = onWalletLoaded(action.wallet, newState) + newState = newState.copy(updatingWallet = newState.pendingTransactions.isNotEmpty()) + } is WalletAction.UpdateWallet.Failure -> newState = newState.copy(updatingWallet = false) is WalletAction.LoadFiatRate -> { newState.copy(currencyData = newState.currencyData.copy( @@ -237,7 +242,6 @@ private fun onWalletLoaded(wallet: Wallet, walletState: WalletState): WalletStat fiatAmount = fiatAmount ), pendingTransactions = pendingTransactions, - updatingWallet = false, mainButton = WalletMainButton.SendButton(sendButtonEnabled) ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/PendingTransactionsAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/PendingTransactionsAdapter.kt index 45abe6a80e..7602ecd237 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/PendingTransactionsAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/PendingTransactionsAdapter.kt @@ -49,8 +49,8 @@ class PendingTransactionsAdapter PendingTransactionType.Outcoming -> R.string.wallet_pending_transaction_outcoming_address } val image = when (transaction.type) { - PendingTransactionType.Incoming -> R.drawable.ic_arrow_down - PendingTransactionType.Outcoming -> R.drawable.ic_arrow_right + PendingTransactionType.Incoming -> R.drawable.ic_arrow_left + PendingTransactionType.Outcoming -> R.drawable.ic_arrow_right_20 } view.tv_pending_transaction.text = view.context.getString(transactionDescriptionRes) diff --git a/app/src/main/res/drawable/ic_arrow_left.xml b/app/src/main/res/drawable/ic_arrow_left.xml new file mode 100644 index 0000000000..c9d25ccc99 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_left.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_arrow_right_20.xml b/app/src/main/res/drawable/ic_arrow_right_20.xml new file mode 100644 index 0000000000..b10fdaf7c6 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_right_20.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml new file mode 100644 index 0000000000..41a82ede8b --- /dev/null +++ b/app/src/main/res/drawable/ic_settings.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/fragment_wallet.xml b/app/src/main/res/layout/fragment_wallet.xml index 17b4723d89..367050f06d 100644 --- a/app/src/main/res/layout/fragment_wallet.xml +++ b/app/src/main/res/layout/fragment_wallet.xml @@ -56,7 +56,7 @@ android:layout_marginEnd="16dp" android:layout_marginBottom="12dp" android:adjustViewBounds="true" - android:elevation="4dp" + android:elevation="3dp" android:scaleType="fitCenter" android:src="@drawable/card_placeholder" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/item_pending_transaction.xml b/app/src/main/res/layout/item_pending_transaction.xml index b52b5dbe8e..c514bfc677 100644 --- a/app/src/main/res/layout/item_pending_transaction.xml +++ b/app/src/main/res/layout/item_pending_transaction.xml @@ -9,49 +9,49 @@ android:id="@+id/card_pending_transaction" android:layout_width="match_parent" android:layout_height="36dp" - android:background="@android:color/white" android:layout_marginStart="16dp" - android:layout_marginEnd="16dp" android:layout_marginTop="2dp" + android:layout_marginEnd="16dp" android:layout_marginBottom="2dp" + android:background="@android:color/white" android:elevation="3dp"> + android:paddingEnd="16dp"> - + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="8dp" + android:src="@drawable/ic_arrow_left" /> + + android:textSize="13sp" + tools:text="Receiving " /> + android:textSize="13sp" + android:textStyle="bold" + tools:text="0.001 " /> + android:textSize="13sp" + android:textStyle="bold" + tools:text="BTS" /> + android:singleLine="true" + android:textSize="13sp" + tools:text=" from 0x4313bcd3425235bda1232141" /> diff --git a/app/src/main/res/layout/layout_balance.xml b/app/src/main/res/layout/layout_balance.xml index d1cf9ff3ad..1931632965 100644 --- a/app/src/main/res/layout/layout_balance.xml +++ b/app/src/main/res/layout/layout_balance.xml @@ -91,12 +91,11 @@ diff --git a/app/src/main/res/menu/wallet.xml b/app/src/main/res/menu/wallet.xml index 0f6a7ccd07..42b5aa07c6 100644 --- a/app/src/main/res/menu/wallet.xml +++ b/app/src/main/res/menu/wallet.xml @@ -4,5 +4,6 @@ + android:icon="@drawable/ic_settings" + app:showAsAction="ifRoom" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5a63464c76..f9600d0a21 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -35,7 +35,7 @@ Create PayID Verified Balance Blockchain is unreachable - Transaction in progress + Transaction is in progress 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…