diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 64ae04d208..985642c135 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 64ae04d2086e5a605dd4da3cba4af32a60d46c79 +Subproject commit 985642c135606ba1f59fd739127aec03024da79b diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt index a14477efca..f05044368f 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt @@ -2,6 +2,8 @@ package com.tangem.tap.common.compose.extensions import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.* +import androidx.compose.ui.platform.LocalView +import com.tangem.tap.common.extensions.hideKeyboard @Composable fun LazyListState.OnBottomReached(loadMoreThreshold: Int, loadMore: () -> Unit) { @@ -17,4 +19,11 @@ fun LazyListState.OnBottomReached(loadMoreThreshold: Int, loadMore: () -> Unit) LaunchedEffect(shouldLoadMore) { if (shouldLoadMore) loadMore() } +} + +@Composable +fun LazyListState.HideKeyboardOnScroll() { + if (isScrollInProgress) { + LocalView.current.hideKeyboard() + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt index 0739effc65..c37a625c54 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt @@ -5,6 +5,7 @@ import com.tangem.common.card.Card import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.TwinCardNumber import com.tangem.operations.pins.CheckUserCodesResponse +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.redux.NotificationAction import com.tangem.tap.domain.termsOfUse.CardTou import com.tangem.wallet.R @@ -58,4 +59,5 @@ sealed class DetailsAction : Action { } } + data class ChangeAppCurrency(val fiatCurrency: FiatCurrency) : DetailsAction() } \ No newline at end of file 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 45910f64c4..a095d46d7e 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 @@ -31,6 +31,9 @@ private fun internalReduce(action: Action, state: AppState): DetailsState { is DetailsAction.ManageSecurity -> { handleSecurityAction(action, detailsState) } + is DetailsAction.ChangeAppCurrency -> + detailsState.copy(appCurrency = action.fiatCurrency) + else -> detailsState } } diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt index eca730c5e2..ee6fd2bb7e 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt @@ -4,6 +4,7 @@ import android.net.Uri import com.tangem.blockchain.common.Wallet import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.entities.Button +import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsState import com.tangem.tap.store import org.rekotlin.StateType @@ -19,6 +20,7 @@ data class DetailsState( val securityScreenState: SecurityScreenState? = null, val cardTermsOfUseUrl: Uri? = null, val createBackupAllowed: Boolean = false, + val appCurrency: FiatCurrency = FiatCurrency.Default ) : StateType { // if you do not delegate - the application crashes on startup, diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt index f536a8c356..e8f3b56a62 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt @@ -116,6 +116,9 @@ class DetailsFragment : Fragment(R.layout.fragment_details), StoreSubscriber.calculateTotalFiatAmount(): BigDecimal { } private fun List.mapToProgressState(): List { - return this.map { - when (it.currencyData.status) { + return this.map { wallet -> + if (wallet.fiatRate == null) ProgressState.Error + else when (wallet.currencyData.status) { BalanceStatus.Refreshing -> ProgressState.Refreshing BalanceStatus.VerifiedOnline, BalanceStatus.SameCurrencyTransactionInProgress, 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 e228e737bd..5646b437f0 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 @@ -138,8 +138,7 @@ class MultiWalletView : WalletView { show = totalBalance.state == ProgressState.Error ) - tvBalance.text = if (totalBalance.state == ProgressState.Error) "—" - else totalBalance.fiatAmount.formatAmountAsSpannedString( + tvBalance.text = totalBalance.fiatAmount.formatAmountAsSpannedString( currencySymbol = totalBalance.fiatCurrency.symbol ) tvCurrencyName.text = totalBalance.fiatCurrency.code @@ -193,7 +192,6 @@ class MultiWalletView : WalletView { private fun configureButtonsForEmptyWalletState(binding: FragmentWalletBinding) = with(binding) { lButtonsLong.root.show() - lButtonsLong.btnScanLong.setOnClickListener { store.dispatch(WalletAction.Scan) } lButtonsLong.btnConfirmLong.setOnClickListener { store.dispatch(WalletAction.CreateWallet) } lButtonsLong.btnConfirmLong.text = fragment?.getText(R.string.wallet_button_create_wallet) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt index 4fb9b0ca0b..b7e0a307a5 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt @@ -130,20 +130,8 @@ class SingleWalletView : WalletView { lButtonsLong.btnConfirmLong } - val btnScan = if (state.tradeCryptoState.sellingAllowed || - state.tradeCryptoState.buyingAllowed - ) { - lButtonsShort.btnScan - } else { - lButtonsLong.btnScanLong - } - setupConfirmButton(state, btnConfirm, isTwinsWallet) - btnScan.setOnClickListener { - store.dispatch(WalletAction.Scan) - } - lAddress.btnCopy.setOnClickListener { state.walletAddresses?.selectedAddress?.address?.let { addressString -> store.dispatch(WalletAction.CopyAddress(addressString, fragment!!.requireContext())) diff --git a/app/src/main/res/layout/card_total_balance.xml b/app/src/main/res/layout/card_total_balance.xml index 196dc167e1..1f97649e18 100644 --- a/app/src/main/res/layout/card_total_balance.xml +++ b/app/src/main/res/layout/card_total_balance.xml @@ -52,7 +52,7 @@ app:veilLayout_veiled="true" app:veilLayout_radius="4dp" app:layout_constraintTop_toBottomOf="@id/tv_title" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@id/tv_processing" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" tools:veilLayout_veiled="false"> @@ -80,7 +80,8 @@ android:textSize="12sp" android:text="@string/main_processing_full_amount" app:layout_constraintTop_toBottomOf="@id/veil_balance" - app:layout_constraintStart_toStartOf="parent" /> + app:layout_constraintStart_toStartOf="parent" + tools:visibility="visible" /> + + + @@ -243,7 +256,7 @@ app:drawableEndCompat="@drawable/ic_angle_bracket_right" app:drawableTint="@color/darkGray1" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/tv_app_currency" /> + app:layout_constraintTop_toBottomOf="@id/tv_app_currency_title" /> - - - \ No newline at end of file + diff --git a/app/src/main/res/layout/layout_wallet_short_buttons.xml b/app/src/main/res/layout/layout_wallet_short_buttons.xml index 08bdfeef5a..ed60601395 100644 --- a/app/src/main/res/layout/layout_wallet_short_buttons.xml +++ b/app/src/main/res/layout/layout_wallet_short_buttons.xml @@ -14,8 +14,8 @@ android:layout_marginBottom="8dp" android:text="@string/wallet_button_trade" app:icon="@drawable/ic_arrows_up_down" - app:layout_constraintBottom_toTopOf="@id/btn_scan" - app:layout_constraintEnd_toStartOf="@id/btn_confirm" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@id/btn_confirm" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintStart_toStartOf="parent" @@ -34,29 +34,10 @@ android:text="@string/wallet_button_send" app:icon="@drawable/ic_send" app:iconGravity="textEnd" - android:textAlignment="center" - app:layout_constraintBottom_toTopOf="@id/btn_scan" - app:layout_constraintEnd_toEndOf="parent" + android:textAlignment="center" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/btn_trade" app:layout_constraintVertical_bias="1" /> - - - - - \ No newline at end of file + diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index abce4c4f83..201a1684ae 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -47,7 +47,7 @@ Пользовательский Баланс - Некоторые сети недоступны + В сумме учтены не все монеты Управление токенами Нет цены diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index 2478dee488..d59d31ff0e 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -47,7 +47,7 @@ Custom Total balance - Some networks are unreachable + The amount does not include some of your funds Manage tokens No rate