From 64bb1d621c632b4fa98acf9cafc0ea856ed1920f Mon Sep 17 00:00:00 2001 From: Jacob Fielding Date: Tue, 27 Aug 2024 21:22:08 -0700 Subject: [PATCH 1/8] Removed automatical full screen and added keep screen on method --- Package.swift | 2 +- android/build.gradle | 2 +- .../runtime/KeepScreenOnDisposableEffect.kt | 8 +-- .../ferrostar/DemoNavigationScene.kt | 3 +- .../AutoHideSystemUIDisposableEffect.kt | 52 ------------------- .../DynamicallyOrientingNavigationView.kt | 3 -- .../views/LandscapeNavigationView.kt | 3 -- .../views/PortraitNavigationView.kt | 3 -- common/Cargo.lock | 2 +- common/ferrostar/Cargo.toml | 2 +- 10 files changed, 6 insertions(+), 74 deletions(-) delete mode 100644 android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/runtime/AutoHideSystemUIDisposableEffect.kt diff --git a/Package.swift b/Package.swift index 09677426..9737506e 100644 --- a/Package.swift +++ b/Package.swift @@ -16,7 +16,7 @@ if useLocalFramework { path: "./common/target/ios/libferrostar-rs.xcframework" ) } else { - let releaseTag = "0.9.0" + let releaseTag = "0.9.1" let releaseChecksum = "0007409e20c8b7dce47e3b6bc6597bff5484089451af9cb2e35777fa9fed5fc1" binaryTarget = .binaryTarget( name: "FerrostarCoreRS", diff --git a/android/build.gradle b/android/build.gradle index 071768d9..41e1a2b0 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -12,5 +12,5 @@ plugins { allprojects { group = "com.stadiamaps.ferrostar" - version = "0.9.0" + version = "0.9.1" } diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/runtime/KeepScreenOnDisposableEffect.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/runtime/KeepScreenOnDisposableEffect.kt index 4b1f209c..7b7ec729 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/runtime/KeepScreenOnDisposableEffect.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/runtime/KeepScreenOnDisposableEffect.kt @@ -11,17 +11,11 @@ import androidx.core.view.WindowInsetsControllerCompat /** Get the Window for the current scene (Activity). */ @Composable -fun window(): Window? { +private fun window(): Window? { val context = LocalContext.current return (context as? Activity)?.window ?: return null } -/** Get the WindowInsetsController for the provided window. */ -@Composable -fun windowInsetsController(window: Window): WindowInsetsControllerCompat { - return WindowCompat.getInsetsController(window, window.decorView) -} - /** * A Composable that keeps the screen on while the hosting Composable is in the view hierarchy. * OnDispose, the flag is cleared and the screen will return to its normal behavior. diff --git a/android/demo-app/src/main/java/com/stadiamaps/ferrostar/DemoNavigationScene.kt b/android/demo-app/src/main/java/com/stadiamaps/ferrostar/DemoNavigationScene.kt index 9b83f93d..adb40869 100644 --- a/android/demo-app/src/main/java/com/stadiamaps/ferrostar/DemoNavigationScene.kt +++ b/android/demo-app/src/main/java/com/stadiamaps/ferrostar/DemoNavigationScene.kt @@ -40,8 +40,7 @@ fun DemoNavigationScene( locationProvider: SimulatedLocationProvider = AppModule.locationProvider, core: FerrostarCore = AppModule.ferrostarCore ) { - // Keeps the screen at consistent brightness on while this Composable is in the view hierarchy. - // This is typically a good idea for scenes hosting navigation trips or a NavigationView. + // Keeps the screen on at consistent brightness while this Composable is in the view hierarchy. KeepScreenOnDisposableEffect() var viewModel by remember { mutableStateOf(null) } diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/runtime/AutoHideSystemUIDisposableEffect.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/runtime/AutoHideSystemUIDisposableEffect.kt deleted file mode 100644 index c07c1a58..00000000 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/runtime/AutoHideSystemUIDisposableEffect.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.stadiamaps.ferrostar.maplibreui.runtime - -import android.graphics.Color -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.ui.graphics.toArgb -import androidx.core.view.WindowCompat -import androidx.core.view.WindowInsetsCompat -import com.stadiamaps.ferrostar.composeui.runtime.window -import com.stadiamaps.ferrostar.composeui.runtime.windowInsetsController - -/** - * A Composable effect that automatically hides the system UI (status bar and navigation bar) when - * the Composable is first composed and restores the system UI when the Composable is disposed. - */ -@Composable -fun AutoHideSystemUIDisposableEffect() { - val window = window() ?: return - val insetsController = windowInsetsController(window) - val colorScheme = MaterialTheme.colorScheme - - DisposableEffect(Unit) { - // Allow view content to draw behind the status bar. - WindowCompat.setDecorFitsSystemWindows(window, false) - - window.apply { - // Make the status bar transparent. - statusBarColor = Color.TRANSPARENT - } - - insetsController.apply { - // Hide the lower navigation bar (grab bar). - hide(WindowInsetsCompat.Type.navigationBars()) - } - - onDispose { - // Prevent view content to draw behind the status bar. - WindowCompat.setDecorFitsSystemWindows(window, true) - - window.apply { - // Return the status bar color to the primary app/theme color. - statusBarColor = colorScheme.primary.toArgb() - } - - insetsController.apply { - // Show the lower navigation bar (grab bar). - show(WindowInsetsCompat.Type.navigationBars()) - } - } - } -} diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt index cd74289b..e721ac7b 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt @@ -22,7 +22,6 @@ import com.stadiamaps.ferrostar.maplibreui.NavigationMapView import com.stadiamaps.ferrostar.maplibreui.config.VisualNavigationViewConfig import com.stadiamaps.ferrostar.maplibreui.config.mapControlsFor import com.stadiamaps.ferrostar.maplibreui.extensions.NavigationDefault -import com.stadiamaps.ferrostar.maplibreui.runtime.AutoHideSystemUIDisposableEffect import com.stadiamaps.ferrostar.maplibreui.runtime.navigationMapViewCamera import com.stadiamaps.ferrostar.maplibreui.views.overlays.LandscapeNavigationOverlayView import com.stadiamaps.ferrostar.maplibreui.views.overlays.PortraitNavigationOverlayView @@ -55,8 +54,6 @@ fun DynamicallyOrientingNavigationView( onTapExit: (() -> Unit)? = null, content: @Composable @MapLibreComposable() ((State) -> Unit)? = null, ) { - AutoHideSystemUIDisposableEffect() - val orientation = LocalConfiguration.current.orientation val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/LandscapeNavigationView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/LandscapeNavigationView.kt index 21296f34..1c658a3e 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/LandscapeNavigationView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/LandscapeNavigationView.kt @@ -21,7 +21,6 @@ import com.stadiamaps.ferrostar.maplibreui.NavigationMapView import com.stadiamaps.ferrostar.maplibreui.config.VisualNavigationViewConfig import com.stadiamaps.ferrostar.maplibreui.config.mapControlsFor import com.stadiamaps.ferrostar.maplibreui.extensions.NavigationDefault -import com.stadiamaps.ferrostar.maplibreui.runtime.AutoHideSystemUIDisposableEffect import com.stadiamaps.ferrostar.maplibreui.runtime.navigationMapViewCamera import com.stadiamaps.ferrostar.maplibreui.views.overlays.LandscapeNavigationOverlayView import kotlinx.coroutines.flow.MutableStateFlow @@ -49,8 +48,6 @@ fun LandscapeNavigationView( onTapExit: (() -> Unit)? = null, content: @Composable @MapLibreComposable() ((State) -> Unit)? = null ) { - AutoHideSystemUIDisposableEffect() - Box(modifier) { NavigationMapView( styleUrl, diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt index 1967b8a8..c146b192 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt @@ -22,7 +22,6 @@ import com.stadiamaps.ferrostar.maplibreui.NavigationMapView import com.stadiamaps.ferrostar.maplibreui.config.VisualNavigationViewConfig import com.stadiamaps.ferrostar.maplibreui.config.mapControlsFor import com.stadiamaps.ferrostar.maplibreui.extensions.NavigationDefault -import com.stadiamaps.ferrostar.maplibreui.runtime.AutoHideSystemUIDisposableEffect import com.stadiamaps.ferrostar.maplibreui.runtime.navigationMapViewCamera import com.stadiamaps.ferrostar.maplibreui.views.overlays.PortraitNavigationOverlayView import kotlinx.coroutines.flow.MutableStateFlow @@ -50,8 +49,6 @@ fun PortraitNavigationView( onTapExit: (() -> Unit)? = null, content: @Composable @MapLibreComposable() ((State) -> Unit)? = null ) { - AutoHideSystemUIDisposableEffect() - Box(modifier) { NavigationMapView( styleUrl, diff --git a/common/Cargo.lock b/common/Cargo.lock index 9ec69ff3..8baed72b 100644 --- a/common/Cargo.lock +++ b/common/Cargo.lock @@ -328,7 +328,7 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "ferrostar" -version = "0.9.0" +version = "0.9.1" dependencies = [ "assert-json-diff", "geo", diff --git a/common/ferrostar/Cargo.toml b/common/ferrostar/Cargo.toml index 462c66a9..abb95f68 100644 --- a/common/ferrostar/Cargo.toml +++ b/common/ferrostar/Cargo.toml @@ -2,7 +2,7 @@ lints.workspace = true [package] name = "ferrostar" -version = "0.9.0" +version = "0.9.1" readme = "README.md" description = "The core of modern turn-by-turn navigation." keywords = ["navigation", "routing", "valhalla", "osrm"] From 965db28b9a23b8a75c2a43df2bcc2d49faaee162 Mon Sep 17 00:00:00 2001 From: Jacob Fielding Date: Tue, 27 Aug 2024 21:36:20 -0700 Subject: [PATCH 2/8] Removed automatical full screen and added keep screen on method --- guide/src/android-getting-started.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/guide/src/android-getting-started.md b/guide/src/android-getting-started.md index 2b8e733e..91a9d81b 100644 --- a/guide/src/android-getting-started.md +++ b/guide/src/android-getting-started.md @@ -312,6 +312,10 @@ Here’s an example: } ``` +### Tools for Improving NavigationView + +- `KeepScreenOnDisposableEffect` is a simple disposable effect that automatically keeps the screen on and at consistent brightness while a user is on the scene using the effect. On dispose, the screen will return to default and auto lock and dim. See the demo app for an example of this being used alongside the `DynamicallyOrientingNavigationView`. + ## Demo app We've put together a minimal [demo app](https://github.com/stadiamaps/ferrostar/tree/main/android/demo-app) with an example integration. From 22f085227d50abfe82c00b7648dfec8b849b0f6d Mon Sep 17 00:00:00 2001 From: Jacob Fielding Date: Tue, 27 Aug 2024 21:37:31 -0700 Subject: [PATCH 3/8] Removed automatical full screen and added keep screen on method --- guide/src/android-getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guide/src/android-getting-started.md b/guide/src/android-getting-started.md index 91a9d81b..f00af69e 100644 --- a/guide/src/android-getting-started.md +++ b/guide/src/android-getting-started.md @@ -312,7 +312,7 @@ Here’s an example: } ``` -### Tools for Improving NavigationView +### Tools for Improving a NavigationView - `KeepScreenOnDisposableEffect` is a simple disposable effect that automatically keeps the screen on and at consistent brightness while a user is on the scene using the effect. On dispose, the screen will return to default and auto lock and dim. See the demo app for an example of this being used alongside the `DynamicallyOrientingNavigationView`. From cef094e4ba37372742a30d6a7f3a0f799405867c Mon Sep 17 00:00:00 2001 From: Jacob Fielding Date: Tue, 27 Aug 2024 21:43:24 -0700 Subject: [PATCH 4/8] Removed automatical full screen and added keep screen on method --- .../ferrostar/composeui/runtime/KeepScreenOnDisposableEffect.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/runtime/KeepScreenOnDisposableEffect.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/runtime/KeepScreenOnDisposableEffect.kt index b2bdc744..f36a4bb8 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/runtime/KeepScreenOnDisposableEffect.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/runtime/KeepScreenOnDisposableEffect.kt @@ -6,8 +6,6 @@ import android.view.WindowManager import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.ui.platform.LocalContext -import androidx.core.view.WindowCompat -import androidx.core.view.WindowInsetsControllerCompat /** Get the Window for the current scene (Activity). */ @Composable From 1250a0a53ea29f57079169a08c38d4812f7df342 Mon Sep 17 00:00:00 2001 From: Jacob Fielding Date: Tue, 27 Aug 2024 21:52:47 -0700 Subject: [PATCH 5/8] Removed automatical full screen and added keep screen on method --- .../views/DynamicallyOrientingNavigationView.kt | 10 ++-------- .../maplibreui/views/PortraitNavigationView.kt | 3 +-- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt index e721ac7b..958de020 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt @@ -71,9 +71,7 @@ fun DynamicallyOrientingNavigationView( when (orientation) { Configuration.ORIENTATION_LANDSCAPE -> { LandscapeNavigationOverlayView( - modifier = - Modifier.fillMaxSize() - .padding(top = 32.dp, start = 16.dp, end = 16.dp, bottom = 16.dp), + modifier = Modifier.fillMaxSize().padding(16.dp), camera = camera, viewModel = viewModel, config = config, @@ -82,11 +80,7 @@ fun DynamicallyOrientingNavigationView( else -> { PortraitNavigationOverlayView( modifier = - Modifier.fillMaxSize() - .statusBarsPadding() - .navigationBarsPadding() - .padding(horizontal = 16.dp) - .padding(bottom = 24.dp), + Modifier.fillMaxSize().statusBarsPadding().navigationBarsPadding().padding(16.dp), camera = camera, viewModel = viewModel, config = config, diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt index c146b192..b6abc69e 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt @@ -61,8 +61,7 @@ fun PortraitNavigationView( content) PortraitNavigationOverlayView( - modifier = - Modifier.fillMaxSize().padding(start = 16.dp, end = 16.dp, top = 16.dp, bottom = 16.dp), + modifier = Modifier.fillMaxSize().padding(16.dp), config = config, camera = camera, viewModel = viewModel, From fa0f5242d996907bc40e42b99d78879d81ab0cc6 Mon Sep 17 00:00:00 2001 From: Jacob Fielding Date: Tue, 27 Aug 2024 22:00:32 -0700 Subject: [PATCH 6/8] Removed automatical full screen and added keep screen on method --- .../DynamicallyOrientingNavigationView.kt | 12 ++++++---- .../views/LandscapeNavigationView.kt | 23 ++++++++++++++----- .../views/PortraitNavigationView.kt | 23 ++++++++++++++----- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt index 958de020..e57d6bb8 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/DynamicallyOrientingNavigationView.kt @@ -3,9 +3,7 @@ package com.stadiamaps.ferrostar.maplibreui.views import android.content.res.Configuration import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.State @@ -39,6 +37,9 @@ import com.stadiamaps.ferrostar.maplibreui.views.overlays.PortraitNavigationOver * @param locationRequestProperties The location request properties to use for the map's location * engine. * @param config The configuration for the navigation view. + * @param landscapeOverlayModifier The modifier to apply to the overlay view. + * @param portraitOverlayModifier The modifier to apply to the overlay view. + * @param onTapExit The callback to invoke when the exit button is tapped. * @param content Any additional composable map symbol content to render. */ @Composable @@ -51,6 +52,8 @@ fun DynamicallyOrientingNavigationView( locationRequestProperties: LocationRequestProperties = LocationRequestProperties.NavigationDefault(), config: VisualNavigationViewConfig = VisualNavigationViewConfig.Default(), + landscapeOverlayModifier: Modifier = Modifier.fillMaxSize().padding(16.dp), + portraitOverlayModifier: Modifier = Modifier.fillMaxSize().padding(16.dp), onTapExit: (() -> Unit)? = null, content: @Composable @MapLibreComposable() ((State) -> Unit)? = null, ) { @@ -71,7 +74,7 @@ fun DynamicallyOrientingNavigationView( when (orientation) { Configuration.ORIENTATION_LANDSCAPE -> { LandscapeNavigationOverlayView( - modifier = Modifier.fillMaxSize().padding(16.dp), + modifier = landscapeOverlayModifier, camera = camera, viewModel = viewModel, config = config, @@ -79,8 +82,7 @@ fun DynamicallyOrientingNavigationView( } else -> { PortraitNavigationOverlayView( - modifier = - Modifier.fillMaxSize().statusBarsPadding().navigationBarsPadding().padding(16.dp), + modifier = portraitOverlayModifier, camera = camera, viewModel = viewModel, config = config, diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/LandscapeNavigationView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/LandscapeNavigationView.kt index 1c658a3e..9c802315 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/LandscapeNavigationView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/LandscapeNavigationView.kt @@ -30,10 +30,18 @@ import kotlinx.coroutines.flow.asStateFlow * A portrait orientation of the navigation view with instructions, default controls and the * navigation map view. * - * @param modifier - * @param styleUrl - * @param viewModel - * @param locationRequestProperties + * @param modifier The modifier to apply to the view. + * @param styleUrl The MapLibre style URL to use for the map. + * @param camera The bi-directional camera state to use for the map. + * @param navigationCamera The default camera state to use for navigation. This is applied on launch + * and when centering. + * @param viewModel The navigation view model provided by Ferrostar Core. + * @param locationRequestProperties The location request properties to use for the map's location + * engine. + * @param config The configuration for the navigation view. + * @param overlayModifier The modifier to apply to the overlay view. + * @param onTapExit The callback to invoke when the exit button is tapped. + * @param content Any additional composable map symbol content to render. */ @Composable fun LandscapeNavigationView( @@ -45,6 +53,7 @@ fun LandscapeNavigationView( locationRequestProperties: LocationRequestProperties = LocationRequestProperties.NavigationDefault(), config: VisualNavigationViewConfig = VisualNavigationViewConfig.Default(), + overlayModifier: Modifier = Modifier.fillMaxSize().padding(16.dp), onTapExit: (() -> Unit)? = null, content: @Composable @MapLibreComposable() ((State) -> Unit)? = null ) { @@ -60,7 +69,7 @@ fun LandscapeNavigationView( content) LandscapeNavigationOverlayView( - modifier = Modifier.fillMaxSize().padding(16.dp), + modifier = overlayModifier, config = config, camera = camera, viewModel = viewModel, @@ -78,5 +87,7 @@ private fun LandscapeNavigationViewPreview() { MutableStateFlow(NavigationUiState.pedestrianExample()).asStateFlow()) LandscapeNavigationView( - Modifier.fillMaxSize(), "https://demotiles.maplibre.org/style.json", viewModel = viewModel) + Modifier.fillMaxSize(), + styleUrl = "https://demotiles.maplibre.org/style.json", + viewModel = viewModel) } diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt index b6abc69e..b50d6f76 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/views/PortraitNavigationView.kt @@ -31,10 +31,18 @@ import kotlinx.coroutines.flow.asStateFlow * A portrait orientation of the navigation view with instructions, default controls and the * navigation map view. * - * @param modifier - * @param styleUrl - * @param viewModel - * @param locationRequestProperties + * @param modifier The modifier to apply to the view. + * @param styleUrl The MapLibre style URL to use for the map. + * @param camera The bi-directional camera state to use for the map. + * @param navigationCamera The default camera state to use for navigation. This is applied on launch + * and when centering. + * @param viewModel The navigation view model provided by Ferrostar Core. + * @param locationRequestProperties The location request properties to use for the map's location + * engine. + * @param config The configuration for the navigation view. + * @param overlayModifier The modifier to apply to the overlay view. + * @param onTapExit The callback to invoke when the exit button is tapped. + * @param content Any additional composable map symbol content to render. */ @Composable fun PortraitNavigationView( @@ -46,6 +54,7 @@ fun PortraitNavigationView( locationRequestProperties: LocationRequestProperties = LocationRequestProperties.NavigationDefault(), config: VisualNavigationViewConfig = VisualNavigationViewConfig.Default(), + overlayModifier: Modifier = Modifier.fillMaxSize().padding(16.dp), onTapExit: (() -> Unit)? = null, content: @Composable @MapLibreComposable() ((State) -> Unit)? = null ) { @@ -61,7 +70,7 @@ fun PortraitNavigationView( content) PortraitNavigationOverlayView( - modifier = Modifier.fillMaxSize().padding(16.dp), + modifier = overlayModifier, config = config, camera = camera, viewModel = viewModel, @@ -77,5 +86,7 @@ private fun PortraitNavigationViewPreview() { MutableStateFlow(NavigationUiState.pedestrianExample()).asStateFlow()) PortraitNavigationView( - Modifier.fillMaxSize(), "https://demotiles.maplibre.org/style.json", viewModel = viewModel) + Modifier.fillMaxSize(), + styleUrl = "https://demotiles.maplibre.org/style.json", + viewModel = viewModel) } From 5e30f3c91104ab8b50cfe43460b859b636c44bb6 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Thu, 29 Aug 2024 02:07:08 +0900 Subject: [PATCH 7/8] Tweaks to work better on small screens --- .../stadiamaps/ferrostar/composeui/theme/ArrivalViewTheme.kt | 2 +- .../stadiamaps/ferrostar/maplibreui/runtime/NavigationCamera.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/theme/ArrivalViewTheme.kt b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/theme/ArrivalViewTheme.kt index 3d280d99..fb8b31f0 100644 --- a/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/theme/ArrivalViewTheme.kt +++ b/android/composeui/src/main/java/com/stadiamaps/ferrostar/composeui/theme/ArrivalViewTheme.kt @@ -36,7 +36,7 @@ object DefaultArrivalViewTheme : ArrivalViewTheme { override val measurementTextStyle: TextStyle @Composable get() = - MaterialTheme.typography.titleLarge.copy( + MaterialTheme.typography.titleMedium.copy( color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold) override val secondaryTextStyle: TextStyle diff --git a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/runtime/NavigationCamera.kt b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/runtime/NavigationCamera.kt index 3d325ec9..f7063d52 100644 --- a/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/runtime/NavigationCamera.kt +++ b/android/maplibreui/src/main/java/com/stadiamaps/ferrostar/maplibreui/runtime/NavigationCamera.kt @@ -32,7 +32,7 @@ fun navigationMapViewCamera( val screenOrientation = LocalConfiguration.current.orientation val start = if (screenOrientation == Configuration.ORIENTATION_LANDSCAPE) 0.5f else 0.0f - val cameraPadding = cameraPaddingFractionOfScreen(start = start, top = 0.7f) + val cameraPadding = cameraPaddingFractionOfScreen(start = start, top = 0.6f) return MapViewCamera.TrackingUserLocationWithBearing( zoom = activity.zoom, pitch = activity.pitch, padding = cameraPadding) From 6fe066485e243333dd939ada9f615a0ce8e03109 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Thu, 29 Aug 2024 02:19:52 +0900 Subject: [PATCH 8/8] Record snapshots --- ....views_ArrivalViewTest_testArrivalView.png | Bin 12308 -> 11086 bytes ..._ArrivalViewTest_testArrivalView24Hour.png | Bin 15480 -> 14438 bytes ...rrivalViewTest_testArrivalViewWithExit.png | Bin 16725 -> 14822 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_ArrivalViewTest_testArrivalView.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_ArrivalViewTest_testArrivalView.png index 7ad926e0822638c56655d1d117276b4398f59e9a..344bd92c5030d445f8b4ae7c1422727f7d308560 100644 GIT binary patch delta 8607 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 literal 12308 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 diff --git a/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_ArrivalViewTest_testArrivalView24Hour.png b/android/composeui/src/test/snapshots/images/com.stadiamaps.ferrostar.views_ArrivalViewTest_testArrivalView24Hour.png index 7048652586590a9c4504ae06f97088ac9a88ec82..b439a72f8bfa853c321458e1f9a415fe67233848 100644 GIT binary patch literal 14438 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 Y>LJ|}d{dk7|AQje%&bkzF1tVYKSeJ1%K!iX literal 15480 zcmeIZcTkgC7cUGpJaPmTY0^AaP^3tx0b&DGx=62r^b(L>;{lZpDm^qMKqvx2=q(~8 zQj!otODGXS3oSxup(Ho&y)$?2_n!03y!W0vckVay&8$B%&&>1NYp>sLuf3kVS7HtH zw9cNnbcT(M?d+4skDjryv7_18jxU`)#d^}(QdG^xrV4uU=>GE{;@VVnzST(hFXj;_ zLf;-$&2zI_WUMQeXRK=~$$fTOX8HBC;g+Sg-*l+me)#A2&f?CGZ(Y%mF5qOpby;Rn zk<>I(nb-qg*OU{R4Y1JsTW2^cll zK?)eLjl0&KH^i-~r_P@K%87aoh`yZKa7<>ojq?~$Zr@(wJ=+7K*dXpAHqTI`k1KCa zqt1)nu4`C0h2v)7Rk6Xm4`&wcIhc!~dRfRLvLeGl?JEV!-^|Wj`z9qkWXO8$e6l0L zpq}SP_Q9PKcEi15@QE|7D0Y$dpq=0SWjN&16&rYZ+lIbpvkCb4sCx0@vZKZGfVu$7 zM5*kan$8b}ir2sC3E;W33PienU9@u5Iu)8%Up_a#*n30zTci-Xz#8$aEBUp8U^o}P z1mS!wk`N#XjGN1A^J23b78lC~#=10Y2*2~*NeGf$(M+qj!t#|KJa$~hZ7vC0VNYDm zaq+nq4a!sN6dKt7;0QBxv=*N@GbifG@IP8$ms#CJ&8#*~>OHnR1>na9V1l^}l|tXC zWF~56Sa;VbydPVfZLB0s`lp0gbAJ1}0z9>t+)pdJ(yV3uh(i<`X}Eaq4Z_(V${g72 zp};$FC3PFt3)Po17vBBR?PCvZ39yG6x$9=KeS2RHI)(C42CAFd6UA_SKLBF5!_&3q z_p)^e3S$0Tk~wOff&*`Lqs%Y%tCcwj>TlJBZfR{2mz6MF<(+Q;p}cHYZzOe=hbH&a zGt-l&e1wz9!RnukVS}eOJOYQ6pU}wsqW2WpGC$~tn{qBP=DwrLtsbZ!vOJH%)3Ozdb*qq>^&a8!YeBTc)aek8 z*HYa+fPW1f&KOA~`0V^Sv=K1!(9{t{B2B$|9Plp(<^^)OUDXSk43}E{HDFk%Z+`fO zhx@Sd57x9Xc6>=v@%DtkyUL)lf#_GG^5L)_L9&&i`FvG*>6MMl?|w`~VA0w{Lvcf3 z>%8t+naEisVH7!3aXPC~QY4?OB!XI*j@c1K(by|Q!}a=93@jN z_d9WpQt9qOT{T;8u(#AUqHP*vtY2Z3DW4aq`qb8Ke(~7y@R@ew$`gJ#VJBq-HBvZ6&LKZV!2&Lf#=2IV-4rVAPO3!78r<|5VCD`5Yxo zB;QU{z4;P#Ael$_fe6F+KG-fn>_D+)Zy!Wm#8eiT3p#Q=lMzagT1?lNpyh!GbAe9e{c=P9|s zKUO9um+pdiEp6C^@)h{1h`_0>@j41x@r&Qdao(;CMvvB5VR!lNx`=-|+|#|-qhILy zbI%Dyml+Rr-3dG;c)%;tye(cIz4Xf8>lQ0q^Aan`dR3lNtGXw?a>kLFy(`IO>ZGQ- zfmu(3hnp$`-mbBICoIs>c}Z|bjtc{ueydO@WxO3XKk2@sQ!Zw){PFy2>!Xipih(c3 zh+6!8FiaVRC{L#l*EydE1*9+nnF@E|o+i-BxaP&j% z+!&ijitnUzw(+%UYgRVT{6!H?@O(^^vO52OEG1KjODEfwG?&PJ?_pIdP}BoP55tZ=h-yr1v!e-Pr)9+S3Mz~mc*Uq`r7T0 ziY(6}=21`j8l_?lI0OW~a|Ys3uS$W8f~$UTaG;3 zF46iauCrigxC9SharlC0UJ`I~%a3xhf2b``HPa?|Chd{=fnS{CjHgsh4 z&A+tdd@mm27L`S6{B&Q2+e{AFc1Yx$&SZoAu$>MAP6dv=^V@&22sby{(RYBzs~s)C zja2yV=c@R;P}%&MGUQ(l)~iC^1;BsW`xtB$x+=K`a$On(cp3vHtPYI;eFL7!iVZdL z(_O1cQ;2;9sTjxa)yu9saj~q$y-quIQsBCMod3w?%22HuUm$OIkP!^B}n9JI$xPs&a8o2#xz{YYBHJesgk^CLD?*q%#TI z^8GzUBiwhSk3M;kPs$9VNNumSp6 z%`C!No4tiXJ*t2G`CSDe1!)Uqbk7RgRS#6X2xYl^)M-&98kk;}q%t?>(J^RuXobsI z(xC#@#@i2G>HP?K9xAs|)>1I1m95yINL+Od?DiPBaY{s|U(Z%Sp#pMv3T*cJ!=&)f zZnSIf3_K~$E*%Z6v2ET>>L94gtMIf@!l3oTbzCMxJGD8`w$h+f^PudiNLK=B%Fl(k zv5-Ao%Xal8IR#r3EXO4(UpfRh+L~R0LUIe`{j4joU?P?`Q9;{67q{c*XYDj4 zpLJC32wOmy7+0m|)`dL?IqcSIb!FH5k&>*c_VTs^NB=r9C*4FE>Gch?0+Uux^@qF3 zua#|z7@jG1olt5p2eM}2%xvOWggfBEp!8%smHbaWp2+L zcGun)^vSD_c;Z!S-X7p^&h6P;I*U1eJ#{I*IVuw>c=x$XkiX9$CUXX%IG6C3-Z^bl7+% zDufcJ20pDf4@|}ph`w2J=}Ee~;MR$3e!CN2+7@~|nth!UoRl_y@*s47wj9x6AbdvB z9rXtD25HZY$WNLX`CGMZY$X)`tRo|Y;qJpRDIKr}X#veCGhj2h_l)SUI+?4G>3F-+ z48QIBwQV^6;iyzef74lR_>&0NcEN!57*h z8rtOw443J&Aun>f^tau9DiSBEk>RvZHDQ%4t#cJKu`cqVV&mOYk1f$aTgpOH3>Vr;p}j$yj$449f}tZ%-micWD8sBR;N(4R z@~Exv9kycvPGHZ84_sDZ11&c)=XIy^Bf=cUI3ss#)qpF{BJLY>y3|7pD&iLIRKU#Z zWDkh3{zeG7{bHx8=3RTR9n0kj+}c1q$tYI%VEu9`1gQ3g1o{0RiwTl6DY?>gCpt!rR8f%6A@ zdoXO+*h#sBqwR#P<^HOG?bgZN0c-P&8a3A{(Tr`k0MaeuKF%qa*ORQRU*l45abkEi z%n1xYIR>JWg2`F^H&#Ce$`NYl+kTzRLPJf?`597ed)yR8=sLDC#ceT>@w1J)FkZS* zDc5(QiLxN%g<1De97G`~Z!_@FH1{Ebb6!ei>uTTD(!=Chf7+N*pf_`Bw@6#6^;&Kq zhKf&I@fwJzHKp_sZLI z_)|xAJLCCcx~7LSeSSTq&c(O2nczpw`0R}yciOOne(|Blu2cV>ZeIF$4v45?p5wV-UoQkz(Q*H zE{8v9w~Dz*rEnMhYM<)vrRqw1Jmp-t^OVY*Kvo?DLVmT06}K>gOgoQ$VyykmM7n;?0c0Bf~cFt_xe{xkp1Dp>nzcilxiWAuq@@W87h1 z2GWF1j78-GT&fSr`=DYfWH*{p#UO>QEuhbN%xTs za>0B)V~{l(<4*7e{rUhMqP?R13*$)Zm$ zljmRWh-!zurlYGOvZrZd)ba!H5w@W{JN&%}g-H3Cud6s` zK)JG%!vpqLko(#1kUwQ#H7#$JFSqaRyI1LpG2jrdy>MzcmQ;LQOKc36J-2OYqmA4n zRGr}-bQEKb!)uNQukG3(4x!(FWpra3cT-svrl(Tg#Od!*yK0%~!gbfeSA>`;YGU)K zAy+_#ZJlZx6|63^ic1(f5@XJE>K^~qfjmHYXnw*Stn4o4*oL6h&3D6Le?T`#q;pj` z9BQ;pbLtW8t+TCo_`QS2rZ`DZx&tswQugY_7oIz$cvAe{J>`$s?Ve`<=1w@oG*}0o z8x}G}Qr;g-;ZS=XE#~(?W%r9V&?2#g6nPb&mSLUJbNI>|ThZeWmsUS`76{vF!BlvZ zXXK7q8HX*V>{O0~E&G&py9BQM@R zB#9lCY@T8cAR!9bq67N55t}?r3;I4kh-vFO5@$@Pov1Cv--a-Di;gdQHcXE0kYh`c zn`HX815l>ME(SDh9+G1Umk!@R-e#@`B56lul-|ry`YI&iGZVkvfXp7Pw93|H?>W5) zo<3l#V#z7%aYd%wblUzLO#kK8U#Fkq?te*f>EVcl9Ber+GZH^1E#UQ4bHndRFtcsx z)GEh~q%m@W5w;|bf(+jWodG4}MDz)!Ew+dK%4=O5_S+F$dlH z4H5$Wb?GdeSKG9(H&o{dN`%(p0k8&U*DQ_)M_np?xC4^%oTyi8JKC9`MEXjDS3>#F zYLcEI^t3GuaN~a1)TbmRGO3wdzrIu0w)43hp*|nT0k!@L96Veh5}rxNJ7s5I8ul2p ziFG2;2V70p@9G(J2Wd<)z$ckS~Zq(Tb!anl{7Fw-EJ*=@Ju%E^_L18O+0n zMK~%x8Dzap)yr)SoL>PkkojD6-vjsr<9SwG-1&z(ri<`3Vxp5O7~zbOP<_wk4l+OY&zB}mS$Y~%&)lqSL!j>KNL?p*TcLGN8Q5dDMk z>wr17!{@eP)<+uab%^Dzp(6tieQrJv58swAFV}3)kORQFuL_BZZGD)^BQF$1GY^Aq zF>T+_8jvokvsOw6gU@6Xogs?$p<6GaK$~rQt+!i3A_}zeHQo2x7Ujze%)bhhjNIT* zo02-#hjFeP@O1m?7e;KP^jcqmN~`VKk34^tvs-cml=ZiaUG7ptu)WP^>@B8&@YxT zT@)@M>KDhpx_B6Eg;WWxapy&wCDg6_YTuC@Q6~m)ji}60Amho14f9e^84G;fkFlV z2U#onfy0UMbzkdUGaEN*b=Pd;CMlL%yv{JeWf8tzwb#j8!Hp3Tt!zCt@4Bmm_MZGm zauoZ?Cp~%7I-u9lb*0?$me^A&13yK{grye}OgHc@N2kja8kS4cOK917QVP53wF)5X00CeMM zLSZ0aX(G_ zfL{wN-rY^S>u_UsLrWBV@bE!|pAh@uk7$rZp!zQ%Tc!!+AxWFyw#Ge@W13urI#$1T zZj|B<7<9?oYe~69LXy-ExR;KGFb=V_H$InOhd^Kaw&IAS7tzFj|2p%M`~_?<9eJ<@ zj<|W`)w@A(O+WNK%o{?|A)rG;J`5~bsd*jn=ui>4n=AG_JSdiQbm(4t*f(#?oa&dd zP=8r&0@pEnFB(1@@kAJ`=7o1e`8y&t^A z+}p)EAtyKDH=D2#)ez#&Ew zdg~lnkmH-uIM>#qd6T{4JShS9OS_5i=DL=MCEdcx{+v;R(M|n+d%i^wtCnKw!t-B+ zOu1YWLo0oK7xNvZO^x1c`d$N0w_)xz%__(4YOh5Wsohu~*?0i^Q&UdUobJ+71R|q! ze%KuB(H#KO>ylc)+}Rt5{E#8nw5sldPr1whb?E%q<-CKSBzMzV zRP;ztes?~~eX9e>gqKxO8?fx2TC`dojL=ZOT1_c2TC_a7Y%TZW+S!GjKcFAc+4ZQ| zdTGVJiNpQ=B6Zzzf}qO-a`!zE4O;O!EcjcQvg=CySYWKn0`_=Bp`Z7i{kP4(cKMAN zn49W5r5 zQE-o|vlFMz?BTk(bB;AHrjuLQ{vJrXYrVXQ8|3SRE>}@n;NG*{JB08`#l#(7#6tG_ z%e)t0=IYXWsG-nnPWNY9Z6ngJ99-Vb!a5nn_)M+5J5YQs9Vejy03`y2aS2Ap({N@T z^J3>S&E$oRFj3oPUTqtrTOYW$lX}Rzb^~4xcxsZGx^A`#?CzPwl5Y9>wZq@(F6p4H z$GUyJM~32SFXYJEHV{T z_a2j;uUQsxW5>?+r+SQ>AvLj8fJQO zj(K=Ombo_zoe7$DNHqyP^0neuF-yL#R~NQGVj#Rb%m%J>FVh0FrdZnEM%Vp`ocpd_ zt}f7(V7yl3LT5&JG!E(kxPd?SUJ&f;Hs742RBPqy(3$b)7ral%O+@dE$>A6H6$2yA z{t^PeY$zX)0t)KlRPCqQDbm1cJ~SULK_pQ9eRdh0_0f@c=O(gl>xti!4$a>*;uG9r zovOyW#kn+n?3CxeJ-ofKat*3c?(D3SZB7r7+@$O*?uAo6?YFlt0yXc}jR|S0&R!@w zbh*m+Fbye6MF_lD(CQXCFd12Z2~vCcUu7t#@fXh7q69vSVZ7(C$a&|x?^K{0qAlA! zmP3DVh(IH@`$;c3L;9+$bznUUm*{Ve_;UhhKB=Y$sgv)fAJ&a-s7pXfVnNBcS(;Ej zRS7DqZ2){5(Vy5bSFr!#*~M~GW6(#-oK#4ng$C_YxAr?v=e&p9d)CGPuvwrx-ncGG zg6|K{keM_L=u3LD-^)^cm=x5f6RS8q?iErm1I_mC()aAybEXAO8nhIJUBB*97ebzcTOtbL0%Zz{qKfYP;1BQ|0A{@Zd^5fonIMLu#( zD)GF|BRM2ZKPS4fWeV4sY^?6r%?@Bp1r!M0E~8bE9f}}uw{1^}b~??i?&`?rygbhv zHn3$JV~-t_9#l#09JFPQgx*H-_(%-qHjqA4 zUjM=k{Qxj8sRdD^JT+)B$Mpr$UDkliA6uK+RnIl#irvV3i=+#@C-WrkKmA(>p+=GsF&~Pk&d(Yd)g`rPJ?L-=rWw$!opuu0q{SDl0B^cXMPGNFbHoquy>ERiTvMPN2KbjI(xnUMO|P z<(<-4W`2QZfS?{LbxV2fXSZ|1eWsNdfolvjo$^bmLCpddJoy369sHGVK&23Z!|o^! z#iDX^MIo!D?Z$Q0p(BnD83H@PK*hGvZe{e+vn|(Q4PV?yDBRQr5}Xm^bQqb2Ww!3B zQOk)N@S1|PIegg_W54QvFU5%~omakBpEWytH3!+4%|PZRk}}dBr03h*+Rqz*QgpX_ zFNGn|6DE_SdRVfb=3JzoPPd)Y3y`=}$s#1)WTJ{UcI|jHOVs-jwbTm*naVLJ($e>% zAju6I*Lsvo7+7*sf|=Xs@xnC5Y4uGiNyFVe<%2D2o|XD{SkI*zmmca^UA1HYeLS~Z z5}hVXg2f%`y!Ezk5gfQcMPA09tH=BzByt`q8v|Jf?AoY-3K3+WLfekLMbP#zjvw9B zzpEqd5fQ+eB_M123zX%s7BLtT{>x7*qWGFZ3%K6F z0GRB^4CfZl2`9v~^Y^Dn zNxJ8n{eEpO=jLu^qqF1r2Uh6@exld8`06+kf>h}zuhnrd#_!yK+_MVTWyVd$`&u@K z&ytzX0!!~(t>%Nw61!+qm@SVl43D`1e7UrcdCM|!73*LTUQ!^Kec@1RU7o(q3o=-{(EDwNs8~kl`$x1l4wz*x>7{2G_Ef^>SSQnLp@e?XfoaqAy!DBoF{$(D%?J6L z9k==LIe|M=gzrlqnK;g(e%tucCgSnuj&3`nAgAn;T^Lz-C|;`K%R*vR z?o>~3F79j7{fZfz(-+4yBd!Kozx7itd{O)wH ze*IGgDZ{WQbbI59!fWNvN;&$y%+=lFb z9&vDAtX8d=nJLRxR*g3F{To*oZ-!rBXUu`Nb)5RP4P4ply`rK^s8HL!kO69{x+>yl zob?Up21RkbGXuG|?@(kmA7~m2iVwdTU+jc_stFZ)7e)!rC`?88o^4 z@(FH5$fu+aBRACObQIZ=G{fdbDDs*CY-2?$xLb@;^x z{(+eLYF1^;WK6f7W;RPwTK)wq%fkmHchM|bqMqeoJ)DozKg2m5N>*E9>`u9j4jM#$0G#?79uVBQQ{ImgPLXORe__RD-q0c^stI&mkGDxyqKb@JD-boo!U@_GBI|X*!C+5aZS{w6U`BSrO8{bbvf7z@-*0I^;-DyM$9f1CBU|j2tiGCh zKVK?OHR68AcG0?etyV^XzBxd<4Vu-`-}_p@gSt0rR~`yJI~vNf{0yM|kOZp&+GP-a zUKY#QOBD|M9s_*RMMpPElTwlukYsJ)LVLL=C6XZU&sw>-cwcYXxY#x=p{c|xSI%(^ zDt(j8Z25X|_6TugI${2ehcjokCT09UZvE~B{xsA{!qxCj^2(@{X;bGzI0tRh^V4kP z-X^kIO;JsRqj21+;IOVB*W13^o4!&#)HDK-j!Z}1*0^0QKeGc3y_OFDRn=_os^Y?o zLX2H4-XKqxYh+leX0-G_(J3Eeglt?kd?|O8o(1p z1;5qa#2BS(>G*I>``!&=om)FWReW$Q3eXksp^+(8+oO@kx{r_j4%PBR?W+e6fUn}` zyfKDu$qLNe--fo|ER7L-*D101(@Gd33l7rKXu!=ydZcbb=X^W zFtN#HRPq!QZznrg6nHc(Bv8_F;-ugfc)L7AdFWjis-*S1|I;7^6 zl~>@WDg61db%*=szMYQI1xl$?%l>E~|1cmzIt;C+j!7cfmcF|4kF6d{Z5b|fN+nFw z2YOw7fH=ukmK(Q-hmoI34yW{)I3WSMHwvl(NkY%Li~rTQ02d8+x(C|L)t@q1#)8ZF z*y^n0CpPy7zPr>n+8|uC+a}lVX^eS@HV1sb-S~Do*r8vD@;*FyN+MF(XIGgr!yzg% z?x-l+C+QFOj@oIqetkn;(2*}6`z6Tq zNjSg2YLigXLmn0~ zCl};f2E!HDHCHNis+C+;tDF+z%zCaA9p@LrZzqB3OeP`b+i?Uw*6S^7;-J0+8xsx0 z5zdKx@_ri5$qO2=Q}cxK7L5%dA4@0{p%wy1Nx4p|b<~(sa^J&y>86g0RvhHTxb^`X zh3dO^vMVw@mHKjqx9+Am!3G#E3L>8CBYUFRXEC1XRTBf!XH*V}-L4b$cUU+7u%D`n zC!KB8ufQ-5cY#uBH8a(#HJKfI=JlQ==yp-ShCaeKE0LPpWQsR*dI8`MY`k3JcHMIX zu-4e@O6*@(hYaS4vz=Oqjn01>Efy3ek%x~4q#}>#!vOcb2ukyaBKNZH8ti7qw7*S9 ztw+a{4%EtNXqh;mP(XNT**4jPrt4~Er)e9!!q>`WBxwh#`L`(E{w7X5J@ffM^vO+O zUlXWmM8{?QPCb1NDV5@j{g$UZZz)hK;b3g@GvJ+UWLF_Bj?nCzr6}J%P^bj;lsxU$ z__2Nl;CWP+O*36h%L}6zvidj-`LMcJ@KZ&b7Il%pE>{9NzvZ|2b>uj34f$)yZ~nR| z94;DqV{N?N;jt*#@1;%Y&24-QkA+@;y?TbZs{8~$y0nzyLR*+cb6r|{Vu@_CA-NHG z9eihUa`L9OQWbA~6X(U3K-!tO+QZEe$`%h6Te)o|LwoN5^&ogQC~m@YKRv*J z?utORvM58G=}y^Sz@eTK??LrTs6$>O*5y?DoN2#_XU3R!G6BQKwhe`b?DT3OQgBWk z*TrdX4l0>LOp{F z0J;;Gb2z@_rR0Uq3xZGltGfwsX5owGqU@Nz(w&KysphdxFr3rKQ(|9UZG{OwfDiN5 zR9{zL3H95(c;8H1{CXrIsLo@1Hoy05Bmvm>CDthl=fr`p)s=qedLF}(-!>+6{Iv?V zS1TN0$7f}8_q{7&QyifPZP;ce_rTCQruYCJjH`B_zHhqz({e>gUy++^X}oQ$U-}5` z@Jxk4J1%bv1z$^LXajG8f~79rBvHZrd$9GvOwNb5z8-v-y^B7ho;Qof8rql79{~!z}7csGIGgiDaUqt+qp2%e+ z>N`(G*oXM{-vD2GZT+p>(xx}*z~>MfK<`bKsuIlKE>O(m;gHTe3wK=6%G$=YR^;Lq z*uH1k8fQqfMPr2TJQ>Nm8M3hjK8@ zxb12EfnB|@5xyd7lVvl}OvwKI zr}gEeMIWnVa;Wg)fkT#%bviZHT&7vF`AearjF4{sG%?Jg-Ul#|RV-qsM8ntl(qNd8 zHW=oWsYaL`}9PYNIverLqEWJ;Na@QHr)G z)5Tm(Q|&w71~2(XSMNB*s1JXogK}S0=*h)*+WsRZcdR5eQRW) zUrydLu|BBl_`ve=TXl{2@G^{Tdf>jRpZODx4iAMp6DrUs5lk@*^TZg2IZX8oXqQv; zv{c(4NW6D&Ma6;8So?KrR=6?1OJ!!E6F+nyt*5A3qtZep=I28$dxp)I{?}|j%y#@7 z3a6CU<0GF`<&$F_!n{s-W66b0LZ0tc63w_u5bN_9f%P2%JR)A2D>mm0zw%RNb@7Uz z?{hmJt>33rl`D^#^J1TLZ%A@%LEF!}cs`>2VLcrxsJ-)@UFMNnQp@e-t66XF2DaBI zrKc=AG)aM)C8ulclp+Z>fR^8!JHnML6IIIL9_84;QE7qYmNhd{1*%Nz^L**#G{uVT zoh7rn(G5Uokmy*2N{p8oI^u%+>$Ng8GSYsxk(o$#YME)RGgLaz%01gKU7lOx3E2Ol zw%b%peK*z=v-7UDb;W=gY{>TR8MC?}OtMlqo2=AUyl3TzE2&}ih7!_)=)m;hQ?$_z zPA6xaaDsQe{IaBIFkd%9^{u5pSFLy<+wb{dmuaxxx|671k!BdMKz|Rcf9AB)BF;lD z2Mu=@N>Bl>+Om)MZDqx~TrWK9V4*I3=9@vkSYZ6@xY&>V^NyW{jxaL?A?xX9q{5EV zPJy`9YdL7X-*}T$vQY?`PiZlHZ!W$*Z^ZkafT-S1R zHFI^f@=mf>WcQr38;08Q_AVRL%h!0wHVZG?aY;ha-w85#DcLzx4}hno$Y5EF$=li+ z#cT-|LPt;5-1>;tOlvaWL%n(>R4tri$E6Bw@?OUWC;{W0!|$zJwcsCW&O9db#mnWw zkI2UgLdFUSj+U@~3FF*LF0@mk=w|N#L2R}=HkhxA>3%Kj~rY6^n>!D1vH1zF^$2lw? zd&Q&YkJ$r=_v#Z~b{goF0$w&oDYxQ0&JBj25*Yl>nzozYD`7BSU$~}t>Qyncmu9~8 zql>Q%D@SA@C$!RF($J{{RgH^3t%ZAW@-@P_I1j-=u7_v7>AiH@hqZ3y z$ft3BD@lBbARoGT;+GPgOwaQgy~Zg;PMTkBqG=-HSp)U0&Y=l(*l%nF|AWQcVEe0G zhO+(DUb`IoH~W78{dds6!o?KdWM_NC^Y3;}m+h~155WF!#)dobH}+RJ)|3APj)nfe z4#yhc-@N;KIF`$Q;~+kT?QcT%H}SghABCUA#^1oPc=#*gU)f|m`8PKIC*W8E{1x%9 zaQ`oelqYQe>kRxg{QnaS{8bY@@U4+m>2qU6EC^kSs3DP@4Ak=_# zDM<(sVkpS~N(e1NNJ7ue{C; zS(=OwL$)~k zhB1_1!rWzpR(gZzL4iT^yUr^4XRns=-c9)R96IZ4iAY@eu`l;-9X|TzqY5B_47+|J z^f_i5LtVqJ;X))@9^DrcnjmWO#r|B0*N$#(DD!B3 zQNNq1!XNvnFfkzsxclL}N$kE>NdbxPgY)rEubTLdHh3)d-M?_?d4q2Ltt)www{+eq z=>0Hx(8?Qo!zRdbE&J8knCrU7Yi^p5353FYoE; z9@EcY-Xxh{ps#2M$Nnq}&3kgSNa1+M?{g$PrE7&?PbQiFGEmy$cSs~8$l%F&yzcIm zyq;g-DaM(h9;CTDV>eDJpZ1uXyVFn{!J?NTJw6#{RwrMrG^)ocxnU)FPKRP%G=yDW zPBu91{e`3=(&ev{p8(=LhOpE7;B2)^C9mYIwcyt}K?!N%{ zGK@zScE&mQg^+CJ<&H!;DW+DoVI1{q2-Q5Nn`=N%589(69B%W``0?Zcx|@VA z?W&RhOk^hooEyq3989uPb&%j2>}$|1D1Pl@ zP_WJKjgFnjs;@R&S^;n;aP2*4`54ksp6^PUr`~9j)R^R;)9}2OOw|dGvE=VOr{P+B zwTpU6R1ZhJ@PSA@EOk3JBju)FFOp>K1?5Uz8%LU-^z6ZVg6ia7)Ppy_3JwW+n7+>G zhz@~w_=mu4L(D|df%4+n3svvmr#h=&l5C3t>a4R`XkQvlj*OOQrD2tFtmfOrs6;JX z|F(uMJuEkFK3anMeJvsNiY^p4l5!I)j;kod#+>jnfgVS)7V9S)hmx#4g@%*xkBLWI zg+8wcKl~W-0Nyn_MA7FE*Q)D$QU$^p@|gUuB`tK!V2j#nsuN>12Hw9G05WMvwN zK65>LPEU+V(5mg&>*pm!vSz!t!?sJZkqmm^n&Ye7wE1>t9TVy;c$)W<^HEz%zJ<6X zKLlXi-}eh?V0K01vzx6Xz!v67?EAJ?c1?PS))bO*aXzyyBm~~%9^AVA!LaD1OS|SO z8Lhe>N_RTz8++qCbyiE-@JF}nm_EZFx7u{wFZ-wC{Ydnf%CO8n@ZdI3?}A2wM|P|&Nxrym97r7}Wun&$WP z(Q^3@=Uc7{@@)@``^%7N zJtSo~L~vv+-XNWAyHM&5tCJu^qOZBPJbnzX3o+kWo$0)b3yjp+51_kBhVbmhY9R(9 z_nX2I4@DwV2eE7iJ>+YzbvX6?hPBsseS{}({LbZ^03)Q@&`P1(ga`n8HB}KN=hkM6 z2G;7Gs=bc22RldYrJG2&@$7!o!VPT4IQo1eX$LqtM@~iJyaWodE-#RHZ)73OheST6 z8ZNV3HNAMvP|(Twka(@ef`XxZHDqIAb3sZDaENt0sH1Z}G2Mrp)T3jP+vhWtbY*JJ z_@w6)i|L@XY()rbh>}F+x@FMkY*bpEUuP$+wmymM+98aga-Ae^^Xz`m;vhN?zHBV# z4hJ`tpEt>^l(YNFx|n0(LRs;SbVO-($y*N8RJ~7K6$4;fzmGP!6K*yo^Q_RDs@hvL z+lU6O_as6yEQmEDRz#FE*0$6~*O7OjH;?@YB{CvfJawl(Bu!B`&75I}F-_~(`xy6A z?3=}#n?LJVi-ih>i}0XMMh||^)9^t2LPEkv%r<$~sdCF+a)!Jg!wfBh7 zLfxFgDPFI}+&H*IK-lJBgMW`(YPr}5?*t+*Y;AHamM8ziV&C?%WhFmW#UdWr#D#un zlC>Q+-r(vrS4?=4vlb&jb zap&&4Zsn=W5EuS(VxdmXtB8m~&wV;7a`S+-;7W*N8@y38pbx1*=2U#X)s_^wazfmP zFP6RS$6Az1KwTV>bJ&J`=0VF*VOU&&Y-o=|3+P^LiO+BW>DwH_w{T>d6@fH$noq%y z>%dXO{-5g1wQTh<_SZB5qG&gcU;cEC-==CGy;Nn zSu7V71@WnQPx^yv*TglX>-_6eh=-1m$N(^5EZfeLD0y5bBi$14GzR5XrW8}NXckfe zf`>gO?gpn0Mm^XDPI%Ij-be?KNz>dIKoUfHW{Wf^E9iRSKQ|ndPf32{iEGjRv`|e; zeyb?)uP%AG!TRFnCw&MK;v4d76k$g#;Det+Rne-qmUD*9no#y)0JV2rFu z2^l?n`i*d2Jc)!IYyGjB=SL+#!(qGugrZ)^-PvI!$S3w$)UjP7mN zAmrLyyZ63m3m&*m#?+~=%~aLDL3KULPp#mMXH}R=UP@Clg(bDrmo$F>QMNL{j5im@Mw{M3|xPhn&yy%D@Z0Tt1spB zRpYF>qgw&&$A?chf0bjkt13y`a#eZl;Pd8^*=itCY(|@2V^f)?vHT=LxuYBpG(l#I zZZ<2aHo2oV92dUC%MflUO;dm83Q+l^MJ9VqA{Bp{>n%@EC!^a8p_^Vq-LJ=M16W@( zQ9IA_9h(p#YG|IaHAvQs4bqw|V2iN;htY$796tRKqtp&RE2{1H^%&B7Fhy=E=5(0w z4$^HrXUrSP=)mAZ=~Mn;H}07@@y0%>4$i(yybRjtjw49ZIdO5qZn1sj8n3)){6{{Z zh+$M%Eo!>0ZuG;Vb%>ASK?mj`SCitr&veAd*$y6uMn`;kV+)pG#>J%?h6_B$MBJdH zAD{C5Q;4qah3p7+dYBY!akRmxP`B-!bU;m&%4Ajjg|Z+ur(8I|p^nG>P8}kv>n@~}Du~U`m~&^6TCF?w{)pGg zTm0$ascHAXzz-$_A)#8o)S;+{y6~3|BB^ilV80C&kmdtEEh!vcisJpa#~cCC_4=6R zv4=X97_5Vn6F5hX?*6*s)qxRxb#aR(gTov@o#oV@d`wB97@a^-+ZK_sjn(dYZ}Rxw z#rz5|CgX{^=<6CZJNUSA51B=5D)uzXD0UK}yg_yBv<^IvsRQq>p>E#8_{io^s2_A_ z&7d*5BD$t{yx9b&eQ747N5Q98X_qzWJ00G--Dfuy<AC_XbIYk zu|jd_fE`K%h?*ULgps5M+-%;gbd`8@7NM=HA3=$GXvi+6x|lQ4v<)O9K6TOZkC+q@ zEDiM0EYsyF3-r#|g4*|w12#Cl!|$AZ6AMpwX&ij zKwSortJQc=#n`iX%R3-1Y3uRTriqwZvX(||^GecYZ{c{_pq)$frQC+!i@NE++d98z z9vA8$w{LEh{1$0fBB#`O4YGAhdKfE=-gg9tb2pcgkr4=E-!2ueVnAD1Y3Bj6mR3R8 zuPg5a^;QWGGKel#ft~wdvp-Rn3?zg4iLG9@z~C`*tB=n_>E7CP)rys~YG4ahrzKCk zf3Qtl(wRv!{7P${_Vz*?!9yuff@QU&#Ul;~l>$s&AcUV3azswY&_JWs80iJJ3tI%+ zj^bGVk>k2&1%GPKqC?h@t}9Gp)ZXjTo#@Bmi)B3ok2HhyB#!W`-lA}$Ne;*>=iZ5h zi4~9xsxD zB=D^fgV{5LfS@!HxJoE+hw;L&RIsV)4&va87cvbpzf8F*-ZDUc z%&Kak(Ro!8g)LvEX1}UwS%QbS&PIF{e&(>MJ?^iD056eNR1!O({pDUI6u?f~H9qq0 zbsA`1d%fK1z>d^uBL_D;nB_d?>@(uMt6f@jz?S>J?-~vnuxQ=Huc+@SF%aju7RaDc z=Hmg=z|M(WzqPf@<%B;{%QU?`d!g)>_FFgXExN5$Gxwl}UaKf6 z?i5T|S_dc7bz_uZfi7>*w~VTV^;C+RTP_&LK09xd3w30dHh`wEV^p-Y)^C05tWT~| zi{m9k$WG3V@Fpph?%DcmTx?3e5mP+Zl>5)TS}

hn|Ux;cFhR?{;xt;VHPkRVf(R(JAp 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 W?|(f55dK|)$h9l>muoNjJo;Zn|2qx<