diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/publicChannels/nip28PublicChat/metadata/ChannelMetadataScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/publicChannels/nip28PublicChat/metadata/ChannelMetadataScreen.kt index c6e22a2e7..a0be6ec58 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/publicChannels/nip28PublicChat/metadata/ChannelMetadataScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/publicChannels/nip28PublicChat/metadata/ChannelMetadataScreen.kt @@ -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) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/blocked/BlockedRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/blocked/BlockedRelayListView.kt index 7781de72f..5b0757d4b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/blocked/BlockedRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/blocked/BlockedRelayListView.kt @@ -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, + ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/broadcast/BroadcastRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/broadcast/BroadcastRelayListView.kt index 74cf76eb6..47edbe10a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/broadcast/BroadcastRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/broadcast/BroadcastRelayListView.kt @@ -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, + ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/RelaySuggestionState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/RelaySuggestionState.kt index 538df3e00..8f3154a04 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/RelaySuggestionState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/RelaySuggestionState.kt @@ -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() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/RelayUrlEditField.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/RelayUrlEditField.kt index cdbf1a048..c30d5fb08 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/RelayUrlEditField.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/RelayUrlEditField.kt @@ -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, ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/ShowRelaySuggestionList.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/ShowRelaySuggestionList.kt index 8ce412ce6..f9ce3b5a6 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/ShowRelaySuggestionList.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/common/ShowRelaySuggestionList.kt @@ -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), - ) -} diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/dm/DMRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/dm/DMRelayListView.kt index 7b772ebb9..58c13a268 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/dm/DMRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/dm/DMRelayListView.kt @@ -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, + ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/favorites/FavoriteRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/favorites/FavoriteRelayListView.kt index f8af962a3..bbdcf80b8 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/favorites/FavoriteRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/favorites/FavoriteRelayListView.kt @@ -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, + ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/indexer/IndexerRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/indexer/IndexerRelayListView.kt index cd7700ed7..240a77d76 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/indexer/IndexerRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/indexer/IndexerRelayListView.kt @@ -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, + ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/local/LocalRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/local/LocalRelayListView.kt index 906364321..6d51d140b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/local/LocalRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/local/LocalRelayListView.kt @@ -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, + ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip37/PrivateOutboxRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip37/PrivateOutboxRelayListView.kt index f0aa41cca..2be8b332f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip37/PrivateOutboxRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip37/PrivateOutboxRelayListView.kt @@ -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, + ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip65/Nip65RelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip65/Nip65RelayListView.kt index 9b4f3a6bf..ffdd6199a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip65/Nip65RelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip65/Nip65RelayListView.kt @@ -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, + ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/proxy/ProxyRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/proxy/ProxyRelayListView.kt index 409edf821..f7b5ac5e1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/proxy/ProxyRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/proxy/ProxyRelayListView.kt @@ -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, + ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/search/SearchRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/search/SearchRelayListView.kt index c28dc4a7b..8dcfeafb0 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/search/SearchRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/search/SearchRelayListView.kt @@ -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, + ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/trusted/TrustedRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/trusted/TrustedRelayListView.kt index 1884774df..450f86e09 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/trusted/TrustedRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/trusted/TrustedRelayListView.kt @@ -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, + ) } }