From b20efb3147a3adb0101e8deac881222b5fd7cb35 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 23:45:44 +0000 Subject: [PATCH] fix(location): map drag interception + wrap precision chips MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The interactive picker map didn't tell ancestor views to stop intercepting touches, so a horizontal drag on the Teleport map got stolen (opening the nav drawer) instead of panning. Add the same requestDisallowInterceptTouchEvent touch listener LocationPreviewMap already uses. - The precision chips were a single horizontally-scrolling Row; make them a FlowRow so "Region · ~1250 km … Building · ~38 m" wraps onto multiple lines. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01YU8YLcjH9ALr4PgdAkGPZh --- .../location/GeohashLocationPickerDialog.kt | 12 ++++++------ .../ui/note/creators/location/LocationPickerMap.kt | 13 +++++++++++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/location/GeohashLocationPickerDialog.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/location/GeohashLocationPickerDialog.kt index cba3c257ef..8a462c1d6c 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/location/GeohashLocationPickerDialog.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/location/GeohashLocationPickerDialog.kt @@ -25,10 +25,11 @@ import android.location.Address import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.background import androidx.compose.foundation.clickable -import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -550,6 +551,7 @@ private fun MyLocationButton( } } +@OptIn(ExperimentalLayoutApi::class) @Composable private fun PickerBottomBar( cell: String?, @@ -578,12 +580,10 @@ private fun PickerBottomBar( style = MaterialTheme.typography.labelLarge, color = MaterialTheme.colorScheme.onSurfaceVariant, ) - Row( - Modifier - .fillMaxWidth() - .horizontalScroll(rememberScrollState()) - .padding(vertical = 10.dp), + FlowRow( + modifier = Modifier.fillMaxWidth().padding(vertical = 10.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), ) { GeohashChannelLevel.ordered.forEach { lvl -> FilterChip( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/location/LocationPickerMap.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/location/LocationPickerMap.kt index 1ee0bb3a89..030883b693 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/location/LocationPickerMap.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/location/LocationPickerMap.kt @@ -20,6 +20,7 @@ */ package com.vitorpamplona.amethyst.ui.note.creators.location +import android.view.MotionEvent import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -100,6 +101,18 @@ fun LocationPickerMap( controller.setZoom(zoom) controller.setCenter(GeoPoint(latitude, longitude)) + // Ask ancestors (nav drawer, horizontal pager, feed) to stop intercepting + // touches while a finger is on the map, so a horizontal drag pans the map + // instead of opening the drawer or being stolen as a swipe. Mirrors + // LocationPreviewMap. Returning false lets the MapView still pan/zoom/tap. + setOnTouchListener { view, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> view.parent?.requestDisallowInterceptTouchEvent(true) + MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> view.parent?.requestDisallowInterceptTouchEvent(false) + } + false + } + val receiver = object : MapEventsReceiver { override fun singleTapConfirmedHelper(p: GeoPoint): Boolean {