From 91a229ed828d4d52139d42f17c6828020a19346c Mon Sep 17 00:00:00 2001 From: Dinar Khakimov <85668474+mdrlzy@users.noreply.github.com> Date: Thu, 30 Jan 2025 22:20:48 +0500 Subject: [PATCH] Minor improvements (#138) * Back button should clear filter query before exiting screen * Add horizontal padding to group tab text --- .../rate/core/presentation/ui/GroupViewPager.kt | 2 ++ .../portfolio/presentation/main/PortfolioScreen.kt | 7 +++++++ .../presentation/main/PortfolioViewModel.kt | 13 +++++++++++++ .../feature/quick/presentation/main/QuickScreen.kt | 8 ++++++++ .../quick/presentation/main/QuickViewModel.kt | 13 +++++++++++++ 5 files changed, 43 insertions(+) diff --git a/core/presentation/src/main/java/dev/arkbuilders/rate/core/presentation/ui/GroupViewPager.kt b/core/presentation/src/main/java/dev/arkbuilders/rate/core/presentation/ui/GroupViewPager.kt index fa8699d0d..1d506d10e 100644 --- a/core/presentation/src/main/java/dev/arkbuilders/rate/core/presentation/ui/GroupViewPager.kt +++ b/core/presentation/src/main/java/dev/arkbuilders/rate/core/presentation/ui/GroupViewPager.kt @@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.material3.ScrollableTabRow @@ -65,6 +66,7 @@ fun GroupViewPager( selectedContentColor = Color.Transparent, ) { Text( + modifier = Modifier.padding(horizontal = 6.dp), text = group ?: stringResource(R.string.group_default_name), color = if (selected) ArkColor.Teal700 else ArkColor.TextQuarterary, fontWeight = FontWeight.SemiBold, diff --git a/feature/portfolio/src/main/java/dev/arkbuilders/rate/feature/portfolio/presentation/main/PortfolioScreen.kt b/feature/portfolio/src/main/java/dev/arkbuilders/rate/feature/portfolio/presentation/main/PortfolioScreen.kt index 5e085acd3..8156bcf96 100644 --- a/feature/portfolio/src/main/java/dev/arkbuilders/rate/feature/portfolio/presentation/main/PortfolioScreen.kt +++ b/feature/portfolio/src/main/java/dev/arkbuilders/rate/feature/portfolio/presentation/main/PortfolioScreen.kt @@ -2,6 +2,7 @@ package dev.arkbuilders.rate.feature.portfolio.presentation.main +import androidx.activity.compose.BackHandler import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -80,6 +81,10 @@ fun PortfolioScreen(navigator: DestinationsNavigator) { val viewModel: PortfolioViewModel = viewModel(factory = component.assetsVMFactory()) + BackHandler { + viewModel.onBackClick() + } + val state by viewModel.collectAsState() val snackState = remember { SnackbarHostState() } @@ -106,6 +111,8 @@ fun PortfolioScreen(navigator: DestinationsNavigator) { ) snackState.showSnackbar(visuals) } + + PortfolioScreenEffect.NavigateBack -> navigator.popBackStack() } } diff --git a/feature/portfolio/src/main/java/dev/arkbuilders/rate/feature/portfolio/presentation/main/PortfolioViewModel.kt b/feature/portfolio/src/main/java/dev/arkbuilders/rate/feature/portfolio/presentation/main/PortfolioViewModel.kt index e147b5f45..45d3a908f 100644 --- a/feature/portfolio/src/main/java/dev/arkbuilders/rate/feature/portfolio/presentation/main/PortfolioViewModel.kt +++ b/feature/portfolio/src/main/java/dev/arkbuilders/rate/feature/portfolio/presentation/main/PortfolioViewModel.kt @@ -53,6 +53,8 @@ sealed class PortfolioScreenEffect { ) : PortfolioScreenEffect() data class ShowRemovedSnackbar(val asset: Asset) : PortfolioScreenEffect() + + data object NavigateBack : PortfolioScreenEffect() } class PortfolioViewModel( @@ -125,6 +127,17 @@ class PortfolioViewModel( reduce { state.copy(filter = filter) } } + fun onBackClick() = + intent { + if (state.filter.isNotEmpty()) { + reduce { + state.copy(filter = "") + } + } else { + postSideEffect(PortfolioScreenEffect.NavigateBack) + } + } + private fun initPages() = intent { val baseCode = prefs.get(PreferenceKey.BaseCurrencyCode) diff --git a/feature/quick/src/main/java/dev/arkbuilders/rate/feature/quick/presentation/main/QuickScreen.kt b/feature/quick/src/main/java/dev/arkbuilders/rate/feature/quick/presentation/main/QuickScreen.kt index 066225362..bca27e973 100644 --- a/feature/quick/src/main/java/dev/arkbuilders/rate/feature/quick/presentation/main/QuickScreen.kt +++ b/feature/quick/src/main/java/dev/arkbuilders/rate/feature/quick/presentation/main/QuickScreen.kt @@ -1,5 +1,6 @@ package dev.arkbuilders.rate.feature.quick.presentation.main +import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable @@ -67,6 +68,7 @@ import dev.arkbuilders.rate.core.presentation.ui.NotifyRemovedSnackbarVisuals import dev.arkbuilders.rate.core.presentation.ui.RateSnackbarHost import dev.arkbuilders.rate.core.presentation.ui.SearchTextField import dev.arkbuilders.rate.core.presentation.utils.DateFormatUtils +import dev.arkbuilders.rate.core.presentation.utils.findActivity import dev.arkbuilders.rate.feature.quick.di.QuickComponentHolder import dev.arkbuilders.rate.feature.quick.domain.model.PinnedQuickPair import dev.arkbuilders.rate.feature.quick.domain.model.QuickPair @@ -93,6 +95,10 @@ fun QuickScreen(navigator: DestinationsNavigator) { factory = component.quickVMFactory().create(), ) + BackHandler { + viewModel.onBackClick() + } + val state by viewModel.collectAsState() val snackState = remember { SnackbarHostState() } viewModel.collectSideEffect { effect -> @@ -121,6 +127,8 @@ fun QuickScreen(navigator: DestinationsNavigator) { ) snackState.showSnackbar(visuals) } + + QuickScreenEffect.NavigateBack -> ctx.findActivity()?.finish() } } diff --git a/feature/quick/src/main/java/dev/arkbuilders/rate/feature/quick/presentation/main/QuickViewModel.kt b/feature/quick/src/main/java/dev/arkbuilders/rate/feature/quick/presentation/main/QuickViewModel.kt index 90611a25f..d6f8f787a 100644 --- a/feature/quick/src/main/java/dev/arkbuilders/rate/feature/quick/presentation/main/QuickViewModel.kt +++ b/feature/quick/src/main/java/dev/arkbuilders/rate/feature/quick/presentation/main/QuickViewModel.kt @@ -55,6 +55,8 @@ sealed class QuickScreenEffect { ) : QuickScreenEffect() data class ShowRemovedSnackbar(val pair: QuickPair) : QuickScreenEffect() + + data object NavigateBack : QuickScreenEffect() } class QuickViewModel( @@ -181,6 +183,17 @@ class QuickViewModel( quickRepo.insert(pair) } + fun onBackClick() = + intent { + if (state.filter.isNotEmpty()) { + reduce { + state.copy(filter = "") + } + } else { + postSideEffect(QuickScreenEffect.NavigateBack) + } + } + private suspend fun mapPairsToPages(pairs: List): List { val refreshDate = timestampRepo.getTimestamp(TimestampType.FetchRates) val pages =