Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions composeApp/src/commonMain/composeResources/values-it/strings.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Common -->
<string name="ok">Ok</string>
<string name="cancel">Annulla</string>
<string name="map_error_no_internet">Sei offline. Alcune informazioni potrebbero non essere aggiornate.</string>
<string name="navigate_back">Torna alla mappa</string>
<string name="more_options">Altre opzioni</string>

<!-- Search -->
<string name="search_title">Cerca</string>
<string name="search_hint">Cerca un indirizzo</string>
<string name="search_recent_title">Ricerche recenti</string>
<string name="search_clear">Cancella ricerca</string>

<!-- Bottom navigation -->
<string name="nav_map">Mappa</string>
<string name="nav_search">Cerca</string>
<string name="nav_alerts">Avvisi</string>

<!-- Alerts -->
<string name="alerts_title">Interruzioni seguite</string>
<string name="alerts_filter_all">Tutte</string>
<string name="alerts_filter_failures">Guasti</string>
<string name="alerts_filter_maintenances">Manutenzioni</string>
<string name="alerts_chip_failure">GUASTO</string>
<string name="alerts_chip_maintenance">MANUTENZIONE</string>
<string name="alerts_dismiss">Smetti di seguire</string>
<string name="alerts_show_map">Mostra sulla mappa</string>
<string name="alerts_empty">Nessun guasto in questa lista. Per seguirne uno, apri il suo dettaglio sulla mappa e attiva gli aggiornamenti.</string>

<!-- Outage -->
<string name="outage_maintenance">Lavori programmati</string>
Expand Down
25 changes: 25 additions & 0 deletions composeApp/src/commonMain/composeResources/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Common -->
<string name="app_name" translatable="false">eGuasti</string>
<string name="ok">Ok</string>
<string name="cancel">Cancel</string>
<string name="map_error_no_internet">You're offline. Some information may not be up to date.</string>
<string name="navigate_back">Back to map</string>
<string name="more_options">More options</string>

<!-- Search -->
<string name="search_title">Search</string>
<string name="search_hint">Search an address</string>
<string name="search_recent_title">Recent searches</string>
<string name="search_clear">Clear search</string>

<!-- Bottom navigation -->
<string name="nav_map">Map</string>
<string name="nav_search">Search</string>
<string name="nav_alerts">Alerts</string>

<!-- Alerts -->
<string name="alerts_title">Followed outages</string>
<string name="alerts_filter_all">All</string>
<string name="alerts_filter_failures">Failures</string>
<string name="alerts_filter_maintenances">Maintenances</string>
<string name="alerts_chip_failure">FAILURE</string>
<string name="alerts_chip_maintenance">MAINTENANCE</string>
<string name="alerts_dismiss">Stop following</string>
<string name="alerts_show_map">Show on map</string>
<string name="alerts_empty">No outages in this list. To follow an outage, open its details on the map and enable updates.</string>

<!-- Outage -->
<string name="outage_maintenance">Scheduled maintenance</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,21 @@ package net.albertopedron.eguasti

import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.LaunchedEffect
import androidx.navigation.NavController
import androidx.navigation.toRoute
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.coroutines.flow.update
import net.albertopedron.eguasti.tools.DeviceConfigurationChanges
import net.albertopedron.eguasti.ui.alerts.AlertsScreen
import net.albertopedron.eguasti.ui.map.MapScreen
import net.albertopedron.eguasti.ui.search.SearchScreen
import net.albertopedron.eguasti.ui.settings.SettingsScreen
import net.albertopedron.eguasti.ui.theme.EGuastiTheme

Expand All @@ -22,20 +30,70 @@ fun EGuastiApp() {
}

object Destinations {
const val MAP_ROUTE = "map"
const val SETTINGS_ROUTE = "settings"
const val MAP_TARGET_KEY = "mapTarget"

@Serializable
data class Map(val latitude: Double? = null, val longitude: Double? = null)

@Serializable
data object Search

@Serializable
data object Alerts

@Serializable
data object Settings
}

private fun NavController.returnToMap(latitude: Double, longitude: Double) {
previousBackStackEntry?.savedStateHandle?.set(
Destinations.MAP_TARGET_KEY,
Json.encodeToString(Destinations.Map(latitude, longitude)),
)
popBackStack()
}

@Composable
private fun NavGraph() {
val navController = rememberNavController()

NavHost(navController, startDestination = Destinations.MAP_ROUTE) {
composable(Destinations.MAP_ROUTE) {
MapScreen(navigateToSettings = { navController.navigate(Destinations.SETTINGS_ROUTE) })
NavHost(navController, startDestination = Destinations.Map()) {
composable<Destinations.Map> { backStackEntry ->
val destination = backStackEntry.toRoute<Destinations.Map>()
val mapTarget by backStackEntry.savedStateHandle
.getStateFlow<String?>(Destinations.MAP_TARGET_KEY, null).collectAsState()
val target = mapTarget?.let { Json.decodeFromString<Destinations.Map>(it) } ?: destination
MapScreen(
targetLatitude = target.latitude,
targetLongitude = target.longitude,
onTargetHandled = { backStackEntry.savedStateHandle.set<String?>(Destinations.MAP_TARGET_KEY, null) },
navigateToSettings = { navController.navigate(Destinations.Settings) },
navigateToSearch = { navController.navigate(Destinations.Search) },
navigateToAlerts = { navController.navigate(Destinations.Alerts) },
)
}
composable<Destinations.Search> {
SearchScreen(
onNavigateToMap = {
navController.popBackStack()
},
onNavigateToMapAt = { latitude, longitude ->
navController.returnToMap(latitude, longitude)
},
)
}
composable(Destinations.SETTINGS_ROUTE) {
SettingsScreen(navigateBack = { navController.popBackStack() })
composable<Destinations.Alerts> {
AlertsScreen(
onNavigateToMap = {
navController.popBackStack()
},
onNavigateToMapAt = { latitude, longitude ->
navController.returnToMap(latitude, longitude)
},
)
}
composable<Destinations.Settings> {
SettingsScreen(navigateBack = { navController.popBackStack() })
}
}
}
Expand All @@ -46,4 +104,3 @@ private fun DarkThemeChangeListener(darkTheme: Boolean = isSystemInDarkTheme())
DeviceConfigurationChanges.darkTheme.update { darkTheme }
}
}

Loading
Loading