From 06f671614a42edddc4eda1cf5ffab01adb8d8c6b Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Wed, 30 Oct 2024 16:56:04 +0900 Subject: [PATCH 01/10] First pass at upcoming maneuvers view for Android --- .../composeui/views/InstructionsView.kt | 72 +++++++++++++++---- .../ferrostar/core/NavigationViewModel.kt | 9 ++- .../core/extensions/TripStateExtensions.kt | 13 ++++ .../ferrostar/DemoNavigationViewModel.kt | 4 +- .../LandscapeNavigationOverlayView.kt | 2 +- .../overlays/PortraitNavigationOverlayView.kt | 2 +- 6 files changed, 81 insertions(+), 21 deletions(-) diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt index a609f903..e6b059d2 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt @@ -1,15 +1,27 @@ package com.stadiamaps.ferrostar.composeui.views import android.icu.util.ULocale +import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Divider +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow +import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.stadiamaps.ferrostar.composeui.formatting.DistanceFormatter @@ -20,6 +32,7 @@ import com.stadiamaps.ferrostar.composeui.views.maneuver.ManeuverImage import com.stadiamaps.ferrostar.composeui.views.maneuver.ManeuverInstructionView import uniffi.ferrostar.ManeuverModifier import uniffi.ferrostar.ManeuverType +import uniffi.ferrostar.RouteStep import uniffi.ferrostar.VisualInstruction import uniffi.ferrostar.VisualInstructionContent @@ -36,24 +49,53 @@ fun InstructionsView( distanceToNextManeuver: Double?, distanceFormatter: DistanceFormatter = LocalizedDistanceFormatter(), theme: InstructionRowTheme = DefaultInstructionRowTheme, + remainingSteps: List? = null, content: @Composable () -> Unit = { - ManeuverImage(instructions.primaryContent, tint = MaterialTheme.colorScheme.primary) + ManeuverImage(instructions.primaryContent, tint = MaterialTheme.colorScheme.primary) } ) { - Column( - modifier = - Modifier.fillMaxWidth() - .shadow(elevation = 5.dp, RoundedCornerShape(10.dp)) - .background(theme.backgroundColor, RoundedCornerShape(10.dp)) - .padding(8.dp)) { - ManeuverInstructionView( - text = instructions.primaryContent.text, - distanceFormatter = distanceFormatter, - distanceToNextManeuver = distanceToNextManeuver, - theme = theme, - content = content) - // TODO: Secondary instructions - } + var isExpanded by remember { mutableStateOf(false) } + val screenHeight = LocalConfiguration.current.screenHeightDp + val collapsedHeight = 100 // Seems right... need to check this though + val animatedHeight by animateDpAsState( + targetValue = if (isExpanded) screenHeight.dp else collapsedHeight.dp + ) + + Box( + modifier = Modifier + .fillMaxWidth() + .height(animatedHeight) + .background(theme.backgroundColor, RoundedCornerShape(10.dp)) + .clickable { isExpanded = !isExpanded } + .padding(8.dp) + ) { + Column { + ManeuverInstructionView( + text = instructions.primaryContent.text, + distanceFormatter = distanceFormatter, + distanceToNextManeuver = distanceToNextManeuver, + theme = theme, + content = content + ) + // TODO: Secondary content + if (isExpanded && remainingSteps != null) { + remainingSteps.drop(1).forEach { step -> + step.visualInstructions.firstOrNull()?.let { upcomingInstruction -> + HorizontalDivider(thickness = 1.dp) + Spacer(modifier = Modifier.height(8.dp)) + ManeuverInstructionView( + text = upcomingInstruction.primaryContent.text, + distanceFormatter = distanceFormatter, + distanceToNextManeuver = step.distance, + theme = theme, + content = content + ) + Spacer(modifier = Modifier.height(8.dp)) + } + } + } + } + } } // Previews diff --git a/android/core/src/main/java/com/stadiamaps/ferrostar/core/NavigationViewModel.kt b/android/core/src/main/java/com/stadiamaps/ferrostar/core/NavigationViewModel.kt index 9ffa43b4..0c2a3ed8 100644 --- a/android/core/src/main/java/com/stadiamaps/ferrostar/core/NavigationViewModel.kt +++ b/android/core/src/main/java/com/stadiamaps/ferrostar/core/NavigationViewModel.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.viewModelScope import com.stadiamaps.ferrostar.core.extensions.currentRoadName import com.stadiamaps.ferrostar.core.extensions.deviation import com.stadiamaps.ferrostar.core.extensions.progress +import com.stadiamaps.ferrostar.core.extensions.remainingSteps import com.stadiamaps.ferrostar.core.extensions.visualInstruction import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -13,6 +14,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import uniffi.ferrostar.GeographicCoordinate import uniffi.ferrostar.RouteDeviation +import uniffi.ferrostar.RouteStep import uniffi.ferrostar.SpokenInstruction import uniffi.ferrostar.TripProgress import uniffi.ferrostar.TripState @@ -49,7 +51,9 @@ data class NavigationUiState( /** If true, spoken instructions will not be synthesized. */ val isMuted: Boolean?, /** The name of the road which the current route step is traversing. */ - val currentStepRoadName: String? + val currentStepRoadName: String?, + /** The remaining steps in the trip (including the current step). */ + val remainingSteps: List? ) { companion object { fun fromFerrostar( @@ -70,7 +74,8 @@ data class NavigationUiState( isCalculatingNewRoute = coreState.isCalculatingNewRoute, routeDeviation = coreState.tripState.deviation(), isMuted = isMuted, - currentStepRoadName = coreState.tripState.currentRoadName()) + currentStepRoadName = coreState.tripState.currentRoadName(), + remainingSteps = coreState.tripState.remainingSteps()) } } diff --git a/android/core/src/main/java/com/stadiamaps/ferrostar/core/extensions/TripStateExtensions.kt b/android/core/src/main/java/com/stadiamaps/ferrostar/core/extensions/TripStateExtensions.kt index f045cb91..07d140d2 100644 --- a/android/core/src/main/java/com/stadiamaps/ferrostar/core/extensions/TripStateExtensions.kt +++ b/android/core/src/main/java/com/stadiamaps/ferrostar/core/extensions/TripStateExtensions.kt @@ -60,3 +60,16 @@ fun TripState.currentRoadName() = is TripState.Complete, TripState.Idle -> null } + +/** + * Get the remaining steps (including the current) in the current trip. + * + * @return The list of remaining steps (if any). + */ +fun TripState.remainingSteps() = + when (this) { + is TripState.Navigating -> + this.remainingSteps + is TripState.Complete, + TripState.Idle -> null + } diff --git a/android/demo-app/src/main/java/com/stadiamaps/ferrostar/DemoNavigationViewModel.kt b/android/demo-app/src/main/java/com/stadiamaps/ferrostar/DemoNavigationViewModel.kt index 16c7c6cf..40d59d91 100644 --- a/android/demo-app/src/main/java/com/stadiamaps/ferrostar/DemoNavigationViewModel.kt +++ b/android/demo-app/src/main/java/com/stadiamaps/ferrostar/DemoNavigationViewModel.kt @@ -42,7 +42,7 @@ class DemoNavigationViewModel : ViewModel(), NavigationViewModel { .map { userLocation -> // TODO: Heading NavigationUiState( - userLocation, null, null, null, null, null, null, false, null, null, null) + userLocation, null, null, null, null, null, null, false, null, null, null, null) } .stateIn( scope = viewModelScope, @@ -50,7 +50,7 @@ class DemoNavigationViewModel : ViewModel(), NavigationViewModel { // TODO: Heading initialValue = NavigationUiState( - null, null, null, null, null, null, null, false, null, null, null)) + null, null, null, null, null, null, null, false, null, null, null, null)) override fun toggleMute() { // Do nothing diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/LandscapeNavigationOverlayView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/LandscapeNavigationOverlayView.kt index f3855f4a..5ff21075 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/LandscapeNavigationOverlayView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/LandscapeNavigationOverlayView.kt @@ -54,7 +54,7 @@ fun LandscapeNavigationOverlayView( Column(modifier = Modifier.fillMaxHeight().fillMaxWidth(0.5f)) { uiState.visualInstruction?.let { instructions -> InstructionsView( - instructions, distanceToNextManeuver = uiState.progress?.distanceToNextManeuver) + instructions, remainingSteps = uiState.remainingSteps, distanceToNextManeuver = uiState.progress?.distanceToNextManeuver) } Spacer(modifier = Modifier.weight(1f)) diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/PortraitNavigationOverlayView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/PortraitNavigationOverlayView.kt index f378a657..d52d3532 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/PortraitNavigationOverlayView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/PortraitNavigationOverlayView.kt @@ -57,7 +57,7 @@ fun PortraitNavigationOverlayView( Column(modifier) { uiState.visualInstruction?.let { instructions -> InstructionsView( - instructions, distanceToNextManeuver = uiState.progress?.distanceToNextManeuver) + instructions, remainingSteps = uiState.remainingSteps, distanceToNextManeuver = uiState.progress?.distanceToNextManeuver) } val cameraIsTrackingLocation = camera.value.state is CameraState.TrackingUserLocationWithBearing From 6ecfdb3a441fcb432859e1cbf9799e68c473093a Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Wed, 30 Oct 2024 17:18:15 +0900 Subject: [PATCH 02/10] Make it scroll --- .../composeui/views/InstructionsView.kt | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt index e6b059d2..71135632 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt @@ -9,8 +9,11 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Divider import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme @@ -56,10 +59,12 @@ fun InstructionsView( ) { var isExpanded by remember { mutableStateOf(false) } val screenHeight = LocalConfiguration.current.screenHeightDp - val collapsedHeight = 100 // Seems right... need to check this though - val animatedHeight by animateDpAsState( - targetValue = if (isExpanded) screenHeight.dp else collapsedHeight.dp - ) + val collapsedHeight = 100.dp + + val targetHeight = if (isExpanded) screenHeight.dp else collapsedHeight + val animatedHeight by animateDpAsState(targetValue = targetHeight) + + val scrollState = rememberScrollState() Box( modifier = Modifier @@ -67,9 +72,12 @@ fun InstructionsView( .height(animatedHeight) .background(theme.backgroundColor, RoundedCornerShape(10.dp)) .clickable { isExpanded = !isExpanded } - .padding(8.dp) + .padding(16.dp) ) { - Column { + Column( + modifier = if (isExpanded) Modifier.verticalScroll(scrollState) else Modifier + ) { + // Primary content ManeuverInstructionView( text = instructions.primaryContent.text, distanceFormatter = distanceFormatter, @@ -78,10 +86,13 @@ fun InstructionsView( content = content ) // TODO: Secondary content - if (isExpanded && remainingSteps != null) { + + // Expanded content + if (isExpanded && remainingSteps != null && remainingSteps.count() > 1) { + Spacer(modifier = Modifier.height(8.dp)) + HorizontalDivider(thickness = 1.dp) remainingSteps.drop(1).forEach { step -> step.visualInstructions.firstOrNull()?.let { upcomingInstruction -> - HorizontalDivider(thickness = 1.dp) Spacer(modifier = Modifier.height(8.dp)) ManeuverInstructionView( text = upcomingInstruction.primaryContent.text, @@ -91,6 +102,7 @@ fun InstructionsView( content = content ) Spacer(modifier = Modifier.height(8.dp)) + HorizontalDivider(thickness = 1.dp) } } } From b2b28c1487fc06611b7a3be1303d037e45b4f50c Mon Sep 17 00:00:00 2001 From: ianthetechie Date: Wed, 30 Oct 2024 08:21:55 +0000 Subject: [PATCH 03/10] Apply automatic changes --- .../composeui/views/InstructionsView.kt | 86 +++++++++---------- .../core/extensions/TripStateExtensions.kt | 11 ++- .../LandscapeNavigationOverlayView.kt | 4 +- .../overlays/PortraitNavigationOverlayView.kt | 4 +- 4 files changed, 50 insertions(+), 55 deletions(-) diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt index 71135632..1123fe13 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt @@ -9,12 +9,10 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.Divider import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -23,7 +21,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.shadow import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -54,60 +51,55 @@ fun InstructionsView( theme: InstructionRowTheme = DefaultInstructionRowTheme, remainingSteps: List? = null, content: @Composable () -> Unit = { - ManeuverImage(instructions.primaryContent, tint = MaterialTheme.colorScheme.primary) + ManeuverImage(instructions.primaryContent, tint = MaterialTheme.colorScheme.primary) } ) { - var isExpanded by remember { mutableStateOf(false) } - val screenHeight = LocalConfiguration.current.screenHeightDp - val collapsedHeight = 100.dp + var isExpanded by remember { mutableStateOf(false) } + val screenHeight = LocalConfiguration.current.screenHeightDp + val collapsedHeight = 100.dp - val targetHeight = if (isExpanded) screenHeight.dp else collapsedHeight - val animatedHeight by animateDpAsState(targetValue = targetHeight) + val targetHeight = if (isExpanded) screenHeight.dp else collapsedHeight + val animatedHeight by animateDpAsState(targetValue = targetHeight) - val scrollState = rememberScrollState() + val scrollState = rememberScrollState() - Box( - modifier = Modifier - .fillMaxWidth() - .height(animatedHeight) - .background(theme.backgroundColor, RoundedCornerShape(10.dp)) - .clickable { isExpanded = !isExpanded } - .padding(16.dp) - ) { - Column( - modifier = if (isExpanded) Modifier.verticalScroll(scrollState) else Modifier - ) { - // Primary content - ManeuverInstructionView( - text = instructions.primaryContent.text, - distanceFormatter = distanceFormatter, - distanceToNextManeuver = distanceToNextManeuver, - theme = theme, - content = content - ) - // TODO: Secondary content + Box( + modifier = + Modifier.fillMaxWidth() + .height(animatedHeight) + .background(theme.backgroundColor, RoundedCornerShape(10.dp)) + .clickable { isExpanded = !isExpanded } + .padding(16.dp)) { + Column(modifier = if (isExpanded) Modifier.verticalScroll(scrollState) else Modifier) { + // Primary content + ManeuverInstructionView( + text = instructions.primaryContent.text, + distanceFormatter = distanceFormatter, + distanceToNextManeuver = distanceToNextManeuver, + theme = theme, + content = content) + // TODO: Secondary content - // Expanded content - if (isExpanded && remainingSteps != null && remainingSteps.count() > 1) { + // Expanded content + if (isExpanded && remainingSteps != null && remainingSteps.count() > 1) { + Spacer(modifier = Modifier.height(8.dp)) + HorizontalDivider(thickness = 1.dp) + remainingSteps.drop(1).forEach { step -> + step.visualInstructions.firstOrNull()?.let { upcomingInstruction -> + Spacer(modifier = Modifier.height(8.dp)) + ManeuverInstructionView( + text = upcomingInstruction.primaryContent.text, + distanceFormatter = distanceFormatter, + distanceToNextManeuver = step.distance, + theme = theme, + content = content) Spacer(modifier = Modifier.height(8.dp)) HorizontalDivider(thickness = 1.dp) - remainingSteps.drop(1).forEach { step -> - step.visualInstructions.firstOrNull()?.let { upcomingInstruction -> - Spacer(modifier = Modifier.height(8.dp)) - ManeuverInstructionView( - text = upcomingInstruction.primaryContent.text, - distanceFormatter = distanceFormatter, - distanceToNextManeuver = step.distance, - theme = theme, - content = content - ) - Spacer(modifier = Modifier.height(8.dp)) - HorizontalDivider(thickness = 1.dp) - } - } + } } + } } - } + } } // Previews diff --git a/android/core/src/main/java/com/stadiamaps/ferrostar/core/extensions/TripStateExtensions.kt b/android/core/src/main/java/com/stadiamaps/ferrostar/core/extensions/TripStateExtensions.kt index 07d140d2..b5ca06a0 100644 --- a/android/core/src/main/java/com/stadiamaps/ferrostar/core/extensions/TripStateExtensions.kt +++ b/android/core/src/main/java/com/stadiamaps/ferrostar/core/extensions/TripStateExtensions.kt @@ -67,9 +67,8 @@ fun TripState.currentRoadName() = * @return The list of remaining steps (if any). */ fun TripState.remainingSteps() = - when (this) { - is TripState.Navigating -> - this.remainingSteps - is TripState.Complete, - TripState.Idle -> null - } + when (this) { + is TripState.Navigating -> this.remainingSteps + is TripState.Complete, + TripState.Idle -> null + } diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/LandscapeNavigationOverlayView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/LandscapeNavigationOverlayView.kt index 5ff21075..790f144e 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/LandscapeNavigationOverlayView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/LandscapeNavigationOverlayView.kt @@ -54,7 +54,9 @@ fun LandscapeNavigationOverlayView( Column(modifier = Modifier.fillMaxHeight().fillMaxWidth(0.5f)) { uiState.visualInstruction?.let { instructions -> InstructionsView( - instructions, remainingSteps = uiState.remainingSteps, distanceToNextManeuver = uiState.progress?.distanceToNextManeuver) + instructions, + remainingSteps = uiState.remainingSteps, + distanceToNextManeuver = uiState.progress?.distanceToNextManeuver) } Spacer(modifier = Modifier.weight(1f)) diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/PortraitNavigationOverlayView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/PortraitNavigationOverlayView.kt index d52d3532..c2bf2fd8 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/PortraitNavigationOverlayView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/overlays/PortraitNavigationOverlayView.kt @@ -57,7 +57,9 @@ fun PortraitNavigationOverlayView( Column(modifier) { uiState.visualInstruction?.let { instructions -> InstructionsView( - instructions, remainingSteps = uiState.remainingSteps, distanceToNextManeuver = uiState.progress?.distanceToNextManeuver) + instructions, + remainingSteps = uiState.remainingSteps, + distanceToNextManeuver = uiState.progress?.distanceToNextManeuver) } val cameraIsTrackingLocation = camera.value.state is CameraState.TrackingUserLocationWithBearing From 7aa483fd044eee5b64a38f3388c67cead7130a37 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Wed, 30 Oct 2024 17:36:38 +0900 Subject: [PATCH 04/10] Build the content view correctly --- .../ferrostar/composeui/views/InstructionsView.kt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt index 1123fe13..b963246f 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt @@ -50,8 +50,8 @@ fun InstructionsView( distanceFormatter: DistanceFormatter = LocalizedDistanceFormatter(), theme: InstructionRowTheme = DefaultInstructionRowTheme, remainingSteps: List? = null, - content: @Composable () -> Unit = { - ManeuverImage(instructions.primaryContent, tint = MaterialTheme.colorScheme.primary) + contentBuilder: @Composable (VisualInstruction) -> Unit = { + ManeuverImage(it.primaryContent, tint = MaterialTheme.colorScheme.primary) } ) { var isExpanded by remember { mutableStateOf(false) } @@ -76,8 +76,10 @@ fun InstructionsView( text = instructions.primaryContent.text, distanceFormatter = distanceFormatter, distanceToNextManeuver = distanceToNextManeuver, - theme = theme, - content = content) + theme = theme) { + contentBuilder(instructions) + } + // TODO: Secondary content // Expanded content @@ -91,8 +93,9 @@ fun InstructionsView( text = upcomingInstruction.primaryContent.text, distanceFormatter = distanceFormatter, distanceToNextManeuver = step.distance, - theme = theme, - content = content) + theme = theme) { + contentBuilder(upcomingInstruction) + } Spacer(modifier = Modifier.height(8.dp)) HorizontalDivider(thickness = 1.dp) } From 5c7a8e02e0a22a9893e0ad2190caccda6bae4306 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Wed, 30 Oct 2024 17:50:17 +0900 Subject: [PATCH 05/10] Add snapshot tests --- .../composeui/views/InstructionsView.kt | 3 ++- .../ferrostar/views/InstructionViewTest.kt | 17 +++++++++++++++++ ...nstructionViewTest_testInstructionView.png | Bin 10485 -> 9709 bytes ...onViewTest_testInstructionViewExpanded.png | Bin 0 -> 9876 bytes ...uctionViewTests_testRTLInstructionView.png | Bin 9830 -> 9035 bytes 5 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionViewExpanded.png diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt index b963246f..008d8a21 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt @@ -50,11 +50,12 @@ fun InstructionsView( distanceFormatter: DistanceFormatter = LocalizedDistanceFormatter(), theme: InstructionRowTheme = DefaultInstructionRowTheme, remainingSteps: List? = null, + initExpanded: Boolean = false, contentBuilder: @Composable (VisualInstruction) -> Unit = { ManeuverImage(it.primaryContent, tint = MaterialTheme.colorScheme.primary) } ) { - var isExpanded by remember { mutableStateOf(false) } + var isExpanded by remember { mutableStateOf(initExpanded) } val screenHeight = LocalConfiguration.current.screenHeightDp val collapsedHeight = 100.dp diff --git a/android/composeui/src/test/java/com/stadiamaps/ferrostar/views/InstructionViewTest.kt b/android/composeui/src/test/java/com/stadiamaps/ferrostar/views/InstructionViewTest.kt index 3850680d..4f356d16 100644 --- a/android/composeui/src/test/java/com/stadiamaps/ferrostar/views/InstructionViewTest.kt +++ b/android/composeui/src/test/java/com/stadiamaps/ferrostar/views/InstructionViewTest.kt @@ -1,6 +1,8 @@ package com.stadiamaps.ferrostar.views import com.stadiamaps.ferrostar.composeui.views.InstructionsView +import com.stadiamaps.ferrostar.core.NavigationUiState +import com.stadiamaps.ferrostar.core.mock.pedestrianExample import com.stadiamaps.ferrostar.support.paparazziDefault import com.stadiamaps.ferrostar.support.withSnapshotBackground import org.junit.Rule @@ -35,4 +37,19 @@ class InstructionViewTest { } } } + + @Test + fun testInstructionViewExpanded() { + val state = NavigationUiState.pedestrianExample() + + paparazzi.snapshot { + withSnapshotBackground { + InstructionsView( + instructions = state.visualInstruction!!, + remainingSteps = state.remainingSteps, + distanceToNextManeuver = 42.0, + initExpanded = true) + } + } + } } diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionView.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionView.png index 5ba73ea302349b3def11ba8f976366a196eebcac..32cd32e997c28eaa67003f9f607e480fefc549f3 100644 GIT binary patch literal 9709 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 i*8M+OHgxabiqJ%g@i`*!ZNck|03&@b(a5 diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionViewExpanded.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionViewExpanded.png new file mode 100644 index 0000000000000000000000000000000000000000..f94b3f0d16fb9db926ae266a5af0361ba4852a9a GIT binary patch literal 9876 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 literal 0 HcmV?d00001 diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_RTLInstructionViewTests_testRTLInstructionView.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_RTLInstructionViewTests_testRTLInstructionView.png index 01b134a09732bc8daa20f28c7dc2a384718a75f8..eb99faf1ee21c82cc5352a4872ab0e70d837a392 100644 GIT binary patch literal 9035 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 literal 9830 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 From a27dd874de0b5ebc63609f3571d8e7313e83d5c9 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Thu, 31 Oct 2024 00:53:47 +0900 Subject: [PATCH 06/10] Add s --- .../composeui/views/InstructionsView.kt | 66 +++++++++++------- ...nstructionViewTest_testInstructionView.png | Bin 9709 -> 10893 bytes ...onViewTest_testInstructionViewExpanded.png | Bin 9876 -> 10435 bytes ...uctionViewTests_testRTLInstructionView.png | Bin 9035 -> 10222 bytes 4 files changed, 40 insertions(+), 26 deletions(-) diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt index 008d8a21..d3049a3b 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt @@ -1,19 +1,26 @@ package com.stadiamaps.ferrostar.composeui.views import android.icu.util.ULocale -import androidx.compose.animation.core.animateDpAsState +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.spring import androidx.compose.foundation.background -import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.KeyboardArrowDown +import androidx.compose.material.icons.filled.KeyboardArrowUp +import androidx.compose.material3.Button import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -56,38 +63,33 @@ fun InstructionsView( } ) { var isExpanded by remember { mutableStateOf(initExpanded) } - val screenHeight = LocalConfiguration.current.screenHeightDp - val collapsedHeight = 100.dp - - val targetHeight = if (isExpanded) screenHeight.dp else collapsedHeight - val animatedHeight by animateDpAsState(targetValue = targetHeight) - - val scrollState = rememberScrollState() + val screenHeight = LocalConfiguration.current.screenHeightDp.dp Box( modifier = Modifier.fillMaxWidth() - .height(animatedHeight) + .heightIn(max = screenHeight) + .animateContentSize(animationSpec = spring(stiffness = Spring.StiffnessHigh)) .background(theme.backgroundColor, RoundedCornerShape(10.dp)) - .clickable { isExpanded = !isExpanded } .padding(16.dp)) { - Column(modifier = if (isExpanded) Modifier.verticalScroll(scrollState) else Modifier) { + LazyColumn(verticalArrangement = Arrangement.spacedBy(8.dp)) { // Primary content - ManeuverInstructionView( - text = instructions.primaryContent.text, - distanceFormatter = distanceFormatter, - distanceToNextManeuver = distanceToNextManeuver, - theme = theme) { - contentBuilder(instructions) - } + item { + ManeuverInstructionView( + text = instructions.primaryContent.text, + distanceFormatter = distanceFormatter, + distanceToNextManeuver = distanceToNextManeuver, + theme = theme) { + contentBuilder(instructions) + } + } // TODO: Secondary content // Expanded content if (isExpanded && remainingSteps != null && remainingSteps.count() > 1) { - Spacer(modifier = Modifier.height(8.dp)) - HorizontalDivider(thickness = 1.dp) - remainingSteps.drop(1).forEach { step -> + item { HorizontalDivider(thickness = 1.dp) } + items(remainingSteps.drop(1)) { step -> step.visualInstructions.firstOrNull()?.let { upcomingInstruction -> Spacer(modifier = Modifier.height(8.dp)) ManeuverInstructionView( @@ -97,11 +99,23 @@ fun InstructionsView( theme = theme) { contentBuilder(upcomingInstruction) } - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.height(16.dp)) HorizontalDivider(thickness = 1.dp) } } } + + item { + Button(onClick = { isExpanded = !isExpanded }, modifier = Modifier.fillMaxWidth()) { + Icon( + if (isExpanded) { + Icons.Default.KeyboardArrowUp + } else { + Icons.Default.KeyboardArrowDown + }, + contentDescription = "Show upcoming maneuvers") + } + } } } } diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionView.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionView.png index 32cd32e997c28eaa67003f9f607e480fefc549f3..70c4e1adc097622ba303b7753a0ba27d9a515261 100644 GIT binary patch delta 8452 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 diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_RTLInstructionViewTests_testRTLInstructionView.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_RTLInstructionViewTests_testRTLInstructionView.png index eb99faf1ee21c82cc5352a4872ab0e70d837a392..8f5e03ce9bf108acf0b61082509f82ce265f6d7a 100644 GIT binary patch literal 10222 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 literal 9035 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 From 59a8b4bd16a563299a2b1789969a22f4fb6b604c Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Fri, 1 Nov 2024 01:45:47 +0900 Subject: [PATCH 07/10] Improve the expand button UX --- .../composeui/views/InstructionsView.kt | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt index d3049a3b..08ec60f3 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt @@ -5,6 +5,7 @@ import androidx.compose.animation.animateContentSize import androidx.compose.animation.core.Spring import androidx.compose.animation.core.spring import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer @@ -18,7 +19,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.KeyboardArrowDown import androidx.compose.material.icons.filled.KeyboardArrowUp -import androidx.compose.material3.Button import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -27,6 +27,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.tooling.preview.Preview @@ -106,15 +107,18 @@ fun InstructionsView( } item { - Button(onClick = { isExpanded = !isExpanded }, modifier = Modifier.fillMaxWidth()) { - Icon( - if (isExpanded) { - Icons.Default.KeyboardArrowUp - } else { - Icons.Default.KeyboardArrowDown - }, - contentDescription = "Show upcoming maneuvers") - } + Box( + modifier = + Modifier.height(36.dp).fillMaxWidth().clickable { isExpanded = !isExpanded }) { + Icon( + if (isExpanded) { + Icons.Default.KeyboardArrowUp + } else { + Icons.Default.KeyboardArrowDown + }, + modifier = Modifier.align(Alignment.Center), + contentDescription = "Show upcoming maneuvers") + } } } } From d40ff983f23e7fd22c9da3a1d38609377bdc4227 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Fri, 1 Nov 2024 01:54:46 +0900 Subject: [PATCH 08/10] Update snapshots --- ...nstructionViewTest_testInstructionView.png | Bin 10893 -> 10001 bytes ...onViewTest_testInstructionViewExpanded.png | Bin 10435 -> 9566 bytes ...uctionViewTests_testRTLInstructionView.png | Bin 10222 -> 9325 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionView.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionView.png index 70c4e1adc097622ba303b7753a0ba27d9a515261..c2fee11435c32654c8c3a6af2feff97a4e67fe54 100644 GIT binary patch literal 10001 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 literal 10893 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 From 1a70e362b4059368c14038f5ff6fba1fc1c03f1b Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Fri, 1 Nov 2024 11:35:22 +0900 Subject: [PATCH 09/10] Implement pill for expand/contract --- .../composeui/theme/InstructionRowTheme.kt | 2 +- .../composeui/views/InstructionsView.kt | 42 ++++++------ .../views/controls/PillDragHandle.kt | 68 +++++++++++++++++++ 3 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/controls/PillDragHandle.kt diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/theme/InstructionRowTheme.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/theme/InstructionRowTheme.kt index c9b04263..43d0ca1d 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/theme/InstructionRowTheme.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/theme/InstructionRowTheme.kt @@ -33,5 +33,5 @@ object DefaultInstructionRowTheme : InstructionRowTheme { @Composable get() = MaterialTheme.colorScheme.onSurface override val backgroundColor: Color - @Composable get() = MaterialTheme.colorScheme.surface + @Composable get() = MaterialTheme.colorScheme.surfaceContainerLow } diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt index 08ec60f3..c6c747cb 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/InstructionsView.kt @@ -7,20 +7,17 @@ import androidx.compose.animation.core.spring import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.KeyboardArrowDown -import androidx.compose.material.icons.filled.KeyboardArrowUp import androidx.compose.material3.HorizontalDivider -import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -36,6 +33,7 @@ import com.stadiamaps.ferrostar.composeui.formatting.DistanceFormatter import com.stadiamaps.ferrostar.composeui.formatting.LocalizedDistanceFormatter import com.stadiamaps.ferrostar.composeui.theme.DefaultInstructionRowTheme import com.stadiamaps.ferrostar.composeui.theme.InstructionRowTheme +import com.stadiamaps.ferrostar.composeui.views.controls.PillDragHandle import com.stadiamaps.ferrostar.composeui.views.maneuver.ManeuverImage import com.stadiamaps.ferrostar.composeui.views.maneuver.ManeuverInstructionView import uniffi.ferrostar.ManeuverModifier @@ -66,13 +64,18 @@ fun InstructionsView( var isExpanded by remember { mutableStateOf(initExpanded) } val screenHeight = LocalConfiguration.current.screenHeightDp.dp - Box( + Column( modifier = Modifier.fillMaxWidth() .heightIn(max = screenHeight) .animateContentSize(animationSpec = spring(stiffness = Spring.StiffnessHigh)) .background(theme.backgroundColor, RoundedCornerShape(10.dp)) - .padding(16.dp)) { + .padding(16.dp) + .clickable { + // This makes the entire view a click target for expansion. + // If only the pill is a click target, you need to be a ninja to tap it. + isExpanded = true + }) { LazyColumn(verticalArrangement = Arrangement.spacedBy(8.dp)) { // Primary content item { @@ -105,22 +108,19 @@ fun InstructionsView( } } } + } - item { - Box( - modifier = - Modifier.height(36.dp).fillMaxWidth().clickable { isExpanded = !isExpanded }) { - Icon( - if (isExpanded) { - Icons.Default.KeyboardArrowUp - } else { - Icons.Default.KeyboardArrowDown - }, - modifier = Modifier.align(Alignment.Center), - contentDescription = "Show upcoming maneuvers") - } - } + if (isExpanded) { + Spacer(modifier = Modifier.weight(1.0f)) } + + PillDragHandle( + isExpanded, + // The modifier here lets us keep the container as slim as possible + modifier = Modifier.offset(y = 4.dp).align(Alignment.CenterHorizontally), + iconTintColor = theme.iconTintColor) { + isExpanded = !isExpanded + } } } diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/controls/PillDragHandle.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/controls/PillDragHandle.kt new file mode 100644 index 00000000..1eb7af00 --- /dev/null +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/views/controls/PillDragHandle.kt @@ -0,0 +1,68 @@ +package com.stadiamaps.ferrostar.composeui.views.controls + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.KeyboardArrowUp +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.semantics.onClick +import androidx.compose.ui.semantics.role +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +@Composable +fun PillDragHandle( + isExpanded: Boolean, + modifier: Modifier = Modifier.fillMaxWidth(), + iconTintColor: Color = MaterialTheme.colorScheme.onSurface, + toggle: () -> Unit = {} +) { + val handleHeight = if (isExpanded) 36.dp else 4.dp + Box(modifier = modifier.height(handleHeight).clickable(onClick = toggle)) { + if (isExpanded) { + Icon( + Icons.Rounded.KeyboardArrowUp, + modifier = Modifier.align(Alignment.Center), + contentDescription = "Show upcoming maneuvers", + tint = iconTintColor) + } else { + Box( + modifier = + Modifier.align(Alignment.Center) + .height(handleHeight) + .width(24.dp) + .background(iconTintColor, RoundedCornerShape(6.dp)) + .semantics { + role = Role.Button + onClick(label = "Hide upcoming maneuvers") { + toggle() + true + } + }) + } + } +} + +@Preview +@Composable +fun PreviewPillDragHandleCollapsed() { + PillDragHandle(isExpanded = false, iconTintColor = Color.White) +} + +@Preview +@Composable +fun PreviewPillDragHandleExpanded() { + PillDragHandle(isExpanded = true, iconTintColor = Color.White) +} From f4bfe97583969b7649c809f7feeb805cf916e064 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Fri, 1 Nov 2024 11:41:24 +0900 Subject: [PATCH 10/10] Regen snapshots --- ...nstructionViewTest_testInstructionView.png | Bin 10001 -> 9663 bytes ...onViewTest_testInstructionViewExpanded.png | Bin 9566 -> 9935 bytes ...uctionViewTests_testRTLInstructionView.png | Bin 9325 -> 8985 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionView.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionView.png index c2fee11435c32654c8c3a6af2feff97a4e67fe54..e563f03bc6f3f07c17c40e4a6866c44cf006e7da 100644 GIT binary patch delta 7097 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 literal 10001 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 diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionViewExpanded.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_InstructionViewTest_testInstructionViewExpanded.png index 915ecc90a0a8703d054262dd55d6af2e4c105a26..d6b9d9a51759f5486d7c75b237dc87e95a097195 100644 GIT binary patch literal 9935 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

vP&!JDYjIhaDO*>A_?l#lq${sypn~ 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 diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_RTLInstructionViewTests_testRTLInstructionView.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_RTLInstructionViewTests_testRTLInstructionView.png index 0a5a2d329a9cafa08a5b0e5006eaa0b1723b893d..282ad4a1c2c0b94185b8a7d2fa826ab92c0eab10 100644 GIT binary patch literal 8985 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 literal 9325 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