Skip to content

Commit 91a229e

Browse files
authored
Minor improvements (#138)
* Back button should clear filter query before exiting screen * Add horizontal padding to group tab text
1 parent d60d770 commit 91a229e

File tree

5 files changed

+43
-0
lines changed

5 files changed

+43
-0
lines changed

core/presentation/src/main/java/dev/arkbuilders/rate/core/presentation/ui/GroupViewPager.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.Box
77
import androidx.compose.foundation.layout.Column
88
import androidx.compose.foundation.layout.fillMaxWidth
99
import androidx.compose.foundation.layout.height
10+
import androidx.compose.foundation.layout.padding
1011
import androidx.compose.foundation.pager.HorizontalPager
1112
import androidx.compose.foundation.pager.rememberPagerState
1213
import androidx.compose.material3.ScrollableTabRow
@@ -65,6 +66,7 @@ fun GroupViewPager(
6566
selectedContentColor = Color.Transparent,
6667
) {
6768
Text(
69+
modifier = Modifier.padding(horizontal = 6.dp),
6870
text = group ?: stringResource(R.string.group_default_name),
6971
color = if (selected) ArkColor.Teal700 else ArkColor.TextQuarterary,
7072
fontWeight = FontWeight.SemiBold,

feature/portfolio/src/main/java/dev/arkbuilders/rate/feature/portfolio/presentation/main/PortfolioScreen.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
package dev.arkbuilders.rate.feature.portfolio.presentation.main
44

5+
import androidx.activity.compose.BackHandler
56
import androidx.compose.foundation.ExperimentalFoundationApi
67
import androidx.compose.foundation.background
78
import androidx.compose.foundation.clickable
@@ -80,6 +81,10 @@ fun PortfolioScreen(navigator: DestinationsNavigator) {
8081
val viewModel: PortfolioViewModel =
8182
viewModel(factory = component.assetsVMFactory())
8283

84+
BackHandler {
85+
viewModel.onBackClick()
86+
}
87+
8388
val state by viewModel.collectAsState()
8489
val snackState = remember { SnackbarHostState() }
8590

@@ -106,6 +111,8 @@ fun PortfolioScreen(navigator: DestinationsNavigator) {
106111
)
107112
snackState.showSnackbar(visuals)
108113
}
114+
115+
PortfolioScreenEffect.NavigateBack -> navigator.popBackStack()
109116
}
110117
}
111118

feature/portfolio/src/main/java/dev/arkbuilders/rate/feature/portfolio/presentation/main/PortfolioViewModel.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ sealed class PortfolioScreenEffect {
5353
) : PortfolioScreenEffect()
5454

5555
data class ShowRemovedSnackbar(val asset: Asset) : PortfolioScreenEffect()
56+
57+
data object NavigateBack : PortfolioScreenEffect()
5658
}
5759

5860
class PortfolioViewModel(
@@ -125,6 +127,17 @@ class PortfolioViewModel(
125127
reduce { state.copy(filter = filter) }
126128
}
127129

130+
fun onBackClick() =
131+
intent {
132+
if (state.filter.isNotEmpty()) {
133+
reduce {
134+
state.copy(filter = "")
135+
}
136+
} else {
137+
postSideEffect(PortfolioScreenEffect.NavigateBack)
138+
}
139+
}
140+
128141
private fun initPages() =
129142
intent {
130143
val baseCode = prefs.get(PreferenceKey.BaseCurrencyCode)

feature/quick/src/main/java/dev/arkbuilders/rate/feature/quick/presentation/main/QuickScreen.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.arkbuilders.rate.feature.quick.presentation.main
22

3+
import androidx.activity.compose.BackHandler
34
import androidx.compose.foundation.background
45
import androidx.compose.foundation.border
56
import androidx.compose.foundation.clickable
@@ -67,6 +68,7 @@ import dev.arkbuilders.rate.core.presentation.ui.NotifyRemovedSnackbarVisuals
6768
import dev.arkbuilders.rate.core.presentation.ui.RateSnackbarHost
6869
import dev.arkbuilders.rate.core.presentation.ui.SearchTextField
6970
import dev.arkbuilders.rate.core.presentation.utils.DateFormatUtils
71+
import dev.arkbuilders.rate.core.presentation.utils.findActivity
7072
import dev.arkbuilders.rate.feature.quick.di.QuickComponentHolder
7173
import dev.arkbuilders.rate.feature.quick.domain.model.PinnedQuickPair
7274
import dev.arkbuilders.rate.feature.quick.domain.model.QuickPair
@@ -93,6 +95,10 @@ fun QuickScreen(navigator: DestinationsNavigator) {
9395
factory = component.quickVMFactory().create(),
9496
)
9597

98+
BackHandler {
99+
viewModel.onBackClick()
100+
}
101+
96102
val state by viewModel.collectAsState()
97103
val snackState = remember { SnackbarHostState() }
98104
viewModel.collectSideEffect { effect ->
@@ -121,6 +127,8 @@ fun QuickScreen(navigator: DestinationsNavigator) {
121127
)
122128
snackState.showSnackbar(visuals)
123129
}
130+
131+
QuickScreenEffect.NavigateBack -> ctx.findActivity()?.finish()
124132
}
125133
}
126134

feature/quick/src/main/java/dev/arkbuilders/rate/feature/quick/presentation/main/QuickViewModel.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ sealed class QuickScreenEffect {
5555
) : QuickScreenEffect()
5656

5757
data class ShowRemovedSnackbar(val pair: QuickPair) : QuickScreenEffect()
58+
59+
data object NavigateBack : QuickScreenEffect()
5860
}
5961

6062
class QuickViewModel(
@@ -181,6 +183,17 @@ class QuickViewModel(
181183
quickRepo.insert(pair)
182184
}
183185

186+
fun onBackClick() =
187+
intent {
188+
if (state.filter.isNotEmpty()) {
189+
reduce {
190+
state.copy(filter = "")
191+
}
192+
} else {
193+
postSideEffect(QuickScreenEffect.NavigateBack)
194+
}
195+
}
196+
184197
private suspend fun mapPairsToPages(pairs: List<QuickPair>): List<QuickScreenPage> {
185198
val refreshDate = timestampRepo.getTimestamp(TimestampType.FetchRates)
186199
val pages =

0 commit comments

Comments
 (0)