diff --git a/app/src/google/java/com/geeksville/mesh/ui/map/MapView.kt b/app/src/google/java/com/geeksville/mesh/ui/map/MapView.kt index 763d3357a..b5d54ba0a 100644 --- a/app/src/google/java/com/geeksville/mesh/ui/map/MapView.kt +++ b/app/src/google/java/com/geeksville/mesh/ui/map/MapView.kt @@ -642,6 +642,21 @@ fun MapView( isLocationTrackingEnabled = !isLocationTrackingEnabled } }, + onOrientNorth = { + coroutineScope.launch { + try { + val currentPosition = cameraPositionState.position + val newCameraPosition = + CameraPosition.Builder(currentPosition) + .bearing(0f) // Orient to north + .build() + cameraPositionState.animate(CameraUpdateFactory.newCameraPosition(newCameraPosition)) + debug("Oriented map to north") + } catch (e: IllegalStateException) { + debug("Error orienting map to north: ${e.message}") + } + } + }, ) } if (showLayersBottomSheet) { diff --git a/app/src/google/java/com/geeksville/mesh/ui/map/components/MapControlsOverlay.kt b/app/src/google/java/com/geeksville/mesh/ui/map/components/MapControlsOverlay.kt index ec811d753..e1f75f2ec 100644 --- a/app/src/google/java/com/geeksville/mesh/ui/map/components/MapControlsOverlay.kt +++ b/app/src/google/java/com/geeksville/mesh/ui/map/components/MapControlsOverlay.kt @@ -20,6 +20,7 @@ package com.geeksville.mesh.ui.map.components import androidx.compose.foundation.layout.Box import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.LocationDisabled +import androidx.compose.material.icons.outlined.Explore import androidx.compose.material.icons.outlined.Layers import androidx.compose.material.icons.outlined.Map import androidx.compose.material.icons.outlined.MyLocation @@ -52,6 +53,7 @@ fun MapControlsOverlay( hasLocationPermission: Boolean = false, isLocationTrackingEnabled: Boolean = false, onToggleLocationTracking: () -> Unit = {}, + onOrientNorth: () -> Unit = {}, ) { VerticalFloatingToolbar( modifier = modifier, @@ -95,6 +97,8 @@ fun MapControlsOverlay( onClick = onManageLayersClicked, ) + CompassButton(onOrientNorth = onOrientNorth) + // Location tracking button if (hasLocationPermission) { MapButton( @@ -111,3 +115,12 @@ fun MapControlsOverlay( }, ) } + +@Composable +private fun CompassButton(onOrientNorth: () -> Unit) { + MapButton( + icon = Icons.Outlined.Explore, + contentDescription = stringResource(id = R.string.orient_north), + onClick = onOrientNorth, + ) +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c830f5d33..bd65b2ca9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -331,6 +331,7 @@ UDP Config Last heard: %2$s
Last position: %3$s
Battery: %4$s]]>
Toggle my position + Orient north User Channels Device