Caches app icons as painters

This commit is contained in:
Vitor Pamplona
2025-05-05 17:08:47 -04:00
parent 15dfbb2f31
commit 7aa71fad3f
28 changed files with 97 additions and 71 deletions
@@ -22,10 +22,14 @@ package com.vitorpamplona.amethyst.ui
import android.content.Context import android.content.Context
import android.util.LruCache import android.util.LruCache
import androidx.annotation.DrawableRes
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.lifecycle.compose.LifecycleResumeEffect import androidx.lifecycle.compose.LifecycleResumeEffect
import com.vitorpamplona.amethyst.logTime
/** /**
* Cache for stringResource because it seems to be > 1ms function in some phones * Cache for stringResource because it seems to be > 1ms function in some phones
@@ -33,6 +37,9 @@ import androidx.lifecycle.compose.LifecycleResumeEffect
private val resourceCache = LruCache<Int, String>(300) private val resourceCache = LruCache<Int, String>(300)
private var resourceCacheLanguage: String? = null private var resourceCacheLanguage: String? = null
// Caches most common icons in the app to avoid using disk
private val iconCache = LruCache<Int, Painter>(30)
fun checkLanguage(currentLanguage: String) { fun checkLanguage(currentLanguage: String) {
if (resourceCacheLanguage == null) { if (resourceCacheLanguage == null) {
resourceCacheLanguage = currentLanguage resourceCacheLanguage = currentLanguage
@@ -118,3 +125,22 @@ fun stringRes(
*args, *args,
) )
} }
@Composable
fun painterRes(
@DrawableRes id: Int,
): Painter {
val cached = iconCache.get(id)
if (cached != null) {
return cached
}
val loaded =
logTime("loading icon") {
painterResource(id)
}
iconCache.put(id, loaded)
return loaded
}
@@ -71,7 +71,6 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextDirection import androidx.compose.ui.text.style.TextDirection
@@ -93,6 +92,7 @@ import com.vitorpamplona.amethyst.ui.note.NoteCompose
import com.vitorpamplona.amethyst.ui.note.creators.invoice.InvoiceRequest import com.vitorpamplona.amethyst.ui.note.creators.invoice.InvoiceRequest
import com.vitorpamplona.amethyst.ui.note.creators.uploads.ImageVideoDescription import com.vitorpamplona.amethyst.ui.note.creators.uploads.ImageVideoDescription
import com.vitorpamplona.amethyst.ui.note.creators.userSuggestions.ShowUserSuggestionList import com.vitorpamplona.amethyst.ui.note.creators.userSuggestions.ShowUserSuggestionList
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton
import com.vitorpamplona.amethyst.ui.screen.loggedIn.PostButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.PostButton
@@ -169,7 +169,7 @@ fun EditPostView(
onClick = { showRelaysDialog = true }, onClick = { showRelaysDialog = true },
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.relays), painter = painterRes(R.drawable.relays),
contentDescription = stringRes(id = R.string.relay_list_selector), contentDescription = stringRes(id = R.string.relay_list_selector),
modifier = Modifier.height(25.dp), modifier = Modifier.height(25.dp),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
@@ -56,7 +56,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -69,6 +68,7 @@ import com.vitorpamplona.amethyst.ui.actions.uploads.ShowImageUploadGallery
import com.vitorpamplona.amethyst.ui.components.SetDialogToEdgeToEdge import com.vitorpamplona.amethyst.ui.components.SetDialogToEdgeToEdge
import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.note.creators.contentWarning.SettingSwitchItem import com.vitorpamplona.amethyst.ui.note.creators.contentWarning.SettingSwitchItem
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton
import com.vitorpamplona.amethyst.ui.screen.loggedIn.PostButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.PostButton
@@ -130,7 +130,7 @@ fun NewMediaView(
onClick = { showRelaysDialog = true }, onClick = { showRelaysDialog = true },
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.relays), painter = painterRes(R.drawable.relays),
contentDescription = stringRes(id = R.string.relay_list_selector), contentDescription = stringRes(id = R.string.relay_list_selector),
modifier = Modifier.height(25.dp), modifier = Modifier.height(25.dp),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
@@ -39,7 +39,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
@@ -49,6 +48,7 @@ import com.vitorpamplona.amethyst.ui.navigation.EmptyNav
import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.navigation.routeToMessage import com.vitorpamplona.amethyst.ui.navigation.routeToMessage
import com.vitorpamplona.amethyst.ui.note.UserPicture import com.vitorpamplona.amethyst.ui.note.UserPicture
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.mockAccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.mockAccountViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -140,7 +140,7 @@ fun ErrorRow(
} ?: stringRes(R.string.error_dialog_talk_to_user) } ?: stringRes(R.string.error_dialog_talk_to_user)
Icon( Icon(
painter = painterResource(R.drawable.ic_dm), painter = painterRes(R.drawable.ic_dm),
contentDescription = descriptor, contentDescription = descriptor,
modifier = Size20Modifier, modifier = Size20Modifier,
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -36,11 +36,11 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.note.elements.TimeAgo import com.vitorpamplona.amethyst.ui.note.elements.TimeAgo
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.NewItemsBubble import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.NewItemsBubble
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.DividerThickness import com.vitorpamplona.amethyst.ui.theme.DividerThickness
@@ -56,7 +56,7 @@ fun ChannelNamePreview() {
ChatHeaderLayout( ChatHeaderLayout(
channelPicture = { channelPicture = {
Image( Image(
painter = painterResource(R.drawable.github), painter = painterRes(R.drawable.github),
contentDescription = stringRes(id = R.string.profile_banner), contentDescription = stringRes(id = R.string.profile_banner),
contentScale = ContentScale.FillWidth, contentScale = ContentScale.FillWidth,
) )
@@ -89,7 +89,7 @@ fun ChannelNamePreview() {
}, },
leadingContent = { leadingContent = {
Image( Image(
painter = painterResource(R.drawable.github), painter = painterRes(R.drawable.github),
contentDescription = stringRes(id = R.string.profile_banner), contentDescription = stringRes(id = R.string.profile_banner),
contentScale = ContentScale.FillWidth, contentScale = ContentScale.FillWidth,
modifier = Size55Modifier, modifier = Size55Modifier,
@@ -36,7 +36,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@@ -45,6 +44,7 @@ import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.note.LikeIcon import com.vitorpamplona.amethyst.ui.note.LikeIcon
import com.vitorpamplona.amethyst.ui.note.TextCount import com.vitorpamplona.amethyst.ui.note.TextCount
import com.vitorpamplona.amethyst.ui.note.ZappedIcon import com.vitorpamplona.amethyst.ui.note.ZappedIcon
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.DoubleHorzSpacer import com.vitorpamplona.amethyst.ui.theme.DoubleHorzSpacer
import com.vitorpamplona.amethyst.ui.theme.QuoteBorder import com.vitorpamplona.amethyst.ui.theme.QuoteBorder
@@ -65,7 +65,7 @@ fun LeftPictureLayoutPreviewCard() {
LeftPictureLayout( LeftPictureLayout(
onImage = { onImage = {
Image( Image(
painter = painterResource(R.drawable.github), painter = painterRes(R.drawable.github),
contentDescription = stringRes(id = R.string.profile_banner), contentDescription = stringRes(id = R.string.profile_banner),
contentScale = ContentScale.FillWidth, contentScale = ContentScale.FillWidth,
modifier = Modifier.fillMaxSize().clip(QuoteBorder), modifier = Modifier.fillMaxSize().clip(QuoteBorder),
@@ -48,10 +48,10 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalView import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.DividerThickness import com.vitorpamplona.amethyst.ui.theme.DividerThickness
@@ -185,7 +185,7 @@ private fun NotifiableIcon(
) { ) {
Box(route.notifSize) { Box(route.notifSize) {
Icon( Icon(
painter = painterResource(id = route.icon), painter = painterRes(id = route.icon),
contentDescription = stringRes(route.contentDescriptor), contentDescription = stringRes(route.contentDescriptor),
modifier = route.iconSize, modifier = route.iconSize,
tint = if (selected) MaterialTheme.colorScheme.primary else Color.Unspecified, tint = if (selected) MaterialTheme.colorScheme.primary else Color.Unspecified,
@@ -76,7 +76,6 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.LinkAnnotation import androidx.compose.ui.text.LinkAnnotation
import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextLinkStyles import androidx.compose.ui.text.TextLinkStyles
@@ -102,6 +101,7 @@ import com.vitorpamplona.amethyst.ui.actions.mediaServers.MediaServersListView
import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji
import com.vitorpamplona.amethyst.ui.components.RobohashFallbackAsyncImage import com.vitorpamplona.amethyst.ui.components.RobohashFallbackAsyncImage
import com.vitorpamplona.amethyst.ui.note.LoadStatuses import com.vitorpamplona.amethyst.ui.note.LoadStatuses
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.keyBackup.AccountBackupDialog import com.vitorpamplona.amethyst.ui.screen.loggedIn.keyBackup.AccountBackupDialog
import com.vitorpamplona.amethyst.ui.screen.loggedIn.qrcode.ShowQRDialog import com.vitorpamplona.amethyst.ui.screen.loggedIn.qrcode.ShowQRDialog
@@ -226,7 +226,7 @@ fun ProfileContentTemplate(
) )
} else { } else {
Image( Image(
painter = painterResource(R.drawable.profile_banner), painter = painterRes(R.drawable.profile_banner),
contentDescription = stringRes(R.string.profile_banner), contentDescription = stringRes(R.string.profile_banner),
contentScale = ContentScale.FillWidth, contentScale = ContentScale.FillWidth,
modifier = bannerModifier, modifier = bannerModifier,
@@ -615,7 +615,7 @@ fun IconRow(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
painter = painterResource(icon), painter = painterRes(icon),
contentDescription = stringRes(title), contentDescription = stringRes(title),
modifier = Size22Modifier, modifier = Size22Modifier,
tint = tint, tint = tint,
@@ -683,7 +683,7 @@ fun IconRowRelays(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.relays), painter = painterRes(R.drawable.relays),
null, null,
modifier = Modifier.size(22.dp), modifier = Modifier.size(22.dp),
tint = MaterialTheme.colorScheme.onSurface, tint = MaterialTheme.colorScheme.onSurface,
@@ -761,7 +761,7 @@ fun BottomContent(
}, },
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.ic_qrcode), painter = painterRes(R.drawable.ic_qrcode),
contentDescription = stringRes(id = R.string.show_npub_as_a_qr_code), contentDescription = stringRes(id = R.string.show_npub_as_a_qr_code),
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -39,10 +39,10 @@ import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.Size16dp import com.vitorpamplona.amethyst.ui.theme.Size16dp
import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer
@@ -81,7 +81,7 @@ fun ErrorMessageDialog(
onClickStartMessage?.let { onClickStartMessage?.let {
TextButton(onClick = onClickStartMessage) { TextButton(onClick = onClickStartMessage) {
Icon( Icon(
painter = painterResource(R.drawable.ic_dm), painter = painterRes(R.drawable.ic_dm),
contentDescription = null, contentDescription = null,
) )
Spacer(StdHorzSpacer) Spacer(StdHorzSpacer)
@@ -49,7 +49,6 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
@@ -64,6 +63,7 @@ import com.vitorpamplona.amethyst.commons.icons.Repost
import com.vitorpamplona.amethyst.commons.icons.Reposted import com.vitorpamplona.amethyst.commons.icons.Reposted
import com.vitorpamplona.amethyst.commons.icons.Search import com.vitorpamplona.amethyst.commons.icons.Search
import com.vitorpamplona.amethyst.commons.icons.Zap import com.vitorpamplona.amethyst.commons.icons.Zap
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.BitcoinOrange import com.vitorpamplona.amethyst.ui.theme.BitcoinOrange
import com.vitorpamplona.amethyst.ui.theme.Size19Modifier import com.vitorpamplona.amethyst.ui.theme.Size19Modifier
@@ -110,7 +110,7 @@ fun ArrowBackIcon(tint: Color = MaterialTheme.colorScheme.grayText) {
@Composable @Composable
fun MessageIcon(modifier: Modifier) { fun MessageIcon(modifier: Modifier) {
Icon( Icon(
painter = painterResource(R.drawable.ic_dm), painter = painterRes(R.drawable.ic_dm),
null, null,
modifier = modifier, modifier = modifier,
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -133,7 +133,7 @@ fun DownloadForOfflineIcon(
@Composable @Composable
fun HashCheckIcon(iconSize: Dp) { fun HashCheckIcon(iconSize: Dp) {
Icon( Icon(
painter = painterResource(R.drawable.original), painter = painterRes(R.drawable.original),
contentDescription = stringRes(id = R.string.hash_verification_passed), contentDescription = stringRes(id = R.string.hash_verification_passed),
modifier = remember(iconSize) { Modifier.size(iconSize) }, modifier = remember(iconSize) { Modifier.size(iconSize) },
tint = Color.Unspecified, tint = Color.Unspecified,
@@ -363,7 +363,7 @@ fun CommentIcon(
@Composable @Composable
fun PollIcon() { fun PollIcon() {
Icon( Icon(
painter = painterResource(R.drawable.ic_poll), painter = painterRes(R.drawable.ic_poll),
contentDescription = stringRes(id = R.string.poll), contentDescription = stringRes(id = R.string.poll),
modifier = Size20Modifier, modifier = Size20Modifier,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
@@ -373,7 +373,7 @@ fun PollIcon() {
@Composable @Composable
fun RegularPostIcon() { fun RegularPostIcon() {
Icon( Icon(
painter = painterResource(R.drawable.ic_lists), painter = painterRes(R.drawable.ic_lists),
contentDescription = stringRes(id = R.string.disable_poll), contentDescription = stringRes(id = R.string.disable_poll),
modifier = Size20Modifier, modifier = Size20Modifier,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
@@ -495,7 +495,7 @@ fun NIP05CheckingIcon(modifier: Modifier) {
@Composable @Composable
fun NIP05VerifiedIcon(modifier: Modifier) { fun NIP05VerifiedIcon(modifier: Modifier) {
Icon( Icon(
painter = painterResource(R.drawable.nip_05), painter = painterRes(R.drawable.nip_05),
contentDescription = stringRes(id = R.string.nip05_verified), contentDescription = stringRes(id = R.string.nip05_verified),
modifier = modifier, modifier = modifier,
tint = Color.Unspecified, tint = Color.Unspecified,
@@ -518,7 +518,7 @@ fun IncognitoIconOn(
tint: Color, tint: Color,
) { ) {
Icon( Icon(
painter = painterResource(id = R.drawable.incognito), painter = painterRes(id = R.drawable.incognito),
contentDescription = stringRes(id = R.string.accessibility_turn_off_sealed_message), contentDescription = stringRes(id = R.string.accessibility_turn_off_sealed_message),
modifier = modifier, modifier = modifier,
tint = tint, tint = tint,
@@ -531,7 +531,7 @@ fun IncognitoIconOff(
tint: Color, tint: Color,
) { ) {
Icon( Icon(
painter = painterResource(id = R.drawable.incognito_off), painter = painterRes(id = R.drawable.incognito_off),
contentDescription = stringRes(id = R.string.accessibility_turn_on_sealed_message), contentDescription = stringRes(id = R.string.accessibility_turn_on_sealed_message),
modifier = modifier, modifier = modifier,
tint = tint, tint = tint,
@@ -71,7 +71,6 @@ import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.vectorResource import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
@@ -86,6 +85,7 @@ import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.ui.navigation.EmptyNav import com.vitorpamplona.amethyst.ui.navigation.EmptyNav
import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.navigation.Route import com.vitorpamplona.amethyst.ui.navigation.Route
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.report.ReportNoteDialog import com.vitorpamplona.amethyst.ui.screen.loggedIn.report.ReportNoteDialog
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -539,7 +539,7 @@ fun QuickActionAlertDialog(
textContent = textContent, textContent = textContent,
icon = { icon = {
Icon( Icon(
painter = painterResource(buttonIconResource), painter = painterRes(buttonIconResource),
contentDescription = null, contentDescription = null,
) )
}, },
@@ -636,7 +636,7 @@ fun QuickActionAlertDialogOneButton(
textContent = textContent, textContent = textContent,
icon = { icon = {
Icon( Icon(
painter = painterResource(buttonIconResource), painter = painterRes(buttonIconResource),
contentDescription = null, contentDescription = null,
) )
}, },
@@ -71,7 +71,6 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
@@ -87,6 +86,7 @@ import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.Account
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton
import com.vitorpamplona.amethyst.ui.screen.loggedIn.SaveButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.SaveButton
@@ -460,7 +460,7 @@ fun UpdateZapAmountContent(
}, },
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.alby), painter = painterRes(R.drawable.alby),
contentDescription = stringRes(id = R.string.accessibility_navigate_to_alby), contentDescription = stringRes(id = R.string.accessibility_navigate_to_alby),
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
tint = Color.Unspecified, tint = Color.Unspecified,
@@ -482,7 +482,7 @@ fun UpdateZapAmountContent(
IconButton(onClick = { qrScanning = true }) { IconButton(onClick = { qrScanning = true }) {
Icon( Icon(
painter = painterResource(R.drawable.ic_qrcode), painter = painterRes(R.drawable.ic_qrcode),
contentDescription = stringRes(id = R.string.accessibility_scan_qr_code), contentDescription = stringRes(id = R.string.accessibility_scan_qr_code),
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -29,11 +29,11 @@ import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.ui.actions.NewPollOption import com.vitorpamplona.amethyst.ui.actions.NewPollOption
import com.vitorpamplona.amethyst.ui.actions.NewPollVoteValueRange import com.vitorpamplona.amethyst.ui.actions.NewPollVoteValueRange
import com.vitorpamplona.amethyst.ui.actions.NewPostViewModel import com.vitorpamplona.amethyst.ui.actions.NewPostViewModel
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.theme.Size18Modifier import com.vitorpamplona.amethyst.ui.theme.Size18Modifier
import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.amethyst.ui.theme.placeholderText
@@ -65,7 +65,7 @@ fun PollField(postViewModel: NewPostViewModel) {
), ),
) { ) {
Image( Image(
painterResource(id = android.R.drawable.ic_input_add), painterRes(id = android.R.drawable.ic_input_add),
contentDescription = "Add poll option button", contentDescription = "Add poll option button",
modifier = Size18Modifier, modifier = Size18Modifier,
) )
@@ -29,7 +29,6 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
@@ -38,6 +37,7 @@ import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUserBanner import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUserBanner
import com.vitorpamplona.amethyst.ui.note.BaseUserPicture import com.vitorpamplona.amethyst.ui.note.BaseUserPicture
import com.vitorpamplona.amethyst.ui.note.WatchAuthor import com.vitorpamplona.amethyst.ui.note.WatchAuthor
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.Size55dp import com.vitorpamplona.amethyst.ui.theme.Size55dp
@@ -84,11 +84,11 @@ fun BannerImage(
), ),
contentScale = ContentScale.Crop, contentScale = ContentScale.Crop,
modifier = modifier, modifier = modifier,
placeholder = painterResource(R.drawable.profile_banner), placeholder = painterRes(R.drawable.profile_banner),
) )
} else { } else {
Image( Image(
painter = painterResource(R.drawable.profile_banner), painter = painterRes(R.drawable.profile_banner),
contentDescription = stringRes(R.string.profile_banner), contentDescription = stringRes(R.string.profile_banner),
contentScale = ContentScale.Crop, contentScale = ContentScale.Crop,
modifier = modifier, modifier = modifier,
@@ -49,7 +49,6 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -64,6 +63,7 @@ import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer
import com.vitorpamplona.amethyst.ui.components.ZoomableImageDialog import com.vitorpamplona.amethyst.ui.components.ZoomableImageDialog
import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.note.LinkIcon import com.vitorpamplona.amethyst.ui.note.LinkIcon
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.Size16Modifier import com.vitorpamplona.amethyst.ui.theme.Size16Modifier
@@ -122,7 +122,7 @@ fun RenderAppDefinition(
} }
} else { } else {
Image( Image(
painter = painterResource(R.drawable.profile_banner), painter = painterRes(R.drawable.profile_banner),
contentDescription = stringRes(id = R.string.profile_banner), contentDescription = stringRes(id = R.string.profile_banner),
contentScale = ContentScale.FillWidth, contentScale = ContentScale.FillWidth,
modifier = modifier =
@@ -70,7 +70,6 @@ import androidx.compose.ui.Alignment.Companion.CenterVertically
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
@@ -117,6 +116,7 @@ import com.vitorpamplona.amethyst.ui.note.creators.zapraiser.AddZapraiserButton
import com.vitorpamplona.amethyst.ui.note.creators.zapraiser.ZapRaiserRequest import com.vitorpamplona.amethyst.ui.note.creators.zapraiser.ZapRaiserRequest
import com.vitorpamplona.amethyst.ui.note.creators.zapsplits.ForwardZapTo import com.vitorpamplona.amethyst.ui.note.creators.zapsplits.ForwardZapTo
import com.vitorpamplona.amethyst.ui.note.creators.zapsplits.ForwardZapToButton import com.vitorpamplona.amethyst.ui.note.creators.zapsplits.ForwardZapToButton
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.SettingsRow import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.SettingsRow
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.ButtonBorder import com.vitorpamplona.amethyst.ui.theme.ButtonBorder
@@ -234,7 +234,7 @@ fun NewPostScreen(
onClick = { showRelaysDialog = true }, onClick = { showRelaysDialog = true },
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.relays), painter = painterRes(R.drawable.relays),
contentDescription = stringRes(id = R.string.relay_list_selector), contentDescription = stringRes(id = R.string.relay_list_selector),
modifier = Modifier.height(25.dp), modifier = Modifier.height(25.dp),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
@@ -24,9 +24,9 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.painterResource
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer
import com.vitorpamplona.amethyst.ui.theme.incognitoIconModifier import com.vitorpamplona.amethyst.ui.theme.incognitoIconModifier
import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.amethyst.ui.theme.placeholderText
@@ -37,7 +37,7 @@ import com.vitorpamplona.quartz.nip17Dm.base.NIP17Group
fun IncognitoBadge(baseNote: Note) { fun IncognitoBadge(baseNote: Note) {
if (baseNote.event is NIP17Group) { if (baseNote.event is NIP17Group) {
Icon( Icon(
painter = painterResource(id = R.drawable.incognito), painter = painterRes(id = R.drawable.incognito),
null, null,
modifier = incognitoIconModifier, modifier = incognitoIconModifier,
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -45,7 +45,7 @@ fun IncognitoBadge(baseNote: Note) {
Spacer(modifier = StdHorzSpacer) Spacer(modifier = StdHorzSpacer)
} else if (baseNote.event is PrivateDmEvent) { } else if (baseNote.event is PrivateDmEvent) {
Icon( Icon(
painter = painterResource(id = R.drawable.incognito_off), painter = painterRes(id = R.drawable.incognito_off),
null, null,
modifier = incognitoIconModifier, modifier = incognitoIconModifier,
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -28,13 +28,13 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.components.LoadNote import com.vitorpamplona.amethyst.ui.components.LoadNote
import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.navigation.Route import com.vitorpamplona.amethyst.ui.navigation.Route
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.Size55Modifier import com.vitorpamplona.amethyst.ui.theme.Size55Modifier
@@ -69,7 +69,7 @@ fun NewCommunityNoteButton(
containerColor = MaterialTheme.colorScheme.primary, containerColor = MaterialTheme.colorScheme.primary,
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.ic_compose), painter = painterRes(R.drawable.ic_compose),
contentDescription = stringRes(id = R.string.new_community_note), contentDescription = stringRes(id = R.string.new_community_note),
modifier = Modifier.size(26.dp), modifier = Modifier.size(26.dp),
tint = Color.White, tint = Color.White,
@@ -58,7 +58,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Alignment.Companion.CenterVertically
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -92,6 +91,7 @@ import com.vitorpamplona.amethyst.ui.note.creators.zapraiser.AddZapraiserButton
import com.vitorpamplona.amethyst.ui.note.creators.zapraiser.ZapRaiserRequest import com.vitorpamplona.amethyst.ui.note.creators.zapraiser.ZapRaiserRequest
import com.vitorpamplona.amethyst.ui.note.creators.zapsplits.ForwardZapTo import com.vitorpamplona.amethyst.ui.note.creators.zapsplits.ForwardZapTo
import com.vitorpamplona.amethyst.ui.note.creators.zapsplits.ForwardZapToButton import com.vitorpamplona.amethyst.ui.note.creators.zapsplits.ForwardZapToButton
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton
import com.vitorpamplona.amethyst.ui.screen.loggedIn.PostButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.PostButton
@@ -182,7 +182,7 @@ fun NewProductScreen(
onClick = { showRelaysDialog = true }, onClick = { showRelaysDialog = true },
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.relays), painter = painterRes(R.drawable.relays),
contentDescription = stringRes(id = R.string.relay_list_selector), contentDescription = stringRes(id = R.string.relay_list_selector),
modifier = Modifier.height(25.dp), modifier = Modifier.height(25.dp),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
@@ -28,11 +28,11 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.navigation.Route import com.vitorpamplona.amethyst.ui.navigation.Route
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.Size55Modifier import com.vitorpamplona.amethyst.ui.theme.Size55Modifier
@@ -50,7 +50,7 @@ fun NewNoteButton(
containerColor = MaterialTheme.colorScheme.primary, containerColor = MaterialTheme.colorScheme.primary,
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.ic_compose), painter = painterRes(R.drawable.ic_compose),
contentDescription = stringRes(R.string.new_post), contentDescription = stringRes(R.string.new_post),
modifier = Modifier.size(26.dp), modifier = Modifier.size(26.dp),
tint = Color.White, tint = Color.White,
@@ -72,7 +72,6 @@ import androidx.compose.ui.platform.LocalAutofill
import androidx.compose.ui.platform.LocalAutofillTree import androidx.compose.ui.platform.LocalAutofillTree
import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
@@ -94,6 +93,7 @@ import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.Account
import com.vitorpamplona.amethyst.ui.note.ArrowBackIcon import com.vitorpamplona.amethyst.ui.note.ArrowBackIcon
import com.vitorpamplona.amethyst.ui.note.authenticate import com.vitorpamplona.amethyst.ui.note.authenticate
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.mockAccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.mockAccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.qrcode.BackButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.qrcode.BackButton
@@ -503,7 +503,7 @@ private fun QrCodeButtonBase(
}, },
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.ic_qrcode), painter = painterRes(R.drawable.ic_qrcode),
contentDescription = stringRes(id = contentDescription), contentDescription = stringRes(id = contentDescription),
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
tint = if (isEnabled) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.grayText, tint = if (isEnabled) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.grayText,
@@ -41,7 +41,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -55,6 +54,7 @@ import com.vitorpamplona.amethyst.ui.components.DisplayNip05ProfileStatus
import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer
import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.note.DrawPlayName import com.vitorpamplona.amethyst.ui.note.DrawPlayName
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.profile.header.apps.DisplayAppRecommendations import com.vitorpamplona.amethyst.ui.screen.loggedIn.profile.header.apps.DisplayAppRecommendations
import com.vitorpamplona.amethyst.ui.screen.loggedIn.profile.header.apps.UserAppRecommendationsFeedViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.profile.header.apps.UserAppRecommendationsFeedViewModel
@@ -146,7 +146,7 @@ fun DrawAdditionalInfo(
onClick = { dialogOpen = true }, onClick = { dialogOpen = true },
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.ic_qrcode), painter = painterRes(R.drawable.ic_qrcode),
contentDescription = stringRes(id = R.string.show_npub_as_a_qr_code), contentDescription = stringRes(id = R.string.show_npub_as_a_qr_code),
modifier = Size15Modifier, modifier = Size15Modifier,
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -196,7 +196,7 @@ fun DrawAdditionalInfo(
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
Icon( Icon(
tint = Color.Unspecified, tint = Color.Unspecified,
painter = painterResource(id = getIdentityClaimIcon(identity)), painter = painterRes(id = getIdentityClaimIcon(identity)),
contentDescription = stringRes(getIdentityClaimDescription(identity)), contentDescription = stringRes(getIdentityClaimDescription(identity)),
modifier = Modifier.size(16.dp), modifier = Modifier.size(16.dp),
) )
@@ -33,7 +33,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
@@ -42,6 +41,7 @@ import com.vitorpamplona.amethyst.commons.richtext.RichTextParser
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUserBanner import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUserBanner
import com.vitorpamplona.amethyst.ui.components.ZoomableImageDialog import com.vitorpamplona.amethyst.ui.components.ZoomableImageDialog
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -70,7 +70,7 @@ fun DrawBanner(
model = banner, model = banner,
contentDescription = stringRes(id = R.string.profile_image), contentDescription = stringRes(id = R.string.profile_image),
contentScale = ContentScale.FillWidth, contentScale = ContentScale.FillWidth,
placeholder = painterResource(R.drawable.profile_banner), placeholder = painterRes(R.drawable.profile_banner),
modifier = modifier =
Modifier Modifier
.fillMaxWidth() .fillMaxWidth()
@@ -90,7 +90,7 @@ fun DrawBanner(
} }
} else { } else {
Image( Image(
painter = painterResource(R.drawable.profile_banner), painter = painterRes(R.drawable.profile_banner),
contentDescription = stringRes(id = R.string.profile_banner), contentDescription = stringRes(id = R.string.profile_banner),
contentScale = ContentScale.FillWidth, contentScale = ContentScale.FillWidth,
modifier = modifier =
@@ -27,12 +27,12 @@ import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.navigation.Route import com.vitorpamplona.amethyst.ui.navigation.Route
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.Size20Modifier import com.vitorpamplona.amethyst.ui.theme.Size20Modifier
@@ -59,7 +59,7 @@ fun MessageButton(
contentPadding = ZeroPadding, contentPadding = ZeroPadding,
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.ic_dm), painter = painterRes(R.drawable.ic_dm),
stringRes(R.string.send_a_direct_message), stringRes(R.string.send_a_direct_message),
modifier = Size20Modifier, modifier = Size20Modifier,
) )
@@ -60,7 +60,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@@ -76,6 +75,7 @@ import com.vitorpamplona.amethyst.ui.actions.RelayInfoDialog
import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.navigation.rememberExtendedNav import com.vitorpamplona.amethyst.ui.navigation.rememberExtendedNav
import com.vitorpamplona.amethyst.ui.note.RenderRelayIcon import com.vitorpamplona.amethyst.ui.note.RenderRelayIcon
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.RelayInformationDialog import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.RelayInformationDialog
import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.recommendations.Kind3RelayProposalSetupInfo import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.recommendations.Kind3RelayProposalSetupInfo
@@ -555,7 +555,7 @@ private fun ActiveToggles(
onClick = { onToggleFollows(item) }, onClick = { onToggleFollows(item) },
) { ) {
Icon( Icon(
painterResource(R.drawable.ic_home), painterRes(R.drawable.ic_home),
stringRes(R.string.home_feed), stringRes(R.string.home_feed),
modifier = modifier =
Modifier Modifier
@@ -589,7 +589,7 @@ private fun ActiveToggles(
onClick = { onTogglePrivateDMs(item) }, onClick = { onTogglePrivateDMs(item) },
) { ) {
Icon( Icon(
painterResource(R.drawable.ic_dm), painterRes(R.drawable.ic_dm),
stringRes(R.string.private_message_feed), stringRes(R.string.private_message_feed),
modifier = modifier =
Modifier Modifier
@@ -59,7 +59,6 @@ import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardCapitalization
@@ -147,6 +146,7 @@ import com.vitorpamplona.amethyst.ui.note.types.RenderTextModificationEvent
import com.vitorpamplona.amethyst.ui.note.types.RenderTorrent import com.vitorpamplona.amethyst.ui.note.types.RenderTorrent
import com.vitorpamplona.amethyst.ui.note.types.RenderTorrentComment import com.vitorpamplona.amethyst.ui.note.types.RenderTorrentComment
import com.vitorpamplona.amethyst.ui.note.types.VideoDisplay import com.vitorpamplona.amethyst.ui.note.types.VideoDisplay
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.RenderFeedState import com.vitorpamplona.amethyst.ui.screen.RenderFeedState
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.publicChannels.ChannelHeader import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.publicChannels.ChannelHeader
@@ -845,7 +845,7 @@ private fun RenderClassifiedsReaderForThread(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.ic_dm), painter = painterRes(R.drawable.ic_dm),
stringRes(R.string.send_a_direct_message), stringRes(R.string.send_a_direct_message),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -45,7 +45,6 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
@@ -55,6 +54,7 @@ import com.vitorpamplona.amethyst.ui.actions.uploads.GallerySelect
import com.vitorpamplona.amethyst.ui.actions.uploads.SelectedMedia import com.vitorpamplona.amethyst.ui.actions.uploads.SelectedMedia
import com.vitorpamplona.amethyst.ui.actions.uploads.TakePicture import com.vitorpamplona.amethyst.ui.actions.uploads.TakePicture
import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.INav
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.Size55Modifier import com.vitorpamplona.amethyst.ui.theme.Size55Modifier
@@ -189,7 +189,7 @@ fun NewImageButton(
exit = fadeOut(), exit = fadeOut(),
) { ) {
Icon( Icon(
painter = painterResource(R.drawable.ic_compose), painter = painterRes(R.drawable.ic_compose),
contentDescription = stringRes(id = R.string.new_short), contentDescription = stringRes(id = R.string.new_short),
modifier = Modifier.size(26.dp), modifier = Modifier.size(26.dp),
tint = Color.White, tint = Color.White,
@@ -76,7 +76,6 @@ import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalAutofill import androidx.compose.ui.platform.LocalAutofill
import androidx.compose.ui.platform.LocalAutofillTree import androidx.compose.ui.platform.LocalAutofillTree
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.PasswordVisualTransformation
@@ -94,6 +93,7 @@ import com.vitorpamplona.amethyst.service.PackageUtils
import com.vitorpamplona.amethyst.ui.MainActivity import com.vitorpamplona.amethyst.ui.MainActivity
import com.vitorpamplona.amethyst.ui.components.LoadingAnimation import com.vitorpamplona.amethyst.ui.components.LoadingAnimation
import com.vitorpamplona.amethyst.ui.components.getActivity import com.vitorpamplona.amethyst.ui.components.getActivity
import com.vitorpamplona.amethyst.ui.painterRes
import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.qrcode.SimpleQrCodeScanner import com.vitorpamplona.amethyst.ui.screen.loggedIn.qrcode.SimpleQrCodeScanner
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -592,7 +592,7 @@ fun KeyTextField(
} }
IconButton(onClick = { dialogOpen = true }) { IconButton(onClick = { dialogOpen = true }) {
Icon( Icon(
painter = painterResource(R.drawable.ic_qrcode), painter = painterRes(R.drawable.ic_qrcode),
contentDescription = contentDescription =
stringRes( stringRes(
R.string.login_with_qr_code, R.string.login_with_qr_code,