Refine location notes UI and align sheet layouts (#660)

Co-authored-by: jack <jackjackbits@users.noreply.github.com>
This commit is contained in:
jack
2025-09-21 14:56:20 +02:00
committed by GitHub
co-authored by jack
parent c837afb818
commit f8f780d2d6
6 changed files with 544 additions and 167 deletions
+25 -25
View File
@@ -20,8 +20,12 @@ struct LocationChannelsSheet: View {
var body: some View {
NavigationView {
VStack(alignment: .leading, spacing: 12) {
Text("#location channels")
.font(.system(size: 18, design: .monospaced))
HStack(spacing: 12) {
Text("#location channels")
.font(.system(size: 18, design: .monospaced))
Spacer()
closeButton
}
Text("chat with people near you using geohash channels. only a coarse geohash is shared, never exact gps. your IP address is hidden by routing all traffic over tor.")
.font(.system(size: 12, design: .monospaced))
.foregroundColor(.secondary)
@@ -60,29 +64,9 @@ struct LocationChannelsSheet: View {
.background(backgroundColor)
#if os(iOS)
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: { isPresented = false }) {
Image(systemName: "xmark")
.font(.system(size: 13, weight: .semibold, design: .monospaced))
.frame(width: 32, height: 32)
}
.buttonStyle(.plain)
.accessibilityLabel("Close")
}
}
.navigationBarHidden(true)
#else
.toolbar {
ToolbarItem(placement: .automatic) {
Button(action: { isPresented = false }) {
Image(systemName: "xmark")
.font(.system(size: 13, weight: .semibold, design: .monospaced))
.frame(width: 20, height: 20)
}
.buttonStyle(.plain)
.accessibilityLabel("Close")
}
}
.navigationTitle("")
#endif
}
#if os(iOS)
@@ -112,6 +96,16 @@ struct LocationChannelsSheet: View {
.onChange(of: manager.availableChannels) { _ in }
}
private var closeButton: some View {
Button(action: { isPresented = false }) {
Image(systemName: "xmark")
.font(.system(size: 13, weight: .semibold, design: .monospaced))
.frame(width: 32, height: 32)
}
.buttonStyle(.plain)
.accessibilityLabel("Close")
}
private var channelList: some View {
List {
// Mesh option first (no bookmark)
@@ -119,6 +113,7 @@ struct LocationChannelsSheet: View {
manager.select(ChannelID.mesh)
isPresented = false
}
.listRowInsets(EdgeInsets(top: 6, leading: 0, bottom: 6, trailing: 0))
// Nearby options
if !manager.availableChannels.isEmpty {
@@ -148,6 +143,7 @@ struct LocationChannelsSheet: View {
manager.select(ChannelID.location(channel))
isPresented = false
}
.listRowInsets(EdgeInsets(top: 6, leading: 0, bottom: 6, trailing: 0))
}
} else {
HStack {
@@ -155,6 +151,7 @@ struct LocationChannelsSheet: View {
Text("finding nearby channels…")
.font(.system(size: 12, design: .monospaced))
}
.listRowInsets(EdgeInsets(top: 6, leading: 0, bottom: 6, trailing: 0))
}
// Custom geohash teleport
@@ -204,7 +201,6 @@ struct LocationChannelsSheet: View {
}
.buttonStyle(.plain)
.font(.system(size: 14, design: .monospaced))
.padding(.horizontal, 10)
.padding(.vertical, 6)
.background(Color.secondary.opacity(0.12))
.cornerRadius(6)
@@ -217,6 +213,7 @@ struct LocationChannelsSheet: View {
.foregroundColor(.red)
}
}
.listRowInsets(EdgeInsets(top: 6, leading: 0, bottom: 6, trailing: 0))
// Bookmarked geohashes
if !bookmarks.bookmarks.isEmpty {
@@ -263,11 +260,13 @@ struct LocationChannelsSheet: View {
.cornerRadius(8)
}
.listRowSeparator(.hidden)
.listRowInsets(EdgeInsets(top: 6, leading: 0, bottom: 6, trailing: 0))
}
// Footer action inside the list
if manager.permissionState == LocationChannelManager.PermissionState.authorized {
torToggleSection
.listRowInsets(EdgeInsets(top: 6, leading: 0, bottom: 4, trailing: 0))
Button(action: {
openSystemLocationSettings()
}) {
@@ -282,6 +281,7 @@ struct LocationChannelsSheet: View {
.buttonStyle(.plain)
.listRowSeparator(.hidden)
.listRowBackground(Color.clear)
.listRowInsets(EdgeInsets(top: 4, leading: 0, bottom: 10, trailing: 0))
}
}
.listStyle(.plain)