diff --git a/feature/trip-planner/state/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/state/settings/SettingsEvent.kt b/feature/trip-planner/state/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/state/settings/SettingsEvent.kt
new file mode 100644
index 00000000..f50c9fee
--- /dev/null
+++ b/feature/trip-planner/state/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/state/settings/SettingsEvent.kt
@@ -0,0 +1,5 @@
+package xyz.ksharma.krail.trip.planner.ui.state.settings
+
+sealed interface SettingsEvent {
+ data object A : SettingsEvent
+}
diff --git a/feature/trip-planner/state/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/state/settings/SettingsState.kt b/feature/trip-planner/state/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/state/settings/SettingsState.kt
new file mode 100644
index 00000000..12a13271
--- /dev/null
+++ b/feature/trip-planner/state/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/state/settings/SettingsState.kt
@@ -0,0 +1,3 @@
+package xyz.ksharma.krail.trip.planner.ui.state.settings
+
+data class SettingsState(val x: Int = 0)
diff --git a/feature/trip-planner/ui/src/commonMain/composeResources/drawable/ic_settings.xml b/feature/trip-planner/ui/src/commonMain/composeResources/drawable/ic_settings.xml
new file mode 100644
index 00000000..7abde109
--- /dev/null
+++ b/feature/trip-planner/ui/src/commonMain/composeResources/drawable/ic_settings.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/navigation/TripPlannerDestinations.kt b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/navigation/TripPlannerDestinations.kt
index 7c64272b..c1eed5ea 100644
--- a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/navigation/TripPlannerDestinations.kt
+++ b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/navigation/TripPlannerDestinations.kt
@@ -7,6 +7,7 @@ import kotlinx.serialization.Serializable
import xyz.ksharma.krail.trip.planner.ui.alerts.alertsDestination
import xyz.ksharma.krail.trip.planner.ui.savedtrips.savedTripsDestination
import xyz.ksharma.krail.trip.planner.ui.searchstop.searchStopDestination
+import xyz.ksharma.krail.trip.planner.ui.settings.settingsDestination
import xyz.ksharma.krail.trip.planner.ui.timetable.timeTableDestination
import xyz.ksharma.krail.trip.planner.ui.usualride.usualRideDestination
@@ -28,6 +29,8 @@ fun NavGraphBuilder.tripPlannerDestinations(
usualRideDestination(navController)
alertsDestination(navController)
+
+ settingsDestination(navController)
}
}
@@ -74,3 +77,6 @@ data object UsualRideRoute
internal data class ServiceAlertRoute(
val alertsJsonList: List,
)
+
+@Serializable
+data object SettingsRoute
diff --git a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/savedtrips/SavedTripsDestination.kt b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/savedtrips/SavedTripsDestination.kt
index 36d07467..89178138 100644
--- a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/savedtrips/SavedTripsDestination.kt
+++ b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/savedtrips/SavedTripsDestination.kt
@@ -14,6 +14,7 @@ import org.koin.compose.viewmodel.koinViewModel
import xyz.ksharma.krail.trip.planner.ui.navigation.SavedTripsRoute
import xyz.ksharma.krail.trip.planner.ui.navigation.SearchStopFieldType
import xyz.ksharma.krail.trip.planner.ui.navigation.SearchStopRoute
+import xyz.ksharma.krail.trip.planner.ui.navigation.SettingsRoute
import xyz.ksharma.krail.trip.planner.ui.navigation.TimeTableRoute
import xyz.ksharma.krail.trip.planner.ui.state.savedtrip.SavedTripUiEvent
import xyz.ksharma.krail.trip.planner.ui.state.searchstop.model.StopItem
@@ -104,6 +105,12 @@ internal fun NavGraphBuilder.savedTripsDestination(navController: NavHostControl
// Timber.e("Select both stops")
}
},
+ onSettingsButtonClick = {
+ navController.navigate(
+ route = SettingsRoute,
+ navOptions = NavOptions.Builder().setLaunchSingleTop(true).build(),
+ )
+ },
onEvent = { event -> viewModel.onEvent(event) },
)
}
diff --git a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/savedtrips/SavedTripsScreen.kt b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/savedtrips/SavedTripsScreen.kt
index a4c1961a..b6487307 100644
--- a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/savedtrips/SavedTripsScreen.kt
+++ b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/savedtrips/SavedTripsScreen.kt
@@ -1,5 +1,6 @@
package xyz.ksharma.krail.trip.planner.ui.savedtrips
+import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -8,6 +9,7 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
@@ -15,6 +17,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.unit.dp
import xyz.ksharma.krail.taj.LocalThemeContentColor
import xyz.ksharma.krail.taj.components.Text
@@ -27,9 +30,10 @@ import xyz.ksharma.krail.trip.planner.ui.state.savedtrip.SavedTripUiEvent
import xyz.ksharma.krail.trip.planner.ui.state.savedtrip.SavedTripsState
import xyz.ksharma.krail.trip.planner.ui.state.searchstop.model.StopItem
import krail.feature.trip_planner.ui.generated.resources.Res
-import krail.feature.trip_planner.ui.generated.resources.ic_reverse
+import krail.feature.trip_planner.ui.generated.resources.ic_settings
import org.jetbrains.compose.resources.painterResource
-
+import xyz.ksharma.krail.taj.LocalOnContentColor
+import xyz.ksharma.krail.taj.components.RoundIconButton
@Composable
fun SavedTripsScreen(
@@ -41,21 +45,22 @@ fun SavedTripsScreen(
toButtonClick: () -> Unit = {},
onReverseButtonClick: () -> Unit = {},
onSearchButtonClick: (StopItem?, StopItem?) -> Unit = { _, _ -> },
+ onSettingsButtonClick: () -> Unit = {},
onEvent: (SavedTripUiEvent) -> Unit = {},
) {
val themeContentColor by LocalThemeContentColor.current
// TODO - handle colors of status bar
-/* DisposableEffect(themeContentColor) {
- context.getActivityOrNull()?.let { activity ->
- (activity as ComponentActivity).enableEdgeToEdge(
- navigationBarStyle = SystemBarStyle.auto(
- lightScrim = themeContentColor.hexToComposeColor().toArgb(),
- darkScrim = themeContentColor.hexToComposeColor().toArgb(),
- ),
- )
- }
- onDispose {}
- }*/
+ /* DisposableEffect(themeContentColor) {
+ context.getActivityOrNull()?.let { activity ->
+ (activity as ComponentActivity).enableEdgeToEdge(
+ navigationBarStyle = SystemBarStyle.auto(
+ lightScrim = themeContentColor.hexToComposeColor().toArgb(),
+ darkScrim = themeContentColor.hexToComposeColor().toArgb(),
+ ),
+ )
+ }
+ onDispose {}
+ }*/
Box(
modifier = modifier
@@ -64,9 +69,23 @@ fun SavedTripsScreen(
.statusBarsPadding(),
) {
Column {
- TitleBar(title = {
- Text(text = "Saved Trips")
- })
+ TitleBar(
+ title = {
+ Text(text = "Saved Trips")
+ },
+ actions = {
+ RoundIconButton(
+ onClick = onSettingsButtonClick,
+ ) {
+ Image(
+ painter = painterResource(Res.drawable.ic_settings),
+ contentDescription = "Settings",
+ colorFilter = ColorFilter.tint(LocalOnContentColor.current),
+ modifier = Modifier.size(24.dp),
+ )
+ }
+ }
+ )
LazyColumn(
contentPadding = PaddingValues(bottom = 300.dp),
diff --git a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/settings/SettingsDestination.kt b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/settings/SettingsDestination.kt
new file mode 100644
index 00000000..05812fc3
--- /dev/null
+++ b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/settings/SettingsDestination.kt
@@ -0,0 +1,26 @@
+package xyz.ksharma.krail.trip.planner.ui.settings
+
+import androidx.navigation.NavGraphBuilder
+import androidx.navigation.NavHostController
+import androidx.navigation.NavOptions
+import androidx.navigation.compose.composable
+import xyz.ksharma.krail.trip.planner.ui.navigation.SettingsRoute
+import xyz.ksharma.krail.trip.planner.ui.navigation.UsualRideRoute
+
+internal fun NavGraphBuilder.settingsDestination(navController: NavHostController) {
+ composable {
+// val viewModel: SettingsViewModel = koinViewModel()
+
+ SettingsScreen(
+ onChangeThemeClick = {
+ navController.navigate(
+ route = UsualRideRoute,
+ navOptions = NavOptions.Builder().setLaunchSingleTop(true).build(),
+ )
+ },
+ onBackClick = {
+ navController.popBackStack()
+ },
+ )
+ }
+}
diff --git a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/settings/SettingsScreen.kt b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/settings/SettingsScreen.kt
new file mode 100644
index 00000000..fc4987b7
--- /dev/null
+++ b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/settings/SettingsScreen.kt
@@ -0,0 +1,78 @@
+package xyz.ksharma.krail.trip.planner.ui.settings
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.statusBarsPadding
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.ArrowBack
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.unit.dp
+import xyz.ksharma.krail.taj.components.Divider
+import xyz.ksharma.krail.taj.components.Text
+import xyz.ksharma.krail.taj.components.TitleBar
+import xyz.ksharma.krail.taj.theme.KrailTheme
+import xyz.ksharma.krail.trip.planner.ui.timetable.ActionButton
+
+@Composable
+fun SettingsScreen(
+ modifier: Modifier = Modifier,
+ onBackClick: () -> Unit = {},
+ onChangeThemeClick: () -> Unit = {},
+) {
+ Column(
+ modifier = modifier
+ .fillMaxSize()
+ .background(color = KrailTheme.colors.surface)
+ .statusBarsPadding(),
+ ) {
+ Column(modifier = Modifier.fillMaxWidth()) {
+ TitleBar(
+ modifier = Modifier.fillMaxWidth(),
+ navAction = {
+ ActionButton(
+ onClick = onBackClick,
+ contentDescription = "Back",
+ ) {
+ Image(
+ imageVector = Icons.AutoMirrored.Filled.ArrowBack,
+ contentDescription = null,
+ colorFilter = ColorFilter.tint(KrailTheme.colors.onSurface),
+ modifier = Modifier.size(24.dp),
+ )
+ }
+ },
+ title = { Text(text = "Settings") },
+ )
+ }
+
+ LazyColumn(
+ modifier = Modifier,
+ contentPadding = PaddingValues(top = 20.dp, bottom = 104.dp),
+ ) {
+ item {
+ Text(
+ text = "Change Theme",
+ style = KrailTheme.typography.title,
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(vertical = 12.dp, horizontal = 16.dp)
+ .clickable {
+ onChangeThemeClick()
+ }
+ )
+ Divider()
+ }
+
+ }
+ }
+}
diff --git a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/settings/SettingsViewModel.kt b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/settings/SettingsViewModel.kt
new file mode 100644
index 00000000..ddc16346
--- /dev/null
+++ b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/settings/SettingsViewModel.kt
@@ -0,0 +1,18 @@
+package xyz.ksharma.krail.trip.planner.ui.settings
+
+import androidx.lifecycle.ViewModel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import xyz.ksharma.krail.trip.planner.ui.state.settings.SettingsEvent
+import xyz.ksharma.krail.trip.planner.ui.state.settings.SettingsState
+
+class SettingsViewModel() : ViewModel() {
+
+ private val _uiState: MutableStateFlow = MutableStateFlow(SettingsState())
+ val uiState: StateFlow = _uiState
+
+/* fun onEvent(event: SettingsEvent) {
+ when (event) {
+ }
+ }*/
+}
diff --git a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/usualride/UsualRideDestination.kt b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/usualride/UsualRideDestination.kt
index 19ce8d44..b59c671a 100644
--- a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/usualride/UsualRideDestination.kt
+++ b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/usualride/UsualRideDestination.kt
@@ -45,7 +45,7 @@ internal fun NavGraphBuilder.usualRideDestination(navController: NavHostControll
route = SavedTripsRoute,
navOptions = NavOptions.Builder()
.setLaunchSingleTop(true)
- .setPopUpTo(inclusive = true)
+ .setPopUpTo(inclusive = false)
.build(),
)
},
diff --git a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/usualride/UsualRideViewModel.kt b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/usualride/UsualRideViewModel.kt
index a5edb147..7b101646 100644
--- a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/usualride/UsualRideViewModel.kt
+++ b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/usualride/UsualRideViewModel.kt
@@ -24,6 +24,7 @@ class UsualRideViewModel(private val sandook: Sandook) : ViewModel() {
private fun onTransportModeSelected(productClass: Int) {
viewModelScope.launch(Dispatchers.IO) {
+ sandook.clearTheme() // Only one entry should exist at a time
sandook.insertOrReplaceTheme(productClass.toLong())
}
}