diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaView.kt index 014e69e99..f772dedc0 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaView.kt @@ -107,7 +107,8 @@ fun NewMediaView(uri: Uri, onClose: () -> Unit, postViewModel: NewMediaModel, ac onPost = { relayList = it }, - account = account + accountViewModel = accountViewModel, + nav = nav ) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt index cf72d36f4..0aa09784e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt @@ -163,7 +163,8 @@ fun NewPostView(onClose: () -> Unit, baseReplyTo: Note? = null, quote: Note? = n onPost = { relayList = it }, - account = account + accountViewModel = accountViewModel, + nav = nav ) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt index 9d0bc2ee5..a2becfb94 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt @@ -1,7 +1,8 @@ package com.vitorpamplona.amethyst.ui.actions import android.widget.Toast -import androidx.compose.foundation.clickable +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -26,8 +27,9 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties -import com.vitorpamplona.amethyst.model.Account +import com.vitorpamplona.amethyst.model.RelayInformation import com.vitorpamplona.amethyst.service.relays.Relay +import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import kotlinx.coroutines.launch data class RelayList( @@ -35,15 +37,22 @@ data class RelayList( val isSelected: Boolean ) +@OptIn(ExperimentalFoundationApi::class) @Composable -fun RelaySelectionDialog(list: List, onClose: () -> Unit, onPost: (list: List) -> Unit, account: Account) { +fun RelaySelectionDialog( + list: List, + onClose: () -> Unit, + onPost: (list: List) -> Unit, + accountViewModel: AccountViewModel, + nav: (String) -> Unit +) { val scope = rememberCoroutineScope() val context = LocalContext.current - val relayList = account.activeRelays()?.filter { + val relayList = accountViewModel.account.activeRelays()?.filter { it.write }?.map { it - } ?: account.convertLocalRelays().filter { + } ?: accountViewModel.account.convertLocalRelays().filter { it.write } @@ -57,6 +66,18 @@ fun RelaySelectionDialog(list: List, onClose: () -> Unit, onPost: (list: } ) } + var relayInfo: RelayInformation? by remember { mutableStateOf(null) } + + if (relayInfo != null) { + RelayInformationDialog( + onClose = { + relayInfo = null + }, + relayInfo = relayInfo!!, + accountViewModel, + nav + ) + } Dialog( onDismissRequest = { onClose() }, @@ -95,8 +116,8 @@ fun RelaySelectionDialog(list: List, onClose: () -> Unit, onPost: (list: if (selectedRelays.isEmpty()) { scope.launch { Toast.makeText(context, "Select a relay to continue", Toast.LENGTH_SHORT).show() - return@launch } + return@PostButton } onPost(selectedRelays.map { it.relay }) onClose() @@ -120,17 +141,29 @@ fun RelaySelectionDialog(list: List, onClose: () -> Unit, onPost: (list: verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() - .clickable { - relays = relays.mapIndexed { j, item -> - if (index == j) { - item.copy(isSelected = !item.isSelected) - } else { - item + .combinedClickable( + onClick = { + relays = relays.mapIndexed { j, item -> + if (index == j) { + item.copy(isSelected = !item.isSelected) + } else { + item + } + } + }, + onLongClick = { + loadRelayInfo(item.relay.url, context, scope) { + relayInfo = it } } - } + ) ) { - Text(text = item.relay.url) + Text( + item.relay.url + .removePrefix("ws://") + .removePrefix("wss://") + .removeSuffix("/") + ) Switch( checked = item.isSelected, onCheckedChange = {