From 53acbd860660dd1f1ba5098a8d1f2819e2806e4a Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Mon, 2 Sep 2024 07:15:59 -0300 Subject: [PATCH 1/2] Long press to copy relay url --- .../ui/actions/relays/Kind3RelayListView.kt | 12 +++++++++++- .../ui/actions/relays/RelayNameAndRemoveButton.kt | 15 +++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt index 9b1ccebdea..873c8e2dd8 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt @@ -59,8 +59,10 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -677,6 +679,7 @@ private fun ActiveToggles( } } +@OptIn(ExperimentalFoundationApi::class) @Composable private fun FirstLine( item: Kind3BasicRelaySetupInfo, @@ -684,11 +687,18 @@ private fun FirstLine( onDelete: (Kind3BasicRelaySetupInfo) -> Unit, modifier: Modifier, ) { + val clipboardManager = LocalClipboardManager.current Row(verticalAlignment = Alignment.CenterVertically, modifier = modifier) { Row(Modifier.weight(1f), verticalAlignment = Alignment.CenterVertically) { Text( text = item.briefInfo.displayUrl, - modifier = Modifier.clickable(onClick = onClick), + modifier = + Modifier.combinedClickable( + onClick = onClick, + onLongClick = { + clipboardManager.setText(AnnotatedString(item.briefInfo.url)) + }, + ), maxLines = 1, overflow = TextOverflow.Ellipsis, ) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayNameAndRemoveButton.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayNameAndRemoveButton.kt index 4d71d403f8..eeba9d2d10 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayNameAndRemoveButton.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayNameAndRemoveButton.kt @@ -20,7 +20,8 @@ */ package com.vitorpamplona.amethyst.ui.actions.relays -import androidx.compose.foundation.clickable +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size @@ -34,6 +35,8 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.vitorpamplona.amethyst.R @@ -41,6 +44,7 @@ import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.theme.WarningColor import com.vitorpamplona.amethyst.ui.theme.allGoodColor +@OptIn(ExperimentalFoundationApi::class) @Composable fun RelayNameAndRemoveButton( item: BasicRelaySetupInfo, @@ -48,11 +52,18 @@ fun RelayNameAndRemoveButton( onDelete: (BasicRelaySetupInfo) -> Unit, modifier: Modifier, ) { + val clipboardManager = LocalClipboardManager.current Row(verticalAlignment = Alignment.CenterVertically, modifier = modifier) { Row(Modifier.weight(1f), verticalAlignment = Alignment.CenterVertically) { Text( text = item.briefInfo.displayUrl, - modifier = Modifier.clickable(onClick = onClick), + modifier = + Modifier.combinedClickable( + onClick = onClick, + onLongClick = { + clipboardManager.setText(AnnotatedString(item.briefInfo.url)) + }, + ), maxLines = 1, overflow = TextOverflow.Ellipsis, ) From bba7c257da6d6b978432358e0c738b2ab0455a2c Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Mon, 2 Sep 2024 09:52:39 -0300 Subject: [PATCH 2/2] long press to copy relay url in the relay icons and relay row --- .../relays/BasicRelaySetupInfoClickableRow.kt | 18 ++++++++++++++++-- .../ui/actions/relays/Kind3RelayListView.kt | 14 ++++++++++++-- .../amethyst/ui/note/RelayListRow.kt | 12 ++++++++++-- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoClickableRow.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoClickableRow.kt index 02625904e4..a132182128 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoClickableRow.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/BasicRelaySetupInfoClickableRow.kt @@ -20,7 +20,8 @@ */ package com.vitorpamplona.amethyst.ui.actions.relays -import androidx.compose.foundation.clickable +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -31,6 +32,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.text.AnnotatedString import com.vitorpamplona.amethyst.service.Nip11CachedRetriever import com.vitorpamplona.amethyst.ui.note.RenderRelayIcon import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel @@ -41,6 +44,7 @@ import com.vitorpamplona.amethyst.ui.theme.HalfVertPadding import com.vitorpamplona.amethyst.ui.theme.ReactionRowHeightChatMaxWidth import com.vitorpamplona.amethyst.ui.theme.largeRelayIconModifier +@OptIn(ExperimentalFoundationApi::class) @Composable fun BasicRelaySetupInfoClickableRow( item: BasicRelaySetupInfo, @@ -50,7 +54,17 @@ fun BasicRelaySetupInfoClickableRow( onClick: () -> Unit, accountViewModel: AccountViewModel, ) { - Column(Modifier.fillMaxWidth().clickable(onClick = onClick)) { + val clipboardManager = LocalClipboardManager.current + Column( + Modifier + .fillMaxWidth() + .combinedClickable( + onClick = onClick, + onLongClick = { + clipboardManager.setText(AnnotatedString(item.briefInfo.url)) + }, + ), + ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = HalfVertPadding, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt index 873c8e2dd8..8afe0ecc8d 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/Kind3RelayListView.kt @@ -22,7 +22,6 @@ package com.vitorpamplona.amethyst.ui.actions.relays import android.widget.Toast import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.clickable import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -294,6 +293,7 @@ fun LoadRelayInfo( ) } +@OptIn(ExperimentalFoundationApi::class) @Composable fun ClickableRelayItem( item: Kind3BasicRelaySetupInfo, @@ -309,7 +309,17 @@ fun ClickableRelayItem( onDelete: (Kind3BasicRelaySetupInfo) -> Unit, onClick: () -> Unit, ) { - Column(Modifier.fillMaxWidth().clickable(onClick = onClick)) { + val clipboardManager = LocalClipboardManager.current + Column( + Modifier + .fillMaxWidth() + .combinedClickable( + onClick = onClick, + onLongClick = { + clipboardManager.setText(AnnotatedString(item.briefInfo.url)) + }, + ), + ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(vertical = 5.dp), diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/RelayListRow.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/RelayListRow.kt index 6fb0691fc0..fe35793bf1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/RelayListRow.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/RelayListRow.kt @@ -20,8 +20,9 @@ */ package com.vitorpamplona.amethyst.ui.note +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background -import androidx.compose.foundation.clickable +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding @@ -42,6 +43,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -109,6 +112,7 @@ fun ChatRelayExpandButton(onClick: () -> Unit) { } } +@OptIn(ExperimentalFoundationApi::class) @Composable fun RenderRelay( relay: RelayBriefInfoCache.RelayBriefInfo, @@ -143,11 +147,15 @@ fun RenderRelay( ) } + val clipboardManager = LocalClipboardManager.current val clickableModifier = remember(relay) { Modifier .size(Size17dp) - .clickable( + .combinedClickable( + onLongClick = { + clipboardManager.setText(AnnotatedString(relay.url)) + }, onClick = { accountViewModel.retrieveRelayDocument( relay.url,