When adding new relays, show full information dialog

This commit is contained in:
Vitor Pamplona
2026-03-08 13:07:29 -04:00
parent 693931ed15
commit 7fa9fdff9e
15 changed files with 98 additions and 46 deletions
@@ -228,7 +228,11 @@ private fun ChannelMetadataScaffold(
}
item {
RelayUrlEditField { postViewModel.addHomeRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addHomeRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
Spacer(modifier = DoubleVertSpacer)
}
@@ -76,6 +76,10 @@ fun LazyListScope.renderBlockedItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -76,6 +76,10 @@ fun LazyListScope.renderBroadcastItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -44,7 +44,8 @@ class RelaySuggestionState {
val lower = input.lowercase()
LocalCache.relayHints.relayDB
.filter { _, relay -> relay.url.contains(lower) }
.sortedBy { it.url }
.map { relaySetupInfoBuilder(it) }
.sortedByDescending { it.relayStat.receivedBytes }
.take(20)
} else {
emptyList()
@@ -43,6 +43,10 @@ import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.navigation.navs.EmptyNav
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.mockAccountViewModel
import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.ButtonBorder
import com.vitorpamplona.amethyst.ui.theme.Size10dp
@@ -55,12 +59,20 @@ import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
@Composable
fun RelayUrlEditFieldPreview() {
ThemeComparisonColumn {
RelayUrlEditField {}
RelayUrlEditField(
onNewRelay = {},
accountViewModel = mockAccountViewModel(),
nav = EmptyNav(),
)
}
}
@Composable
fun RelayUrlEditField(onNewRelay: (NormalizedRelayUrl) -> Unit) {
fun RelayUrlEditField(
onNewRelay: (NormalizedRelayUrl) -> Unit,
accountViewModel: AccountViewModel,
nav: INav,
) {
var url by remember { mutableStateOf("") }
val relaySuggestions = remember { RelaySuggestionState() }
@@ -129,6 +141,8 @@ fun RelayUrlEditField(onNewRelay: (NormalizedRelayUrl) -> Unit) {
url = relay.url
relaySuggestions.reset()
},
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -20,36 +20,40 @@
*/
package com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.common
import androidx.compose.foundation.clickable
import android.R.attr.onClick
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.theme.DividerThickness
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.displayUrl
@Composable
fun ShowRelaySuggestionList(
relaySuggestions: RelaySuggestionState,
onSelect: (NormalizedRelayUrl) -> Unit,
modifier: Modifier = Modifier,
accountViewModel: AccountViewModel,
nav: INav,
) {
val suggestions by relaySuggestions.results.collectAsStateWithLifecycle(emptyList())
if (suggestions.isNotEmpty()) {
Column(modifier = modifier) {
suggestions.forEachIndexed { index, relay ->
RelayUrlLine(relay) { onSelect(relay) }
suggestions.forEachIndexed { index, relayInfo ->
BasicRelaySetupInfoClickableRow(
item = relayInfo,
loadProfilePicture = accountViewModel.settings.showProfilePictures(),
loadRobohash = accountViewModel.settings.isNotPerformanceMode(),
onClick = { onSelect(relayInfo.relay) },
onDelete = null,
accountViewModel = accountViewModel,
nav = nav,
)
if (index < suggestions.lastIndex) {
HorizontalDivider(thickness = DividerThickness)
}
@@ -57,22 +61,3 @@ fun ShowRelaySuggestionList(
}
}
}
@Composable
fun RelayUrlLine(
relay: NormalizedRelayUrl,
onClick: () -> Unit,
) {
Text(
text = relay.displayUrl(),
fontWeight = FontWeight.Bold,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
style = MaterialTheme.typography.bodyMedium,
modifier =
Modifier
.fillMaxWidth()
.clickable(onClick = onClick)
.padding(horizontal = 12.dp, vertical = 10.dp),
)
}
@@ -75,6 +75,10 @@ fun LazyListScope.renderDMItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -76,6 +76,10 @@ fun LazyListScope.renderFavoriteItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -76,6 +76,10 @@ fun LazyListScope.renderIndexerItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -75,6 +75,10 @@ fun LazyListScope.renderLocalItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -75,6 +75,10 @@ fun LazyListScope.renderPrivateOutboxItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -118,7 +118,11 @@ fun LazyListScope.renderNip65HomeItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addHomeRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addHomeRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -139,6 +143,10 @@ fun LazyListScope.renderNip65NotifItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addNotifRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addNotifRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -76,6 +76,10 @@ fun LazyListScope.renderProxyItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -76,6 +76,10 @@ fun LazyListScope.renderSearchItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}
@@ -76,6 +76,10 @@ fun LazyListScope.renderTrustedItems(
item {
Spacer(modifier = StdVertSpacer)
RelayUrlEditField { postViewModel.addRelay(relaySetupInfoBuilder(it)) }
RelayUrlEditField(
onNewRelay = { postViewModel.addRelay(relaySetupInfoBuilder(it)) },
accountViewModel = accountViewModel,
nav = nav,
)
}
}