Loading cardinal-android/app/src/main/java/earth/maps/cardinal/routing/RouteResult.ktdeleted 100644 → 0 +0 −56 Original line number Diff line number Diff line /* * Cardinal Maps * Copyright (C) 2025 Cardinal Maps Authors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ package earth.maps.cardinal.routing data class RouteResult( val distance: Double, // in meters or as specified by units val duration: Double, // in seconds val legs: List<RouteLeg>, val geometry: RouteGeometry, val units: String = "kilometers" // or "miles" ) data class RouteLeg( val summary: String, val distance: Double, val duration: Double, val steps: List<RouteStep> ) data class RouteStep( val distance: Double, val duration: Double, val instruction: String, val name: String, val geometry: RouteGeometry, ) data class RouteGeometry( val type: String = "LineString", val coordinates: List<List<Double>> // [longitude, latitude] pairs ) data class Maneuver( val location: List<Double>, // [longitude, latitude] val bearingBefore: Double, val bearingAfter: Double, val type: String, val modifier: String? = null, val instruction: String ) cardinal-android/app/src/main/java/earth/maps/cardinal/ui/core/AppContent.kt +10 −5 Original line number Diff line number Diff line Loading @@ -547,7 +547,9 @@ private fun NearbyPoiRoute( rememberBottomSheetScaffoldState(bottomSheetState = bottomSheetState) CardinalAppScaffold( scaffoldState = scaffoldState, peekHeight = state.screenHeightDp / 3, scaffoldState = scaffoldState, peekHeight = state.screenHeightDp / 3, showToolbar = true, content = { NearbyScreenContent(viewModel = nearbyViewModel, onPlaceSelected = { NavigationUtils.navigate(navController, Screen.PlaceCard(it)) Loading Loading @@ -579,7 +581,9 @@ private fun NearbyTransitRoute( rememberBottomSheetScaffoldState(bottomSheetState = bottomSheetState) CardinalAppScaffold( scaffoldState = scaffoldState, peekHeight = state.screenHeightDp / 3, scaffoldState = scaffoldState, peekHeight = state.screenHeightDp / 3, showToolbar = true, content = { TransitScreenContent(viewModel = transitViewModel, onRouteClicked = { NavigationUtils.navigate(navController, Screen.PlaceCard(it)) Loading Loading @@ -834,6 +838,7 @@ private fun OfflineAreasRoute( state.fabHeight = it } }, showToolbar = true, content = { snackBarHostState -> OfflineAreasScreen( currentViewport = visibleRegion, Loading Loading @@ -1240,6 +1245,7 @@ private fun HomeScreenComposable( onFabHeightChange(it) } }, showToolbar = true, content = { HomeScreen( viewModel = viewModel, Loading Loading @@ -1306,7 +1312,7 @@ fun CardinalAppScaffold( peekHeight: Dp, content: @Composable (SnackbarHostState) -> Unit, fabHeightCallback: (Dp) -> Unit, showToolbar: Boolean = true, showToolbar: Boolean, ) { val density = LocalDensity.current val snackBarHostState = remember { SnackbarHostState() } Loading @@ -1326,7 +1332,7 @@ fun CardinalAppScaffold( sheetBackgroundColor = BottomSheetDefaults.ContainerColor, sheetContent = { Column( modifier = Modifier.onGloballyPositioned { modifier = Modifier.padding(bottom = bottomPadding).onGloballyPositioned { fabHeightCallback(with(density) { it.positionInRoot().y.toDp() }) }) { Box( Loading @@ -1338,7 +1344,6 @@ fun CardinalAppScaffold( } content(snackBarHostState) } Spacer(modifier = Modifier.height(bottomInset)) }, content = {}) } Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsScreen.kt +11 −1 Original line number Diff line number Diff line Loading @@ -25,10 +25,15 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button Loading Loading @@ -61,6 +66,7 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource Loading Loading @@ -122,6 +128,10 @@ fun DirectionsScreen( val coroutineScope = rememberCoroutineScope() val bottomPadding = with(LocalDensity.current) { WindowInsets.safeDrawing.getBottom(this).toDp() } LaunchedEffect(Unit) { // Run this in our coroutine scope rather than viewModelScope. viewModel.initializeRoutingMode() Loading Loading @@ -153,7 +163,7 @@ fun DirectionsScreen( Column( modifier = Modifier .fillMaxSize() .padding(horizontal = dimensionResource(dimen.padding)) .padding(start = dimensionResource(dimen.padding), end = dimensionResource(dimen.padding), bottom = bottomPadding) ) { if (isAnyFieldFocused) { DirectionsScreenFocusedField( Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/NearbyScreen.kt +8 −1 Original line number Diff line number Diff line Loading @@ -25,10 +25,12 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn Loading @@ -52,6 +54,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource Loading @@ -71,10 +74,14 @@ fun NearbyScreenContent(viewModel: NearbyViewModel, onPlaceSelected: (Place) -> val error by viewModel.error.collectAsState() val addressFormatter = remember { AddressFormatter() } val bottomPadding = with(LocalDensity.current) { WindowInsets.safeDrawing.getBottom(this).toDp() } Column( modifier = Modifier .fillMaxSize() .padding(horizontal = dimensionResource(dimen.padding)) .padding(start = dimensionResource(dimen.padding), end = dimensionResource(dimen.padding), bottom = bottomPadding) .onGloballyPositioned { coordinates -> // This would normally update peek height, but for nearby content // we don't need special peek height management like other screens Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/TransitScreen.kt +8 −1 Original line number Diff line number Diff line Loading @@ -32,10 +32,12 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.pager.HorizontalPager Loading @@ -60,6 +62,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource Loading Loading @@ -99,6 +102,10 @@ fun TransitScreenContent( val departures by viewModel.departures.collectAsState(emptyList()) val use24HourFormat by viewModel.use24HourFormat.collectAsState() val bottomPadding = with(LocalDensity.current) { WindowInsets.safeDrawing.getBottom(this).toDp() } LaunchedEffect(secondsSinceStart) { if (secondsSinceStart % 30 == 0 && secondsSinceStart > 0) { viewModel.refreshData() Loading @@ -112,7 +119,7 @@ fun TransitScreenContent( .padding( start = dimensionResource(dimen.padding), end = dimensionResource(dimen.padding), bottom = 36.dp bottom = bottomPadding, ) ) { DeparturesHeader(viewModel, coroutineScope, isRefreshingDepartures.value) Loading Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/routing/RouteResult.ktdeleted 100644 → 0 +0 −56 Original line number Diff line number Diff line /* * Cardinal Maps * Copyright (C) 2025 Cardinal Maps Authors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ package earth.maps.cardinal.routing data class RouteResult( val distance: Double, // in meters or as specified by units val duration: Double, // in seconds val legs: List<RouteLeg>, val geometry: RouteGeometry, val units: String = "kilometers" // or "miles" ) data class RouteLeg( val summary: String, val distance: Double, val duration: Double, val steps: List<RouteStep> ) data class RouteStep( val distance: Double, val duration: Double, val instruction: String, val name: String, val geometry: RouteGeometry, ) data class RouteGeometry( val type: String = "LineString", val coordinates: List<List<Double>> // [longitude, latitude] pairs ) data class Maneuver( val location: List<Double>, // [longitude, latitude] val bearingBefore: Double, val bearingAfter: Double, val type: String, val modifier: String? = null, val instruction: String )
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/core/AppContent.kt +10 −5 Original line number Diff line number Diff line Loading @@ -547,7 +547,9 @@ private fun NearbyPoiRoute( rememberBottomSheetScaffoldState(bottomSheetState = bottomSheetState) CardinalAppScaffold( scaffoldState = scaffoldState, peekHeight = state.screenHeightDp / 3, scaffoldState = scaffoldState, peekHeight = state.screenHeightDp / 3, showToolbar = true, content = { NearbyScreenContent(viewModel = nearbyViewModel, onPlaceSelected = { NavigationUtils.navigate(navController, Screen.PlaceCard(it)) Loading Loading @@ -579,7 +581,9 @@ private fun NearbyTransitRoute( rememberBottomSheetScaffoldState(bottomSheetState = bottomSheetState) CardinalAppScaffold( scaffoldState = scaffoldState, peekHeight = state.screenHeightDp / 3, scaffoldState = scaffoldState, peekHeight = state.screenHeightDp / 3, showToolbar = true, content = { TransitScreenContent(viewModel = transitViewModel, onRouteClicked = { NavigationUtils.navigate(navController, Screen.PlaceCard(it)) Loading Loading @@ -834,6 +838,7 @@ private fun OfflineAreasRoute( state.fabHeight = it } }, showToolbar = true, content = { snackBarHostState -> OfflineAreasScreen( currentViewport = visibleRegion, Loading Loading @@ -1240,6 +1245,7 @@ private fun HomeScreenComposable( onFabHeightChange(it) } }, showToolbar = true, content = { HomeScreen( viewModel = viewModel, Loading Loading @@ -1306,7 +1312,7 @@ fun CardinalAppScaffold( peekHeight: Dp, content: @Composable (SnackbarHostState) -> Unit, fabHeightCallback: (Dp) -> Unit, showToolbar: Boolean = true, showToolbar: Boolean, ) { val density = LocalDensity.current val snackBarHostState = remember { SnackbarHostState() } Loading @@ -1326,7 +1332,7 @@ fun CardinalAppScaffold( sheetBackgroundColor = BottomSheetDefaults.ContainerColor, sheetContent = { Column( modifier = Modifier.onGloballyPositioned { modifier = Modifier.padding(bottom = bottomPadding).onGloballyPositioned { fabHeightCallback(with(density) { it.positionInRoot().y.toDp() }) }) { Box( Loading @@ -1338,7 +1344,6 @@ fun CardinalAppScaffold( } content(snackBarHostState) } Spacer(modifier = Modifier.height(bottomInset)) }, content = {}) } Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsScreen.kt +11 −1 Original line number Diff line number Diff line Loading @@ -25,10 +25,15 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button Loading Loading @@ -61,6 +66,7 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource Loading Loading @@ -122,6 +128,10 @@ fun DirectionsScreen( val coroutineScope = rememberCoroutineScope() val bottomPadding = with(LocalDensity.current) { WindowInsets.safeDrawing.getBottom(this).toDp() } LaunchedEffect(Unit) { // Run this in our coroutine scope rather than viewModelScope. viewModel.initializeRoutingMode() Loading Loading @@ -153,7 +163,7 @@ fun DirectionsScreen( Column( modifier = Modifier .fillMaxSize() .padding(horizontal = dimensionResource(dimen.padding)) .padding(start = dimensionResource(dimen.padding), end = dimensionResource(dimen.padding), bottom = bottomPadding) ) { if (isAnyFieldFocused) { DirectionsScreenFocusedField( Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/NearbyScreen.kt +8 −1 Original line number Diff line number Diff line Loading @@ -25,10 +25,12 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn Loading @@ -52,6 +54,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource Loading @@ -71,10 +74,14 @@ fun NearbyScreenContent(viewModel: NearbyViewModel, onPlaceSelected: (Place) -> val error by viewModel.error.collectAsState() val addressFormatter = remember { AddressFormatter() } val bottomPadding = with(LocalDensity.current) { WindowInsets.safeDrawing.getBottom(this).toDp() } Column( modifier = Modifier .fillMaxSize() .padding(horizontal = dimensionResource(dimen.padding)) .padding(start = dimensionResource(dimen.padding), end = dimensionResource(dimen.padding), bottom = bottomPadding) .onGloballyPositioned { coordinates -> // This would normally update peek height, but for nearby content // we don't need special peek height management like other screens Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/TransitScreen.kt +8 −1 Original line number Diff line number Diff line Loading @@ -32,10 +32,12 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.pager.HorizontalPager Loading @@ -60,6 +62,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource Loading Loading @@ -99,6 +102,10 @@ fun TransitScreenContent( val departures by viewModel.departures.collectAsState(emptyList()) val use24HourFormat by viewModel.use24HourFormat.collectAsState() val bottomPadding = with(LocalDensity.current) { WindowInsets.safeDrawing.getBottom(this).toDp() } LaunchedEffect(secondsSinceStart) { if (secondsSinceStart % 30 == 0 && secondsSinceStart > 0) { viewModel.refreshData() Loading @@ -112,7 +119,7 @@ fun TransitScreenContent( .padding( start = dimensionResource(dimen.padding), end = dimensionResource(dimen.padding), bottom = 36.dp bottom = bottomPadding, ) ) { DeparturesHeader(viewModel, coroutineScope, isRefreshingDepartures.value) Loading