diff --git a/cardinal-android/app/src/main/java/earth/maps/cardinal/routing/RouteResult.kt b/cardinal-android/app/src/main/java/earth/maps/cardinal/routing/RouteResult.kt deleted file mode 100644 index 1fae56b588cdaa4ec6f035f4e1a782b2a27ba339..0000000000000000000000000000000000000000 --- a/cardinal-android/app/src/main/java/earth/maps/cardinal/routing/RouteResult.kt +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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 . - */ - -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, - val geometry: RouteGeometry, - val units: String = "kilometers" // or "miles" -) - -data class RouteLeg( - val summary: String, - val distance: Double, - val duration: Double, - val steps: List -) - -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> // [longitude, latitude] pairs -) - -data class Maneuver( - val location: List, // [longitude, latitude] - val bearingBefore: Double, - val bearingAfter: Double, - val type: String, - val modifier: String? = null, - val instruction: String -) diff --git a/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/core/AppContent.kt b/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/core/AppContent.kt index 1fdea8f85773cd2a9ab33990597ba167c9ee37de..6a6c2dc744f342ad57b2b66a0c56100ade5fd30d 100644 --- a/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/core/AppContent.kt +++ b/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/core/AppContent.kt @@ -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)) @@ -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)) @@ -834,6 +838,7 @@ private fun OfflineAreasRoute( state.fabHeight = it } }, + showToolbar = true, content = { snackBarHostState -> OfflineAreasScreen( currentViewport = visibleRegion, @@ -1240,6 +1245,7 @@ private fun HomeScreenComposable( onFabHeightChange(it) } }, + showToolbar = true, content = { HomeScreen( viewModel = viewModel, @@ -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() } @@ -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( @@ -1338,7 +1344,6 @@ fun CardinalAppScaffold( } content(snackBarHostState) } - Spacer(modifier = Modifier.height(bottomInset)) }, content = {}) } diff --git a/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsScreen.kt b/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsScreen.kt index fd043399efcf332215fe69cc1218273158fd0402..fc594c6d32ef4c0be49d759d7e08f8f1fa8790ed 100644 --- a/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsScreen.kt +++ b/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsScreen.kt @@ -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 @@ -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 @@ -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() @@ -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( diff --git a/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/NearbyScreen.kt b/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/NearbyScreen.kt index 125616b00a1bbd3f005127ba7120ebff8b8cf888..73db2822e155e2f6276acaf8bc73a5df74b5c1a2 100644 --- a/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/NearbyScreen.kt +++ b/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/NearbyScreen.kt @@ -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 @@ -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 @@ -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 diff --git a/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/TransitScreen.kt b/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/TransitScreen.kt index 6311a5619e2426504d051d13618239559e511cd2..e0d38c01cb2d0f676264acf8360f5f3ae3f30640 100644 --- a/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/TransitScreen.kt +++ b/cardinal-android/app/src/main/java/earth/maps/cardinal/ui/home/TransitScreen.kt @@ -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 @@ -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 @@ -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() @@ -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)