mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-08-08 06:46:11 +00:00
fix location channel layout
This commit is contained in:
parent
fa43821cf4
commit
562aa787d6
@ -257,53 +257,129 @@ fun LocationChannelsSheet(
|
||||
}
|
||||
}
|
||||
|
||||
// Location channels: globe + title, geohash subtitle, nearby levels + teleport
|
||||
item(key = "location_channels_header") {
|
||||
SheetIconSectionHeader(
|
||||
icon = Icons.Outlined.Public,
|
||||
title = stringResource(R.string.location_channels_heading),
|
||||
subtitle = stringResource(R.string.location_channels_desc),
|
||||
modifier = Modifier.padding(top = 20.dp)
|
||||
)
|
||||
}
|
||||
|
||||
selectedChannelOutsideNearby?.let { channel ->
|
||||
item(key = "teleported_card") {
|
||||
val coverage = coverageString(channel.geohash.length)
|
||||
val name = bookmarkNames[channel.geohash]
|
||||
val subtitle = "#${channel.geohash} • $coverage" +
|
||||
(name?.let { " • ${formattedNamePrefix(channel.level)}$it" } ?: "")
|
||||
val participantCount = geohashParticipantCounts[channel.geohash] ?: 0
|
||||
val isBookmarked = bookmarksStore.isBookmarked(channel.geohash)
|
||||
|
||||
Column {
|
||||
AboutSectionLabel(text = stringResource(R.string.cd_teleported))
|
||||
Surface(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = AboutHorizontalPadding),
|
||||
color = palette.surface,
|
||||
shape = AboutCardShape
|
||||
) {
|
||||
ChannelOptionRow(
|
||||
title = geohashHashTitleWithCount(
|
||||
channel.geohash,
|
||||
participantCount
|
||||
),
|
||||
subtitle = subtitle,
|
||||
isSelected = true,
|
||||
participantCount = participantCount,
|
||||
titleColor = standardGreen,
|
||||
titleBold = participantCount > 0,
|
||||
trailingContent = {
|
||||
ChannelBookmarkButton(
|
||||
bookmarked = isBookmarked,
|
||||
onClick = {
|
||||
bookmarksStore.toggle(channel.geohash)
|
||||
}
|
||||
)
|
||||
},
|
||||
onClick = {
|
||||
locationManager.select(ChannelID.Location(channel))
|
||||
onDismiss()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (bookmarks.isNotEmpty()) {
|
||||
item(key = "bookmarks_card") {
|
||||
Column {
|
||||
AboutSectionLabel(text = stringResource(R.string.bookmarked))
|
||||
Surface(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = AboutHorizontalPadding),
|
||||
color = palette.surface,
|
||||
shape = AboutCardShape
|
||||
) {
|
||||
Column {
|
||||
bookmarks.forEachIndexed { index, gh ->
|
||||
if (index > 0) SheetCardDivider()
|
||||
val level = levelForLength(gh.length)
|
||||
val channel = GeohashChannel(level = level, geohash = gh)
|
||||
val coverage = coverageString(gh.length)
|
||||
val name = bookmarkNames[gh]
|
||||
val subtitle = "#$gh • $coverage" +
|
||||
(name?.let { " • ${formattedNamePrefix(level)}$it" } ?: "")
|
||||
val participantCount = geohashParticipantCounts[gh] ?: 0
|
||||
|
||||
ChannelOptionRow(
|
||||
title = geohashHashTitleWithCount(gh, participantCount),
|
||||
subtitle = subtitle,
|
||||
isSelected = isChannelSelected(channel, selectedChannel),
|
||||
participantCount = participantCount,
|
||||
titleBold = participantCount > 0,
|
||||
trailingContent = {
|
||||
ChannelBookmarkButton(
|
||||
bookmarked = true,
|
||||
onClick = { bookmarksStore.toggle(gh) }
|
||||
)
|
||||
},
|
||||
onClick = {
|
||||
val inRegional =
|
||||
availableChannels.any { it.geohash == gh }
|
||||
locationManager.setTeleported(
|
||||
!inRegional && availableChannels.isNotEmpty()
|
||||
)
|
||||
locationManager.select(ChannelID.Location(channel))
|
||||
onDismiss()
|
||||
}
|
||||
)
|
||||
LaunchedEffect(gh) {
|
||||
bookmarksStore.resolveNameIfNeeded(gh)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Nearby location channels and the control for teleporting somewhere new.
|
||||
item(key = "channels_card") {
|
||||
Column {
|
||||
SheetIconSectionHeader(
|
||||
icon = Icons.Outlined.Public,
|
||||
title = stringResource(R.string.location_channels_heading),
|
||||
subtitle = stringResource(R.string.location_channels_desc),
|
||||
modifier = Modifier.padding(top = 20.dp)
|
||||
AboutSectionLabel(
|
||||
text = stringResource(R.string.location_channels_nearby)
|
||||
)
|
||||
Surface(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = AboutHorizontalPadding)
|
||||
.padding(top = 10.dp),
|
||||
.padding(horizontal = AboutHorizontalPadding),
|
||||
color = palette.surface,
|
||||
shape = AboutCardShape
|
||||
) {
|
||||
Column {
|
||||
selectedChannelOutsideNearby?.let { channel ->
|
||||
val coverage = coverageString(channel.geohash.length)
|
||||
val name = bookmarkNames[channel.geohash]
|
||||
val subtitle = "#${channel.geohash} • $coverage" +
|
||||
(name?.let { " • ${formattedNamePrefix(channel.level)}$it" } ?: "")
|
||||
val participantCount = geohashParticipantCounts[channel.geohash] ?: 0
|
||||
val isBookmarked = bookmarksStore.isBookmarked(channel.geohash)
|
||||
|
||||
ChannelOptionRow(
|
||||
title = geohashTitleWithCount(channel, participantCount),
|
||||
subtitle = subtitle,
|
||||
isSelected = true,
|
||||
participantCount = participantCount,
|
||||
titleColor = standardGreen,
|
||||
titleBold = participantCount > 0,
|
||||
trailingContent = {
|
||||
ChannelBookmarkButton(
|
||||
bookmarked = isBookmarked,
|
||||
onClick = { bookmarksStore.toggle(channel.geohash) }
|
||||
)
|
||||
},
|
||||
onClick = {
|
||||
locationManager.select(ChannelID.Location(channel))
|
||||
onDismiss()
|
||||
}
|
||||
)
|
||||
SheetCardDivider()
|
||||
}
|
||||
|
||||
if (locationServicesEnabled) {
|
||||
if (nearbyChannels.isNotEmpty()) {
|
||||
nearbyChannels.forEachIndexed { index, channel ->
|
||||
@ -418,57 +494,6 @@ fun LocationChannelsSheet(
|
||||
}
|
||||
}
|
||||
|
||||
if (bookmarks.isNotEmpty()) {
|
||||
item(key = "bookmarks_card") {
|
||||
Column {
|
||||
AboutSectionLabel(text = stringResource(R.string.bookmarked))
|
||||
Surface(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = AboutHorizontalPadding),
|
||||
color = palette.surface,
|
||||
shape = AboutCardShape
|
||||
) {
|
||||
Column {
|
||||
bookmarks.forEachIndexed { index, gh ->
|
||||
if (index > 0) SheetCardDivider()
|
||||
val level = levelForLength(gh.length)
|
||||
val channel = GeohashChannel(level = level, geohash = gh)
|
||||
val coverage = coverageString(gh.length)
|
||||
val name = bookmarkNames[gh]
|
||||
val subtitle = "#$gh • $coverage" +
|
||||
(name?.let { " • ${formattedNamePrefix(level)}$it" } ?: "")
|
||||
val participantCount = geohashParticipantCounts[gh] ?: 0
|
||||
|
||||
ChannelOptionRow(
|
||||
title = geohashHashTitleWithCount(gh, participantCount),
|
||||
subtitle = subtitle,
|
||||
isSelected = isChannelSelected(channel, selectedChannel),
|
||||
participantCount = participantCount,
|
||||
titleBold = participantCount > 0,
|
||||
trailingContent = {
|
||||
ChannelBookmarkButton(
|
||||
bookmarked = true,
|
||||
onClick = { bookmarksStore.toggle(gh) }
|
||||
)
|
||||
},
|
||||
onClick = {
|
||||
val inRegional = availableChannels.any { it.geohash == gh }
|
||||
locationManager.setTeleported(
|
||||
!inRegional && availableChannels.isNotEmpty()
|
||||
)
|
||||
locationManager.select(ChannelID.Location(channel))
|
||||
onDismiss()
|
||||
}
|
||||
)
|
||||
LaunchedEffect(gh) { bookmarksStore.resolveNameIfNeeded(gh) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
item(key = "tor_routing") {
|
||||
val torProvider = remember { ArtiTorManager.getInstance() }
|
||||
val torAvailable = remember { torProvider.isTorAvailable() }
|
||||
|
||||
@ -303,7 +303,8 @@
|
||||
<!-- Location channels sheet -->
|
||||
<string name="location_channels_title">Channels</string>
|
||||
<string name="location_channels_heading">Location Channels</string>
|
||||
<string name="location_channels_desc">Chat nearby over geohash channels. Only a coarse location is shared, never exact GPS.</string>
|
||||
<string name="location_channels_desc">Chat by coarse location. Never shares exact GPS.</string>
|
||||
<string name="location_channels_nearby">Nearby</string>
|
||||
<string name="mesh_section_subtitle">Offline mesh via Bluetooth. No internet required.</string>
|
||||
|
||||
<!-- Location channels sheet: sections and Tor routing -->
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user