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