Merge branch 'main' into claude/migrate-autofill-apis-kQZDc

This commit is contained in:
Vitor Pamplona
2026-03-28 14:58:01 -04:00
committed by GitHub
39 changed files with 100 additions and 79 deletions
@@ -40,7 +40,7 @@ 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.platform.LocalClipboard
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R
@@ -119,7 +119,7 @@ fun InformationDialog(
horizontalArrangement = Arrangement.SpaceBetween,
) {
moreInfo?.let {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
TextButton(onClick = {
clipboardManager.setText(AnnotatedString(it))
}) {
@@ -44,14 +44,13 @@ 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.LocalClipboard
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextDirection
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.core.content.ContextCompat.startActivity
import androidx.core.net.toUri
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.hashtags.Cashu
@@ -142,7 +141,7 @@ fun CashuPreviewNew(
toast: (String, String) -> Unit,
) {
val context = LocalContext.current
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
Card(
modifier = CashuCardBorders,
@@ -217,7 +216,7 @@ fun CashuPreviewNew(
val intent = Intent(Intent.ACTION_VIEW, "cashu://${token.token}".toUri())
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(context, intent, null)
context.startActivity(intent)
} catch (e: Exception) {
if (e is CancellationException) throw e
toast(stringRes(context, R.string.cashu), stringRes(context, R.string.cashu_no_wallet_found))
@@ -26,7 +26,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextOverflow
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
@@ -37,7 +37,7 @@ fun ClickableRelayUrl(
relayUrl: String,
nav: INav,
) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val clickableModifier =
remember(relayUrl) {
Modifier
@@ -33,7 +33,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextOverflow
@@ -59,7 +59,7 @@ fun UrlPreviewCard(
}
if (popupExpanded.value) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
M3ActionDialog(
title = stringRes(R.string.link_actions_dialog_title),
onDismiss = { popupExpanded.value = false },
@@ -59,7 +59,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.AnnotatedString
@@ -771,7 +771,7 @@ fun ShareMediaAction(
title = stringRes(R.string.media_actions_dialog_title),
onDismiss = { if (!isDownloadingVideo.value) onDismiss() },
) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
// Copy & Gallery section
if ((videoUri != null && !videoUri.startsWith("file")) || postNostrUri != null) {
@@ -67,7 +67,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.AnnotatedString
@@ -265,7 +265,7 @@ fun CardBody(
) {
val context = LocalContext.current
val primaryLight = lightenColor(MaterialTheme.colorScheme.primary, 0.1f)
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val scope = rememberCoroutineScope()
val showToast = { stringRes: Int ->
@@ -42,7 +42,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.tooling.preview.Preview
@@ -129,7 +129,7 @@ fun RenderRelay(
) {
val relayInfo by loadRelayInfo(relay)
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val clickableModifier =
remember(relay) {
Modifier
@@ -88,7 +88,7 @@ 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.LocalClipboard
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.input.ImeAction
@@ -147,7 +147,7 @@ fun UpdateZapAmountContent(
accountViewModel: AccountViewModel,
) {
val context = LocalContext.current
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val uri = LocalUriHandler.current
val zapTypes =
@@ -46,10 +46,9 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.AnnotatedString
import androidx.core.content.ContextCompat
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.AddressableNote
@@ -167,7 +166,7 @@ fun NoteDropDownMenu(
title = stringRes(R.string.note_actions_dialog_title),
onDismiss = onDismiss,
) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val actContext = LocalContext.current
val scope = rememberCoroutineScope()
@@ -223,7 +222,7 @@ fun NoteDropDownMenu(
putExtra(Intent.EXTRA_TITLE, stringRes(actContext, R.string.quick_action_share_browser_link))
}
val shareIntent = Intent.createChooser(sendIntent, stringRes(actContext, R.string.quick_action_share))
ContextCompat.startActivity(actContext, shareIntent, null)
actContext.startActivity(shareIntent)
onDismiss()
}
}
@@ -47,7 +47,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.font.FontWeight
@@ -93,7 +93,7 @@ fun RenderAppDefinition(
metadata?.let { theAppMetadata ->
Box {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val uri = LocalUriHandler.current
if (!theAppMetadata.banner.isNullOrBlank()) {
@@ -57,7 +57,6 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.core.content.ContextCompat
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.model.EmptyTagList
@@ -519,7 +518,7 @@ fun ShareCommunityButton(
val shareIntent =
Intent.createChooser(sendIntent, stringRes(actContext, R.string.quick_action_share))
ContextCompat.startActivity(actContext, shareIntent, null)
actContext.startActivity(shareIntent)
},
) {
Icon(
@@ -37,7 +37,7 @@ 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.LocalClipboard
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
@@ -410,7 +410,7 @@ private fun RelayOptionsAction(
nav: INav,
) {
val isCurrentlyOnTheUsersList by observeUserRelayIntoList(relay, accountViewModel)
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
if (isCurrentlyOnTheUsersList) {
AddRelayButton {
@@ -27,7 +27,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ScrollableTabRow
import androidx.compose.material3.SecondaryScrollableTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -110,7 +110,7 @@ private fun RenderBookmarkScreen(
topBar = {
Column {
TopBarWithBackButton(stringRes(id = R.string.bookmarks_title), nav::popBack)
ScrollableTabRow(
SecondaryScrollableTabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
selectedTabIndex = pagerState.currentPage,
@@ -41,10 +41,9 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.AnnotatedString
import androidx.core.content.ContextCompat
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.Note
@@ -160,7 +159,7 @@ fun BookmarkGroupItemOptionsMenu(
title = stringRes(R.string.bookmark_item_actions_dialog_title),
onDismiss = onDismiss,
) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val actContext = LocalContext.current
val scope = rememberCoroutineScope()
@@ -237,7 +236,7 @@ fun BookmarkGroupItemOptionsMenu(
val shareIntent =
Intent.createChooser(sendIntent, stringRes(actContext, R.string.quick_action_share))
ContextCompat.startActivity(actContext, shareIntent, null)
actContext.startActivity(shareIntent)
onDismiss()
}
}
@@ -39,8 +39,8 @@ import androidx.compose.material3.IconButton
import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SecondaryTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.TabRow
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
@@ -279,7 +279,7 @@ fun BookmarkGroupHeaderTabs(
}
}
TabRow(
SecondaryTabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
selectedTabIndex = pagerState.currentPage,
@@ -41,7 +41,7 @@ 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.platform.LocalClipboard
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
@@ -238,7 +238,7 @@ fun RenderRelayLinePublicChat(
@Suppress("ProduceStateDoesNotAssignValue")
val relayInfo by loadRelayInfo(relay)
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val clickableModifier =
remember(relay) {
Modifier.combinedClickable(
@@ -34,8 +34,8 @@ import androidx.compose.material.icons.outlined.MoveToInbox
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SecondaryTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.TabRow
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
@@ -80,7 +80,7 @@ fun MessagesTabHeader(
val coroutineScope = rememberCoroutineScope()
Box(Modifier.fillMaxWidth()) {
TabRow(
SecondaryTabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
selectedTabIndex = pagerState.currentPage,
@@ -30,9 +30,9 @@ import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SecondaryTabRow
import androidx.compose.material3.Surface
import androidx.compose.material3.Tab
import androidx.compose.material3.TabRow
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
@@ -167,7 +167,7 @@ fun CommunityScreen(
}
}
TabRow(
SecondaryTabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
modifier = TabRowHeight,
@@ -41,7 +41,7 @@ import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ScrollableTabRow
import androidx.compose.material3.SecondaryScrollableTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -219,7 +219,7 @@ private fun DiscoverPages(
topBar = {
Column {
DiscoveryTopBar(accountViewModel, nav)
ScrollableTabRow(
SecondaryScrollableTabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
selectedTabIndex = pagerState.currentPage,
@@ -40,10 +40,10 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SecondaryTabRow
import androidx.compose.material3.Surface
import androidx.compose.material3.Switch
import androidx.compose.material3.Tab
import androidx.compose.material3.TabRow
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@@ -268,7 +268,7 @@ private fun MarkdownPostScreenBody(
HorizontalDivider(modifier = Modifier.padding(vertical = Size5dp))
// Edit / Preview tabs
TabRow(
SecondaryTabRow(
selectedTabIndex = if (postViewModel.showPreview) 1 else 0,
) {
Tab(
@@ -39,8 +39,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SecondaryTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.TabRow
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
@@ -274,7 +274,7 @@ private fun FollowPackFeedTopBar(
)
}
TabRow(
SecondaryTabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
modifier = TabRowHeight,
@@ -37,8 +37,8 @@ import androidx.compose.foundation.pager.PagerState
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.SecondaryTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.TabRow
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
@@ -178,7 +178,7 @@ private fun HomePages(
topBar = {
Column {
HomeTopBar(accountViewModel, nav)
TabRow(
SecondaryTabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
modifier = TabRowHeight,
@@ -64,7 +64,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.autofill.ContentType
import androidx.compose.ui.platform.ClipboardManager
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.semantics.contentType
import androidx.compose.ui.semantics.semantics
@@ -257,7 +257,7 @@ private fun AccountBackupScreenContent(
@Composable
private fun NSecCopyButton(accountViewModel: AccountViewModel) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val context = LocalContext.current
val scope = rememberCoroutineScope()
@@ -305,7 +305,7 @@ private fun EncryptNSecCopyButton(
accountViewModel: AccountViewModel,
password: MutableState<TextFieldValue>,
) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val context = LocalContext.current
val scope = rememberCoroutineScope()
@@ -52,8 +52,8 @@ import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SecondaryTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.TabRow
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
@@ -70,7 +70,6 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import com.vitorpamplona.amethyst.R
@@ -164,7 +163,7 @@ private fun TopAppTabs(
viewModel: PeopleListViewModel,
pagerState: PagerState,
) {
TabRow(
SecondaryTabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
selectedTabIndex = pagerState.currentPage,
@@ -448,7 +447,7 @@ private fun ListActionsMenuButton(
val shareIntent =
Intent.createChooser(sendIntent, stringRes(context, R.string.quick_action_share))
ContextCompat.startActivity(context, shareIntent, null)
context.startActivity(shareIntent)
isActionListOpen.value = false
}
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.follow_set_edit_list_metadata)) {
@@ -63,7 +63,6 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import com.vitorpamplona.amethyst.R
@@ -303,7 +302,7 @@ private fun ListActionsMenuButton(
val shareIntent =
Intent.createChooser(sendIntent, stringRes(context, R.string.quick_action_share))
ContextCompat.startActivity(context, shareIntent, null)
context.startActivity(shareIntent)
isActionListOpen.value = false
}
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.follow_pack_edit_list_metadata)) {
@@ -36,7 +36,7 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ScrollableTabRow
import androidx.compose.material3.SecondaryScrollableTabRow
import androidx.compose.material3.Surface
import androidx.compose.material3.Tab
import androidx.compose.material3.Text
@@ -410,7 +410,7 @@ private fun RenderScreen(
Column {
ProfileHeader(baseUser, appRecommendations, externalIdentities, nav, accountViewModel)
ScrollableTabRow(
SecondaryScrollableTabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
selectedTabIndex = pagerState.currentPage,
@@ -32,7 +32,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp
import coil3.compose.AsyncImage
@@ -63,7 +63,7 @@ fun DrawBanner(
accountViewModel: AccountViewModel,
) {
if (!banner.isNullOrBlank()) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
var zoomImageDialogOpen by remember { mutableStateOf(false) }
AsyncImage(
@@ -28,7 +28,7 @@ import androidx.compose.material.icons.outlined.ContentCopy
import androidx.compose.material.icons.outlined.Report
import androidx.compose.material.icons.outlined.Share
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.AnnotatedString
import com.vitorpamplona.amethyst.R
@@ -54,7 +54,7 @@ fun UserProfileDropDownMenu(
title = stringRes(R.string.profile_actions_dialog_title),
onDismiss = onDismiss,
) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
val context = LocalContext.current
// Share section
@@ -29,7 +29,7 @@ import androidx.compose.material3.HorizontalDivider
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -94,7 +94,7 @@ private fun RenderRelayRow(
accountViewModel: AccountViewModel,
nav: INav,
) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
RelayCompose(
relay,
accountViewModel = accountViewModel,
@@ -34,7 +34,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.text.AnnotatedString
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.nip11RelayInfo.Nip11CachedRetriever
@@ -67,7 +67,7 @@ fun BasicRelaySetupInfoClickableRow(
accountViewModel: AccountViewModel,
nav: INav,
) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
Column(
Modifier
.fillMaxWidth()
@@ -35,7 +35,7 @@ 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.platform.LocalClipboard
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
@@ -54,7 +54,7 @@ fun RelayNameAndRemoveButton(
onDelete: ((BasicRelaySetupInfo) -> Unit)?,
modifier: Modifier,
) {
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
Row(verticalAlignment = Alignment.CenterVertically, modifier = modifier) {
Row(Modifier.weight(1f), verticalAlignment = Alignment.CenterVertically) {
Text(
@@ -51,7 +51,7 @@ import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.ScrollableTabRow
import androidx.compose.material3.SecondaryScrollableTabRow
import androidx.compose.material3.Snackbar
import androidx.compose.material3.Tab
import androidx.compose.material3.Text
@@ -272,7 +272,7 @@ private fun RelayManagementContent(
}
if (tabs.isNotEmpty()) {
ScrollableTabRow(
SecondaryScrollableTabRow(
selectedTabIndex = selectedTab.coerceAtMost(tabs.size - 1),
edgePadding = 8.dp,
) {
@@ -38,7 +38,7 @@ import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.ScrollableTabRow
import androidx.compose.material3.SecondaryScrollableTabRow
import androidx.compose.material3.Switch
import androidx.compose.material3.Tab
import androidx.compose.material3.Text
@@ -171,7 +171,7 @@ fun SecurityFiltersScreen(
HorizontalDivider(thickness = DividerThickness)
ScrollableTabRow(
SecondaryScrollableTabRow(
containerColor = MaterialTheme.colorScheme.background,
contentColor = MaterialTheme.colorScheme.onBackground,
edgePadding = 8.dp,
@@ -723,11 +723,13 @@
<string name="relay_monitor_rtt_open">Otevření</string>
<string name="relay_monitor_rtt_read">Čtení</string>
<string name="relay_monitor_rtt_write">Zápis</string>
<string name="relay_monitor_rtt">RTT</string>
<string name="relay_monitor_network">Síť</string>
<string name="relay_monitor_relay_type">Typ</string>
<string name="relay_monitor_supported_nips">Podporované NIP</string>
<string name="relay_monitor_requirements">Požadavky</string>
<string name="relay_monitor_last_check">Poslední kontrola</string>
<string name="relay_monitor_ms">%1$d ms</string>
<string name="relay_active_subscriptions">Aktivní odběry</string>
<string name="relay_active_outbox">Čekající události k odeslání</string>
<string name="relay_req_subscriptions">REQ odběry (%1$d)</string>
@@ -1620,6 +1622,7 @@
<string name="namecoin_device_info">Informace o zařízení</string>
<string name="namecoin_tls_info">Informace o TLS</string>
<string name="namecoin_no_test_yet">Zatím nebyl proveden žádný test</string>
<string name="namecoin_response_time">%dms</string>
<string name="namecoin_pin_cert_title">Důvěřovat certifikátu serveru?</string>
<string name="namecoin_pin_cert_body">Server %1$s předložil certifikát, který dosud není ve vašem úložišti důvěry. Ověřte, že otisk níže odpovídá tomu, co zveřejnil provozovatel serveru, a poté zvolte, zda mu budete důvěřovat pro budoucí připojení.</string>
<string name="namecoin_pin_cert_accept">Důvěřovat</string>
@@ -1735,12 +1738,15 @@
<string name="goal_closed">Tento cíl byl ukončen</string>
<string name="goal_progress">%1$s financováno z %2$s sats cíle</string>
<string name="goal_amount_label">Cílová částka (sats)</string>
<string name="goal_amount_placeholder">100000</string>
<string name="goal_description_label">Popište svůj cíl</string>
<string name="goal_description_placeholder">Na co sbíráte prostředky?</string>
<string name="goal_summary_label">Krátký souhrn</string>
<string name="goal_summary_placeholder">Stručný popis zobrazený v náhledech</string>
<string name="goal_image_label">URL obrázku (volitelné)</string>
<string name="goal_image_placeholder">https://example.com/image.jpg</string>
<string name="goal_website_label">URL webu (volitelné)</string>
<string name="goal_website_placeholder">https://example.com</string>
<string name="goal_deadline_label">Termín (volitelný)</string>
<string name="goal_set_deadline">Nastavit termín</string>
<string name="new_goal">Nový cíl</string>
@@ -1769,6 +1775,7 @@
<string name="vanish_events_empty_hint">Zatím jste neodeslali žádné události Žádost o zmizení.</string>
<string name="vanish_target_relays_label">Cílové relé</string>
<string name="vanish_all_relays_compliance_hint">Tento požadavek cílí na všechna relé. Použijte obrazovku Žádost o zmizení k otestování konkrétních relé na shodu.</string>
<string name="vanish_test_button">Testovat</string>
<string name="vanish_compliant">Vyhovující</string>
<string name="vanish_non_compliant">Nevyhovující</string>
<string name="vanish_test_error">Chyba</string>
@@ -728,11 +728,13 @@ anz der Bedingungen ist erforderlich</string>
<string name="relay_monitor_rtt_open">Öffnen</string>
<string name="relay_monitor_rtt_read">Lesen</string>
<string name="relay_monitor_rtt_write">Schreiben</string>
<string name="relay_monitor_rtt">RTT</string>
<string name="relay_monitor_network">Netzwerk</string>
<string name="relay_monitor_relay_type">Typ</string>
<string name="relay_monitor_supported_nips">Unterstützte NIPs</string>
<string name="relay_monitor_requirements">Anforderungen</string>
<string name="relay_monitor_last_check">Letzte Prüfung</string>
<string name="relay_monitor_ms">%1$d ms</string>
<string name="relay_active_subscriptions">Aktive Abonnements</string>
<string name="relay_active_outbox">Ausstehende Outbox-Ereignisse</string>
<string name="relay_req_subscriptions">REQ-Abonnements (%1$d)</string>
@@ -1625,6 +1627,7 @@ anz der Bedingungen ist erforderlich</string>
<string name="namecoin_device_info">Geräteinformationen</string>
<string name="namecoin_tls_info">TLS-Informationen</string>
<string name="namecoin_no_test_yet">Noch kein Test durchgeführt</string>
<string name="namecoin_response_time">%dms</string>
<string name="namecoin_pin_cert_title">Serverzertifikat vertrauen?</string>
<string name="namecoin_pin_cert_body">Der Server %1$s hat ein Zertifikat vorgelegt, das noch nicht in deinem Vertrauensspeicher ist. Überprüfe, ob der Fingerabdruck unten mit dem übereinstimmt, was der Serverbetreiber veröffentlicht hat, und wähle dann, ob du ihm für zukünftige Verbindungen vertrauen möchtest.</string>
<string name="namecoin_pin_cert_accept">Vertrauen</string>
@@ -1740,12 +1743,15 @@ anz der Bedingungen ist erforderlich</string>
<string name="goal_closed">Dieses Ziel wurde geschlossen</string>
<string name="goal_progress">%1$s finanziert von %2$s Sats Ziel</string>
<string name="goal_amount_label">Zielbetrag (Sats)</string>
<string name="goal_amount_placeholder">100000</string>
<string name="goal_description_label">Beschreibe dein Ziel</string>
<string name="goal_description_placeholder">Wofür sammelst du Geld?</string>
<string name="goal_summary_label">Kurze Zusammenfassung</string>
<string name="goal_summary_placeholder">Kurze Beschreibung für Vorschauen</string>
<string name="goal_image_label">Bild-URL (optional)</string>
<string name="goal_image_placeholder">https://example.com/image.jpg</string>
<string name="goal_website_label">Website-URL (optional)</string>
<string name="goal_website_placeholder">https://beispiel.com</string>
<string name="goal_deadline_label">Frist (optional)</string>
<string name="goal_set_deadline">Frist festlegen</string>
<string name="new_goal">Neues Ziel</string>
@@ -1788,6 +1794,7 @@ anz der Bedingungen ist erforderlich</string>
<string name="relay_management_tab_pubkeys">Benutzer</string>
<string name="relay_management_tab_events">Ereignisse</string>
<string name="relay_management_tab_kinds">Arten</string>
<string name="relay_management_tab_ips">IPs</string>
<string name="relay_management_tab_settings">Einstellungen</string>
<string name="relay_management_banned_pubkeys">Gesperrte Benutzer</string>
<string name="relay_management_no_banned_pubkeys">Keine gesperrten Benutzer</string>
@@ -723,11 +723,13 @@
<string name="relay_monitor_rtt_open">Abrir</string>
<string name="relay_monitor_rtt_read">Leitura</string>
<string name="relay_monitor_rtt_write">Escrita</string>
<string name="relay_monitor_rtt">RTT</string>
<string name="relay_monitor_network">Rede</string>
<string name="relay_monitor_relay_type">Tipo</string>
<string name="relay_monitor_supported_nips">NIPs Suportados</string>
<string name="relay_monitor_requirements">Requisitos</string>
<string name="relay_monitor_last_check">Última verificação</string>
<string name="relay_monitor_ms">%1$d ms</string>
<string name="relay_active_subscriptions">Assinaturas Ativas</string>
<string name="relay_active_outbox">Eventos Pendentes na Outbox</string>
<string name="relay_req_subscriptions">Assinaturas REQ (%1$d)</string>
@@ -1620,6 +1622,7 @@
<string name="namecoin_device_info">Informações do Dispositivo</string>
<string name="namecoin_tls_info">Informações TLS</string>
<string name="namecoin_no_test_yet">Nenhum teste realizado ainda</string>
<string name="namecoin_response_time">%dms</string>
<string name="namecoin_pin_cert_title">Confiar no Certificado do Servidor?</string>
<string name="namecoin_pin_cert_body">O servidor %1$s apresentou um certificado que ainda não está no seu armazenamento de confiança. Verifique se a impressão digital abaixo corresponde ao que o operador do servidor publicou e escolha se deseja confiar nele para conexões futuras.</string>
<string name="namecoin_pin_cert_accept">Confiar</string>
@@ -1735,12 +1738,15 @@
<string name="goal_closed">Esta meta foi encerrada</string>
<string name="goal_progress">%1$s financiado de %2$s sats da meta</string>
<string name="goal_amount_label">Valor da meta (sats)</string>
<string name="goal_amount_placeholder">100000</string>
<string name="goal_description_label">Descreva sua meta</string>
<string name="goal_description_placeholder">Para que você está arrecadando fundos?</string>
<string name="goal_summary_label">Resumo curto</string>
<string name="goal_summary_placeholder">Breve descrição mostrada nas prévias</string>
<string name="goal_image_label">URL da imagem (opcional)</string>
<string name="goal_image_placeholder">https://exemplo.com.br/imagem.jpg</string>
<string name="goal_website_label">URL do site (opcional)</string>
<string name="goal_website_placeholder">https://exemplo.com</string>
<string name="goal_deadline_label">Prazo (opcional)</string>
<string name="goal_set_deadline">Definir um prazo</string>
<string name="new_goal">Nova Meta</string>
@@ -1783,6 +1789,7 @@
<string name="relay_management_tab_pubkeys">Usuários</string>
<string name="relay_management_tab_events">Eventos</string>
<string name="relay_management_tab_kinds">Tipos</string>
<string name="relay_management_tab_ips">IPs</string>
<string name="relay_management_tab_settings">Configurações</string>
<string name="relay_management_banned_pubkeys">Usuários Banidos</string>
<string name="relay_management_no_banned_pubkeys">Nenhum usuário banido</string>
@@ -722,11 +722,13 @@
<string name="relay_monitor_rtt_open">Öppna</string>
<string name="relay_monitor_rtt_read">Läs</string>
<string name="relay_monitor_rtt_write">Skriv</string>
<string name="relay_monitor_rtt">RTT</string>
<string name="relay_monitor_network">Nätverk</string>
<string name="relay_monitor_relay_type">Typ</string>
<string name="relay_monitor_supported_nips">NIP som stöds</string>
<string name="relay_monitor_requirements">Krav</string>
<string name="relay_monitor_last_check">Senaste kontroll</string>
<string name="relay_monitor_ms">%1$d ms</string>
<string name="relay_active_subscriptions">Aktiva prenumerationer</string>
<string name="relay_active_outbox">Väntande utgående händelser</string>
<string name="relay_req_subscriptions">REQ-prenumerationer (%1$d)</string>
@@ -1619,6 +1621,7 @@
<string name="namecoin_device_info">Enhetsinformation</string>
<string name="namecoin_tls_info">TLS-information</string>
<string name="namecoin_no_test_yet">Inget test har körts ännu</string>
<string name="namecoin_response_time">%dms</string>
<string name="namecoin_pin_cert_title">Lita på servercertifikat?</string>
<string name="namecoin_pin_cert_body">Servern %1$s presenterade ett certifikat som ännu inte finns i ditt förtroendelager. Verifiera att fingeravtrycket nedan matchar det som serveroperatören publicerat och välj sedan om du vill lita på det för framtida anslutningar.</string>
<string name="namecoin_pin_cert_accept">Lita på</string>
@@ -1734,12 +1737,15 @@
<string name="goal_closed">Detta mål har avslutats</string>
<string name="goal_progress">%1$s finansierat av %2$s sats mål</string>
<string name="goal_amount_label">Målbelopp (sats)</string>
<string name="goal_amount_placeholder">100000</string>
<string name="goal_description_label">Beskriv ditt mål</string>
<string name="goal_description_placeholder">Vad samlar du in pengar till?</string>
<string name="goal_summary_label">Kort sammanfattning</string>
<string name="goal_summary_placeholder">Kort beskrivning som visas i förhandsvisningar</string>
<string name="goal_image_label">Bild-URL (valfritt)</string>
<string name="goal_image_placeholder">https://example.com/image.jpg</string>
<string name="goal_website_label">Webbplats-URL (valfritt)</string>
<string name="goal_website_placeholder">https://exempel.se</string>
<string name="goal_deadline_label">Tidsfrist (valfritt)</string>
<string name="goal_set_deadline">Sätt en tidsfrist</string>
<string name="new_goal">Nytt mål</string>
@@ -69,7 +69,7 @@ import androidx.compose.ui.input.key.isMetaPressed
import androidx.compose.ui.input.key.key
import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.input.key.type
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.commons.compose.article.ArticleHeader
import com.vitorpamplona.amethyst.commons.compose.article.TableOfContents
@@ -366,7 +366,7 @@ fun ArticleReaderScreen(
val authorName = authorUser?.toBestDisplayName()
val authorPicture = authorUser?.profilePicture()
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
LaunchedEffect(Unit) {
focusRequester.requestFocus()
@@ -49,7 +49,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
@@ -251,7 +251,7 @@ private fun NostrConnectContent(
val scope = rememberCoroutineScope()
@Suppress("DEPRECATION")
val clipboardManager = LocalClipboardManager.current
val clipboardManager = LocalClipboard.current
if (errorMessage != null) {
Text(