diff --git a/.editorconfig b/.editorconfig index 57188dd623..25a2f7c928 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,5 +1,4 @@ [*.{kt,kts}] -ktlint_code_style = official ktlint_ignore_back_ticked_identifier = true indent_size = 4 diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 78d55638ca..4e1c24d3c9 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -86,8 +86,15 @@ class MainActivity : AppCompatActivity(), SnackbarHandler { private fun systemActions() { WindowCompat.setDecorFitsSystemWindows(window, false) - WindowInsetsControllerCompat(window, binding.root) - .isAppearanceLightStatusBars = true + + val windowInsetsController = WindowInsetsControllerCompat(window, binding.root) + windowInsetsController.isAppearanceLightStatusBars = true + windowInsetsController.isAppearanceLightNavigationBars = true + + supportFragmentManager.registerFragmentLifecycleCallbacks( + NavBarInsetsFragmentLifecycleCallback(), + true + ) requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT } diff --git a/app/src/main/java/com/tangem/tap/NavBarInsetsFragmentLifecycleCallback.kt b/app/src/main/java/com/tangem/tap/NavBarInsetsFragmentLifecycleCallback.kt new file mode 100644 index 0000000000..94177e8463 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/NavBarInsetsFragmentLifecycleCallback.kt @@ -0,0 +1,29 @@ +package com.tangem.tap + +import android.os.Bundle +import android.view.View +import androidx.compose.ui.platform.ComposeView +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks + +class NavBarInsetsFragmentLifecycleCallback : FragmentLifecycleCallbacks() { + override fun onFragmentViewCreated( + fm: FragmentManager, + f: Fragment, + v: View, + savedInstanceState: Bundle?, + ) { + if (v is ComposeView) return + ViewCompat.setOnApplyWindowInsetsListener(v) { view, windowInsets -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.navigationBars()) + view.updatePadding( + bottom = insets.bottom, + ) + windowInsets + } + } +} \ 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 92fc72c0bf..8bd8cf8ef7 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -87,7 +87,7 @@ class TapWalletManager { updateConfigManager(data) withMainContext { - store.dispatch(WalletAction.ResetState) + store.dispatch(WalletAction.ResetState(data.card.cardId)) store.dispatch(GlobalAction.SaveScanNoteResponse(data)) store.dispatch(WalletAction.SetIfTestnetCard(data.card.isTestCard)) store.dispatch(WalletAction.MultiWallet.SetIsMultiwalletAllowed(data.card.isMultiwalletAllowed)) diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WcWalletManagerFactory.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WcWalletManagerFactory.kt index 7c978b7b6f..72134d880b 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WcWalletManagerFactory.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WcWalletManagerFactory.kt @@ -45,7 +45,6 @@ class WcWalletManagerFactory( if (blockchainNetworkWithTokens != null) { factory.makeWalletManager( - cardId = wallet.cardId, blockchain = blockchainToMake, publicKey = Wallet.PublicKey( wallet.walletPublicKey!!, diff --git a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt index f1b3fa3f55..27953640ea 100644 --- a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt @@ -96,12 +96,14 @@ class HomeFragment : Fragment(), StoreSubscriber { /* * !!! Workaround !!! - * Used to roll back the color of icons in the status bar after the stories screen + * Used to roll back the color of icons in the system bars after the stories screen * */ private fun rollbackStatusBarIconsColor() { - WindowInsetsControllerCompat( + val windowInsetsController = WindowInsetsControllerCompat( activity?.window ?: return, view ?: return, - ).isAppearanceLightStatusBars = true + ) + windowInsetsController.isAppearanceLightStatusBars = true + windowInsetsController.isAppearanceLightNavigationBars = true } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt index 7e840f5592..f1230a2fc1 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt @@ -12,16 +12,17 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.systemBars +import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.union import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.material.Button import androidx.compose.material.ButtonDefaults import androidx.compose.material.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState -import androidx.compose.runtime.SideEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -79,10 +80,10 @@ fun StoriesScreen( val hideContent = remember { mutableStateOf(true) } - SideEffect { + LaunchedEffect(key1 = isDarkBackground) { systemUiController.setSystemBarsColor( color = Color.Transparent, - darkIcons = false, + darkIcons = !isDarkBackground, ) } @@ -140,12 +141,12 @@ fun StoriesScreen( ) } - val insets = WindowInsets.systemBars + val statusBarInsets = WindowInsets.statusBars .union(WindowInsets(top = 32.dp)) Column( modifier = Modifier - .windowInsetsPadding(insets) + .windowInsetsPadding(statusBarInsets) .fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, @@ -179,8 +180,9 @@ fun StoriesScreen( } Column( modifier = Modifier + .navigationBarsPadding() .align(Alignment.BottomCenter) - .fillMaxWidth() + .fillMaxWidth(), ) { if (currentStep.value == 4) Button( onClick = onSearchTokensClick, @@ -213,7 +215,6 @@ fun StoriesScreen( onShopButtonClick = onShopButtonClick ) } - } } 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 89d77cd33f..e079a6b114 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 @@ -17,12 +17,12 @@ import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.wallet.models.Currency import com.tangem.wallet.R -import java.math.BigDecimal import org.rekotlin.Action +import java.math.BigDecimal sealed class WalletAction : Action { - object ResetState : WalletAction() + data class ResetState(val newCardId: String) : WalletAction() data class SetIfTestnetCard(val isTestnet: Boolean) : 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 21489b82f3..d3d59422be 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 @@ -27,6 +27,7 @@ import java.math.BigDecimal import kotlin.properties.ReadOnlyProperty data class WalletState( + val cardId: String = "", val state: ProgressState = ProgressState.Done, val error: ErrorType? = null, val cardImage: Artwork? = null, @@ -73,9 +74,6 @@ data class WalletState( val walletManagers: List get() = wallets.mapNotNull { it.walletManager } - val cardId: String? - get() = wallets.firstOrNull()?.walletManager?.wallet?.cardId - fun getWalletManager(currency: Currency?): WalletManager? { if (currency?.blockchain == null) return null return getWalletStore(currency)?.walletManager diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt index 0990cd2e78..fba952b703 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt @@ -12,20 +12,9 @@ import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.getArtworkUrl import com.tangem.tap.domain.getFirstToken import com.tangem.tap.domain.tokens.models.BlockchainNetwork +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.models.WalletRent import com.tangem.tap.features.wallet.redux.* -import com.tangem.tap.features.wallet.redux.AddressData -import com.tangem.tap.features.wallet.redux.Artwork -import com.tangem.tap.features.wallet.models.Currency -import com.tangem.tap.features.wallet.redux.ErrorType -import com.tangem.tap.features.wallet.redux.ProgressState -import com.tangem.tap.features.wallet.redux.TradeCryptoState -import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletAddresses -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.WalletStore import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.store @@ -53,7 +42,7 @@ private fun internalReduce(action: Action, state: AppState): WalletState { is WalletAction.Warnings -> newState = handleCheckSignedHashesActions(action, newState) is WalletAction.MultiWallet -> newState = multiWalletReducer.reduce(action, newState) - is WalletAction.ResetState -> newState = WalletState() + is WalletAction.ResetState -> newState = WalletState(cardId = action.newCardId) is WalletAction.SetIfTestnetCard -> newState = newState.copy(isTestnet = action.isTestnet) is WalletAction.EmptyWallet -> { newState = newState.copy(