Loading cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsScreen.kt +44 −27 Original line number Diff line number Diff line Loading @@ -148,19 +148,31 @@ fun DirectionsScreen( } } stringResource(string.change_start_location_to_my_location) Column( modifier = Modifier .fillMaxSize() .padding(horizontal = dimensionResource(dimen.padding)) ) { if (!isAnyFieldFocused) { if (isAnyFieldFocused) { DirectionsScreenFocusedField( viewModel = viewModel, fieldFocusState = fieldFocusState, onFieldFocusStateChange = { fieldFocusState = it if (fieldFocusState != FieldFocusState.NONE) { onFullExpansionRequired() } }, savedPlaces = savedPlaces, hasLocationPermission = hasLocationPermission, onRequestLocationPermission = onRequestLocationPermission, coroutineScope = coroutineScope ) } else { DirectionsScreenFullUI( viewModel = viewModel, onPeekHeightChange = onPeekHeightChange, onBack = onBack, onFullExpansionRequired = onFullExpansionRequired, navController = navController, onFieldFocusStateChange = { fieldFocusState = it }, fieldFocusState = fieldFocusState, Loading @@ -170,16 +182,6 @@ fun DirectionsScreen( hasNotificationPermission = hasNotificationPermission, onRequestNotificationPermission = onRequestNotificationPermission ) } else { DirectionsScreenFocusedField( viewModel = viewModel, fieldFocusState = fieldFocusState, savedPlaces = savedPlaces, hasLocationPermission = hasLocationPermission, onRequestLocationPermission = onRequestLocationPermission, pendingLocationRequest = pendingLocationRequest, coroutineScope = coroutineScope ) } } } Loading @@ -189,7 +191,6 @@ private fun DirectionsScreenFullUI( viewModel: DirectionsViewModel, onPeekHeightChange: (Dp) -> Unit, onBack: () -> Unit, onFullExpansionRequired: () -> Job, navController: NavController, onFieldFocusStateChange: (FieldFocusState) -> Unit, fieldFocusState: FieldFocusState, Loading Loading @@ -324,7 +325,12 @@ private fun DirectionsRouteResults( ) { val planState = viewModel.planState if (viewModel.selectedRoutingMode == RoutingMode.PUBLIC_TRANSPORT) { TransitRouteResults(planState = planState, navController = navController, viewModel = viewModel, appPreferences = appPreferences) TransitRouteResults( planState = planState, navController = navController, viewModel = viewModel, appPreferences = appPreferences ) } else { NonTransitRouteResults( routeState = routeState, Loading Loading @@ -445,10 +451,10 @@ private fun NonTransitRouteResults( private fun DirectionsScreenFocusedField( viewModel: DirectionsViewModel, fieldFocusState: FieldFocusState, onFieldFocusStateChange: (FieldFocusState) -> Unit, savedPlaces: List<Place>, hasLocationPermission: Boolean, onRequestLocationPermission: () -> Unit, pendingLocationRequest: FieldFocusState?, coroutineScope: CoroutineScope ) { // Show only the focused field and search results when a field is focused Loading @@ -464,7 +470,11 @@ private fun DirectionsScreenFocusedField( }, onTextChange = { viewModel.updateSearchQuery(it) }, onTextFieldFocusChange = { isFocused -> if (isFocused) { onFieldFocusStateChange(fieldFocusState) } else { onFieldFocusStateChange(FieldFocusState.NONE) } }, isFocused = true, modifier = Modifier Loading @@ -479,8 +489,8 @@ private fun DirectionsScreenFocusedField( savedPlaces = savedPlaces, hasLocationPermission = hasLocationPermission, onRequestLocationPermission = onRequestLocationPermission, pendingLocationRequest = pendingLocationRequest, coroutineScope = coroutineScope coroutineScope = coroutineScope, onFieldFocusStateChange = onFieldFocusStateChange, ) } Loading @@ -488,10 +498,10 @@ private fun DirectionsScreenFocusedField( private fun FocusedFieldContent( viewModel: DirectionsViewModel, fieldFocusState: FieldFocusState, onFieldFocusStateChange: (FieldFocusState) -> Unit, savedPlaces: List<Place>, hasLocationPermission: Boolean, onRequestLocationPermission: () -> Unit, pendingLocationRequest: FieldFocusState?, coroutineScope: CoroutineScope ) { when { Loading @@ -506,15 +516,16 @@ private fun FocusedFieldContent( savedPlaces = savedPlaces, hasLocationPermission = hasLocationPermission, onRequestLocationPermission = onRequestLocationPermission, pendingLocationRequest = pendingLocationRequest, coroutineScope = coroutineScope coroutineScope = coroutineScope, onFieldFocusStateChange = onFieldFocusStateChange, ) } else -> { SearchResultsContent( viewModel = viewModel, fieldFocusState = fieldFocusState fieldFocusState = fieldFocusState, onFieldFocusStateChange = onFieldFocusStateChange, ) } } Loading @@ -523,7 +534,7 @@ private fun FocusedFieldContent( @Composable private fun SearchingIndicator() { Text( text = "Searching...", text = stringResource(string.searching), modifier = Modifier .fillMaxWidth() .padding(dimensionResource(dimen.padding)) Loading @@ -534,10 +545,10 @@ private fun SearchingIndicator() { private fun QuickSuggestionsContent( viewModel: DirectionsViewModel, fieldFocusState: FieldFocusState, onFieldFocusStateChange: (FieldFocusState) -> Unit, savedPlaces: List<Place>, hasLocationPermission: Boolean, onRequestLocationPermission: () -> Unit, pendingLocationRequest: FieldFocusState?, coroutineScope: CoroutineScope ) { QuickSuggestions( Loading @@ -546,11 +557,13 @@ private fun QuickSuggestionsContent( fieldFocusState = fieldFocusState, hasLocationPermission = hasLocationPermission, onRequestLocationPermission = onRequestLocationPermission, coroutineScope = coroutineScope coroutineScope = coroutineScope, onFieldFocusStateChange = onFieldFocusStateChange, ), savedPlaces = savedPlaces, onSavedPlaceSelected = { place -> updatePlaceForField(viewModel, fieldFocusState, place) onFieldFocusStateChange(FieldFocusState.NONE) }, isGettingLocation = viewModel.isGettingLocation, modifier = Modifier.fillMaxWidth() Loading @@ -560,6 +573,7 @@ private fun QuickSuggestionsContent( @Composable private fun SearchResultsContent( viewModel: DirectionsViewModel, onFieldFocusStateChange: (FieldFocusState) -> Unit, fieldFocusState: FieldFocusState ) { SearchResults( Loading @@ -567,6 +581,7 @@ private fun SearchResultsContent( geocodeResults = deduplicateSearchResults(viewModel.geocodeResults.value), onPlaceSelected = { place -> updatePlaceForField(viewModel, fieldFocusState, place) onFieldFocusStateChange(FieldFocusState.NONE) }, modifier = Modifier.fillMaxWidth() ) Loading @@ -589,6 +604,7 @@ private fun handleMyLocationSelected( fieldFocusState: FieldFocusState, hasLocationPermission: Boolean, onRequestLocationPermission: () -> Unit, onFieldFocusStateChange: (FieldFocusState) -> Unit, coroutineScope: CoroutineScope ): () -> Unit = { if (hasLocationPermission) { Loading @@ -596,6 +612,7 @@ private fun handleMyLocationSelected( val myLocationPlace = viewModel.getCurrentLocationAsPlace() myLocationPlace?.let { place -> updatePlaceForField(viewModel, fieldFocusState, place) onFieldFocusStateChange(FieldFocusState.NONE) } } } else { Loading cardinal-android/app/src/main/res/values/strings.xml +1 −0 Original line number Diff line number Diff line Loading @@ -247,4 +247,5 @@ <string name="imperial">Imperial</string> <string name="zoom_in">Zoom in</string> <string name="zoom_out">Zoom out</string> <string name="searching">Searching…</string> </resources> Loading
cardinal-android/app/src/main/java/earth/maps/cardinal/ui/directions/DirectionsScreen.kt +44 −27 Original line number Diff line number Diff line Loading @@ -148,19 +148,31 @@ fun DirectionsScreen( } } stringResource(string.change_start_location_to_my_location) Column( modifier = Modifier .fillMaxSize() .padding(horizontal = dimensionResource(dimen.padding)) ) { if (!isAnyFieldFocused) { if (isAnyFieldFocused) { DirectionsScreenFocusedField( viewModel = viewModel, fieldFocusState = fieldFocusState, onFieldFocusStateChange = { fieldFocusState = it if (fieldFocusState != FieldFocusState.NONE) { onFullExpansionRequired() } }, savedPlaces = savedPlaces, hasLocationPermission = hasLocationPermission, onRequestLocationPermission = onRequestLocationPermission, coroutineScope = coroutineScope ) } else { DirectionsScreenFullUI( viewModel = viewModel, onPeekHeightChange = onPeekHeightChange, onBack = onBack, onFullExpansionRequired = onFullExpansionRequired, navController = navController, onFieldFocusStateChange = { fieldFocusState = it }, fieldFocusState = fieldFocusState, Loading @@ -170,16 +182,6 @@ fun DirectionsScreen( hasNotificationPermission = hasNotificationPermission, onRequestNotificationPermission = onRequestNotificationPermission ) } else { DirectionsScreenFocusedField( viewModel = viewModel, fieldFocusState = fieldFocusState, savedPlaces = savedPlaces, hasLocationPermission = hasLocationPermission, onRequestLocationPermission = onRequestLocationPermission, pendingLocationRequest = pendingLocationRequest, coroutineScope = coroutineScope ) } } } Loading @@ -189,7 +191,6 @@ private fun DirectionsScreenFullUI( viewModel: DirectionsViewModel, onPeekHeightChange: (Dp) -> Unit, onBack: () -> Unit, onFullExpansionRequired: () -> Job, navController: NavController, onFieldFocusStateChange: (FieldFocusState) -> Unit, fieldFocusState: FieldFocusState, Loading Loading @@ -324,7 +325,12 @@ private fun DirectionsRouteResults( ) { val planState = viewModel.planState if (viewModel.selectedRoutingMode == RoutingMode.PUBLIC_TRANSPORT) { TransitRouteResults(planState = planState, navController = navController, viewModel = viewModel, appPreferences = appPreferences) TransitRouteResults( planState = planState, navController = navController, viewModel = viewModel, appPreferences = appPreferences ) } else { NonTransitRouteResults( routeState = routeState, Loading Loading @@ -445,10 +451,10 @@ private fun NonTransitRouteResults( private fun DirectionsScreenFocusedField( viewModel: DirectionsViewModel, fieldFocusState: FieldFocusState, onFieldFocusStateChange: (FieldFocusState) -> Unit, savedPlaces: List<Place>, hasLocationPermission: Boolean, onRequestLocationPermission: () -> Unit, pendingLocationRequest: FieldFocusState?, coroutineScope: CoroutineScope ) { // Show only the focused field and search results when a field is focused Loading @@ -464,7 +470,11 @@ private fun DirectionsScreenFocusedField( }, onTextChange = { viewModel.updateSearchQuery(it) }, onTextFieldFocusChange = { isFocused -> if (isFocused) { onFieldFocusStateChange(fieldFocusState) } else { onFieldFocusStateChange(FieldFocusState.NONE) } }, isFocused = true, modifier = Modifier Loading @@ -479,8 +489,8 @@ private fun DirectionsScreenFocusedField( savedPlaces = savedPlaces, hasLocationPermission = hasLocationPermission, onRequestLocationPermission = onRequestLocationPermission, pendingLocationRequest = pendingLocationRequest, coroutineScope = coroutineScope coroutineScope = coroutineScope, onFieldFocusStateChange = onFieldFocusStateChange, ) } Loading @@ -488,10 +498,10 @@ private fun DirectionsScreenFocusedField( private fun FocusedFieldContent( viewModel: DirectionsViewModel, fieldFocusState: FieldFocusState, onFieldFocusStateChange: (FieldFocusState) -> Unit, savedPlaces: List<Place>, hasLocationPermission: Boolean, onRequestLocationPermission: () -> Unit, pendingLocationRequest: FieldFocusState?, coroutineScope: CoroutineScope ) { when { Loading @@ -506,15 +516,16 @@ private fun FocusedFieldContent( savedPlaces = savedPlaces, hasLocationPermission = hasLocationPermission, onRequestLocationPermission = onRequestLocationPermission, pendingLocationRequest = pendingLocationRequest, coroutineScope = coroutineScope coroutineScope = coroutineScope, onFieldFocusStateChange = onFieldFocusStateChange, ) } else -> { SearchResultsContent( viewModel = viewModel, fieldFocusState = fieldFocusState fieldFocusState = fieldFocusState, onFieldFocusStateChange = onFieldFocusStateChange, ) } } Loading @@ -523,7 +534,7 @@ private fun FocusedFieldContent( @Composable private fun SearchingIndicator() { Text( text = "Searching...", text = stringResource(string.searching), modifier = Modifier .fillMaxWidth() .padding(dimensionResource(dimen.padding)) Loading @@ -534,10 +545,10 @@ private fun SearchingIndicator() { private fun QuickSuggestionsContent( viewModel: DirectionsViewModel, fieldFocusState: FieldFocusState, onFieldFocusStateChange: (FieldFocusState) -> Unit, savedPlaces: List<Place>, hasLocationPermission: Boolean, onRequestLocationPermission: () -> Unit, pendingLocationRequest: FieldFocusState?, coroutineScope: CoroutineScope ) { QuickSuggestions( Loading @@ -546,11 +557,13 @@ private fun QuickSuggestionsContent( fieldFocusState = fieldFocusState, hasLocationPermission = hasLocationPermission, onRequestLocationPermission = onRequestLocationPermission, coroutineScope = coroutineScope coroutineScope = coroutineScope, onFieldFocusStateChange = onFieldFocusStateChange, ), savedPlaces = savedPlaces, onSavedPlaceSelected = { place -> updatePlaceForField(viewModel, fieldFocusState, place) onFieldFocusStateChange(FieldFocusState.NONE) }, isGettingLocation = viewModel.isGettingLocation, modifier = Modifier.fillMaxWidth() Loading @@ -560,6 +573,7 @@ private fun QuickSuggestionsContent( @Composable private fun SearchResultsContent( viewModel: DirectionsViewModel, onFieldFocusStateChange: (FieldFocusState) -> Unit, fieldFocusState: FieldFocusState ) { SearchResults( Loading @@ -567,6 +581,7 @@ private fun SearchResultsContent( geocodeResults = deduplicateSearchResults(viewModel.geocodeResults.value), onPlaceSelected = { place -> updatePlaceForField(viewModel, fieldFocusState, place) onFieldFocusStateChange(FieldFocusState.NONE) }, modifier = Modifier.fillMaxWidth() ) Loading @@ -589,6 +604,7 @@ private fun handleMyLocationSelected( fieldFocusState: FieldFocusState, hasLocationPermission: Boolean, onRequestLocationPermission: () -> Unit, onFieldFocusStateChange: (FieldFocusState) -> Unit, coroutineScope: CoroutineScope ): () -> Unit = { if (hasLocationPermission) { Loading @@ -596,6 +612,7 @@ private fun handleMyLocationSelected( val myLocationPlace = viewModel.getCurrentLocationAsPlace() myLocationPlace?.let { place -> updatePlaceForField(viewModel, fieldFocusState, place) onFieldFocusStateChange(FieldFocusState.NONE) } } } else { Loading
cardinal-android/app/src/main/res/values/strings.xml +1 −0 Original line number Diff line number Diff line Loading @@ -247,4 +247,5 @@ <string name="imperial">Imperial</string> <string name="zoom_in">Zoom in</string> <string name="zoom_out">Zoom out</string> <string name="searching">Searching…</string> </resources>