feat(icons): migrate Material Icons → Material Symbols (thin weight)

Replace the `material-icons-extended` library with Google's Material Symbols
variable font, rendered via a new `commons/icons/symbols/` package. Weight is
set to 100 (Thin) via a single tunable default (MaterialSymbolsDefaults.WEIGHT),
so we can re-tune line thickness globally in one line without regenerating
assets.

Key changes:
- commons/composeResources/font/material_symbols_outlined.ttf: Material Symbols
  Outlined variable font (all 3600+ glyphs, 4 design axes: wght/FILL/GRAD/opsz).
- commons/icons/symbols/: MaterialSymbol data class, 219 codepoint constants,
  variable-font FontFamily helper, Canvas-backed Icon composable (overload that
  accepts MaterialSymbol and supports auto-mirror for RTL), and a Painter
  wrapper for use with Image / AsyncImage.
- Bulk-rewrote 250+ call sites across amethyst/, commons/, desktopApp/:
  Icons.{Default,Outlined,Filled,Rounded,AutoMirrored.*}.X → MaterialSymbols.X
  or MaterialSymbols.AutoMirrored.X. `imageVector =` renamed to `symbol =`
  inside Icon() calls; Image(imageVector = MS.X) converted to
  Image(painter = rememberMaterialSymbolPainter(MS.X)).
- Dropped material-icons-extended dependency from commons, desktopApp,
  amethyst build files.

Hand-drawn custom icons (Bookmark, Like, Reply, Zap, chess pieces, robohash)
remain as ImageVector and are untouched.

https://claude.ai/code/session_016gV9gEaSud6kDMdcaqy8ti
This commit is contained in:
Claude
2026-04-23 19:44:17 +00:00
parent dffcd258b7
commit 8ff091ca0e
263 changed files with 2050 additions and 2082 deletions
-1
View File
@@ -263,7 +263,6 @@ dependencies {
// Material 3 Design // Material 3 Design
implementation libs.androidx.material3 implementation libs.androidx.material3
implementation libs.androidx.material.icons
// Adaptive Layout / Two Pane // Adaptive Layout / Two Pane
implementation libs.androidx.material3.windowSize implementation libs.androidx.material3.windowSize
@@ -29,8 +29,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -57,6 +55,8 @@ import com.halilibo.richtext.ui.RichTextStyle
import com.halilibo.richtext.ui.material3.RichText import com.halilibo.richtext.ui.material3.RichText
import com.halilibo.richtext.ui.resolveDefaults import com.halilibo.richtext.ui.resolveDefaults
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.UiSettingsFlow import com.vitorpamplona.amethyst.model.UiSettingsFlow
import com.vitorpamplona.amethyst.service.notifications.PushDistributorHandler import com.vitorpamplona.amethyst.service.notifications.PushDistributorHandler
import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.SettingsRow import com.vitorpamplona.amethyst.ui.screen.loggedIn.settings.SettingsRow
@@ -159,7 +159,7 @@ fun SelectNotificationProvider(sharedPrefs: UiSettingsFlow) {
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
imageVector = Icons.Default.Check, symbol = MaterialSymbols.Check,
contentDescription = null, contentDescription = null,
) )
Spacer(Modifier.width(8.dp)) Spacer(Modifier.width(8.dp))
@@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Done
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -39,6 +37,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import com.vitorpamplona.amethyst.Amethyst import com.vitorpamplona.amethyst.Amethyst
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.navigation.routes.routeToMessage import com.vitorpamplona.amethyst.ui.navigation.routes.routeToMessage
@@ -95,7 +95,7 @@ fun DisplayCrashMessages(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Done, symbol = MaterialSymbols.Done,
contentDescription = stringRes(R.string.crashreport_found_send), contentDescription = stringRes(R.string.crashreport_found_send),
) )
Spacer(StdHorzSpacer) Spacer(StdHorzSpacer)
@@ -27,8 +27,6 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ZoomOutMap
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -41,6 +39,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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.PinBottomIconSize import com.vitorpamplona.amethyst.ui.theme.PinBottomIconSize
@@ -86,7 +86,7 @@ fun FullScreenButton(
modifier = Size50Modifier, modifier = Size50Modifier,
) { ) {
Icon( Icon(
imageVector = Icons.Default.ZoomOutMap, symbol = MaterialSymbols.ZoomOutMap,
contentDescription = stringRes(id = R.string.enter_picture_in_picture), contentDescription = stringRes(id = R.string.enter_picture_in_picture),
modifier = modifier, modifier = modifier,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
@@ -27,9 +27,6 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.VolumeOff
import androidx.compose.material.icons.automirrored.filled.VolumeUp
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -43,6 +40,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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.Size30Modifier import com.vitorpamplona.amethyst.ui.theme.Size30Modifier
@@ -125,7 +124,7 @@ fun MuteButton(
@Composable @Composable
fun MutedIcon() { fun MutedIcon() {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.VolumeOff, symbol = MaterialSymbols.AutoMirrored.VolumeOff,
contentDescription = stringRes(id = R.string.muted_button), contentDescription = stringRes(id = R.string.muted_button),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
modifier = Size30Modifier, modifier = Size30Modifier,
@@ -135,7 +134,7 @@ fun MutedIcon() {
@Composable @Composable
fun MuteIcon() { fun MuteIcon() {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.VolumeUp, symbol = MaterialSymbols.AutoMirrored.VolumeUp,
contentDescription = stringRes(id = R.string.mute_button), contentDescription = stringRes(id = R.string.mute_button),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
modifier = Size30Modifier, modifier = Size30Modifier,
@@ -27,15 +27,6 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.VolumeOff
import androidx.compose.material.icons.automirrored.filled.VolumeUp
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.filled.PictureInPicture
import androidx.compose.material.icons.filled.SaveAlt
import androidx.compose.material.icons.filled.Settings
import androidx.compose.material.icons.filled.Share
import androidx.compose.material.icons.filled.ZoomOutMap
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -48,6 +39,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.VideoPlayerAction import com.vitorpamplona.amethyst.model.VideoPlayerAction
import com.vitorpamplona.amethyst.ui.components.M3ActionDialog import com.vitorpamplona.amethyst.ui.components.M3ActionDialog
import com.vitorpamplona.amethyst.ui.components.M3ActionRow import com.vitorpamplona.amethyst.ui.components.M3ActionRow
@@ -140,7 +133,7 @@ fun OverflowMenuButton(
modifier = Size50Modifier, modifier = Size50Modifier,
) { ) {
Icon( Icon(
imageVector = Icons.Default.MoreVert, symbol = MaterialSymbols.MoreVert,
contentDescription = stringRes(R.string.more_options), contentDescription = stringRes(R.string.more_options),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
modifier = Size20Modifier, modifier = Size20Modifier,
@@ -159,7 +152,7 @@ fun OverflowMenuButton(
VideoPlayerAction.Fullscreen -> { VideoPlayerAction.Fullscreen -> {
onFullscreenClick?.let { zoom -> onFullscreenClick?.let { zoom ->
M3ActionRow( M3ActionRow(
icon = Icons.Default.ZoomOutMap, icon = MaterialSymbols.ZoomOutMap,
text = stringRes(R.string.video_player_settings_action_fullscreen), text = stringRes(R.string.video_player_settings_action_fullscreen),
) { ) {
menuExpanded.value = false menuExpanded.value = false
@@ -170,7 +163,7 @@ fun OverflowMenuButton(
VideoPlayerAction.Mute -> { VideoPlayerAction.Mute -> {
M3ActionRow( M3ActionRow(
icon = if (startingMuteState) Icons.AutoMirrored.Filled.VolumeOff else Icons.AutoMirrored.Filled.VolumeUp, icon = if (startingMuteState) MaterialSymbols.AutoMirrored.VolumeOff else MaterialSymbols.AutoMirrored.VolumeUp,
text = if (startingMuteState) stringRes(R.string.muted_button) else stringRes(R.string.mute_button), text = if (startingMuteState) stringRes(R.string.muted_button) else stringRes(R.string.mute_button),
) { ) {
menuExpanded.value = false menuExpanded.value = false
@@ -180,7 +173,7 @@ fun OverflowMenuButton(
VideoPlayerAction.Quality -> { VideoPlayerAction.Quality -> {
M3ActionRow( M3ActionRow(
icon = Icons.Default.Settings, icon = MaterialSymbols.Settings,
text = stringRes(R.string.call_settings_video_quality), text = stringRes(R.string.call_settings_video_quality),
) { ) {
menuExpanded.value = false menuExpanded.value = false
@@ -190,7 +183,7 @@ fun OverflowMenuButton(
VideoPlayerAction.Share -> { VideoPlayerAction.Share -> {
M3ActionRow( M3ActionRow(
icon = Icons.Default.Share, icon = MaterialSymbols.Share,
text = stringRes(R.string.share_or_save), text = stringRes(R.string.share_or_save),
) { ) {
menuExpanded.value = false menuExpanded.value = false
@@ -200,7 +193,7 @@ fun OverflowMenuButton(
VideoPlayerAction.Download -> { VideoPlayerAction.Download -> {
M3ActionRow( M3ActionRow(
icon = Icons.Default.SaveAlt, icon = MaterialSymbols.SaveAlt,
text = stringRes(R.string.download_to_phone), text = stringRes(R.string.download_to_phone),
) { ) {
menuExpanded.value = false menuExpanded.value = false
@@ -210,7 +203,7 @@ fun OverflowMenuButton(
VideoPlayerAction.PictureInPicture -> { VideoPlayerAction.PictureInPicture -> {
M3ActionRow( M3ActionRow(
icon = Icons.Default.PictureInPicture, icon = MaterialSymbols.PictureInPicture,
text = stringRes(R.string.picture_in_picture), text = stringRes(R.string.picture_in_picture),
) { ) {
menuExpanded.value = false menuExpanded.value = false
@@ -28,9 +28,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Pause
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -44,6 +41,8 @@ import androidx.compose.ui.draw.clip
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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.PlayIconSize import com.vitorpamplona.amethyst.ui.theme.PlayIconSize
@@ -114,13 +113,13 @@ fun PlayPauseButton(
) { ) {
if (!isPlaying) { if (!isPlaying) {
Icon( Icon(
imageVector = Icons.Default.PlayArrow, symbol = MaterialSymbols.PlayArrow,
modifier = Size50Modifier, modifier = Size50Modifier,
contentDescription = stringRes(R.string.play), contentDescription = stringRes(R.string.play),
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Default.Pause, symbol = MaterialSymbols.Pause,
modifier = Size50Modifier, modifier = Size50Modifier,
contentDescription = stringRes(R.string.pause), contentDescription = stringRes(R.string.pause),
) )
@@ -29,10 +29,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.PictureInPicture
import androidx.compose.material.icons.filled.SaveAlt
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -47,7 +43,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment 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.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -55,6 +50,9 @@ import androidx.media3.common.Player
import androidx.media3.common.Tracks import androidx.media3.common.Tracks
import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.richtext.MediaUrlVideo import com.vitorpamplona.amethyst.commons.richtext.MediaUrlVideo
import com.vitorpamplona.amethyst.model.VideoButtonLocation import com.vitorpamplona.amethyst.model.VideoButtonLocation
import com.vitorpamplona.amethyst.model.VideoPlayerAction import com.vitorpamplona.amethyst.model.VideoPlayerAction
@@ -255,7 +253,7 @@ fun RenderTopButtons(
VideoPlayerAction.Share -> { VideoPlayerAction.Share -> {
AnimatedTopBarIconButton( AnimatedTopBarIconButton(
controllerVisible = controllerVisible, controllerVisible = controllerVisible,
imageVector = Icons.Default.Share, symbol = MaterialSymbols.Share,
contentDescription = stringRes(R.string.share_or_save), contentDescription = stringRes(R.string.share_or_save),
onClick = { shareDialogVisible.value = true }, onClick = { shareDialogVisible.value = true },
) )
@@ -264,7 +262,7 @@ fun RenderTopButtons(
VideoPlayerAction.Download -> { VideoPlayerAction.Download -> {
AnimatedTopBarIconButton( AnimatedTopBarIconButton(
controllerVisible = controllerVisible, controllerVisible = controllerVisible,
imageVector = Icons.Default.SaveAlt, symbol = MaterialSymbols.SaveAlt,
contentDescription = stringRes(R.string.download_to_phone), contentDescription = stringRes(R.string.download_to_phone),
onClick = saveAction, onClick = saveAction,
) )
@@ -273,7 +271,7 @@ fun RenderTopButtons(
VideoPlayerAction.PictureInPicture -> { VideoPlayerAction.PictureInPicture -> {
AnimatedTopBarIconButton( AnimatedTopBarIconButton(
controllerVisible = controllerVisible, controllerVisible = controllerVisible,
imageVector = Icons.Default.PictureInPicture, symbol = MaterialSymbols.PictureInPicture,
contentDescription = stringRes(R.string.picture_in_picture), contentDescription = stringRes(R.string.picture_in_picture),
onClick = onPictureInPictureClick, onClick = onPictureInPictureClick,
) )
@@ -323,7 +321,7 @@ fun RenderTopButtons(
@Composable @Composable
internal fun AnimatedTopBarIconButton( internal fun AnimatedTopBarIconButton(
controllerVisible: State<Boolean>, controllerVisible: State<Boolean>,
imageVector: ImageVector, symbol: MaterialSymbol,
contentDescription: String, contentDescription: String,
onClick: () -> Unit, onClick: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
@@ -348,7 +346,7 @@ internal fun AnimatedTopBarIconButton(
modifier = Size50Modifier, modifier = Size50Modifier,
) { ) {
Icon( Icon(
imageVector = imageVector, symbol = symbol,
contentDescription = contentDescription, contentDescription = contentDescription,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
modifier = Size20Modifier, modifier = Size20Modifier,
@@ -31,8 +31,6 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Download
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -50,6 +48,8 @@ import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.rememberPermissionState
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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.PinBottomIconSize import com.vitorpamplona.amethyst.ui.theme.PinBottomIconSize
@@ -130,7 +130,7 @@ fun SaveMediaButton(onSaveClick: (localContext: Context) -> Unit) {
modifier = Size50Modifier, modifier = Size50Modifier,
) { ) {
Icon( Icon(
imageVector = Icons.Default.Download, symbol = MaterialSymbols.Download,
modifier = Size20Modifier, modifier = Size20Modifier,
contentDescription = stringRes(R.string.download_to_phone), contentDescription = stringRes(R.string.download_to_phone),
) )
@@ -27,8 +27,6 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -42,6 +40,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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.PinBottomIconSize import com.vitorpamplona.amethyst.ui.theme.PinBottomIconSize
@@ -98,7 +98,7 @@ fun ShareButton(innerAction: @Composable (MutableState<Boolean>, () -> Unit) ->
modifier = Size50Modifier, modifier = Size50Modifier,
) { ) {
Icon( Icon(
imageVector = Icons.Default.Share, symbol = MaterialSymbols.Share,
modifier = Size20Modifier, modifier = Size20Modifier,
contentDescription = stringRes(R.string.share_or_save), contentDescription = stringRes(R.string.share_or_save),
) )
@@ -26,9 +26,6 @@ import androidx.compose.animation.fadeOut
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Forward10
import androidx.compose.material.icons.filled.Replay10
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -38,6 +35,8 @@ import androidx.compose.ui.graphics.Color
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.service.playback.composable.SKIP_SECONDS import com.vitorpamplona.amethyst.service.playback.composable.SKIP_SECONDS
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
@@ -88,9 +87,9 @@ fun SkipButton(
isForward: Boolean, isForward: Boolean,
onClick: () -> Unit, onClick: () -> Unit,
) { ) {
val icon = if (isForward) Icons.Default.Forward10 else Icons.Default.Replay10 val icon = if (isForward) MaterialSymbols.Forward10 else MaterialSymbols.Replay10
val label = if (isForward) stringRes(R.string.skip_forward, SKIP_SECONDS) else stringRes(R.string.skip_back, SKIP_SECONDS) val label = if (isForward) stringRes(R.string.skip_forward, SKIP_SECONDS) else stringRes(R.string.skip_back, SKIP_SECONDS)
IconButton(onClick = onClick, modifier = Modifier.size(48.dp)) { IconButton(onClick = onClick, modifier = Modifier.size(48.dp)) {
Icon(imageVector = icon, contentDescription = label, tint = Color.White, modifier = Modifier.size(32.dp)) Icon(symbol = icon, contentDescription = label, tint = Color.White, modifier = Modifier.size(32.dp))
} }
} }
@@ -30,8 +30,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Settings
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -56,6 +54,8 @@ import androidx.media3.common.Tracks
import androidx.media3.common.VideoSize import androidx.media3.common.VideoSize
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.PinBottomIconSize import com.vitorpamplona.amethyst.ui.theme.PinBottomIconSize
import com.vitorpamplona.amethyst.ui.theme.Size20Modifier import com.vitorpamplona.amethyst.ui.theme.Size20Modifier
@@ -108,7 +108,7 @@ fun VideoQualityButton(
modifier = Size50Modifier, modifier = Size50Modifier,
) { ) {
Icon( Icon(
imageVector = Icons.Default.Settings, symbol = MaterialSymbols.Settings,
contentDescription = stringRes(id = R.string.call_settings_video_quality), contentDescription = stringRes(id = R.string.call_settings_video_quality),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
modifier = Size20Modifier, modifier = Size20Modifier,
@@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Done
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonColors import androidx.compose.material3.ButtonColors
@@ -39,6 +37,8 @@ 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 com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.model.EmptyTagList import com.vitorpamplona.amethyst.commons.model.EmptyTagList
import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
@@ -87,7 +87,7 @@ fun NotifyRequestDialog(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Done, symbol = MaterialSymbols.Done,
contentDescription = null, contentDescription = null,
) )
Spacer(StdHorzSpacer) Spacer(StdHorzSpacer)
@@ -37,8 +37,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CurrencyBitcoin
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -74,6 +72,8 @@ import androidx.compose.ui.window.DialogProperties
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.richtext.RichTextParser import com.vitorpamplona.amethyst.commons.richtext.RichTextParser
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.service.playback.composable.VideoView import com.vitorpamplona.amethyst.service.playback.composable.VideoView
@@ -457,14 +457,14 @@ private fun AddLnInvoiceButton(
) { ) {
if (!isLnInvoiceActive) { if (!isLnInvoiceActive) {
Icon( Icon(
imageVector = Icons.Default.CurrencyBitcoin, symbol = MaterialSymbols.CurrencyBitcoin,
contentDescription = stringRes(id = R.string.add_bitcoin_invoice), contentDescription = stringRes(id = R.string.add_bitcoin_invoice),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Default.CurrencyBitcoin, symbol = MaterialSymbols.CurrencyBitcoin,
contentDescription = stringRes(id = R.string.cancel_bitcoin_invoice), contentDescription = stringRes(id = R.string.cancel_bitcoin_invoice),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = BitcoinOrange, tint = BitcoinOrange,
@@ -27,8 +27,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Done
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonColors import androidx.compose.material3.ButtonColors
@@ -44,6 +42,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalClipboard import androidx.compose.ui.platform.LocalClipboard
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.components.toasts.ThrowableToastMsg import com.vitorpamplona.amethyst.ui.components.toasts.ThrowableToastMsg
import com.vitorpamplona.amethyst.ui.components.toasts.ThrowableToastMsg2 import com.vitorpamplona.amethyst.ui.components.toasts.ThrowableToastMsg2
import com.vitorpamplona.amethyst.ui.components.util.setText import com.vitorpamplona.amethyst.ui.components.util.setText
@@ -141,7 +141,7 @@ fun InformationDialog(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Done, symbol = MaterialSymbols.Done,
contentDescription = null, contentDescription = null,
) )
Spacer(StdHorzSpacer) Spacer(StdHorzSpacer)
@@ -35,9 +35,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ExpandLess
import androidx.compose.material.icons.filled.ExpandMore
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -57,6 +54,8 @@ import androidx.compose.ui.text.input.KeyboardCapitalization
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
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.actions.uploads.SelectSingleFromGallery import com.vitorpamplona.amethyst.ui.actions.uploads.SelectSingleFromGallery
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.navigation.topbars.SavingTopBar import com.vitorpamplona.amethyst.ui.navigation.topbars.SavingTopBar
@@ -347,7 +346,7 @@ private fun ExpandableSection(
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
) )
Icon( Icon(
imageVector = if (expanded.value) Icons.Default.ExpandLess else Icons.Default.ExpandMore, symbol = if (expanded.value) MaterialSymbols.ExpandLess else MaterialSymbols.ExpandMore,
contentDescription = if (expanded.value) "Collapse" else "Expand", contentDescription = if (expanded.value) "Collapse" else "Expand",
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
) )
@@ -29,9 +29,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Add
import androidx.compose.material.icons.rounded.Delete
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -44,6 +41,8 @@ import androidx.compose.ui.Modifier
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.SettingsCategory import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.SettingsCategory
import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.SettingsCategoryWithButton import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.SettingsCategoryWithButton
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -209,7 +208,7 @@ fun MediaServerEntry(
}, },
) { ) {
Icon( Icon(
imageVector = if (isAmethystDefault) Icons.Rounded.Add else Icons.Rounded.Delete, symbol = if (isAmethystDefault) MaterialSymbols.Add else MaterialSymbols.Delete,
contentDescription = contentDescription =
if (isAmethystDefault) { if (isAmethystDefault) {
stringRes(id = R.string.add_media_server) stringRes(id = R.string.add_media_server)
@@ -31,8 +31,6 @@ import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Delete
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -55,6 +53,8 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.navigation.topbars.SavingTopBar import com.vitorpamplona.amethyst.ui.navigation.topbars.SavingTopBar
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
@@ -203,7 +203,7 @@ fun PaymentTargetEntry(
} }
IconButton(onClick = onDelete) { IconButton(onClick = onDelete) {
Icon( Icon(
imageVector = Icons.Rounded.Delete, symbol = MaterialSymbols.Delete,
contentDescription = stringRes(id = R.string.delete_payment_target), contentDescription = stringRes(id = R.string.delete_payment_target),
) )
} }
@@ -26,8 +26,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Mic
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
@@ -41,6 +39,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@Composable @Composable
@@ -91,7 +91,7 @@ fun RecordVoiceButton(
// Microphone icon // Microphone icon
Icon( Icon(
imageVector = Icons.Default.Mic, symbol = MaterialSymbols.Mic,
contentDescription = stringRes(id = R.string.record_a_message), contentDescription = stringRes(id = R.string.record_a_message),
modifier = Modifier.height(22.dp), modifier = Modifier.height(22.dp),
tint = tint =
@@ -35,8 +35,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Stop
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -51,6 +49,8 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
/** /**
@@ -228,7 +228,7 @@ fun FloatingRecordingIndicator(
) )
Icon( Icon(
imageVector = Icons.Default.Stop, symbol = MaterialSymbols.Stop,
contentDescription = recordingLabel, contentDescription = recordingLabel,
tint = Color.White, tint = Color.White,
modifier = modifier =
@@ -24,8 +24,6 @@ import android.net.Uri
import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.AttachFile
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -39,6 +37,8 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.components.LoadingAnimation import com.vitorpamplona.amethyst.ui.components.LoadingAnimation
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
@@ -83,7 +83,7 @@ private fun FileSelectButton(
) { ) {
if (!isUploading) { if (!isUploading) {
Icon( Icon(
imageVector = Icons.Default.AttachFile, symbol = MaterialSymbols.AttachFile,
contentDescription = stringRes(id = R.string.upload_file), contentDescription = stringRes(id = R.string.upload_file),
modifier = Modifier.height(20.dp), modifier = Modifier.height(20.dp),
tint = tint, tint = tint,
@@ -25,8 +25,6 @@ import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.AddPhotoAlternate
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -41,6 +39,8 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.components.LoadingAnimation import com.vitorpamplona.amethyst.ui.components.LoadingAnimation
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
@@ -128,7 +128,7 @@ private fun GallerySelectButton(
) { ) {
if (!isUploading) { if (!isUploading) {
Icon( Icon(
imageVector = Icons.Default.AddPhotoAlternate, symbol = MaterialSymbols.AddPhotoAlternate,
contentDescription = stringRes(id = R.string.upload_image), contentDescription = stringRes(id = R.string.upload_image),
modifier = Modifier.height(25.dp), modifier = Modifier.height(25.dp),
tint = tint, tint = tint,
@@ -38,9 +38,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.AudioFile
import androidx.compose.material.icons.filled.PictureAsPdf
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -65,6 +62,9 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.service.playback.composable.VideoView import com.vitorpamplona.amethyst.service.playback.composable.VideoView
import com.vitorpamplona.amethyst.service.uploads.MultiOrchestrator import com.vitorpamplona.amethyst.service.uploads.MultiOrchestrator
import com.vitorpamplona.amethyst.service.uploads.UploadOrchestrator import com.vitorpamplona.amethyst.service.uploads.UploadOrchestrator
@@ -126,12 +126,12 @@ fun ShowImageGallery(
) )
} else if (media.isAudio() == true) { } else if (media.isAudio() == true) {
FilePreviewPlaceholder( FilePreviewPlaceholder(
icon = Icons.Default.AudioFile, icon = MaterialSymbols.AudioFile,
label = media.mimeType ?: "audio/*", label = media.mimeType ?: "audio/*",
) )
} else if (media.isDocument()) { } else if (media.isDocument()) {
FilePreviewPlaceholder( FilePreviewPlaceholder(
icon = Icons.Default.PictureAsPdf, icon = MaterialSymbols.PictureAsPdf,
label = media.mimeType ?: "application/pdf", label = media.mimeType ?: "application/pdf",
) )
} else if (media.isVideo() == true && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { } else if (media.isVideo() == true && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
@@ -279,7 +279,7 @@ fun UploadingState(
@Composable @Composable
fun FilePreviewPlaceholder( fun FilePreviewPlaceholder(
icon: androidx.compose.ui.graphics.vector.ImageVector, icon: MaterialSymbol,
label: String, label: String,
) { ) {
Box( Box(
@@ -295,7 +295,7 @@ fun FilePreviewPlaceholder(
modifier = Modifier.padding(8.dp), modifier = Modifier.padding(8.dp),
) { ) {
Icon( Icon(
imageVector = icon, symbol = icon,
contentDescription = label, contentDescription = label,
modifier = Modifier.size(40.dp), modifier = Modifier.size(40.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
@@ -27,9 +27,6 @@ import android.os.Environment
import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CameraAlt
import androidx.compose.material.icons.filled.Videocam
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -48,6 +45,8 @@ import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.rememberPermissionState
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
@@ -129,7 +128,7 @@ fun PictureButton(onClick: () -> Unit) {
onClick = onClick, onClick = onClick,
) { ) {
Icon( Icon(
imageVector = Icons.Default.CameraAlt, symbol = MaterialSymbols.CameraAlt,
contentDescription = stringRes(id = R.string.take_a_picture), contentDescription = stringRes(id = R.string.take_a_picture),
modifier = Modifier.height(22.dp), modifier = Modifier.height(22.dp),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
@@ -216,7 +215,7 @@ fun VideoButton(onClick: () -> Unit) {
onClick = onClick, onClick = onClick,
) { ) {
Icon( Icon(
imageVector = Icons.Default.Videocam, symbol = MaterialSymbols.Videocam,
contentDescription = stringRes(id = R.string.record_a_video), contentDescription = stringRes(id = R.string.record_a_video),
modifier = Modifier.height(22.dp), modifier = Modifier.height(22.dp),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
@@ -32,12 +32,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Mic
import androidx.compose.material.icons.filled.Pause
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material.icons.filled.Stop
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -56,6 +50,8 @@ import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.components.AudioWaveformReadOnly import com.vitorpamplona.amethyst.ui.components.AudioWaveformReadOnly
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.quartz.nipA0VoiceMessages.AudioMeta import com.vitorpamplona.quartz.nipA0VoiceMessages.AudioMeta
@@ -125,7 +121,7 @@ fun VoiceMessagePreview(
modifier = Modifier.size(48.dp), modifier = Modifier.size(48.dp),
) { ) {
Icon( Icon(
imageVector = if (isPlaying) Icons.Default.Pause else Icons.Default.PlayArrow, symbol = if (isPlaying) MaterialSymbols.Pause else MaterialSymbols.PlayArrow,
contentDescription = if (isPlaying) stringRes(context, R.string.pause) else stringRes(context, R.string.play), contentDescription = if (isPlaying) stringRes(context, R.string.pause) else stringRes(context, R.string.play),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
) )
@@ -168,7 +164,7 @@ fun VoiceMessagePreview(
modifier = Modifier.size(48.dp), modifier = Modifier.size(48.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Close, symbol = MaterialSymbols.Close,
contentDescription = stringRes(context, R.string.remove), contentDescription = stringRes(context, R.string.remove),
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -199,7 +195,7 @@ private fun ReRecordButton(
horizontalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Mic, symbol = MaterialSymbols.Mic,
contentDescription = stringRes(id = R.string.record_a_message), contentDescription = stringRes(id = R.string.record_a_message),
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -224,9 +220,9 @@ private fun ReRecordButton(
} }
val icon = val icon =
if (isRecording) { if (isRecording) {
Icons.Default.Stop MaterialSymbols.Stop
} else { } else {
Icons.Default.Mic MaterialSymbols.Mic
} }
val label = val label =
if (isRecording) { if (isRecording) {
@@ -246,7 +242,7 @@ private fun ReRecordButton(
horizontalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
Icon( Icon(
imageVector = icon, symbol = icon,
contentDescription = iconDescription, contentDescription = iconDescription,
tint = contentColor, tint = contentColor,
) )
@@ -38,11 +38,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Error
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material.icons.filled.Sync
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.LinearProgressIndicator
@@ -59,6 +54,8 @@ 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.commons.defaults.Constants import com.vitorpamplona.amethyst.commons.defaults.Constants
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.service.broadcast.BroadcastEvent import com.vitorpamplona.amethyst.service.broadcast.BroadcastEvent
import com.vitorpamplona.amethyst.service.broadcast.BroadcastStatus import com.vitorpamplona.amethyst.service.broadcast.BroadcastStatus
import com.vitorpamplona.amethyst.service.broadcast.RelayResult import com.vitorpamplona.amethyst.service.broadcast.RelayResult
@@ -137,7 +134,7 @@ private fun SingleBroadcastContent(broadcast: BroadcastEvent) {
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Sync, symbol = MaterialSymbols.Sync,
contentDescription = stringRes(R.string.broadcasting), contentDescription = stringRes(R.string.broadcasting),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
@@ -195,7 +192,7 @@ private fun MultipleBroadcastsContent(broadcasts: ImmutableList<BroadcastEvent>)
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Sync, symbol = MaterialSymbols.Sync,
contentDescription = stringRes(R.string.broadcasting), contentDescription = stringRes(R.string.broadcasting),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
@@ -255,15 +252,15 @@ fun CompletedBroadcastContent(
val (statusIcon, iconTint) = val (statusIcon, iconTint) =
when (broadcast.status) { when (broadcast.status) {
BroadcastStatus.SUCCESS -> Icons.Default.CheckCircle to successColor BroadcastStatus.SUCCESS -> MaterialSymbols.CheckCircle to successColor
BroadcastStatus.PARTIAL -> Icons.Default.Error to warningColor BroadcastStatus.PARTIAL -> MaterialSymbols.Error to warningColor
BroadcastStatus.FAILED -> Icons.Default.Error to MaterialTheme.colorScheme.error BroadcastStatus.FAILED -> MaterialSymbols.Error to MaterialTheme.colorScheme.error
BroadcastStatus.IN_PROGRESS -> Icons.Default.CheckCircle to MaterialTheme.colorScheme.primary BroadcastStatus.IN_PROGRESS -> MaterialSymbols.CheckCircle to MaterialTheme.colorScheme.primary
} }
// Small status icon (like BroadcastBanner) // Small status icon (like BroadcastBanner)
Icon( Icon(
imageVector = statusIcon, symbol = statusIcon,
contentDescription = broadcast.status.name, contentDescription = broadcast.status.name,
tint = iconTint, tint = iconTint,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
@@ -307,7 +304,7 @@ fun CompletedBroadcastContent(
modifier = Modifier.size(22.dp), modifier = Modifier.size(22.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Refresh, symbol = MaterialSymbols.Refresh,
contentDescription = stringRes(R.string.retry_failed), contentDescription = stringRes(R.string.retry_failed),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
@@ -350,16 +347,16 @@ fun MultipleCompletedBroadcastContent(
val (statusIcon, iconTint) = val (statusIcon, iconTint) =
if (allSuccess) { if (allSuccess) {
Icons.Default.CheckCircle to successColor MaterialSymbols.CheckCircle to successColor
} else if (allFailed) { } else if (allFailed) {
Icons.Default.Error to MaterialTheme.colorScheme.error MaterialSymbols.Error to MaterialTheme.colorScheme.error
} else { } else {
Icons.Default.Error to warningColor MaterialSymbols.Error to warningColor
} }
// Small status icon (like BroadcastBanner) // Small status icon (like BroadcastBanner)
Icon( Icon(
imageVector = statusIcon, symbol = statusIcon,
contentDescription = contentDescription =
if (allSuccess) { if (allSuccess) {
stringRes(R.string.bradcasting_result_success) stringRes(R.string.bradcasting_result_success)
@@ -410,7 +407,7 @@ fun MultipleCompletedBroadcastContent(
modifier = Modifier.size(22.dp), modifier = Modifier.size(22.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Refresh, symbol = MaterialSymbols.Refresh,
contentDescription = stringRes(R.string.retry_failed), contentDescription = stringRes(R.string.retry_failed),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
@@ -42,13 +42,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Error
import androidx.compose.material.icons.filled.ExpandLess
import androidx.compose.material.icons.filled.ExpandMore
import androidx.compose.material.icons.filled.HourglassEmpty
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@@ -78,6 +71,8 @@ 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.commons.defaults.Constants import com.vitorpamplona.amethyst.commons.defaults.Constants
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.service.broadcast.BroadcastEvent import com.vitorpamplona.amethyst.service.broadcast.BroadcastEvent
import com.vitorpamplona.amethyst.service.broadcast.BroadcastStatus import com.vitorpamplona.amethyst.service.broadcast.BroadcastStatus
import com.vitorpamplona.amethyst.service.broadcast.RelayResult import com.vitorpamplona.amethyst.service.broadcast.RelayResult
@@ -252,7 +247,7 @@ private fun BroadcastSection(
) )
Icon( Icon(
imageVector = if (isExpanded) Icons.Default.ExpandLess else Icons.Default.ExpandMore, symbol = if (isExpanded) MaterialSymbols.ExpandLess else MaterialSymbols.ExpandMore,
contentDescription = if (isExpanded) stringRes(R.string.collapse) else stringRes(R.string.expand), contentDescription = if (isExpanded) stringRes(R.string.collapse) else stringRes(R.string.expand),
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
@@ -289,7 +284,7 @@ private fun BroadcastSection(
), ),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Refresh, symbol = MaterialSymbols.Refresh,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
) )
@@ -318,14 +313,14 @@ private fun StatusIcon(
) { ) {
val (icon, tint, shouldRotate) = val (icon, tint, shouldRotate) =
when (status) { when (status) {
BroadcastStatus.SUCCESS -> Triple(Icons.Default.CheckCircle, Color(0xFF22C55E), false) BroadcastStatus.SUCCESS -> Triple(MaterialSymbols.CheckCircle, Color(0xFF22C55E), false)
BroadcastStatus.PARTIAL -> Triple(Icons.Default.Error, Color(0xFFF59E0B), false) BroadcastStatus.PARTIAL -> Triple(MaterialSymbols.Error, Color(0xFFF59E0B), false)
BroadcastStatus.FAILED -> Triple(Icons.Default.Error, MaterialTheme.colorScheme.error, false) BroadcastStatus.FAILED -> Triple(MaterialSymbols.Error, MaterialTheme.colorScheme.error, false)
BroadcastStatus.IN_PROGRESS -> Triple(Icons.Default.HourglassEmpty, MaterialTheme.colorScheme.primary, true) BroadcastStatus.IN_PROGRESS -> Triple(MaterialSymbols.HourglassEmpty, MaterialTheme.colorScheme.primary, true)
} }
Icon( Icon(
imageVector = icon, symbol = icon,
contentDescription = status.name, contentDescription = status.name,
tint = tint, tint = tint,
modifier = modifier =
@@ -362,15 +357,15 @@ private fun RelayResultRow(
// Status icon // Status icon
val (icon, tint, shouldRotate) = val (icon, tint, shouldRotate) =
when (result) { when (result) {
is RelayResult.Success -> Triple(Icons.Default.CheckCircle, successColor, false) is RelayResult.Success -> Triple(MaterialSymbols.CheckCircle, successColor, false)
is RelayResult.Error -> Triple(Icons.Default.Error, errorColor, false) is RelayResult.Error -> Triple(MaterialSymbols.Error, errorColor, false)
is RelayResult.Timeout -> Triple(Icons.Default.Error, warningColor, false) is RelayResult.Timeout -> Triple(MaterialSymbols.Error, warningColor, false)
is RelayResult.Pending -> Triple(Icons.Default.HourglassEmpty, MaterialTheme.colorScheme.onSurfaceVariant, true) is RelayResult.Pending -> Triple(MaterialSymbols.HourglassEmpty, MaterialTheme.colorScheme.onSurfaceVariant, true)
is RelayResult.Retrying -> Triple(Icons.Default.HourglassEmpty, MaterialTheme.colorScheme.primary, true) is RelayResult.Retrying -> Triple(MaterialSymbols.HourglassEmpty, MaterialTheme.colorScheme.primary, true)
} }
Icon( Icon(
imageVector = icon, symbol = icon,
contentDescription = null, contentDescription = null,
tint = tint, tint = tint,
modifier = modifier =
@@ -437,7 +432,7 @@ private fun RelayResultRow(
modifier = Modifier.size(32.dp), modifier = Modifier.size(32.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Refresh, symbol = MaterialSymbols.Refresh,
contentDescription = stringResource(R.string.retry), contentDescription = stringResource(R.string.retry),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
@@ -36,9 +36,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Call
import androidx.compose.material.icons.filled.CallEnd
import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -59,6 +56,8 @@ import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.call.CallManager import com.vitorpamplona.amethyst.commons.call.CallManager
import com.vitorpamplona.amethyst.commons.call.CallState import com.vitorpamplona.amethyst.commons.call.CallState
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.call.session.CallSession import com.vitorpamplona.amethyst.ui.call.session.CallSession
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
@@ -256,7 +255,7 @@ private fun CallInProgressUI(
modifier = Modifier.size(64.dp), modifier = Modifier.size(64.dp),
) { ) {
Icon( Icon(
Icons.Default.CallEnd, MaterialSymbols.CallEnd,
contentDescription = stringRes(R.string.call_hangup), contentDescription = stringRes(R.string.call_hangup),
tint = Color.White, tint = Color.White,
modifier = Modifier.size(32.dp), modifier = Modifier.size(32.dp),
@@ -321,7 +320,7 @@ private fun IncomingCallUI(
modifier = Modifier.size(64.dp), modifier = Modifier.size(64.dp),
) { ) {
Icon( Icon(
Icons.Default.CallEnd, MaterialSymbols.CallEnd,
contentDescription = stringRes(R.string.call_reject), contentDescription = stringRes(R.string.call_reject),
tint = Color.White, tint = Color.White,
modifier = Modifier.size(32.dp), modifier = Modifier.size(32.dp),
@@ -334,7 +333,7 @@ private fun IncomingCallUI(
modifier = Modifier.size(64.dp), modifier = Modifier.size(64.dp),
) { ) {
Icon( Icon(
Icons.Default.Call, MaterialSymbols.Call,
contentDescription = stringRes(R.string.call_accept), contentDescription = stringRes(R.string.call_accept),
tint = Color.White, tint = Color.White,
modifier = Modifier.size(32.dp), modifier = Modifier.size(32.dp),
@@ -32,18 +32,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.VolumeOff
import androidx.compose.material.icons.automirrored.filled.VolumeUp
import androidx.compose.material.icons.filled.BluetoothAudio
import androidx.compose.material.icons.filled.Call
import androidx.compose.material.icons.filled.CallEnd
import androidx.compose.material.icons.filled.Mic
import androidx.compose.material.icons.filled.MicOff
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.filled.PersonAdd
import androidx.compose.material.icons.filled.Videocam
import androidx.compose.material.icons.filled.VideocamOff
import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -57,6 +45,8 @@ import androidx.compose.ui.text.font.FontWeight
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 androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonColumn import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonColumn
// ---- Shared building blocks for previews ---- // ---- Shared building blocks for previews ----
@@ -67,7 +57,7 @@ private fun PreviewAvatar(
tint: Color = MaterialTheme.colorScheme.onSurfaceVariant, tint: Color = MaterialTheme.colorScheme.onSurfaceVariant,
) { ) {
Icon( Icon(
Icons.Default.Person, MaterialSymbols.Person,
contentDescription = null, contentDescription = null,
modifier = modifier.size(120.dp), modifier = modifier.size(120.dp),
tint = tint, tint = tint,
@@ -91,7 +81,7 @@ private fun PreviewGroupAvatars(
} }
if (i < 3 || count <= 4) { if (i < 3 || count <= 4) {
Icon( Icon(
Icons.Default.Person, MaterialSymbols.Person,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(halfSize).align(alignment), modifier = Modifier.size(halfSize).align(alignment),
tint = tint, tint = tint,
@@ -133,7 +123,7 @@ private fun PreviewCallControls(
) { ) {
IconButton(onClick = {}, modifier = Modifier.size(56.dp)) { IconButton(onClick = {}, modifier = Modifier.size(56.dp)) {
Icon( Icon(
imageVector = if (isMuted) Icons.Default.MicOff else Icons.Default.Mic, symbol = if (isMuted) MaterialSymbols.MicOff else MaterialSymbols.Mic,
contentDescription = "Mute", contentDescription = "Mute",
tint = if (isMuted) Color.Red else Color.White, tint = if (isMuted) Color.Red else Color.White,
modifier = Modifier.size(28.dp), modifier = Modifier.size(28.dp),
@@ -141,7 +131,7 @@ private fun PreviewCallControls(
} }
IconButton(onClick = {}, modifier = Modifier.size(56.dp)) { IconButton(onClick = {}, modifier = Modifier.size(56.dp)) {
Icon( Icon(
imageVector = if (isVideoEnabled) Icons.Default.Videocam else Icons.Default.VideocamOff, symbol = if (isVideoEnabled) MaterialSymbols.Videocam else MaterialSymbols.VideocamOff,
contentDescription = "Camera", contentDescription = "Camera",
tint = if (!isVideoEnabled) Color.Red else Color.White, tint = if (!isVideoEnabled) Color.Red else Color.White,
modifier = Modifier.size(28.dp), modifier = Modifier.size(28.dp),
@@ -149,11 +139,11 @@ private fun PreviewCallControls(
} }
IconButton(onClick = {}, modifier = Modifier.size(56.dp)) { IconButton(onClick = {}, modifier = Modifier.size(56.dp)) {
Icon( Icon(
imageVector = symbol =
when (audioRoute) { when (audioRoute) {
"speaker" -> Icons.AutoMirrored.Filled.VolumeUp "speaker" -> MaterialSymbols.AutoMirrored.VolumeUp
"bluetooth" -> Icons.Default.BluetoothAudio "bluetooth" -> MaterialSymbols.BluetoothAudio
else -> Icons.AutoMirrored.Filled.VolumeOff else -> MaterialSymbols.AutoMirrored.VolumeOff
}, },
contentDescription = "Audio route", contentDescription = "Audio route",
tint = tint =
@@ -168,7 +158,7 @@ private fun PreviewCallControls(
if (showAddParticipant) { if (showAddParticipant) {
IconButton(onClick = {}, modifier = Modifier.size(56.dp)) { IconButton(onClick = {}, modifier = Modifier.size(56.dp)) {
Icon( Icon(
Icons.Default.PersonAdd, MaterialSymbols.PersonAdd,
contentDescription = "Add participant", contentDescription = "Add participant",
tint = Color.White, tint = Color.White,
modifier = Modifier.size(28.dp), modifier = Modifier.size(28.dp),
@@ -183,7 +173,7 @@ private fun PreviewCallControls(
shape = CircleShape, shape = CircleShape,
modifier = Modifier.size(64.dp), modifier = Modifier.size(64.dp),
) { ) {
Icon(Icons.Default.CallEnd, "Hang up", tint = Color.White, modifier = Modifier.size(32.dp)) Icon(MaterialSymbols.CallEnd, "Hang up", tint = Color.White, modifier = Modifier.size(32.dp))
} }
} }
} }
@@ -218,7 +208,7 @@ private fun PreviewCallInProgress(
shape = CircleShape, shape = CircleShape,
modifier = Modifier.size(64.dp), modifier = Modifier.size(64.dp),
) { ) {
Icon(Icons.Default.CallEnd, "Hang up", tint = Color.White, modifier = Modifier.size(32.dp)) Icon(MaterialSymbols.CallEnd, "Hang up", tint = Color.White, modifier = Modifier.size(32.dp))
} }
} }
} }
@@ -261,7 +251,7 @@ fun PreviewCallingGroupScreen() {
shape = CircleShape, shape = CircleShape,
modifier = Modifier.size(64.dp), modifier = Modifier.size(64.dp),
) { ) {
Icon(Icons.Default.CallEnd, "Hang up", tint = Color.White, modifier = Modifier.size(32.dp)) Icon(MaterialSymbols.CallEnd, "Hang up", tint = Color.White, modifier = Modifier.size(32.dp))
} }
} }
} }
@@ -303,10 +293,10 @@ fun PreviewIncomingVoiceCallScreen() {
Spacer(modifier = Modifier.height(48.dp)) Spacer(modifier = Modifier.height(48.dp))
Row(horizontalArrangement = Arrangement.spacedBy(48.dp)) { Row(horizontalArrangement = Arrangement.spacedBy(48.dp)) {
FloatingActionButton(onClick = {}, containerColor = Color.Red, shape = CircleShape, modifier = Modifier.size(64.dp)) { FloatingActionButton(onClick = {}, containerColor = Color.Red, shape = CircleShape, modifier = Modifier.size(64.dp)) {
Icon(Icons.Default.CallEnd, "Reject", tint = Color.White, modifier = Modifier.size(32.dp)) Icon(MaterialSymbols.CallEnd, "Reject", tint = Color.White, modifier = Modifier.size(32.dp))
} }
FloatingActionButton(onClick = {}, containerColor = Color(0xFF4CAF50), shape = CircleShape, modifier = Modifier.size(64.dp)) { FloatingActionButton(onClick = {}, containerColor = Color(0xFF4CAF50), shape = CircleShape, modifier = Modifier.size(64.dp)) {
Icon(Icons.Default.Call, "Accept", tint = Color.White, modifier = Modifier.size(32.dp)) Icon(MaterialSymbols.Call, "Accept", tint = Color.White, modifier = Modifier.size(32.dp))
} }
} }
} }
@@ -339,10 +329,10 @@ fun PreviewIncomingVideoCallScreen() {
Spacer(modifier = Modifier.height(48.dp)) Spacer(modifier = Modifier.height(48.dp))
Row(horizontalArrangement = Arrangement.spacedBy(48.dp)) { Row(horizontalArrangement = Arrangement.spacedBy(48.dp)) {
FloatingActionButton(onClick = {}, containerColor = Color.Red, shape = CircleShape, modifier = Modifier.size(64.dp)) { FloatingActionButton(onClick = {}, containerColor = Color.Red, shape = CircleShape, modifier = Modifier.size(64.dp)) {
Icon(Icons.Default.CallEnd, "Reject", tint = Color.White, modifier = Modifier.size(32.dp)) Icon(MaterialSymbols.CallEnd, "Reject", tint = Color.White, modifier = Modifier.size(32.dp))
} }
FloatingActionButton(onClick = {}, containerColor = Color(0xFF4CAF50), shape = CircleShape, modifier = Modifier.size(64.dp)) { FloatingActionButton(onClick = {}, containerColor = Color(0xFF4CAF50), shape = CircleShape, modifier = Modifier.size(64.dp)) {
Icon(Icons.Default.Call, "Accept", tint = Color.White, modifier = Modifier.size(32.dp)) Icon(MaterialSymbols.Call, "Accept", tint = Color.White, modifier = Modifier.size(32.dp))
} }
} }
} }
@@ -375,10 +365,10 @@ fun PreviewIncomingGroupCallScreen() {
Spacer(modifier = Modifier.height(48.dp)) Spacer(modifier = Modifier.height(48.dp))
Row(horizontalArrangement = Arrangement.spacedBy(48.dp)) { Row(horizontalArrangement = Arrangement.spacedBy(48.dp)) {
FloatingActionButton(onClick = {}, containerColor = Color.Red, shape = CircleShape, modifier = Modifier.size(64.dp)) { FloatingActionButton(onClick = {}, containerColor = Color.Red, shape = CircleShape, modifier = Modifier.size(64.dp)) {
Icon(Icons.Default.CallEnd, "Reject", tint = Color.White, modifier = Modifier.size(32.dp)) Icon(MaterialSymbols.CallEnd, "Reject", tint = Color.White, modifier = Modifier.size(32.dp))
} }
FloatingActionButton(onClick = {}, containerColor = Color(0xFF4CAF50), shape = CircleShape, modifier = Modifier.size(64.dp)) { FloatingActionButton(onClick = {}, containerColor = Color(0xFF4CAF50), shape = CircleShape, modifier = Modifier.size(64.dp)) {
Icon(Icons.Default.Call, "Accept", tint = Color.White, modifier = Modifier.size(32.dp)) Icon(MaterialSymbols.Call, "Accept", tint = Color.White, modifier = Modifier.size(32.dp))
} }
} }
} }
@@ -589,7 +579,7 @@ fun PreviewPipCallUI() {
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center, verticalArrangement = Arrangement.Center,
) { ) {
Icon(Icons.Default.Person, contentDescription = null, modifier = Modifier.size(48.dp)) Icon(MaterialSymbols.Person, contentDescription = null, modifier = Modifier.size(48.dp))
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text("Calling\u2026", fontSize = 10.sp, color = MaterialTheme.colorScheme.onSurfaceVariant) Text("Calling\u2026", fontSize = 10.sp, color = MaterialTheme.colorScheme.onSurfaceVariant)
} }
@@ -612,7 +602,7 @@ fun PreviewPipConnectedCallUI() {
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center, verticalArrangement = Arrangement.Center,
) { ) {
Icon(Icons.Default.Person, contentDescription = null, modifier = Modifier.size(48.dp), tint = Color.White.copy(alpha = 0.5f)) Icon(MaterialSymbols.Person, contentDescription = null, modifier = Modifier.size(48.dp), tint = Color.White.copy(alpha = 0.5f))
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text("02:45", fontSize = 10.sp, color = Color.White.copy(alpha = 0.7f)) Text("02:45", fontSize = 10.sp, color = Color.White.copy(alpha = 0.7f))
} }
@@ -36,18 +36,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.VolumeUp
import androidx.compose.material.icons.filled.BluetoothAudio
import androidx.compose.material.icons.filled.CallEnd
import androidx.compose.material.icons.filled.CameraFront
import androidx.compose.material.icons.filled.CameraRear
import androidx.compose.material.icons.filled.Mic
import androidx.compose.material.icons.filled.MicOff
import androidx.compose.material.icons.filled.PersonAdd
import androidx.compose.material.icons.filled.Videocam
import androidx.compose.material.icons.filled.VideocamOff
import androidx.compose.material.icons.outlined.Hearing
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -70,6 +58,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.call.CallState import com.vitorpamplona.amethyst.commons.call.CallState
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.service.call.AudioRoute import com.vitorpamplona.amethyst.service.call.AudioRoute
import com.vitorpamplona.amethyst.ui.call.session.CallSession import com.vitorpamplona.amethyst.ui.call.session.CallSession
import com.vitorpamplona.amethyst.ui.note.creators.userSuggestions.ShowUserSuggestionList import com.vitorpamplona.amethyst.ui.note.creators.userSuggestions.ShowUserSuggestionList
@@ -257,7 +247,7 @@ private fun CallControls(
) { ) {
IconButton(onClick = onToggleMute, modifier = Modifier.size(56.dp)) { IconButton(onClick = onToggleMute, modifier = Modifier.size(56.dp)) {
Icon( Icon(
imageVector = if (isAudioMuted) Icons.Default.MicOff else Icons.Default.Mic, symbol = if (isAudioMuted) MaterialSymbols.MicOff else MaterialSymbols.Mic,
contentDescription = stringRes(if (isAudioMuted) R.string.call_unmute else R.string.call_mute), contentDescription = stringRes(if (isAudioMuted) R.string.call_unmute else R.string.call_mute),
tint = if (isAudioMuted) Color.Red else Color.White, tint = if (isAudioMuted) Color.Red else Color.White,
modifier = Modifier.size(28.dp), modifier = Modifier.size(28.dp),
@@ -265,7 +255,7 @@ private fun CallControls(
} }
IconButton(onClick = onToggleVideo, modifier = Modifier.size(56.dp)) { IconButton(onClick = onToggleVideo, modifier = Modifier.size(56.dp)) {
Icon( Icon(
imageVector = if (isVideoEnabled) Icons.Default.Videocam else Icons.Default.VideocamOff, symbol = if (isVideoEnabled) MaterialSymbols.Videocam else MaterialSymbols.VideocamOff,
contentDescription = stringRes(if (isVideoEnabled) R.string.call_camera_off else R.string.call_camera_on), contentDescription = stringRes(if (isVideoEnabled) R.string.call_camera_off else R.string.call_camera_on),
tint = if (!isVideoEnabled) Color.Red else Color.White, tint = if (!isVideoEnabled) Color.Red else Color.White,
modifier = Modifier.size(28.dp), modifier = Modifier.size(28.dp),
@@ -274,11 +264,11 @@ private fun CallControls(
if (isVideoEnabled) { if (isVideoEnabled) {
IconButton(onClick = onSwitchCamera, modifier = Modifier.size(56.dp)) { IconButton(onClick = onSwitchCamera, modifier = Modifier.size(56.dp)) {
Icon( Icon(
imageVector = symbol =
if (isFrontCamera) { if (isFrontCamera) {
Icons.Default.CameraRear MaterialSymbols.CameraRear
} else { } else {
Icons.Default.CameraFront MaterialSymbols.CameraFront
}, },
contentDescription = stringRes(R.string.call_switch_camera), contentDescription = stringRes(R.string.call_switch_camera),
tint = Color.White, tint = Color.White,
@@ -288,11 +278,11 @@ private fun CallControls(
} }
IconButton(onClick = onCycleAudioRoute, modifier = Modifier.size(56.dp)) { IconButton(onClick = onCycleAudioRoute, modifier = Modifier.size(56.dp)) {
Icon( Icon(
imageVector = symbol =
when (currentAudioRoute) { when (currentAudioRoute) {
AudioRoute.EARPIECE -> Icons.Outlined.Hearing AudioRoute.EARPIECE -> MaterialSymbols.Hearing
AudioRoute.SPEAKER -> Icons.AutoMirrored.Filled.VolumeUp AudioRoute.SPEAKER -> MaterialSymbols.AutoMirrored.VolumeUp
AudioRoute.BLUETOOTH -> Icons.Default.BluetoothAudio AudioRoute.BLUETOOTH -> MaterialSymbols.BluetoothAudio
}, },
contentDescription = contentDescription =
stringRes( stringRes(
@@ -313,7 +303,7 @@ private fun CallControls(
} }
IconButton(onClick = onAddParticipant, modifier = Modifier.size(56.dp)) { IconButton(onClick = onAddParticipant, modifier = Modifier.size(56.dp)) {
Icon( Icon(
imageVector = Icons.Default.PersonAdd, symbol = MaterialSymbols.PersonAdd,
contentDescription = stringRes(R.string.call_add_participant), contentDescription = stringRes(R.string.call_add_participant),
tint = Color.White, tint = Color.White,
modifier = Modifier.size(28.dp), modifier = Modifier.size(28.dp),
@@ -328,7 +318,7 @@ private fun CallControls(
modifier = Modifier.size(64.dp), modifier = Modifier.size(64.dp),
) { ) {
Icon( Icon(
Icons.Default.CallEnd, MaterialSymbols.CallEnd,
contentDescription = stringRes(R.string.call_hangup), contentDescription = stringRes(R.string.call_hangup),
tint = Color.White, tint = Color.White,
modifier = Modifier.size(32.dp), modifier = Modifier.size(32.dp),
@@ -31,7 +31,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -39,11 +38,12 @@ 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.draw.alpha import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.Role
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.Dialog
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
import com.vitorpamplona.amethyst.ui.theme.Font14SP import com.vitorpamplona.amethyst.ui.theme.Font14SP
import com.vitorpamplona.amethyst.ui.theme.Size20Modifier import com.vitorpamplona.amethyst.ui.theme.Size20Modifier
@@ -95,7 +95,7 @@ fun M3ActionSection(content: @Composable ColumnScope.() -> Unit) {
@Composable @Composable
fun M3ActionRow( fun M3ActionRow(
icon: ImageVector, icon: MaterialSymbol,
text: String, text: String,
isDestructive: Boolean = false, isDestructive: Boolean = false,
enabled: Boolean = true, enabled: Boolean = true,
@@ -125,7 +125,7 @@ fun M3ActionRow(
.padding(horizontal = 16.dp, vertical = 10.dp), .padding(horizontal = 16.dp, vertical = 10.dp),
) { ) {
Icon( Icon(
imageVector = icon, symbol = icon,
contentDescription = null, contentDescription = null,
modifier = Size20Modifier, modifier = Size20Modifier,
tint = tint, tint = tint,
@@ -21,8 +21,6 @@
package com.vitorpamplona.amethyst.ui.components package com.vitorpamplona.amethyst.ui.components
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Face
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@@ -34,6 +32,8 @@ import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.icons.symbols.rememberMaterialSymbolPainter
import com.vitorpamplona.amethyst.commons.robohash.CachedRobohash import com.vitorpamplona.amethyst.commons.robohash.CachedRobohash
import com.vitorpamplona.amethyst.commons.ui.components.ProfilePictureUrl import com.vitorpamplona.amethyst.commons.ui.components.ProfilePictureUrl
import com.vitorpamplona.amethyst.ui.theme.isLight import com.vitorpamplona.amethyst.ui.theme.isLight
@@ -54,7 +54,7 @@ fun RobohashAsyncImage(
) )
} else { } else {
Image( Image(
imageVector = Icons.Default.Face, painter = rememberMaterialSymbolPainter(MaterialSymbols.Face),
contentDescription = contentDescription, contentDescription = contentDescription,
colorFilter = MaterialTheme.colorScheme.onBackgroundColorFilter, colorFilter = MaterialTheme.colorScheme.onBackgroundColorFilter,
modifier = modifier, modifier = modifier,
@@ -84,10 +84,7 @@ fun RobohashFallbackAsyncImage(
) )
} else { } else {
forwardingPainter( forwardingPainter(
painter = painter = rememberMaterialSymbolPainter(MaterialSymbols.Face),
rememberVectorPainter(
image = Icons.Default.Face,
),
colorFilter = MaterialTheme.colorScheme.onBackgroundColorFilter, colorFilter = MaterialTheme.colorScheme.onBackgroundColorFilter,
) )
} }
@@ -117,7 +114,7 @@ fun RobohashFallbackAsyncImage(
) )
} else { } else {
Image( Image(
imageVector = Icons.Default.Face, painter = rememberMaterialSymbolPainter(MaterialSymbols.Face),
contentDescription = contentDescription, contentDescription = contentDescription,
colorFilter = MaterialTheme.colorScheme.onBackgroundColorFilter, colorFilter = MaterialTheme.colorScheme.onBackgroundColorFilter,
modifier = modifier, modifier = modifier,
@@ -33,9 +33,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Visibility
import androidx.compose.material.icons.rounded.Warning
import androidx.compose.material3.AssistChip import androidx.compose.material3.AssistChip
import androidx.compose.material3.AssistChipDefaults import androidx.compose.material3.AssistChipDefaults
import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.FilledTonalButton
@@ -63,6 +60,8 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil3.imageLoader import coil3.imageLoader
import coil3.request.ImageRequest import coil3.request.ImageRequest
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.richtext.MediaUrlImage import com.vitorpamplona.amethyst.commons.richtext.MediaUrlImage
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled
@@ -268,7 +267,7 @@ private fun ContentWarningOverlayBody(
.width(90.dp), .width(90.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Visibility, symbol = MaterialSymbols.Visibility,
contentDescription = stringRes(R.string.content_warning), contentDescription = stringRes(R.string.content_warning),
modifier = modifier =
Modifier Modifier
@@ -277,7 +276,7 @@ private fun ContentWarningOverlayBody(
tint = Color.White, tint = Color.White,
) )
Icon( Icon(
imageVector = Icons.Rounded.Warning, symbol = MaterialSymbols.Warning,
contentDescription = stringRes(R.string.content_warning), contentDescription = stringRes(R.string.content_warning),
modifier = modifier =
Modifier Modifier
@@ -352,7 +351,7 @@ fun ContentWarningNote(
.width(90.dp), .width(90.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Visibility, symbol = MaterialSymbols.Visibility,
contentDescription = stringRes(R.string.content_warning), contentDescription = stringRes(R.string.content_warning),
modifier = modifier =
Modifier Modifier
@@ -361,7 +360,7 @@ fun ContentWarningNote(
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
) )
Icon( Icon(
imageVector = Icons.Rounded.Warning, symbol = MaterialSymbols.Warning,
contentDescription = stringRes(R.string.content_warning), contentDescription = stringRes(R.string.content_warning),
modifier = modifier =
Modifier Modifier
@@ -30,9 +30,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -54,6 +51,8 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalHapticFeedback
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -157,12 +156,12 @@ fun DismissBackground(dismissState: SwipeToDismissBoxState) {
horizontalArrangement = Arrangement.SpaceBetween, horizontalArrangement = Arrangement.SpaceBetween,
) { ) {
Icon( Icon(
Icons.Default.Delete, MaterialSymbols.Delete,
contentDescription = stringRes(id = R.string.request_deletion), contentDescription = stringRes(id = R.string.request_deletion),
) )
Spacer(modifier = Modifier) Spacer(modifier = Modifier)
Icon( Icon(
Icons.Default.Delete, MaterialSymbols.Delete,
contentDescription = stringRes(id = R.string.request_deletion), contentDescription = stringRes(id = R.string.request_deletion),
) )
} }
@@ -212,7 +211,7 @@ fun ConfirmDeleteBackground(
horizontalArrangement = Arrangement.Center, horizontalArrangement = Arrangement.Center,
) { ) {
Icon( Icon(
Icons.Default.Delete, MaterialSymbols.Delete,
contentDescription = stringRes(id = R.string.request_deletion), contentDescription = stringRes(id = R.string.request_deletion),
tint = Color.White, tint = Color.White,
) )
@@ -233,7 +232,7 @@ fun ConfirmDeleteBackground(
horizontalArrangement = Arrangement.Center, horizontalArrangement = Arrangement.Center,
) { ) {
Icon( Icon(
Icons.Default.Close, MaterialSymbols.Close,
contentDescription = stringRes(id = R.string.cancel), contentDescription = stringRes(id = R.string.cancel),
tint = Color.White, tint = Color.White,
) )
@@ -24,8 +24,6 @@ import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ContentCopy
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -39,6 +37,7 @@ import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.preview.UrlInfoItem import com.vitorpamplona.amethyst.commons.preview.UrlInfoItem
import com.vitorpamplona.amethyst.ui.components.util.setText import com.vitorpamplona.amethyst.ui.components.util.setText
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -69,7 +68,7 @@ fun UrlPreviewCard(
) { ) {
M3ActionSection { M3ActionSection {
M3ActionRow( M3ActionRow(
icon = Icons.Outlined.ContentCopy, icon = MaterialSymbols.ContentCopy,
text = stringRes(R.string.copy_url_to_clipboard), text = stringRes(R.string.copy_url_to_clipboard),
) { ) {
scope.launch { scope.launch {
@@ -48,10 +48,6 @@ import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.PagerState
import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Download
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -84,6 +80,8 @@ import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.rememberPermissionState
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.richtext.BaseMediaContent import com.vitorpamplona.amethyst.commons.richtext.BaseMediaContent
import com.vitorpamplona.amethyst.commons.richtext.MediaLocalImage import com.vitorpamplona.amethyst.commons.richtext.MediaLocalImage
import com.vitorpamplona.amethyst.commons.richtext.MediaLocalVideo import com.vitorpamplona.amethyst.commons.richtext.MediaLocalVideo
@@ -351,7 +349,7 @@ private fun DialogContent(
colors = ButtonDefaults.outlinedButtonColors().copy(containerColor = MaterialTheme.colorScheme.background), colors = ButtonDefaults.outlinedButtonColors().copy(containerColor = MaterialTheme.colorScheme.background),
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, symbol = MaterialSymbols.AutoMirrored.ArrowBack,
contentDescription = stringRes(R.string.back), contentDescription = stringRes(R.string.back),
) )
} }
@@ -366,7 +364,7 @@ private fun DialogContent(
colors = ButtonDefaults.outlinedButtonColors().copy(containerColor = MaterialTheme.colorScheme.background), colors = ButtonDefaults.outlinedButtonColors().copy(containerColor = MaterialTheme.colorScheme.background),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Share, symbol = MaterialSymbols.Share,
modifier = Size20Modifier, modifier = Size20Modifier,
contentDescription = stringRes(R.string.quick_action_share), contentDescription = stringRes(R.string.quick_action_share),
) )
@@ -421,7 +419,7 @@ private fun DialogContent(
colors = ButtonDefaults.outlinedButtonColors().copy(containerColor = MaterialTheme.colorScheme.background), colors = ButtonDefaults.outlinedButtonColors().copy(containerColor = MaterialTheme.colorScheme.background),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Download, symbol = MaterialSymbols.Download,
modifier = Size20Modifier, modifier = Size20Modifier,
contentDescription = stringRes(R.string.download_to_phone), contentDescription = stringRes(R.string.download_to_phone),
) )
@@ -36,12 +36,6 @@ import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Report
import androidx.compose.material.icons.outlined.Collections
import androidx.compose.material.icons.outlined.ContentCopy
import androidx.compose.material.icons.outlined.Link
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -82,6 +76,8 @@ import coil3.size.Size
import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.vitorpamplona.amethyst.Amethyst import com.vitorpamplona.amethyst.Amethyst
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.richtext.BaseMediaContent import com.vitorpamplona.amethyst.commons.richtext.BaseMediaContent
import com.vitorpamplona.amethyst.commons.richtext.MediaLocalImage import com.vitorpamplona.amethyst.commons.richtext.MediaLocalImage
import com.vitorpamplona.amethyst.commons.richtext.MediaLocalVideo import com.vitorpamplona.amethyst.commons.richtext.MediaLocalVideo
@@ -872,7 +868,7 @@ fun ShareMediaAction(
if ((videoUri != null && !videoUri.startsWith("file")) || postNostrUri != null) { if ((videoUri != null && !videoUri.startsWith("file")) || postNostrUri != null) {
M3ActionSection { M3ActionSection {
if (videoUri != null && !videoUri.startsWith("file")) { if (videoUri != null && !videoUri.startsWith("file")) {
M3ActionRow(icon = Icons.Outlined.Link, text = stringRes(R.string.copy_url_to_clipboard)) { M3ActionRow(icon = MaterialSymbols.Link, text = stringRes(R.string.copy_url_to_clipboard)) {
scope.launch { scope.launch {
clipboardManager.setText(videoUri) clipboardManager.setText(videoUri)
} }
@@ -880,13 +876,13 @@ fun ShareMediaAction(
} }
} }
postNostrUri?.let { postNostrUri?.let {
M3ActionRow(icon = Icons.Outlined.ContentCopy, text = stringRes(R.string.copy_the_note_id_to_the_clipboard)) { M3ActionRow(icon = MaterialSymbols.ContentCopy, text = stringRes(R.string.copy_the_note_id_to_the_clipboard)) {
scope.launch { scope.launch {
clipboardManager.setText(it) clipboardManager.setText(it)
} }
onDismiss() onDismiss()
} }
M3ActionRow(icon = Icons.Outlined.Collections, text = stringRes(R.string.add_media_to_gallery)) { M3ActionRow(icon = MaterialSymbols.Collections, text = stringRes(R.string.add_media_to_gallery)) {
if (videoUri != null) { if (videoUri != null) {
val n19 = Nip19Parser.uriToRoute(postNostrUri)?.entity as? NEvent val n19 = Nip19Parser.uriToRoute(postNostrUri)?.entity as? NEvent
if (n19 != null) { if (n19 != null) {
@@ -909,7 +905,7 @@ fun ShareMediaAction(
is MediaUrlImage -> { is MediaUrlImage -> {
videoUri?.let { videoUri?.let {
if (videoUri.isNotEmpty()) { if (videoUri.isNotEmpty()) {
M3ActionRow(icon = Icons.Outlined.Share, text = stringRes(R.string.share_image)) { M3ActionRow(icon = MaterialSymbols.Share, text = stringRes(R.string.share_image)) {
accountViewModel.viewModelScope.launch { shareImageFile(context, videoUri, mimeType) } accountViewModel.viewModelScope.launch { shareImageFile(context, videoUri, mimeType) }
onDismiss() onDismiss()
} }
@@ -921,7 +917,7 @@ fun ShareMediaAction(
videoUri?.let { videoUri?.let {
if (videoUri.isNotEmpty()) { if (videoUri.isNotEmpty()) {
M3ActionRow( M3ActionRow(
icon = Icons.Outlined.Share, icon = MaterialSymbols.Share,
text = stringRes(R.string.share_video), text = stringRes(R.string.share_video),
enabled = !isDownloadingVideo.value, enabled = !isDownloadingVideo.value,
) { ) {
@@ -951,7 +947,7 @@ fun ShareMediaAction(
is MediaLocalVideo -> { is MediaLocalVideo -> {
content.localFile?.let { localFile -> content.localFile?.let { localFile ->
M3ActionRow(icon = Icons.Outlined.Share, text = stringRes(R.string.share_video)) { M3ActionRow(icon = MaterialSymbols.Share, text = stringRes(R.string.share_video)) {
accountViewModel.viewModelScope.launch { shareLocalVideoFile(context, localFile, mimeType) } accountViewModel.viewModelScope.launch { shareLocalVideoFile(context, localFile, mimeType) }
onDismiss() onDismiss()
} }
@@ -1173,7 +1169,7 @@ private fun HashVerificationSymbol(verifiedHash: Boolean) {
}, },
) { ) {
Icon( Icon(
imageVector = Icons.Default.Report, symbol = MaterialSymbols.Report,
contentDescription = stringRes(id = R.string.hash_verification_failed), contentDescription = stringRes(id = R.string.hash_verification_failed),
modifier = Size30Modifier, modifier = Size30Modifier,
tint = Color.Red, tint = Color.Red,
@@ -33,8 +33,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.PictureAsPdf
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -52,6 +50,8 @@ import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
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
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.richtext.MediaUrlPdf import com.vitorpamplona.amethyst.commons.richtext.MediaUrlPdf
import com.vitorpamplona.amethyst.ui.components.ClickableUrl import com.vitorpamplona.amethyst.ui.components.ClickableUrl
import com.vitorpamplona.amethyst.ui.components.ShareMediaAction import com.vitorpamplona.amethyst.ui.components.ShareMediaAction
@@ -222,7 +222,7 @@ private fun FilenameRow(
horizontalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.PictureAsPdf, symbol = MaterialSymbols.PictureAsPdf,
contentDescription = null, contentDescription = null,
modifier = Size20Modifier, modifier = Size20Modifier,
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
@@ -37,9 +37,6 @@ import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -66,6 +63,8 @@ import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogProperties
import coil3.disk.DiskCache import coil3.disk.DiskCache
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.richtext.MediaUrlPdf import com.vitorpamplona.amethyst.commons.richtext.MediaUrlPdf
import com.vitorpamplona.amethyst.ui.components.ShareMediaAction import com.vitorpamplona.amethyst.ui.components.ShareMediaAction
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
@@ -273,7 +272,7 @@ private fun PdfViewerContent(
colors = ButtonDefaults.outlinedButtonColors().copy(containerColor = MaterialTheme.colorScheme.background), colors = ButtonDefaults.outlinedButtonColors().copy(containerColor = MaterialTheme.colorScheme.background),
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, symbol = MaterialSymbols.AutoMirrored.ArrowBack,
contentDescription = stringRes(R.string.back), contentDescription = stringRes(R.string.back),
) )
} }
@@ -297,7 +296,7 @@ private fun PdfViewerContent(
colors = ButtonDefaults.outlinedButtonColors().copy(containerColor = MaterialTheme.colorScheme.background), colors = ButtonDefaults.outlinedButtonColors().copy(containerColor = MaterialTheme.colorScheme.background),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Share, symbol = MaterialSymbols.Share,
modifier = Size20Modifier, modifier = Size20Modifier,
contentDescription = stringRes(R.string.quick_action_share), contentDescription = stringRes(R.string.quick_action_share),
) )
@@ -22,8 +22,6 @@ package com.vitorpamplona.amethyst.ui.components.toasts.multiline
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Done
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -31,6 +29,8 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.ui.navigation.navs.EmptyNav import com.vitorpamplona.amethyst.ui.navigation.navs.EmptyNav
@@ -95,7 +95,7 @@ fun MultiUserErrorMessageDialog(
contentPadding = PaddingValues(horizontal = Size16dp), contentPadding = PaddingValues(horizontal = Size16dp),
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Done, symbol = MaterialSymbols.Done,
contentDescription = null, contentDescription = null,
) )
Spacer(StdHorzSpacer) Spacer(StdHorzSpacer)
@@ -44,6 +44,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.ui.navigation.routes.Route import com.vitorpamplona.amethyst.ui.navigation.routes.Route
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
@@ -144,7 +145,7 @@ private fun NotifiableIcon(
val iconSizeModifier = Modifier.size(Size20dp) val iconSizeModifier = Modifier.size(Size20dp)
val description = stringRes(def.labelRes) val description = stringRes(def.labelRes)
Icon( Icon(
imageVector = def.icon, symbol = def.icon,
contentDescription = description, contentDescription = description,
modifier = iconSizeModifier, modifier = iconSizeModifier,
) )
@@ -20,33 +20,9 @@
*/ */
package com.vitorpamplona.amethyst.ui.navigation.bottombars package com.vitorpamplona.amethyst.ui.navigation.bottombars
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.FormatListBulleted
import androidx.compose.material.icons.automirrored.outlined.Article
import androidx.compose.material.icons.automirrored.outlined.Chat
import androidx.compose.material.icons.filled.AccountCircle
import androidx.compose.material.icons.outlined.AccountBalanceWallet
import androidx.compose.material.icons.outlined.CollectionsBookmark
import androidx.compose.material.icons.outlined.Drafts
import androidx.compose.material.icons.outlined.EmojiEmotions
import androidx.compose.material.icons.outlined.Groups
import androidx.compose.material.icons.outlined.Home
import androidx.compose.material.icons.outlined.Language
import androidx.compose.material.icons.outlined.Mail
import androidx.compose.material.icons.outlined.Mic
import androidx.compose.material.icons.outlined.MilitaryTech
import androidx.compose.material.icons.outlined.Notifications
import androidx.compose.material.icons.outlined.Photo
import androidx.compose.material.icons.outlined.PlayCircle
import androidx.compose.material.icons.outlined.Poll
import androidx.compose.material.icons.outlined.Sensors
import androidx.compose.material.icons.outlined.Settings
import androidx.compose.material.icons.outlined.SmartDisplay
import androidx.compose.material.icons.outlined.Storefront
import androidx.compose.material.icons.outlined.Subscriptions
import androidx.compose.material.icons.outlined.Tag
import androidx.compose.ui.graphics.vector.ImageVector
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.isDebug import com.vitorpamplona.amethyst.isDebug
import com.vitorpamplona.amethyst.ui.navigation.routes.Route import com.vitorpamplona.amethyst.ui.navigation.routes.Route
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
@@ -90,7 +66,7 @@ enum class NavBarItem {
data class NavBarItemDef( data class NavBarItemDef(
val id: NavBarItem, val id: NavBarItem,
val labelRes: Int, val labelRes: Int,
val icon: ImageVector, val icon: MaterialSymbol,
val resolveRoute: (AccountViewModel) -> Route, val resolveRoute: (AccountViewModel) -> Route,
) )
@@ -100,189 +76,189 @@ val NavBarCatalog: Map<NavBarItem, NavBarItemDef> =
NavBarItemDef( NavBarItemDef(
id = NavBarItem.HOME, id = NavBarItem.HOME,
labelRes = R.string.route_home, labelRes = R.string.route_home,
icon = Icons.Outlined.Home, icon = MaterialSymbols.Home,
resolveRoute = { Route.Home }, resolveRoute = { Route.Home },
), ),
NavBarItem.MESSAGES to NavBarItem.MESSAGES to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.MESSAGES, id = NavBarItem.MESSAGES,
labelRes = R.string.route_messages, labelRes = R.string.route_messages,
icon = Icons.Outlined.Mail, icon = MaterialSymbols.Mail,
resolveRoute = { Route.Message }, resolveRoute = { Route.Message },
), ),
NavBarItem.VIDEO to NavBarItem.VIDEO to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.VIDEO, id = NavBarItem.VIDEO,
labelRes = R.string.route_video, labelRes = R.string.route_video,
icon = Icons.Outlined.Subscriptions, icon = MaterialSymbols.Subscriptions,
resolveRoute = { Route.Video }, resolveRoute = { Route.Video },
), ),
NavBarItem.DISCOVER to NavBarItem.DISCOVER to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.DISCOVER, id = NavBarItem.DISCOVER,
labelRes = R.string.route_discover, labelRes = R.string.route_discover,
icon = Icons.Outlined.Sensors, icon = MaterialSymbols.Sensors,
resolveRoute = { Route.Discover }, resolveRoute = { Route.Discover },
), ),
NavBarItem.NOTIFICATIONS to NavBarItem.NOTIFICATIONS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.NOTIFICATIONS, id = NavBarItem.NOTIFICATIONS,
labelRes = R.string.route_notifications, labelRes = R.string.route_notifications,
icon = Icons.Outlined.Notifications, icon = MaterialSymbols.Notifications,
resolveRoute = { Route.Notification() }, resolveRoute = { Route.Notification() },
), ),
NavBarItem.PROFILE to NavBarItem.PROFILE to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.PROFILE, id = NavBarItem.PROFILE,
labelRes = R.string.profile, labelRes = R.string.profile,
icon = Icons.Default.AccountCircle, icon = MaterialSymbols.AccountCircle,
resolveRoute = { Route.Profile(it.userProfile().pubkeyHex) }, resolveRoute = { Route.Profile(it.userProfile().pubkeyHex) },
), ),
NavBarItem.MY_LISTS to NavBarItem.MY_LISTS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.MY_LISTS, id = NavBarItem.MY_LISTS,
labelRes = R.string.my_lists, labelRes = R.string.my_lists,
icon = Icons.AutoMirrored.Filled.FormatListBulleted, icon = MaterialSymbols.AutoMirrored.FormatListBulleted,
resolveRoute = { Route.Lists }, resolveRoute = { Route.Lists },
), ),
NavBarItem.BOOKMARKS to NavBarItem.BOOKMARKS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.BOOKMARKS, id = NavBarItem.BOOKMARKS,
labelRes = R.string.bookmarks, labelRes = R.string.bookmarks,
icon = Icons.Outlined.CollectionsBookmark, icon = MaterialSymbols.CollectionsBookmark,
resolveRoute = { Route.BookmarkGroups }, resolveRoute = { Route.BookmarkGroups },
), ),
NavBarItem.WEB_BOOKMARKS to NavBarItem.WEB_BOOKMARKS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.WEB_BOOKMARKS, id = NavBarItem.WEB_BOOKMARKS,
labelRes = R.string.web_bookmarks, labelRes = R.string.web_bookmarks,
icon = Icons.Outlined.Language, icon = MaterialSymbols.Language,
resolveRoute = { Route.WebBookmarks }, resolveRoute = { Route.WebBookmarks },
), ),
NavBarItem.DRAFTS to NavBarItem.DRAFTS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.DRAFTS, id = NavBarItem.DRAFTS,
labelRes = R.string.drafts, labelRes = R.string.drafts,
icon = Icons.Outlined.Drafts, icon = MaterialSymbols.Drafts,
resolveRoute = { Route.Drafts }, resolveRoute = { Route.Drafts },
), ),
NavBarItem.INTEREST_SETS to NavBarItem.INTEREST_SETS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.INTEREST_SETS, id = NavBarItem.INTEREST_SETS,
labelRes = R.string.interest_sets_title, labelRes = R.string.interest_sets_title,
icon = Icons.Outlined.Tag, icon = MaterialSymbols.Tag,
resolveRoute = { Route.InterestSets }, resolveRoute = { Route.InterestSets },
), ),
NavBarItem.EMOJI_PACKS to NavBarItem.EMOJI_PACKS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.EMOJI_PACKS, id = NavBarItem.EMOJI_PACKS,
labelRes = R.string.manage_emoji_packs, labelRes = R.string.manage_emoji_packs,
icon = Icons.Outlined.EmojiEmotions, icon = MaterialSymbols.EmojiEmotions,
resolveRoute = { Route.EmojiPacks }, resolveRoute = { Route.EmojiPacks },
), ),
NavBarItem.WALLET to NavBarItem.WALLET to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.WALLET, id = NavBarItem.WALLET,
labelRes = R.string.wallet, labelRes = R.string.wallet,
icon = Icons.Outlined.AccountBalanceWallet, icon = MaterialSymbols.AccountBalanceWallet,
resolveRoute = { Route.Wallet }, resolveRoute = { Route.Wallet },
), ),
NavBarItem.COMMUNITIES to NavBarItem.COMMUNITIES to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.COMMUNITIES, id = NavBarItem.COMMUNITIES,
labelRes = R.string.communities, labelRes = R.string.communities,
icon = Icons.Outlined.Groups, icon = MaterialSymbols.Groups,
resolveRoute = { Route.Communities }, resolveRoute = { Route.Communities },
), ),
NavBarItem.ARTICLES to NavBarItem.ARTICLES to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.ARTICLES, id = NavBarItem.ARTICLES,
labelRes = R.string.discover_reads, labelRes = R.string.discover_reads,
icon = Icons.AutoMirrored.Outlined.Article, icon = MaterialSymbols.AutoMirrored.Article,
resolveRoute = { Route.Articles }, resolveRoute = { Route.Articles },
), ),
NavBarItem.PICTURES to NavBarItem.PICTURES to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.PICTURES, id = NavBarItem.PICTURES,
labelRes = R.string.pictures, labelRes = R.string.pictures,
icon = Icons.Outlined.Photo, icon = MaterialSymbols.Photo,
resolveRoute = { Route.Pictures }, resolveRoute = { Route.Pictures },
), ),
NavBarItem.SHORTS to NavBarItem.SHORTS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.SHORTS, id = NavBarItem.SHORTS,
labelRes = R.string.shorts, labelRes = R.string.shorts,
icon = Icons.Outlined.PlayCircle, icon = MaterialSymbols.PlayCircle,
resolveRoute = { Route.Shorts }, resolveRoute = { Route.Shorts },
), ),
NavBarItem.PUBLIC_CHATS to NavBarItem.PUBLIC_CHATS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.PUBLIC_CHATS, id = NavBarItem.PUBLIC_CHATS,
labelRes = R.string.public_chats, labelRes = R.string.public_chats,
icon = Icons.AutoMirrored.Outlined.Chat, icon = MaterialSymbols.AutoMirrored.Chat,
resolveRoute = { Route.PublicChats }, resolveRoute = { Route.PublicChats },
), ),
NavBarItem.FOLLOW_PACKS to NavBarItem.FOLLOW_PACKS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.FOLLOW_PACKS, id = NavBarItem.FOLLOW_PACKS,
labelRes = R.string.follow_packs, labelRes = R.string.follow_packs,
icon = Icons.Outlined.CollectionsBookmark, icon = MaterialSymbols.CollectionsBookmark,
resolveRoute = { Route.FollowPacks }, resolveRoute = { Route.FollowPacks },
), ),
NavBarItem.LIVE_STREAMS to NavBarItem.LIVE_STREAMS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.LIVE_STREAMS, id = NavBarItem.LIVE_STREAMS,
labelRes = R.string.live_streams, labelRes = R.string.live_streams,
icon = Icons.Outlined.Sensors, icon = MaterialSymbols.Sensors,
resolveRoute = { Route.LiveStreams }, resolveRoute = { Route.LiveStreams },
), ),
NavBarItem.AUDIO_ROOMS to NavBarItem.AUDIO_ROOMS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.AUDIO_ROOMS, id = NavBarItem.AUDIO_ROOMS,
labelRes = R.string.audio_rooms, labelRes = R.string.audio_rooms,
icon = Icons.Outlined.Mic, icon = MaterialSymbols.Mic,
resolveRoute = { Route.AudioRooms }, resolveRoute = { Route.AudioRooms },
), ),
NavBarItem.LONGS to NavBarItem.LONGS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.LONGS, id = NavBarItem.LONGS,
labelRes = R.string.longs, labelRes = R.string.longs,
icon = Icons.Outlined.SmartDisplay, icon = MaterialSymbols.SmartDisplay,
resolveRoute = { Route.Longs }, resolveRoute = { Route.Longs },
), ),
NavBarItem.POLLS to NavBarItem.POLLS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.POLLS, id = NavBarItem.POLLS,
labelRes = R.string.polls, labelRes = R.string.polls,
icon = Icons.Outlined.Poll, icon = MaterialSymbols.Poll,
resolveRoute = { Route.Polls }, resolveRoute = { Route.Polls },
), ),
NavBarItem.BADGES to NavBarItem.BADGES to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.BADGES, id = NavBarItem.BADGES,
labelRes = R.string.badges, labelRes = R.string.badges,
icon = Icons.Outlined.MilitaryTech, icon = MaterialSymbols.MilitaryTech,
resolveRoute = { Route.Badges }, resolveRoute = { Route.Badges },
), ),
NavBarItem.PRODUCTS to NavBarItem.PRODUCTS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.PRODUCTS, id = NavBarItem.PRODUCTS,
labelRes = R.string.discover_marketplace, labelRes = R.string.discover_marketplace,
icon = Icons.Outlined.Storefront, icon = MaterialSymbols.Storefront,
resolveRoute = { Route.Products }, resolveRoute = { Route.Products },
), ),
NavBarItem.EMOJI_SETS to NavBarItem.EMOJI_SETS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.EMOJI_SETS, id = NavBarItem.EMOJI_SETS,
labelRes = R.string.emoji_sets, labelRes = R.string.emoji_sets,
icon = Icons.Outlined.EmojiEmotions, icon = MaterialSymbols.EmojiEmotions,
resolveRoute = { Route.BrowseEmojiSets }, resolveRoute = { Route.BrowseEmojiSets },
), ),
NavBarItem.SETTINGS to NavBarItem.SETTINGS to
NavBarItemDef( NavBarItemDef(
id = NavBarItem.SETTINGS, id = NavBarItem.SETTINGS,
labelRes = R.string.settings, labelRes = R.string.settings,
icon = Icons.Outlined.Settings, icon = MaterialSymbols.Settings,
resolveRoute = { Route.AllSettings }, resolveRoute = { Route.AllSettings },
), ),
) )
@@ -31,9 +31,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Logout
import androidx.compose.material.icons.filled.RadioButtonChecked
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -57,6 +54,8 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.AccountInfo import com.vitorpamplona.amethyst.AccountInfo
import com.vitorpamplona.amethyst.LocalPreferences import com.vitorpamplona.amethyst.LocalPreferences
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUserInfo import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUserInfo
@@ -205,7 +204,7 @@ private fun ActiveMarker(
if (isCurrentUser) { if (isCurrentUser) {
Icon( Icon(
imageVector = Icons.Default.RadioButtonChecked, symbol = MaterialSymbols.RadioButtonChecked,
contentDescription = stringRes(R.string.account_switch_active_account), contentDescription = stringRes(R.string.account_switch_active_account),
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
) )
@@ -288,7 +287,7 @@ private fun LogoutButton(
onClick = { logoutDialog = true }, onClick = { logoutDialog = true },
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.Logout, symbol = MaterialSymbols.AutoMirrored.Logout,
contentDescription = stringRes(R.string.log_out), contentDescription = stringRes(R.string.log_out),
tint = MaterialTheme.colorScheme.onSurface, tint = MaterialTheme.colorScheme.onSurface,
) )
@@ -49,18 +49,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Send
import androidx.compose.material.icons.filled.AccountCircle
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.outlined.CollectionsBookmark
import androidx.compose.material.icons.outlined.Drafts
import androidx.compose.material.icons.outlined.ExpandLess
import androidx.compose.material.icons.outlined.ExpandMore
import androidx.compose.material.icons.outlined.GroupAdd
import androidx.compose.material.icons.outlined.Photo
import androidx.compose.material.icons.outlined.SettingsInputAntenna
import androidx.compose.material.icons.outlined.SmartDisplay
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -81,7 +69,6 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@@ -99,6 +86,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
import com.vitorpamplona.amethyst.BuildConfig import com.vitorpamplona.amethyst.BuildConfig
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.model.ImmutableListOfLists import com.vitorpamplona.amethyst.commons.model.ImmutableListOfLists
import com.vitorpamplona.amethyst.isDebug import com.vitorpamplona.amethyst.isDebug
import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.Account
@@ -467,7 +457,7 @@ fun SendButton(
onClick = onClick, onClick = onClick,
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.Send, symbol = MaterialSymbols.AutoMirrored.Send,
null, null,
modifier = Size20Modifier, modifier = Size20Modifier,
tint = tint, tint = tint,
@@ -482,7 +472,7 @@ fun UserStatusDeleteButton(onClick: () -> Unit) {
onClick = onClick, onClick = onClick,
) { ) {
Icon( Icon(
imageVector = Icons.Default.Delete, symbol = MaterialSymbols.Delete,
null, null,
modifier = Size20Modifier, modifier = Size20Modifier,
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -549,7 +539,7 @@ fun ListContent(
CollapsibleSection(title = R.string.drawer_section_create) { CollapsibleSection(title = R.string.drawer_section_create) {
NavigationRow( NavigationRow(
title = R.string.share_hls_video, title = R.string.share_hls_video,
icon = Icons.Outlined.SettingsInputAntenna, icon = MaterialSymbols.SettingsInputAntenna,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
nav = nav, nav = nav,
route = Route.NewHlsVideo, route = Route.NewHlsVideo,
@@ -585,7 +575,7 @@ fun ListContent(
IconRow( IconRow(
title = R.string.drawer_accounts, title = R.string.drawer_accounts,
icon = Icons.Outlined.GroupAdd, icon = MaterialSymbols.GroupAdd,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
onClick = openSheet, onClick = openSheet,
) )
@@ -653,7 +643,7 @@ fun CollapsibleSection(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
) )
Icon( Icon(
imageVector = if (expanded) Icons.Outlined.ExpandLess else Icons.Outlined.ExpandMore, symbol = if (expanded) MaterialSymbols.ExpandLess else MaterialSymbols.ExpandMore,
contentDescription = sectionTitle, contentDescription = sectionTitle,
modifier = Size22Modifier, modifier = Size22Modifier,
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
@@ -711,7 +701,7 @@ fun NavigationRow(
@Composable @Composable
fun NavigationRow( fun NavigationRow(
title: Int, title: Int,
icon: ImageVector, icon: MaterialSymbol,
tint: Color, tint: Color,
nav: INav, nav: INav,
route: Route, route: Route,
@@ -730,7 +720,7 @@ fun NavigationRow(
@Composable @Composable
fun NavigationRow( fun NavigationRow(
title: Int, title: Int,
icon: ImageVector, icon: MaterialSymbol,
tint: Color, tint: Color,
nav: INav, nav: INav,
computeRoute: () -> Route, computeRoute: () -> Route,
@@ -783,7 +773,7 @@ fun IconRow(
@Composable @Composable
fun IconRow( fun IconRow(
title: Int, title: Int,
icon: ImageVector, icon: MaterialSymbol,
tint: Color, tint: Color,
onClick: () -> Unit, onClick: () -> Unit,
) { ) {
@@ -800,7 +790,7 @@ fun IconRow(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
imageVector = icon, symbol = icon,
contentDescription = title, contentDescription = title,
modifier = Size22ModifierWith4Padding, modifier = Size22ModifierWith4Padding,
tint = tint, tint = tint,
@@ -943,19 +933,19 @@ private fun CollapsibleSectionPreview() {
CollapsibleSection(title = R.string.drawer_section_you) { CollapsibleSection(title = R.string.drawer_section_you) {
IconRow( IconRow(
title = R.string.profile, title = R.string.profile,
icon = Icons.Default.AccountCircle, icon = MaterialSymbols.AccountCircle,
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
onClick = {}, onClick = {},
) )
IconRow( IconRow(
title = R.string.bookmarks, title = R.string.bookmarks,
icon = Icons.Outlined.CollectionsBookmark, icon = MaterialSymbols.CollectionsBookmark,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
onClick = {}, onClick = {},
) )
IconRow( IconRow(
title = R.string.drafts, title = R.string.drafts,
icon = Icons.Outlined.Drafts, icon = MaterialSymbols.Drafts,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
onClick = {}, onClick = {},
) )
@@ -963,13 +953,13 @@ private fun CollapsibleSectionPreview() {
CollapsibleSection(title = R.string.drawer_section_feeds) { CollapsibleSection(title = R.string.drawer_section_feeds) {
IconRow( IconRow(
title = R.string.pictures, title = R.string.pictures,
icon = Icons.Outlined.Photo, icon = MaterialSymbols.Photo,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
onClick = {}, onClick = {},
) )
IconRow( IconRow(
title = R.string.longs, title = R.string.longs,
icon = Icons.Outlined.SmartDisplay, icon = MaterialSymbols.SmartDisplay,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
onClick = {}, onClick = {},
) )
@@ -36,16 +36,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.ViewList
import androidx.compose.material.icons.automirrored.outlined.VolumeOff
import androidx.compose.material.icons.filled.ExpandMore
import androidx.compose.material.icons.outlined.AutoAwesome
import androidx.compose.material.icons.outlined.Groups
import androidx.compose.material.icons.outlined.LocationOn
import androidx.compose.material.icons.outlined.Person
import androidx.compose.material.icons.outlined.Public
import androidx.compose.material.icons.outlined.Storage
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
@@ -78,6 +68,8 @@ import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.rememberPermissionState
import com.vitorpamplona.amethyst.Amethyst import com.vitorpamplona.amethyst.Amethyst
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.model.TopFilter import com.vitorpamplona.amethyst.model.TopFilter
import com.vitorpamplona.amethyst.service.call.CallSessionBridge.accountViewModel import com.vitorpamplona.amethyst.service.call.CallSessionBridge.accountViewModel
@@ -261,7 +253,7 @@ fun FeedFilterSpinner(
} }
Icon( Icon(
imageVector = Icons.Default.ExpandMore, symbol = MaterialSymbols.ExpandMore,
contentDescription = explainer, contentDescription = explainer,
modifier = Size20Modifier, modifier = Size20Modifier,
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -579,54 +571,54 @@ private fun FeedIcon(
val icon = val icon =
when (item.code) { when (item.code) {
is TopFilter.Global -> { is TopFilter.Global -> {
Icons.Outlined.Public MaterialSymbols.Public
} }
is TopFilter.AroundMe -> { is TopFilter.AroundMe -> {
Icons.Outlined.LocationOn MaterialSymbols.LocationOn
} }
is TopFilter.AllFollows -> { is TopFilter.AllFollows -> {
Icons.Outlined.Groups MaterialSymbols.Groups
} }
is TopFilter.AllUserFollows -> { is TopFilter.AllUserFollows -> {
Icons.Outlined.Person MaterialSymbols.Person
} }
is TopFilter.DefaultFollows -> { is TopFilter.DefaultFollows -> {
Icons.Outlined.Groups MaterialSymbols.Groups
} }
is TopFilter.MuteList -> { is TopFilter.MuteList -> {
Icons.AutoMirrored.Outlined.VolumeOff MaterialSymbols.AutoMirrored.VolumeOff
} }
is TopFilter.PeopleList -> { is TopFilter.PeopleList -> {
Icons.AutoMirrored.Outlined.ViewList MaterialSymbols.AutoMirrored.ViewList
} }
is TopFilter.FavoriteAlgoFeed -> { is TopFilter.FavoriteAlgoFeed -> {
Icons.Outlined.AutoAwesome MaterialSymbols.AutoAwesome
} }
is TopFilter.AllFavoriteAlgoFeeds -> { is TopFilter.AllFavoriteAlgoFeeds -> {
Icons.Outlined.AutoAwesome MaterialSymbols.AutoAwesome
} }
else -> { else -> {
when (item.name) { when (item.name) {
is GeoHashName -> Icons.Outlined.LocationOn is GeoHashName -> MaterialSymbols.LocationOn
is RelayName -> Icons.Outlined.Storage is RelayName -> MaterialSymbols.Storage
is CommunityName -> Icons.Outlined.Groups is CommunityName -> MaterialSymbols.Groups
is PeopleListName -> Icons.AutoMirrored.Outlined.ViewList is PeopleListName -> MaterialSymbols.AutoMirrored.ViewList
is FavoriteAlgoFeedName -> Icons.Outlined.AutoAwesome is FavoriteAlgoFeedName -> MaterialSymbols.AutoAwesome
else -> Icons.Outlined.Person else -> MaterialSymbols.Person
} }
} }
} }
Icon( Icon(
imageVector = icon, symbol = icon,
contentDescription = null, contentDescription = null,
modifier = modifier, modifier = modifier,
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
@@ -29,8 +29,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.MilitaryTech
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -42,6 +40,8 @@ import androidx.compose.ui.platform.LocalContext
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
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.observeNote import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.observeNote
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.navigation.routes.routeFor import com.vitorpamplona.amethyst.ui.navigation.routes.routeFor
@@ -102,7 +102,7 @@ fun BadgeCompose(
modifier = Modifier.width(55.dp).padding(0.dp), modifier = Modifier.width(55.dp).padding(0.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.MilitaryTech, symbol = MaterialSymbols.MilitaryTech,
null, null,
modifier = Modifier.size(25.dp).align(Alignment.TopEnd), modifier = Modifier.size(25.dp).align(Alignment.TopEnd),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -27,8 +27,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Done
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonColors import androidx.compose.material3.ButtonColors
@@ -42,6 +40,8 @@ import androidx.compose.ui.Modifier
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.painterRes 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
@@ -97,7 +97,7 @@ fun ErrorMessageDialog(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Done, symbol = MaterialSymbols.Done,
contentDescription = null, contentDescription = null,
) )
Spacer(StdHorzSpacer) Spacer(StdHorzSpacer)
@@ -22,25 +22,6 @@ package com.vitorpamplona.amethyst.ui.note
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.OpenInNew
import androidx.compose.material.icons.automirrored.outlined.OpenInNew
import androidx.compose.material.icons.filled.Bolt
import androidx.compose.material.icons.filled.Cancel
import androidx.compose.material.icons.filled.Clear
import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.material.icons.filled.DownloadForOffline
import androidx.compose.material.icons.filled.ExpandLess
import androidx.compose.material.icons.filled.ExpandMore
import androidx.compose.material.icons.filled.Link
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.filled.PushPin
import androidx.compose.material.icons.filled.Share
import androidx.compose.material.icons.outlined.AddReaction
import androidx.compose.material.icons.outlined.Close
import androidx.compose.material.icons.outlined.Mic
import androidx.compose.material.icons.outlined.PlayCircle
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
@@ -62,6 +43,8 @@ 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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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
@@ -94,7 +77,7 @@ fun FollowingIcon(modifier: Modifier) {
@Composable @Composable
fun ArrowBackIcon(tint: Color = MaterialTheme.colorScheme.grayText) { fun ArrowBackIcon(tint: Color = MaterialTheme.colorScheme.grayText) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, symbol = MaterialSymbols.AutoMirrored.ArrowBack,
contentDescription = stringRes(R.string.back), contentDescription = stringRes(R.string.back),
tint = tint, tint = tint,
) )
@@ -106,7 +89,7 @@ fun DownloadForOfflineIcon(
tint: Color = MaterialTheme.colorScheme.primary, tint: Color = MaterialTheme.colorScheme.primary,
) { ) {
Icon( Icon(
imageVector = Icons.Default.DownloadForOffline, symbol = MaterialSymbols.DownloadForOffline,
contentDescription = stringRes(id = R.string.accessibility_download_for_offline), contentDescription = stringRes(id = R.string.accessibility_download_for_offline),
modifier = remember(iconSize) { Modifier.size(iconSize) }, modifier = remember(iconSize) { Modifier.size(iconSize) },
tint = tint, tint = tint,
@@ -132,7 +115,7 @@ fun ChangeReactionIcon(
tint: Color = Color.Unspecified, tint: Color = Color.Unspecified,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.AddReaction, symbol = MaterialSymbols.AddReaction,
contentDescription = stringRes(id = R.string.change_reaction), contentDescription = stringRes(id = R.string.change_reaction),
modifier = modifier, modifier = modifier,
tint = tint, tint = tint,
@@ -184,7 +167,7 @@ fun LightningAddressIcon(
tint: Color = Color.Unspecified, tint: Color = Color.Unspecified,
) { ) {
Icon( Icon(
imageVector = Icons.Default.Bolt, symbol = MaterialSymbols.Bolt,
contentDescription = stringRes(R.string.lightning_address), contentDescription = stringRes(R.string.lightning_address),
tint = tint, tint = tint,
modifier = modifier, modifier = modifier,
@@ -222,7 +205,7 @@ fun ZapIcon(
contentDescriptor: Int = R.string.zap_description, contentDescriptor: Int = R.string.zap_description,
) { ) {
Icon( Icon(
imageVector = Icons.Default.Bolt, symbol = MaterialSymbols.Bolt,
contentDescription = stringRes(contentDescriptor), contentDescription = stringRes(contentDescriptor),
tint = tint, tint = tint,
modifier = modifier, modifier = modifier,
@@ -249,7 +232,7 @@ fun ShareIcon(
tint: Color = Color.Unspecified, tint: Color = Color.Unspecified,
) { ) {
Icon( Icon(
imageVector = Icons.Default.Share, symbol = MaterialSymbols.Share,
modifier = modifier, modifier = modifier,
contentDescription = stringRes(R.string.share_or_save), contentDescription = stringRes(R.string.share_or_save),
tint = tint, tint = tint,
@@ -269,7 +252,7 @@ fun CashuIcon(modifier: Modifier) {
@Composable @Composable
fun CopyIcon(modifier: Modifier) { fun CopyIcon(modifier: Modifier) {
Icon( Icon(
imageVector = Icons.Default.ContentCopy, symbol = MaterialSymbols.ContentCopy,
stringRes(id = R.string.copy_to_clipboard), stringRes(id = R.string.copy_to_clipboard),
modifier = modifier, modifier = modifier,
) )
@@ -278,7 +261,7 @@ fun CopyIcon(modifier: Modifier) {
@Composable @Composable
fun OpenInNewIcon(modifier: Modifier) { fun OpenInNewIcon(modifier: Modifier) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.OpenInNew, symbol = MaterialSymbols.AutoMirrored.OpenInNew,
stringRes(id = R.string.copy_to_clipboard), stringRes(id = R.string.copy_to_clipboard),
modifier = modifier, modifier = modifier,
) )
@@ -290,7 +273,7 @@ fun ExpandLessIcon(
contentDescriptor: Int, contentDescriptor: Int,
) { ) {
Icon( Icon(
imageVector = Icons.Default.ExpandLess, symbol = MaterialSymbols.ExpandLess,
contentDescription = stringRes(id = contentDescriptor), contentDescription = stringRes(id = contentDescriptor),
modifier = modifier, modifier = modifier,
tint = MaterialTheme.colorScheme.subtleButton, tint = MaterialTheme.colorScheme.subtleButton,
@@ -303,7 +286,7 @@ fun ExpandMoreIcon(
contentDescriptor: Int, contentDescriptor: Int,
) { ) {
Icon( Icon(
imageVector = Icons.Default.ExpandMore, symbol = MaterialSymbols.ExpandMore,
contentDescription = stringRes(id = contentDescriptor), contentDescription = stringRes(id = contentDescriptor),
modifier = modifier, modifier = modifier,
tint = MaterialTheme.colorScheme.subtleButton, tint = MaterialTheme.colorScheme.subtleButton,
@@ -316,7 +299,7 @@ fun VoiceReplyIcon(
tint: Color, tint: Color,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Mic, symbol = MaterialSymbols.Mic,
contentDescription = stringRes(id = R.string.record_a_message), contentDescription = stringRes(id = R.string.record_a_message),
tint = tint, tint = tint,
modifier = iconSizeModifier, modifier = iconSizeModifier,
@@ -339,7 +322,7 @@ fun CommentIcon(
@Composable @Composable
fun CancelIcon() { fun CancelIcon() {
Icon( Icon(
imageVector = Icons.Default.Cancel, symbol = MaterialSymbols.Cancel,
contentDescription = stringRes(id = R.string.cancel), contentDescription = stringRes(id = R.string.cancel),
modifier = Size30Modifier, modifier = Size30Modifier,
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -349,7 +332,7 @@ fun CancelIcon() {
@Composable @Composable
fun CloseIcon() { fun CloseIcon() {
Icon( Icon(
imageVector = Icons.Outlined.Close, symbol = MaterialSymbols.Close,
contentDescription = stringRes(id = R.string.cancel), contentDescription = stringRes(id = R.string.cancel),
modifier = Size20Modifier, modifier = Size20Modifier,
) )
@@ -374,7 +357,7 @@ fun PlayIcon(
tint: Color, tint: Color,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.PlayCircle, symbol = MaterialSymbols.PlayCircle,
contentDescription = stringRes(id = R.string.accessibility_play_username), contentDescription = stringRes(id = R.string.accessibility_play_username),
modifier = modifier, modifier = modifier,
tint = tint, tint = tint,
@@ -387,7 +370,7 @@ fun PinIcon(
tint: Color, tint: Color,
) { ) {
Icon( Icon(
imageVector = Icons.Default.PushPin, symbol = MaterialSymbols.PushPin,
contentDescription = stringRes(id = R.string.accessibility_pushpin), contentDescription = stringRes(id = R.string.accessibility_pushpin),
modifier = modifier, modifier = modifier,
tint = tint, tint = tint,
@@ -400,7 +383,7 @@ fun EnablePiP(
tint: Color, tint: Color,
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Outlined.OpenInNew, symbol = MaterialSymbols.AutoMirrored.OpenInNew,
contentDescription = stringRes(id = R.string.enter_picture_in_picture), contentDescription = stringRes(id = R.string.enter_picture_in_picture),
modifier = modifier, modifier = modifier,
tint = tint, tint = tint,
@@ -410,7 +393,7 @@ fun EnablePiP(
@Composable @Composable
fun ClearTextIcon() { fun ClearTextIcon() {
Icon( Icon(
imageVector = Icons.Default.Clear, symbol = MaterialSymbols.Clear,
contentDescription = stringRes(R.string.clear), contentDescription = stringRes(R.string.clear),
) )
} }
@@ -421,7 +404,7 @@ fun LinkIcon(
tint: Color, tint: Color,
) { ) {
Icon( Icon(
imageVector = Icons.Default.Link, symbol = MaterialSymbols.Link,
contentDescription = stringRes(R.string.website), contentDescription = stringRes(R.string.website),
modifier = modifier, modifier = modifier,
tint = tint, tint = tint,
@@ -431,7 +414,7 @@ fun LinkIcon(
@Composable @Composable
fun VerticalDotsIcon() { fun VerticalDotsIcon() {
Icon( Icon(
imageVector = Icons.Default.MoreVert, symbol = MaterialSymbols.MoreVert,
contentDescription = stringRes(id = R.string.note_options), contentDescription = stringRes(id = R.string.note_options),
modifier = Size19Modifier, modifier = Size19Modifier,
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -23,10 +23,6 @@ package com.vitorpamplona.amethyst.ui.note
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.OpenInNew
import androidx.compose.material.icons.filled.Downloading
import androidx.compose.material.icons.filled.Report
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.LocalTextStyle
@@ -49,6 +45,8 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.hashtags.CustomHashTagIcons import com.vitorpamplona.amethyst.commons.hashtags.CustomHashTagIcons
import com.vitorpamplona.amethyst.commons.hashtags.Tunestr import com.vitorpamplona.amethyst.commons.hashtags.Tunestr
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.model.nip05DnsIdentifiers.Nip05State import com.vitorpamplona.amethyst.commons.model.nip05DnsIdentifiers.Nip05State
import com.vitorpamplona.amethyst.commons.model.nip05DnsIdentifiers.Nip05VerifState import com.vitorpamplona.amethyst.commons.model.nip05DnsIdentifiers.Nip05VerifState
import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.AddressableNote
@@ -303,7 +301,7 @@ fun DisplayStatusInner(
onClick = { runCatching { uri.openUri(url.trim()) } }, onClick = { runCatching { uri.openUri(url.trim()) } },
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.OpenInNew, symbol = MaterialSymbols.AutoMirrored.OpenInNew,
null, null,
modifier = Size15Modifier, modifier = Size15Modifier,
tint = MaterialTheme.colorScheme.lessImportantLink, tint = MaterialTheme.colorScheme.lessImportantLink,
@@ -323,7 +321,7 @@ fun DisplayStatusInner(
}, },
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.OpenInNew, symbol = MaterialSymbols.AutoMirrored.OpenInNew,
null, null,
modifier = Size15Modifier, modifier = Size15Modifier,
tint = MaterialTheme.colorScheme.lessImportantLink, tint = MaterialTheme.colorScheme.lessImportantLink,
@@ -345,7 +343,7 @@ fun DisplayStatusInner(
}, },
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.OpenInNew, symbol = MaterialSymbols.AutoMirrored.OpenInNew,
null, null,
modifier = Size15Modifier, modifier = Size15Modifier,
tint = MaterialTheme.colorScheme.lessImportantLink, tint = MaterialTheme.colorScheme.lessImportantLink,
@@ -362,7 +360,7 @@ fun DisplayStatusInner(
onClick = { nav.nav(routeForUser(nostrPTag)) }, onClick = { nav.nav(routeForUser(nostrPTag)) },
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.OpenInNew, symbol = MaterialSymbols.AutoMirrored.OpenInNew,
null, null,
modifier = Size15Modifier, modifier = Size15Modifier,
tint = MaterialTheme.colorScheme.lessImportantLink, tint = MaterialTheme.colorScheme.lessImportantLink,
@@ -461,7 +459,7 @@ fun RenderNIP05VerifiedSymbol(
when (it) { when (it) {
is Nip05VerifState.Verifying -> { is Nip05VerifState.Verifying -> {
Icon( Icon(
imageVector = Icons.Default.Downloading, symbol = MaterialSymbols.Downloading,
contentDescription = stringRes(id = R.string.nip05_checking), contentDescription = stringRes(id = R.string.nip05_checking),
modifier = modifier, modifier = modifier,
tint = Color.Yellow, tint = Color.Yellow,
@@ -470,7 +468,7 @@ fun RenderNIP05VerifiedSymbol(
is Nip05VerifState.NotStarted -> { is Nip05VerifState.NotStarted -> {
Icon( Icon(
imageVector = Icons.Default.Downloading, symbol = MaterialSymbols.Downloading,
contentDescription = stringRes(id = R.string.nip05_checking), contentDescription = stringRes(id = R.string.nip05_checking),
modifier = modifier, modifier = modifier,
tint = Color.Yellow, tint = Color.Yellow,
@@ -488,7 +486,7 @@ fun RenderNIP05VerifiedSymbol(
is Nip05VerifState.Failed -> { is Nip05VerifState.Failed -> {
Icon( Icon(
imageVector = Icons.Default.Report, symbol = MaterialSymbols.Report,
contentDescription = stringRes(id = R.string.nip05_failed), contentDescription = stringRes(id = R.string.nip05_failed),
modifier = modifier, modifier = modifier,
tint = Color.Red, tint = Color.Red,
@@ -497,7 +495,7 @@ fun RenderNIP05VerifiedSymbol(
is Nip05VerifState.Error -> { is Nip05VerifState.Error -> {
Icon( Icon(
imageVector = Icons.Default.Report, symbol = MaterialSymbols.Report,
contentDescription = stringRes(id = R.string.nip05_failed), contentDescription = stringRes(id = R.string.nip05_failed),
modifier = modifier, modifier = modifier,
tint = Color.Red, tint = Color.Red,
@@ -34,9 +34,6 @@ import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.PushPin
import androidx.compose.material.icons.outlined.Timer
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedButton
@@ -61,6 +58,8 @@ import androidx.compose.ui.text.font.FontWeight
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.commons.compose.produceCachedStateAsync import com.vitorpamplona.amethyst.commons.compose.produceCachedStateAsync
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.model.nip28PublicChats.PublicChatChannel import com.vitorpamplona.amethyst.commons.model.nip28PublicChats.PublicChatChannel
import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
@@ -1550,7 +1549,7 @@ fun DisplayExpiration(expirationDate: Long) {
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Timer, symbol = MaterialSymbols.Timer,
contentDescription = stringRes(R.string.expiration_date_label), contentDescription = stringRes(R.string.expiration_date_label),
modifier = Modifier.padding(start = 5.dp).size(15.dp), modifier = Modifier.padding(start = 5.dp).size(15.dp),
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -1681,7 +1680,7 @@ fun FirstUserInfoRow(
@Composable @Composable
fun PinnedMark() { fun PinnedMark() {
Icon( Icon(
imageVector = Icons.Default.PushPin, symbol = MaterialSymbols.PushPin,
contentDescription = stringRes(R.string.pinned_notes), contentDescription = stringRes(R.string.pinned_notes),
modifier = Modifier.padding(start = 5.dp).size(16.dp), modifier = Modifier.padding(start = 5.dp).size(16.dp),
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -34,17 +34,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.AlternateEmail
import androidx.compose.material.icons.filled.Block
import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.Edit
import androidx.compose.material.icons.filled.FormatQuote
import androidx.compose.material.icons.filled.PersonAdd
import androidx.compose.material.icons.filled.PersonRemove
import androidx.compose.material.icons.filled.Report
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonColors import androidx.compose.material3.ButtonColors
@@ -66,16 +55,17 @@ 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.graphics.toArgb import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalClipboard import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.Popup import androidx.compose.ui.window.Popup
import androidx.core.graphics.ColorUtils import androidx.core.graphics.ColorUtils
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
@@ -285,7 +275,7 @@ fun CardBody(
Column(modifier = Modifier.width(IntrinsicSize.Min)) { Column(modifier = Modifier.width(IntrinsicSize.Min)) {
Row(modifier = Modifier.height(IntrinsicSize.Min)) { Row(modifier = Modifier.height(IntrinsicSize.Min)) {
NoteQuickActionItem( NoteQuickActionItem(
icon = Icons.Default.ContentCopy, icon = MaterialSymbols.ContentCopy,
label = stringRes(R.string.quick_action_copy_text), label = stringRes(R.string.quick_action_copy_text),
) { ) {
accountViewModel.decrypt(note) { accountViewModel.decrypt(note) {
@@ -299,7 +289,7 @@ fun CardBody(
} }
VerticalDivider(color = primaryLight) VerticalDivider(color = primaryLight)
NoteQuickActionItem( NoteQuickActionItem(
Icons.Default.AlternateEmail, MaterialSymbols.AlternateEmail,
stringRes(R.string.quick_action_copy_user_id), stringRes(R.string.quick_action_copy_user_id),
) { ) {
note.author?.let { note.author?.let {
@@ -312,7 +302,7 @@ fun CardBody(
} }
VerticalDivider(color = primaryLight) VerticalDivider(color = primaryLight)
NoteQuickActionItem( NoteQuickActionItem(
Icons.Default.FormatQuote, MaterialSymbols.FormatQuote,
stringRes(R.string.quick_action_copy_note_id), stringRes(R.string.quick_action_copy_note_id),
) { ) {
scope.launch { scope.launch {
@@ -326,7 +316,7 @@ fun CardBody(
VerticalDivider(color = primaryLight) VerticalDivider(color = primaryLight)
NoteQuickActionItem( NoteQuickActionItem(
Icons.Default.Block, MaterialSymbols.Block,
stringRes(R.string.quick_action_block), stringRes(R.string.quick_action_block),
) { ) {
if (accountViewModel.account.settings.hideBlockAlertDialog) { if (accountViewModel.account.settings.hideBlockAlertDialog) {
@@ -344,7 +334,7 @@ fun CardBody(
Row(modifier = Modifier.height(IntrinsicSize.Min)) { Row(modifier = Modifier.height(IntrinsicSize.Min)) {
if (isOwnNote) { if (isOwnNote) {
NoteQuickActionItem( NoteQuickActionItem(
Icons.Default.Delete, MaterialSymbols.Delete,
stringRes(R.string.quick_action_delete), stringRes(R.string.quick_action_delete),
) { ) {
if (accountViewModel.account.settings.hideDeleteRequestDialog) { if (accountViewModel.account.settings.hideDeleteRequestDialog) {
@@ -356,7 +346,7 @@ fun CardBody(
} }
} else if (isFollowingUser) { } else if (isFollowingUser) {
NoteQuickActionItem( NoteQuickActionItem(
Icons.Default.PersonRemove, MaterialSymbols.PersonRemove,
stringRes(R.string.quick_action_unfollow), stringRes(R.string.quick_action_unfollow),
) { ) {
accountViewModel.unfollow(note.author!!) accountViewModel.unfollow(note.author!!)
@@ -364,7 +354,7 @@ fun CardBody(
} }
} else { } else {
NoteQuickActionItem( NoteQuickActionItem(
Icons.Default.PersonAdd, MaterialSymbols.PersonAdd,
stringRes(R.string.quick_action_follow), stringRes(R.string.quick_action_follow),
) { ) {
accountViewModel.follow(note.author!!) accountViewModel.follow(note.author!!)
@@ -374,7 +364,7 @@ fun CardBody(
VerticalDivider(color = primaryLight) VerticalDivider(color = primaryLight)
NoteQuickActionItem( NoteQuickActionItem(
icon = ImageVector.vectorResource(id = R.drawable.relays), icon = MaterialSymbols.Dns,
label = stringRes(R.string.broadcast), label = stringRes(R.string.broadcast),
) { ) {
accountViewModel.broadcast(note) accountViewModel.broadcast(note)
@@ -384,14 +374,14 @@ fun CardBody(
VerticalDivider(color = primaryLight) VerticalDivider(color = primaryLight)
if (isOwnNote && note.isDraft()) { if (isOwnNote && note.isDraft()) {
NoteQuickActionItem( NoteQuickActionItem(
Icons.Default.Edit, MaterialSymbols.Edit,
stringRes(R.string.edit_draft), stringRes(R.string.edit_draft),
) { ) {
onWantsToEditDraft() onWantsToEditDraft()
} }
} else { } else {
NoteQuickActionItem( NoteQuickActionItem(
icon = Icons.Default.Share, icon = MaterialSymbols.Share,
label = stringRes(R.string.quick_action_share), label = stringRes(R.string.quick_action_share),
) { ) {
val sendIntent = val sendIntent =
@@ -422,7 +412,7 @@ fun CardBody(
VerticalDivider(color = primaryLight) VerticalDivider(color = primaryLight)
NoteQuickActionItem( NoteQuickActionItem(
Icons.Default.Report, MaterialSymbols.Report,
stringRes(R.string.quick_action_report), stringRes(R.string.quick_action_report),
) { ) {
showReportDialog.value = true showReportDialog.value = true
@@ -434,7 +424,7 @@ fun CardBody(
@Composable @Composable
fun NoteQuickActionItem( fun NoteQuickActionItem(
icon: ImageVector, icon: MaterialSymbol,
label: String, label: String,
onClick: () -> Unit, onClick: () -> Unit,
) { ) {
@@ -447,7 +437,7 @@ fun NoteQuickActionItem(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
) { ) {
Icon( Icon(
imageVector = icon, symbol = icon,
contentDescription = null, contentDescription = null,
modifier = modifier =
Modifier Modifier
@@ -468,7 +458,7 @@ fun DeleteAlertDialog(
QuickActionAlertDialog( QuickActionAlertDialog(
title = stringRes(R.string.quick_action_request_deletion_alert_title), title = stringRes(R.string.quick_action_request_deletion_alert_title),
textContent = stringRes(R.string.quick_action_request_deletion_alert_body), textContent = stringRes(R.string.quick_action_request_deletion_alert_body),
buttonIcon = Icons.Default.Delete, buttonIcon = MaterialSymbols.Delete,
buttonText = stringRes(R.string.quick_action_delete_dialog_btn), buttonText = stringRes(R.string.quick_action_delete_dialog_btn),
onClickDoOnce = { onClickDoOnce = {
accountViewModel.delete(note) accountViewModel.delete(note)
@@ -491,7 +481,7 @@ private fun BlockAlertDialog(
) = QuickActionAlertDialog( ) = QuickActionAlertDialog(
title = stringRes(R.string.report_dialog_block_hide_user_btn), title = stringRes(R.string.report_dialog_block_hide_user_btn),
textContent = stringRes(R.string.report_dialog_blocking_a_user), textContent = stringRes(R.string.report_dialog_blocking_a_user),
buttonIcon = Icons.Default.Block, buttonIcon = MaterialSymbols.Block,
buttonText = stringRes(R.string.quick_action_block_dialog_btn), buttonText = stringRes(R.string.quick_action_block_dialog_btn),
buttonColors = buttonColors =
ButtonDefaults.buttonColors( ButtonDefaults.buttonColors(
@@ -514,7 +504,7 @@ private fun BlockAlertDialog(
fun QuickActionAlertDialog( fun QuickActionAlertDialog(
title: String, title: String,
textContent: String, textContent: String,
buttonIcon: ImageVector, buttonIcon: MaterialSymbol,
buttonText: String, buttonText: String,
buttonColors: ButtonColors = ButtonDefaults.buttonColors(), buttonColors: ButtonColors = ButtonDefaults.buttonColors(),
onClickDoOnce: () -> Unit, onClickDoOnce: () -> Unit,
@@ -526,7 +516,7 @@ fun QuickActionAlertDialog(
textContent = textContent, textContent = textContent,
icon = { icon = {
Icon( Icon(
imageVector = buttonIcon, symbol = buttonIcon,
contentDescription = null, contentDescription = null,
) )
}, },
@@ -615,7 +605,7 @@ fun QuickActionAlertDialog(
fun QuickActionAlertDialogOneButton( fun QuickActionAlertDialogOneButton(
title: String, title: String,
textContent: String, textContent: String,
buttonIcon: ImageVector, buttonIcon: MaterialSymbol,
buttonText: String, buttonText: String,
buttonColors: ButtonColors = ButtonDefaults.buttonColors(), buttonColors: ButtonColors = ButtonDefaults.buttonColors(),
onClickDoOnce: () -> Unit, onClickDoOnce: () -> Unit,
@@ -626,7 +616,7 @@ fun QuickActionAlertDialogOneButton(
textContent = textContent, textContent = textContent,
icon = { icon = {
Icon( Icon(
imageVector = buttonIcon, symbol = buttonIcon,
contentDescription = null, contentDescription = null,
) )
}, },
@@ -50,8 +50,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AccountBalanceWallet
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
@@ -103,6 +101,8 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.emojicoder.EmojiCoder import com.vitorpamplona.amethyst.commons.emojicoder.EmojiCoder
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.ReactionRowAction import com.vitorpamplona.amethyst.model.ReactionRowAction
import com.vitorpamplona.amethyst.model.ReactionRowItem import com.vitorpamplona.amethyst.model.ReactionRowItem
@@ -361,7 +361,7 @@ fun PayReaction(
onClick = { expanded = true }, onClick = { expanded = true },
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.AccountBalanceWallet, symbol = MaterialSymbols.AccountBalanceWallet,
contentDescription = stringRes(R.string.payment_targets), contentDescription = stringRes(R.string.payment_targets),
tint = grayTint, tint = grayTint,
modifier = iconSizeModifier, modifier = iconSizeModifier,
@@ -376,7 +376,7 @@ fun PayReaction(
M3ActionSection { M3ActionSection {
if (targets.isEmpty()) { if (targets.isEmpty()) {
M3ActionRow( M3ActionRow(
icon = Icons.Outlined.AccountBalanceWallet, icon = MaterialSymbols.AccountBalanceWallet,
text = stringRes(R.string.no_payment_targets_message), text = stringRes(R.string.no_payment_targets_message),
enabled = false, enabled = false,
onClick = {}, onClick = {},
@@ -384,7 +384,7 @@ fun PayReaction(
} else { } else {
targets.forEach { target -> targets.forEach { target ->
M3ActionRow( M3ActionRow(
icon = Icons.Outlined.AccountBalanceWallet, icon = MaterialSymbols.AccountBalanceWallet,
text = "${target.type.replaceFirstChar(Char::titlecase)}: ${target.authority}", text = "${target.type.replaceFirstChar(Char::titlecase)}: ${target.authority}",
onClick = { onClick = {
expanded = false expanded = false
@@ -33,8 +33,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ExpandMore
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -50,6 +48,8 @@ import androidx.compose.ui.tooling.preview.Preview
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
@@ -242,7 +242,7 @@ private fun ShowMoreRelaysButton(onClick: () -> Unit) {
onClick = onClick, onClick = onClick,
) { ) {
Icon( Icon(
imageVector = Icons.Default.ExpandMore, symbol = MaterialSymbols.ExpandMore,
contentDescription = stringRes(id = R.string.expand_relay_list), contentDescription = stringRes(id = R.string.expand_relay_list),
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
) )
@@ -30,8 +30,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ChevronRight
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -50,6 +48,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.nip11RelayInfo.loadRelayInfo import com.vitorpamplona.amethyst.model.nip11RelayInfo.loadRelayInfo
import com.vitorpamplona.amethyst.ui.components.ClickableBox import com.vitorpamplona.amethyst.ui.components.ClickableBox
@@ -114,7 +114,7 @@ fun ChatRelayExpandButton(onClick: () -> Unit) {
onClick = onClick, onClick = onClick,
) { ) {
Icon( Icon(
imageVector = Icons.Default.ChevronRight, symbol = MaterialSymbols.ChevronRight,
contentDescription = stringRes(id = R.string.expand_relay_list), contentDescription = stringRes(id = R.string.expand_relay_list),
modifier = Size15Modifier, modifier = Size15Modifier,
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -60,17 +60,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.ExpandLess
import androidx.compose.material.icons.filled.ExpandMore
import androidx.compose.material.icons.outlined.Add
import androidx.compose.material.icons.outlined.AddCircle
import androidx.compose.material.icons.outlined.ContentPaste
import androidx.compose.material.icons.outlined.RadioButtonUnchecked
import androidx.compose.material.icons.outlined.Visibility
import androidx.compose.material.icons.outlined.VisibilityOff
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -102,6 +91,8 @@ import androidx.compose.ui.tooling.preview.Preview
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
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.components.TextSpinner import com.vitorpamplona.amethyst.ui.components.TextSpinner
import com.vitorpamplona.amethyst.ui.components.TitleExplainer import com.vitorpamplona.amethyst.ui.components.TitleExplainer
import com.vitorpamplona.amethyst.ui.components.util.getText import com.vitorpamplona.amethyst.ui.components.util.getText
@@ -259,7 +250,7 @@ fun UpdateZapAmountContent(
}, },
trailingIcon = { trailingIcon = {
Icon( Icon(
imageVector = Icons.Filled.Close, symbol = MaterialSymbols.Close,
contentDescription = stringRes(R.string.remove), contentDescription = stringRes(R.string.remove),
modifier = Modifier.size(InputChipDefaults.AvatarSize), modifier = Modifier.size(InputChipDefaults.AvatarSize),
) )
@@ -304,7 +295,7 @@ fun UpdateZapAmountContent(
enabled = postViewModel.nextAmount.text.isNotBlank(), enabled = postViewModel.nextAmount.text.isNotBlank(),
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.AddCircle, symbol = MaterialSymbols.AddCircle,
contentDescription = stringRes(R.string.add), contentDescription = stringRes(R.string.add),
modifier = Size20Modifier, modifier = Size20Modifier,
) )
@@ -394,7 +385,7 @@ fun UpdateZapAmountContent(
horizontalArrangement = Arrangement.spacedBy(6.dp), horizontalArrangement = Arrangement.spacedBy(6.dp),
) { ) {
Icon( Icon(
imageVector = if (connected) Icons.Filled.CheckCircle else Icons.Outlined.RadioButtonUnchecked, symbol = if (connected) MaterialSymbols.CheckCircle else MaterialSymbols.RadioButtonUnchecked,
contentDescription = null, contentDescription = null,
tint = statusColor, tint = statusColor,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
@@ -436,7 +427,7 @@ fun UpdateZapAmountContent(
}, },
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Add, symbol = MaterialSymbols.Add,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
) )
@@ -464,7 +455,7 @@ fun UpdateZapAmountContent(
}, },
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.ContentPaste, symbol = MaterialSymbols.ContentPaste,
contentDescription = stringRes(id = R.string.paste_from_clipboard), contentDescription = stringRes(id = R.string.paste_from_clipboard),
modifier = Size24Modifier, modifier = Size24Modifier,
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -522,7 +513,7 @@ fun UpdateZapAmountContent(
fontSize = Font14SP, fontSize = Font14SP,
) )
Icon( Icon(
imageVector = if (showManualConfig) Icons.Filled.ExpandLess else Icons.Filled.ExpandMore, symbol = if (showManualConfig) MaterialSymbols.ExpandLess else MaterialSymbols.ExpandMore,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
@@ -629,11 +620,11 @@ fun UpdateZapAmountContent(
}, },
) { ) {
Icon( Icon(
imageVector = symbol =
if (showPassword) { if (showPassword) {
Icons.Outlined.VisibilityOff MaterialSymbols.VisibilityOff
} else { } else {
Icons.Outlined.Visibility MaterialSymbols.Visibility
}, },
contentDescription = contentDescription =
if (showPassword) { if (showPassword) {
@@ -25,9 +25,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Bolt
import androidx.compose.material.icons.filled.ExpandMore
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -42,6 +39,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.screen.loggedIn.notifications.NotificationSummaryState import com.vitorpamplona.amethyst.ui.screen.loggedIn.notifications.NotificationSummaryState
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
@@ -70,7 +69,7 @@ fun UserReactionsRow(
) )
Icon( Icon(
imageVector = Icons.Default.ExpandMore, symbol = MaterialSymbols.ExpandMore,
null, null,
modifier = Size20Modifier, modifier = Size20Modifier,
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -98,7 +97,7 @@ fun UserReactionsRow(
@Composable @Composable
private fun UserZapModel(model: NotificationSummaryState) { private fun UserZapModel(model: NotificationSummaryState) {
Icon( Icon(
imageVector = Icons.Default.Bolt, symbol = MaterialSymbols.Bolt,
contentDescription = stringRes(R.string.zaps), contentDescription = stringRes(R.string.zaps),
modifier = Size24Modifier, modifier = Size24Modifier,
tint = BitcoinOrange, tint = BitcoinOrange,
@@ -38,9 +38,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Bolt
import androidx.compose.material.icons.outlined.Bolt
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
@@ -75,6 +72,8 @@ import androidx.compose.ui.window.Popup
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.model.EmptyTagList import com.vitorpamplona.amethyst.commons.model.EmptyTagList
import com.vitorpamplona.amethyst.commons.model.ImmutableListOfLists import com.vitorpamplona.amethyst.commons.model.ImmutableListOfLists
import com.vitorpamplona.amethyst.commons.model.toImmutableListOfLists import com.vitorpamplona.amethyst.commons.model.toImmutableListOfLists
@@ -659,7 +658,7 @@ fun ZapVote(
if (poolOption.zappedByLoggedIn.value) { if (poolOption.zappedByLoggedIn.value) {
zappingProgress = 1f zappingProgress = 1f
Icon( Icon(
imageVector = Icons.Default.Bolt, symbol = MaterialSymbols.Bolt,
contentDescription = stringRes(R.string.zaps), contentDescription = stringRes(R.string.zaps),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = BitcoinOrange, tint = BitcoinOrange,
@@ -667,7 +666,7 @@ fun ZapVote(
} else { } else {
if (zappingProgress < 0.1 || zappingProgress > 0.99) { if (zappingProgress < 0.1 || zappingProgress > 0.99) {
Icon( Icon(
imageVector = Icons.Outlined.Bolt, symbol = MaterialSymbols.Bolt,
contentDescription = stringRes(id = R.string.zaps), contentDescription = stringRes(id = R.string.zaps),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -21,8 +21,6 @@
package com.vitorpamplona.amethyst.ui.note.creators.aihelp package com.vitorpamplona.amethyst.ui.note.creators.aihelp
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AutoAwesome
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -30,6 +28,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@Composable @Composable
@@ -41,7 +41,7 @@ fun AiWritingHelpButton(
onClick = { onClick() }, onClick = { onClick() },
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.AutoAwesome, symbol = MaterialSymbols.AutoAwesome,
contentDescription = stringRes(R.string.ai_writing_help), contentDescription = stringRes(R.string.ai_writing_help),
modifier = Modifier.height(22.dp), modifier = Modifier.height(22.dp),
tint = tint =
@@ -20,14 +20,14 @@
*/ */
package com.vitorpamplona.amethyst.ui.note.creators.anonymous package com.vitorpamplona.amethyst.ui.note.creators.anonymous
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.PersonOff
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.Size19Modifier import com.vitorpamplona.amethyst.ui.theme.Size19Modifier
@@ -41,14 +41,14 @@ fun AnonymousPostButton(
) { ) {
if (!isActive) { if (!isActive) {
Icon( Icon(
imageVector = Icons.Default.PersonOff, symbol = MaterialSymbols.PersonOff,
contentDescription = stringRes(R.string.post_anonymously), contentDescription = stringRes(R.string.post_anonymously),
modifier = Size19Modifier, modifier = Size19Modifier,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Default.PersonOff, symbol = MaterialSymbols.PersonOff,
contentDescription = stringRes(R.string.post_anonymously), contentDescription = stringRes(R.string.post_anonymously),
modifier = Size19Modifier, modifier = Size19Modifier,
tint = Color.Red, tint = Color.Red,
@@ -28,9 +28,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.VisibilityOff
import androidx.compose.material.icons.rounded.Warning
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -44,6 +41,8 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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
import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.amethyst.ui.theme.placeholderText
@@ -67,7 +66,7 @@ fun ContentSensitivityExplainer(
.width(25.dp), .width(25.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.VisibilityOff, symbol = MaterialSymbols.VisibilityOff,
contentDescription = stringRes(id = R.string.content_warning), contentDescription = stringRes(id = R.string.content_warning),
modifier = modifier =
Modifier Modifier
@@ -76,7 +75,7 @@ fun ContentSensitivityExplainer(
tint = Color.Red, tint = Color.Red,
) )
Icon( Icon(
imageVector = Icons.Rounded.Warning, symbol = MaterialSymbols.Warning,
contentDescription = stringRes(id = R.string.content_warning), contentDescription = stringRes(id = R.string.content_warning),
modifier = modifier =
Modifier Modifier
@@ -24,10 +24,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Visibility
import androidx.compose.material.icons.filled.VisibilityOff
import androidx.compose.material.icons.rounded.Warning
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -37,6 +33,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@Composable @Composable
@@ -54,7 +52,7 @@ fun MarkAsSensitiveButton(
) { ) {
if (!isActive) { if (!isActive) {
Icon( Icon(
imageVector = Icons.Default.Visibility, symbol = MaterialSymbols.Visibility,
contentDescription = stringRes(R.string.add_content_warning), contentDescription = stringRes(R.string.add_content_warning),
modifier = modifier =
Modifier Modifier
@@ -63,7 +61,7 @@ fun MarkAsSensitiveButton(
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
) )
Icon( Icon(
imageVector = Icons.Rounded.Warning, symbol = MaterialSymbols.Warning,
contentDescription = stringRes(R.string.add_content_warning), contentDescription = stringRes(R.string.add_content_warning),
modifier = modifier =
Modifier Modifier
@@ -73,7 +71,7 @@ fun MarkAsSensitiveButton(
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Default.VisibilityOff, symbol = MaterialSymbols.VisibilityOff,
contentDescription = stringRes(id = R.string.remove_content_warning), contentDescription = stringRes(id = R.string.remove_content_warning),
modifier = modifier =
Modifier Modifier
@@ -82,7 +80,7 @@ fun MarkAsSensitiveButton(
tint = Color.Red, tint = Color.Red,
) )
Icon( Icon(
imageVector = Icons.Rounded.Warning, symbol = MaterialSymbols.Warning,
contentDescription = stringRes(id = R.string.remove_content_warning), contentDescription = stringRes(id = R.string.remove_content_warning),
modifier = modifier =
Modifier Modifier
@@ -28,8 +28,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.OpenInFull
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -43,6 +41,8 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.model.nip30CustomEmojis.EmojiPackState import com.vitorpamplona.amethyst.commons.model.nip30CustomEmojis.EmojiPackState
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
@@ -88,7 +88,7 @@ fun ShowEmojiSuggestionList(
}, },
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.OpenInFull, symbol = MaterialSymbols.OpenInFull,
contentDescription = stringRes(R.string.use_direct_url), contentDescription = stringRes(R.string.use_direct_url),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
) )
@@ -21,9 +21,6 @@
package com.vitorpamplona.amethyst.ui.note.creators.expiration package com.vitorpamplona.amethyst.ui.note.creators.expiration
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Timer
import androidx.compose.material.icons.outlined.TimerOff
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -32,6 +29,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@Composable @Composable
@@ -44,14 +43,14 @@ fun ExpirationDateButton(
) { ) {
if (!isActive) { if (!isActive) {
Icon( Icon(
imageVector = Icons.Outlined.Timer, symbol = MaterialSymbols.Timer,
contentDescription = stringRes(R.string.add_expiration_date), contentDescription = stringRes(R.string.add_expiration_date),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Outlined.TimerOff, symbol = MaterialSymbols.TimerOff,
contentDescription = stringRes(R.string.remove_expiration_date), contentDescription = stringRes(R.string.remove_expiration_date),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = Color(0xFFFF6600), tint = Color(0xFFFF6600),
@@ -27,8 +27,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Timer
import androidx.compose.material3.DatePicker import androidx.compose.material3.DatePicker
import androidx.compose.material3.DatePickerDialog import androidx.compose.material3.DatePickerDialog
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@@ -57,6 +55,8 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.note.timeAheadNoDot import com.vitorpamplona.amethyst.ui.note.timeAheadNoDot
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
@@ -102,7 +102,7 @@ fun ExpirationDatePicker(model: IExpiration) {
.padding(bottom = 5.dp), .padding(bottom = 5.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Timer, symbol = MaterialSymbols.Timer,
contentDescription = stringRes(R.string.expiration_date_label), contentDescription = stringRes(R.string.expiration_date_label),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = Color(0xFFFF6600), tint = Color(0xFFFF6600),
@@ -132,7 +132,7 @@ fun ExpirationDatePicker(model: IExpiration) {
modifier = Modifier.padding(16.dp), modifier = Modifier.padding(16.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon(Icons.Outlined.Timer, contentDescription = stringResource(R.string.expiration_date_select)) Icon(MaterialSymbols.Timer, contentDescription = stringResource(R.string.expiration_date_select))
Spacer(Modifier.width(12.dp)) Spacer(Modifier.width(12.dp))
if (model.expirationDate < TimeUtils.oneMinuteFromNow()) { if (model.expirationDate < TimeUtils.oneMinuteFromNow()) {
@@ -20,13 +20,13 @@
*/ */
package com.vitorpamplona.amethyst.ui.note.creators.invoice package com.vitorpamplona.amethyst.ui.note.creators.invoice
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CurrencyBitcoin
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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.Size20Modifier import com.vitorpamplona.amethyst.ui.theme.Size20Modifier
@@ -41,14 +41,14 @@ fun AddLnInvoiceButton(
) { ) {
if (!isLnInvoiceActive) { if (!isLnInvoiceActive) {
Icon( Icon(
imageVector = Icons.Default.CurrencyBitcoin, symbol = MaterialSymbols.CurrencyBitcoin,
contentDescription = stringRes(id = R.string.add_bitcoin_invoice), contentDescription = stringRes(id = R.string.add_bitcoin_invoice),
modifier = Size20Modifier, modifier = Size20Modifier,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Default.CurrencyBitcoin, symbol = MaterialSymbols.CurrencyBitcoin,
contentDescription = stringRes(id = R.string.cancel_bitcoin_invoice), contentDescription = stringRes(id = R.string.cancel_bitcoin_invoice),
modifier = Size20Modifier, modifier = Size20Modifier,
tint = BitcoinOrange, tint = BitcoinOrange,
@@ -21,9 +21,6 @@
package com.vitorpamplona.amethyst.ui.note.creators.location package com.vitorpamplona.amethyst.ui.note.creators.location
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.LocationOff
import androidx.compose.material.icons.filled.LocationOn
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -31,6 +28,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@Composable @Composable
@@ -43,14 +42,14 @@ fun AddGeoHashButton(
) { ) {
if (!isActive) { if (!isActive) {
Icon( Icon(
imageVector = Icons.Default.LocationOff, symbol = MaterialSymbols.LocationOff,
contentDescription = stringRes(id = R.string.add_location), contentDescription = stringRes(id = R.string.add_location),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Default.LocationOn, symbol = MaterialSymbols.LocationOn,
contentDescription = stringRes(id = R.string.remove_location), contentDescription = stringRes(id = R.string.remove_location),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -29,8 +29,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.LocationOn
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -46,6 +44,8 @@ import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.rememberPermissionState
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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
import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.amethyst.ui.theme.placeholderText
@@ -93,7 +93,7 @@ fun DisplayLocationBox(
.width(20.dp), .width(20.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.LocationOn, symbol = MaterialSymbols.LocationOn,
null, null,
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -26,8 +26,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.DateRange
import androidx.compose.material3.DatePicker import androidx.compose.material3.DatePicker
import androidx.compose.material3.DatePickerDialog import androidx.compose.material3.DatePickerDialog
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@@ -53,6 +51,8 @@ import androidx.compose.ui.res.stringResource
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.note.timeAheadNoDot import com.vitorpamplona.amethyst.ui.note.timeAheadNoDot
import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.ShortNotePostViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.ShortNotePostViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -99,7 +99,7 @@ fun PollDeadlinePicker(model: ShortNotePostViewModel) {
modifier = Modifier.padding(16.dp), modifier = Modifier.padding(16.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon(Icons.Default.DateRange, contentDescription = stringResource(R.string.accessibility_select_date)) Icon(MaterialSymbols.DateRange, contentDescription = stringResource(R.string.accessibility_select_date))
Spacer(Modifier.width(12.dp)) Spacer(Modifier.width(12.dp))
if (model.closedAt < TimeUtils.oneMinuteFromNow()) { if (model.closedAt < TimeUtils.oneMinuteFromNow()) {
@@ -29,9 +29,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChip
@@ -46,6 +43,8 @@ import androidx.compose.ui.text.input.KeyboardCapitalization
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.ShortNotePostViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.ShortNotePostViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.amethyst.ui.theme.placeholderText
@@ -96,7 +95,7 @@ fun PollOptionsField(postViewModel: ShortNotePostViewModel) {
}, },
) { ) {
Icon( Icon(
imageVector = Icons.Default.Delete, symbol = MaterialSymbols.Delete,
contentDescription = stringRes(R.string.clear), contentDescription = stringRes(R.string.clear),
) )
} }
@@ -124,7 +123,7 @@ fun PollOptionsField(postViewModel: ShortNotePostViewModel) {
containerColor = MaterialTheme.colorScheme.surface, containerColor = MaterialTheme.colorScheme.surface,
), ),
) { ) {
Icon(Icons.Default.Add, contentDescription = stringRes(R.string.add_poll_option_button)) Icon(MaterialSymbols.Add, contentDescription = stringRes(R.string.add_poll_option_button))
} }
} }
} }
@@ -20,13 +20,13 @@
*/ */
package com.vitorpamplona.amethyst.ui.note.creators.secretEmoji package com.vitorpamplona.amethyst.ui.note.creators.secretEmoji
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Assistant
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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.Size20Modifier import com.vitorpamplona.amethyst.ui.theme.Size20Modifier
@@ -41,14 +41,14 @@ fun AddSecretEmojiButton(
) { ) {
if (!isSecretEmojiActive) { if (!isSecretEmojiActive) {
Icon( Icon(
imageVector = Icons.Outlined.Assistant, symbol = MaterialSymbols.Assistant,
contentDescription = stringRes(id = R.string.secret_emoji_maker_explainer), contentDescription = stringRes(id = R.string.secret_emoji_maker_explainer),
modifier = Size20Modifier, modifier = Size20Modifier,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Outlined.Assistant, symbol = MaterialSymbols.Assistant,
contentDescription = stringRes(id = R.string.secret_emoji_maker_explainer), contentDescription = stringRes(id = R.string.secret_emoji_maker_explainer),
modifier = Size20Modifier, modifier = Size20Modifier,
tint = BitcoinOrange, tint = BitcoinOrange,
@@ -25,8 +25,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Assistant
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
@@ -48,6 +46,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.emojicoder.EmojiCoder import com.vitorpamplona.amethyst.commons.emojicoder.EmojiCoder
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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
import com.vitorpamplona.amethyst.ui.theme.QuoteBorder import com.vitorpamplona.amethyst.ui.theme.QuoteBorder
@@ -62,7 +62,7 @@ fun SecretEmojiRequest(onSuccess: (String) -> Unit) {
modifier = Modifier.fillMaxWidth().padding(bottom = 5.dp), modifier = Modifier.fillMaxWidth().padding(bottom = 5.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Assistant, symbol = MaterialSymbols.Assistant,
null, null,
modifier = Size20Modifier, modifier = Size20Modifier,
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
@@ -26,8 +26,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.DateRange
import androidx.compose.material3.DatePicker import androidx.compose.material3.DatePicker
import androidx.compose.material3.DatePickerDialog import androidx.compose.material3.DatePickerDialog
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@@ -53,6 +51,8 @@ import androidx.compose.ui.res.stringResource
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.note.timeAheadNoDot import com.vitorpamplona.amethyst.ui.note.timeAheadNoDot
import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.ShortNotePostViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.ShortNotePostViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -99,7 +99,7 @@ fun ZapPollDeadlinePicker(model: ShortNotePostViewModel) {
modifier = Modifier.padding(16.dp), modifier = Modifier.padding(16.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon(Icons.Default.DateRange, contentDescription = stringResource(R.string.accessibility_select_date)) Icon(MaterialSymbols.DateRange, contentDescription = stringResource(R.string.accessibility_select_date))
Spacer(Modifier.width(12.dp)) Spacer(Modifier.width(12.dp))
if (model.zapPollClosedAt < TimeUtils.oneMinuteFromNow()) { if (model.zapPollClosedAt < TimeUtils.oneMinuteFromNow()) {
@@ -25,8 +25,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -35,6 +33,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.ShortNotePostViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.ShortNotePostViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -69,7 +69,7 @@ fun ZapPollField(postViewModel: ShortNotePostViewModel) {
containerColor = MaterialTheme.colorScheme.surface, containerColor = MaterialTheme.colorScheme.surface,
), ),
) { ) {
Icon(Icons.Default.Add, contentDescription = stringRes(R.string.add_poll_option_button)) Icon(MaterialSymbols.Add, contentDescription = stringRes(R.string.add_poll_option_button))
} }
} }
} }
@@ -23,8 +23,6 @@ package com.vitorpamplona.amethyst.ui.note.creators.zappolls
import android.annotation.SuppressLint import android.annotation.SuppressLint
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -35,6 +33,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.ShortNotePostViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.ShortNotePostViewModel
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.amethyst.ui.theme.placeholderText
@@ -52,7 +52,7 @@ fun ZapPollOption(
}, },
) { ) {
Icon( Icon(
imageVector = Icons.Default.Delete, symbol = MaterialSymbols.Delete,
contentDescription = stringRes(R.string.clear), contentDescription = stringRes(R.string.clear),
) )
} }
@@ -24,9 +24,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ShowChart
import androidx.compose.material.icons.filled.Bolt
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -35,6 +32,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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
@@ -53,7 +52,7 @@ fun AddZapraiserButton(
) { ) {
if (!isLnInvoiceActive) { if (!isLnInvoiceActive) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Default.ShowChart, symbol = MaterialSymbols.AutoMirrored.ShowChart,
null, null,
modifier = modifier =
Modifier Modifier
@@ -62,7 +61,7 @@ fun AddZapraiserButton(
tint = MaterialTheme.colorScheme.onBackground, tint = MaterialTheme.colorScheme.onBackground,
) )
Icon( Icon(
imageVector = Icons.Default.Bolt, symbol = MaterialSymbols.Bolt,
contentDescription = stringRes(R.string.add_zapraiser), contentDescription = stringRes(R.string.add_zapraiser),
modifier = modifier =
Modifier Modifier
@@ -72,7 +71,7 @@ fun AddZapraiserButton(
) )
} else { } else {
Icon( Icon(
imageVector = Icons.AutoMirrored.Default.ShowChart, symbol = MaterialSymbols.AutoMirrored.ShowChart,
null, null,
modifier = modifier =
Modifier Modifier
@@ -81,7 +80,7 @@ fun AddZapraiserButton(
tint = BitcoinOrange, tint = BitcoinOrange,
) )
Icon( Icon(
imageVector = Icons.Default.Bolt, symbol = MaterialSymbols.Bolt,
contentDescription = stringRes(R.string.cancel_zapraiser), contentDescription = stringRes(R.string.cancel_zapraiser),
modifier = modifier =
Modifier Modifier
@@ -25,9 +25,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.ArrowForwardIos
import androidx.compose.material.icons.outlined.Bolt
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -39,6 +36,8 @@ 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.commons.icons.ZapSplit import com.vitorpamplona.amethyst.commons.icons.ZapSplit
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
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.Size20Modifier import com.vitorpamplona.amethyst.ui.theme.Size20Modifier
@@ -82,7 +81,7 @@ fun ZapSplitPreview() {
.width(25.dp), .width(25.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Bolt, symbol = MaterialSymbols.Bolt,
contentDescription = stringRes(id = R.string.zaps), contentDescription = stringRes(id = R.string.zaps),
modifier = modifier =
Modifier Modifier
@@ -91,7 +90,7 @@ fun ZapSplitPreview() {
tint = BitcoinOrange, tint = BitcoinOrange,
) )
Icon( Icon(
imageVector = Icons.AutoMirrored.Outlined.ArrowForwardIos, symbol = MaterialSymbols.AutoMirrored.ArrowForwardIos,
contentDescription = stringRes(id = R.string.zaps), contentDescription = stringRes(id = R.string.zaps),
modifier = modifier =
Modifier Modifier
@@ -21,24 +21,6 @@
package com.vitorpamplona.amethyst.ui.note.elements package com.vitorpamplona.amethyst.ui.note.elements
import android.content.Intent import android.content.Intent
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.PlaylistAdd
import androidx.compose.material.icons.outlined.Bookmark
import androidx.compose.material.icons.outlined.BookmarkAdd
import androidx.compose.material.icons.outlined.BookmarkRemove
import androidx.compose.material.icons.outlined.CellTower
import androidx.compose.material.icons.outlined.ContentCopy
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material.icons.outlined.Edit
import androidx.compose.material.icons.outlined.EmojiEmotions
import androidx.compose.material.icons.outlined.Lock
import androidx.compose.material.icons.outlined.LockOpen
import androidx.compose.material.icons.outlined.PersonAdd
import androidx.compose.material.icons.outlined.PersonRemove
import androidx.compose.material.icons.outlined.PushPin
import androidx.compose.material.icons.outlined.Report
import androidx.compose.material.icons.outlined.Schedule
import androidx.compose.material.icons.outlined.Share
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import androidx.compose.runtime.State import androidx.compose.runtime.State
@@ -51,6 +33,7 @@ import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.actions.EditPostView import com.vitorpamplona.amethyst.ui.actions.EditPostView
@@ -177,19 +160,19 @@ fun NoteDropDownMenu(
// Follow section // Follow section
M3ActionSection { M3ActionSection {
if (!state.isFollowingAuthor) { if (!state.isFollowingAuthor) {
M3ActionRow(icon = Icons.Outlined.PersonAdd, text = stringRes(R.string.follow)) { M3ActionRow(icon = MaterialSymbols.PersonAdd, text = stringRes(R.string.follow)) {
val author = note.author ?: return@M3ActionRow val author = note.author ?: return@M3ActionRow
accountViewModel.follow(author) accountViewModel.follow(author)
onDismiss() onDismiss()
} }
} else { } else {
M3ActionRow(icon = Icons.Outlined.PersonRemove, text = stringRes(R.string.unfollow)) { M3ActionRow(icon = MaterialSymbols.PersonRemove, text = stringRes(R.string.unfollow)) {
val author = note.author ?: return@M3ActionRow val author = note.author ?: return@M3ActionRow
accountViewModel.unfollow(author) accountViewModel.unfollow(author)
onDismiss() onDismiss()
} }
} }
M3ActionRow(icon = Icons.AutoMirrored.Outlined.PlaylistAdd, text = stringRes(R.string.follow_set_add_author_from_note_action)) { M3ActionRow(icon = MaterialSymbols.AutoMirrored.PlaylistAdd, text = stringRes(R.string.follow_set_add_author_from_note_action)) {
val authorHexKey = note.author?.pubkeyHex ?: return@M3ActionRow val authorHexKey = note.author?.pubkeyHex ?: return@M3ActionRow
nav.nav(Route.PeopleListManagement(authorHexKey)) nav.nav(Route.PeopleListManagement(authorHexKey))
onDismiss() onDismiss()
@@ -198,7 +181,7 @@ fun NoteDropDownMenu(
// Copy & Share section // Copy & Share section
M3ActionSection { M3ActionSection {
M3ActionRow(icon = Icons.Outlined.ContentCopy, text = stringRes(R.string.copy_text)) { M3ActionRow(icon = MaterialSymbols.ContentCopy, text = stringRes(R.string.copy_text)) {
val lastNoteVersion = (editState?.value as? GenericLoadable.Loaded)?.loaded?.modificationToShow?.value ?: note val lastNoteVersion = (editState?.value as? GenericLoadable.Loaded)?.loaded?.modificationToShow?.value ?: note
accountViewModel.decrypt(lastNoteVersion) { accountViewModel.decrypt(lastNoteVersion) {
scope.launch { scope.launch {
@@ -207,7 +190,7 @@ fun NoteDropDownMenu(
} }
onDismiss() onDismiss()
} }
M3ActionRow(icon = Icons.Outlined.ContentCopy, text = stringRes(R.string.copy_user_pubkey)) { M3ActionRow(icon = MaterialSymbols.ContentCopy, text = stringRes(R.string.copy_user_pubkey)) {
note.author?.let { note.author?.let {
scope.launch(Dispatchers.IO) { scope.launch(Dispatchers.IO) {
clipboardManager.setText("nostr:${it.pubkeyNpub()}") clipboardManager.setText("nostr:${it.pubkeyNpub()}")
@@ -215,13 +198,13 @@ fun NoteDropDownMenu(
} }
} }
} }
M3ActionRow(icon = Icons.Outlined.ContentCopy, text = stringRes(R.string.copy_note_id)) { M3ActionRow(icon = MaterialSymbols.ContentCopy, text = stringRes(R.string.copy_note_id)) {
scope.launch(Dispatchers.IO) { scope.launch(Dispatchers.IO) {
clipboardManager.setText(note.toNostrUri()) clipboardManager.setText(note.toNostrUri())
onDismiss() onDismiss()
} }
} }
M3ActionRow(icon = Icons.Outlined.Share, text = stringRes(R.string.quick_action_share)) { M3ActionRow(icon = MaterialSymbols.Share, text = stringRes(R.string.quick_action_share)) {
val sendIntent = val sendIntent =
Intent().apply { Intent().apply {
action = Intent.ACTION_SEND action = Intent.ACTION_SEND
@@ -238,28 +221,28 @@ fun NoteDropDownMenu(
// Edit & Broadcast section // Edit & Broadcast section
M3ActionSection { M3ActionSection {
if (state.isLoggedUser && note.isDraft()) { if (state.isLoggedUser && note.isDraft()) {
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.edit_draft)) { M3ActionRow(icon = MaterialSymbols.Edit, text = stringRes(R.string.edit_draft)) {
nav.nav { routeEditDraftTo(note, accountViewModel.account) } nav.nav { routeEditDraftTo(note, accountViewModel.account) }
} }
} }
if (!note.isDraft()) { if (!note.isDraft()) {
if (note.event is TextNoteEvent) { if (note.event is TextNoteEvent) {
if (state.isLoggedUser) { if (state.isLoggedUser) {
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.edit_post)) { M3ActionRow(icon = MaterialSymbols.Edit, text = stringRes(R.string.edit_post)) {
wantsToEditPost.value = true wantsToEditPost.value = true
} }
} else { } else {
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.propose_an_edit)) { M3ActionRow(icon = MaterialSymbols.Edit, text = stringRes(R.string.propose_an_edit)) {
wantsToEditPost.value = true wantsToEditPost.value = true
} }
} }
} else if (note.event is LongTextNoteEvent && state.isLoggedUser) { } else if (note.event is LongTextNoteEvent && state.isLoggedUser) {
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.edit_article)) { M3ActionRow(icon = MaterialSymbols.Edit, text = stringRes(R.string.edit_article)) {
nav.nav { Route.NewLongFormPost(version = note.idHex) } nav.nav { Route.NewLongFormPost(version = note.idHex) }
} }
} }
} }
M3ActionRow(icon = Icons.Outlined.CellTower, text = stringRes(R.string.broadcast)) { M3ActionRow(icon = MaterialSymbols.CellTower, text = stringRes(R.string.broadcast)) {
accountViewModel.broadcast(note) accountViewModel.broadcast(note)
onDismiss() onDismiss()
} }
@@ -268,21 +251,21 @@ fun NoteDropDownMenu(
// Timestamp & Bookmarks section // Timestamp & Bookmarks section
M3ActionSection { M3ActionSection {
if (accountViewModel.account.otsState.hasPendingAttestations(note)) { if (accountViewModel.account.otsState.hasPendingAttestations(note)) {
M3ActionRow(icon = Icons.Outlined.Schedule, text = stringRes(R.string.timestamp_pending)) { onDismiss() } M3ActionRow(icon = MaterialSymbols.Schedule, text = stringRes(R.string.timestamp_pending)) { onDismiss() }
} else { } else {
M3ActionRow(icon = Icons.Outlined.Schedule, text = stringRes(R.string.timestamp_it)) { M3ActionRow(icon = MaterialSymbols.Schedule, text = stringRes(R.string.timestamp_it)) {
accountViewModel.timestamp(note) accountViewModel.timestamp(note)
onDismiss() onDismiss()
} }
} }
if (state.isLoggedUser) { if (state.isLoggedUser) {
if (state.isPinnedNote) { if (state.isPinnedNote) {
M3ActionRow(icon = Icons.Outlined.PushPin, text = stringRes(R.string.unpin_from_profile)) { M3ActionRow(icon = MaterialSymbols.PushPin, text = stringRes(R.string.unpin_from_profile)) {
accountViewModel.removePin(note) accountViewModel.removePin(note)
onDismiss() onDismiss()
} }
} else { } else {
M3ActionRow(icon = Icons.Outlined.PushPin, text = stringRes(R.string.pin_to_profile)) { M3ActionRow(icon = MaterialSymbols.PushPin, text = stringRes(R.string.pin_to_profile)) {
accountViewModel.addPin(note) accountViewModel.addPin(note)
onDismiss() onDismiss()
} }
@@ -296,14 +279,14 @@ fun NoteDropDownMenu(
} else { } else {
stringRes(R.string.add_to_emoji_list) stringRes(R.string.add_to_emoji_list)
} }
M3ActionRow(icon = Icons.Outlined.EmojiEmotions, text = emojiText) { M3ActionRow(icon = MaterialSymbols.EmojiEmotions, text = emojiText) {
val address = (note as AddressableNote).address val address = (note as AddressableNote).address
nav.nav(Route.EmojiPackSelection(kind = EmojiPackEvent.KIND, pubKeyHex = address.pubKeyHex, dTag = address.dTag)) nav.nav(Route.EmojiPackSelection(kind = EmojiPackEvent.KIND, pubKeyHex = address.pubKeyHex, dTag = address.dTag))
onDismiss() onDismiss()
} }
} else { } else {
val noteBookmarkType = if (note.event is LongTextNoteEvent) stringRes(R.string.article) else stringRes(R.string.post) val noteBookmarkType = if (note.event is LongTextNoteEvent) stringRes(R.string.article) else stringRes(R.string.post)
M3ActionRow(icon = Icons.Outlined.BookmarkAdd, text = stringRes(R.string.manage_bookmark_label, noteBookmarkType)) { M3ActionRow(icon = MaterialSymbols.BookmarkAdd, text = stringRes(R.string.manage_bookmark_label, noteBookmarkType)) {
if (note.event is LongTextNoteEvent) { if (note.event is LongTextNoteEvent) {
nav.nav(Route.ArticleBookmarkManagement((note as AddressableNote).address)) nav.nav(Route.ArticleBookmarkManagement((note as AddressableNote).address))
} else { } else {
@@ -313,23 +296,23 @@ fun NoteDropDownMenu(
} }
} }
if (state.isPrivateBookmarkNote) { if (state.isPrivateBookmarkNote) {
M3ActionRow(icon = Icons.Outlined.LockOpen, text = stringRes(R.string.remove_from_private_bookmarks)) { M3ActionRow(icon = MaterialSymbols.LockOpen, text = stringRes(R.string.remove_from_private_bookmarks)) {
accountViewModel.removePrivateBookmark(note) accountViewModel.removePrivateBookmark(note)
onDismiss() onDismiss()
} }
} else { } else {
M3ActionRow(icon = Icons.Outlined.Lock, text = stringRes(R.string.add_to_private_bookmarks)) { M3ActionRow(icon = MaterialSymbols.Lock, text = stringRes(R.string.add_to_private_bookmarks)) {
accountViewModel.addPrivateBookmark(note) accountViewModel.addPrivateBookmark(note)
onDismiss() onDismiss()
} }
} }
if (state.isPublicBookmarkNote) { if (state.isPublicBookmarkNote) {
M3ActionRow(icon = Icons.Outlined.BookmarkRemove, text = stringRes(R.string.remove_from_public_bookmarks)) { M3ActionRow(icon = MaterialSymbols.BookmarkRemove, text = stringRes(R.string.remove_from_public_bookmarks)) {
accountViewModel.removePublicBookmark(note) accountViewModel.removePublicBookmark(note)
onDismiss() onDismiss()
} }
} else { } else {
M3ActionRow(icon = Icons.Outlined.Bookmark, text = stringRes(R.string.add_to_public_bookmarks)) { M3ActionRow(icon = MaterialSymbols.Bookmark, text = stringRes(R.string.add_to_public_bookmarks)) {
accountViewModel.addPublicBookmark(note) accountViewModel.addPublicBookmark(note)
onDismiss() onDismiss()
} }
@@ -339,12 +322,12 @@ fun NoteDropDownMenu(
// Moderation section // Moderation section
M3ActionSection { M3ActionSection {
if (state.isLoggedUser) { if (state.isLoggedUser) {
M3ActionRow(icon = Icons.Outlined.Delete, text = stringRes(R.string.request_deletion), isDestructive = true) { M3ActionRow(icon = MaterialSymbols.Delete, text = stringRes(R.string.request_deletion), isDestructive = true) {
accountViewModel.delete(note) accountViewModel.delete(note)
onDismiss() onDismiss()
} }
} else { } else {
M3ActionRow(icon = Icons.Outlined.Report, text = stringRes(R.string.block_report), isDestructive = true) { M3ActionRow(icon = MaterialSymbols.Report, text = stringRes(R.string.block_report), isDestructive = true) {
reportDialogShowing = true reportDialogShowing = true
} }
} }
@@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.LocationOn
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -40,6 +38,8 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.withLink import androidx.compose.ui.text.withLink
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.navigation.routes.Route import com.vitorpamplona.amethyst.ui.navigation.routes.Route
import com.vitorpamplona.amethyst.ui.note.creators.location.LoadCityName import com.vitorpamplona.amethyst.ui.note.creators.location.LoadCityName
@@ -68,7 +68,7 @@ fun DisplayGeohashExternalId(
Row(modifier = MaterialTheme.colorScheme.replyModifier.padding(10.dp), verticalAlignment = Alignment.CenterVertically) { Row(modifier = MaterialTheme.colorScheme.replyModifier.padding(10.dp), verticalAlignment = Alignment.CenterVertically) {
LoadCityName(geohash) { cityName -> LoadCityName(geohash) { cityName ->
Icon( Icon(
imageVector = Icons.Default.LocationOn, symbol = MaterialSymbols.LocationOn,
contentDescription = stringRes(id = R.string.geohash_exclusive), contentDescription = stringRes(id = R.string.geohash_exclusive),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Tag
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -40,6 +38,8 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.withLink import androidx.compose.ui.text.withLink
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.navigation.routes.Route import com.vitorpamplona.amethyst.ui.navigation.routes.Route
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
@@ -66,7 +66,7 @@ fun DisplayHashtagExternalId(
) { ) {
Row(modifier = MaterialTheme.colorScheme.replyModifier.padding(10.dp), verticalAlignment = Alignment.CenterVertically) { Row(modifier = MaterialTheme.colorScheme.replyModifier.padding(10.dp), verticalAlignment = Alignment.CenterVertically) {
Icon( Icon(
imageVector = Icons.Default.Tag, symbol = MaterialSymbols.Tag,
contentDescription = stringRes(id = R.string.hashtag_exclusive), contentDescription = stringRes(id = R.string.hashtag_exclusive),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -33,15 +33,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Send
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.ErrorOutline
import androidx.compose.material.icons.filled.HourglassTop
import androidx.compose.material.icons.filled.Recommend
import androidx.compose.material.icons.filled.RemoveDone
import androidx.compose.material.icons.filled.Star
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -54,12 +45,14 @@ 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.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
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 androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.model.EmptyTagList import com.vitorpamplona.amethyst.commons.model.EmptyTagList
import com.vitorpamplona.amethyst.commons.model.toImmutableListOfLists import com.vitorpamplona.amethyst.commons.model.toImmutableListOfLists
import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.LocalCache
@@ -182,7 +175,7 @@ fun RenderAttestation(
horizontalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
Icon( Icon(
imageVector = statusIcon, symbol = statusIcon,
contentDescription = stringRes(R.string.attestation), contentDescription = stringRes(R.string.attestation),
tint = statusColor, tint = statusColor,
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
@@ -308,7 +301,7 @@ fun RenderAttestationRequest(
horizontalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.Send, symbol = MaterialSymbols.AutoMirrored.Send,
contentDescription = stringRes(R.string.attestation_request), contentDescription = stringRes(R.string.attestation_request),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
@@ -435,7 +428,7 @@ fun RenderAttestorRecommendation(
horizontalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Recommend, symbol = MaterialSymbols.Recommend,
contentDescription = stringRes(R.string.attestor_recommendation), contentDescription = stringRes(R.string.attestor_recommendation),
tint = MaterialTheme.colorScheme.tertiary, tint = MaterialTheme.colorScheme.tertiary,
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
@@ -527,7 +520,7 @@ fun RenderAttestorProficiency(
horizontalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
Icon( Icon(
imageVector = Icons.Default.Star, symbol = MaterialSymbols.Star,
contentDescription = stringRes(R.string.attestor_proficiency), contentDescription = stringRes(R.string.attestor_proficiency),
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
@@ -585,13 +578,13 @@ private fun attestationColor(status: AttestationStatus?): Color =
else -> Color(0xFF757575) else -> Color(0xFF757575)
} }
private fun attestationIcon(status: AttestationStatus?): ImageVector = private fun attestationIcon(status: AttestationStatus?): MaterialSymbol =
when { when {
status == AttestationStatus.INVALID -> Icons.Default.Close status == AttestationStatus.INVALID -> MaterialSymbols.Close
status == AttestationStatus.VALID -> Icons.Default.CheckCircle status == AttestationStatus.VALID -> MaterialSymbols.CheckCircle
status == AttestationStatus.REVOKED -> Icons.Default.RemoveDone status == AttestationStatus.REVOKED -> MaterialSymbols.RemoveDone
status == AttestationStatus.VERIFYING -> Icons.Default.HourglassTop status == AttestationStatus.VERIFYING -> MaterialSymbols.HourglassTop
else -> Icons.Default.ErrorOutline else -> MaterialSymbols.ErrorOutline
} }
@Composable @Composable
@@ -33,8 +33,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.MilitaryTech
import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -61,6 +59,8 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
@@ -118,7 +118,7 @@ fun BadgeDisplay(
}, },
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.MilitaryTech, symbol = MaterialSymbols.MilitaryTech,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
) )
@@ -32,9 +32,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Share
import androidx.compose.material.icons.outlined.Edit
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.FilledTonalButton
@@ -60,6 +57,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.model.EmptyTagList import com.vitorpamplona.amethyst.commons.model.EmptyTagList
import com.vitorpamplona.amethyst.commons.model.toImmutableListOfLists import com.vitorpamplona.amethyst.commons.model.toImmutableListOfLists
import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.AddressableNote
@@ -462,7 +461,7 @@ fun EditCommunityButton(
onClick = { nav.nav(Route.EditCommunity(note.address)) }, onClick = { nav.nav(Route.EditCommunity(note.address)) },
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Edit, symbol = MaterialSymbols.Edit,
modifier = Size18Modifier, modifier = Size18Modifier,
contentDescription = stringRes(R.string.edit_community), contentDescription = stringRes(R.string.edit_community),
) )
@@ -543,7 +542,7 @@ fun ShareCommunityButton(
}, },
) { ) {
Icon( Icon(
imageVector = Icons.Default.Share, symbol = MaterialSymbols.Share,
modifier = Size18Modifier, modifier = Size18Modifier,
contentDescription = stringRes(R.string.quick_action_share), contentDescription = stringRes(R.string.quick_action_share),
) )
@@ -34,8 +34,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Schedule
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -49,6 +47,8 @@ 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.unit.dp import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.components.MyAsyncImage import com.vitorpamplona.amethyst.ui.components.MyAsyncImage
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
@@ -237,7 +237,7 @@ private fun MetaSeparator() {
private fun ReadingTimeBadge(minutes: Int) { private fun ReadingTimeBadge(minutes: Int) {
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
Icon( Icon(
imageVector = Icons.Outlined.Schedule, symbol = MaterialSymbols.Schedule,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.grayText, tint = MaterialTheme.colorScheme.grayText,
modifier = Modifier.size(14.dp), modifier = Modifier.size(14.dp),
@@ -31,14 +31,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Dns
import androidx.compose.material.icons.filled.Language
import androidx.compose.material.icons.filled.Lock
import androidx.compose.material.icons.filled.LockOpen
import androidx.compose.material.icons.filled.Numbers
import androidx.compose.material.icons.filled.Tag
import androidx.compose.material.icons.filled.TravelExplore
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
@@ -48,13 +40,15 @@ 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.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
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
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
@@ -121,7 +115,7 @@ fun RenderRelayDiscovery(
// Network type // Network type
if (networkTypes.isNotEmpty()) { if (networkTypes.isNotEmpty()) {
DiscoveryInfoRow( DiscoveryInfoRow(
icon = Icons.Default.Language, icon = MaterialSymbols.Language,
label = stringRes(R.string.relay_monitor_network), label = stringRes(R.string.relay_monitor_network),
value = networkTypes.joinToString { it.code }, value = networkTypes.joinToString { it.code },
) )
@@ -130,7 +124,7 @@ fun RenderRelayDiscovery(
// Relay type // Relay type
if (relayTypes.isNotEmpty()) { if (relayTypes.isNotEmpty()) {
DiscoveryInfoRow( DiscoveryInfoRow(
icon = Icons.Default.Dns, icon = MaterialSymbols.Dns,
label = stringRes(R.string.relay_monitor_relay_type), label = stringRes(R.string.relay_monitor_relay_type),
value = relayTypes.joinToString(), value = relayTypes.joinToString(),
) )
@@ -139,7 +133,7 @@ fun RenderRelayDiscovery(
// Requirements // Requirements
if (requirements.isNotEmpty()) { if (requirements.isNotEmpty()) {
DiscoveryInfoRow( DiscoveryInfoRow(
icon = if (requirements.any { !it.negated }) Icons.Default.Lock else Icons.Default.LockOpen, icon = if (requirements.any { !it.negated }) MaterialSymbols.Lock else MaterialSymbols.LockOpen,
label = stringRes(R.string.relay_monitor_requirements), label = stringRes(R.string.relay_monitor_requirements),
value = value =
requirements.joinToString { req -> requirements.joinToString { req ->
@@ -151,7 +145,7 @@ fun RenderRelayDiscovery(
// Supported NIPs // Supported NIPs
if (supportedNips.isNotEmpty()) { if (supportedNips.isNotEmpty()) {
DiscoveryInfoRow( DiscoveryInfoRow(
icon = Icons.Default.Numbers, icon = MaterialSymbols.Numbers,
label = stringRes(R.string.relay_monitor_supported_nips), label = stringRes(R.string.relay_monitor_supported_nips),
value = supportedNips.sorted().joinToString(), value = supportedNips.sorted().joinToString(),
) )
@@ -160,7 +154,7 @@ fun RenderRelayDiscovery(
// Accepted kinds // Accepted kinds
if (acceptedKinds.isNotEmpty()) { if (acceptedKinds.isNotEmpty()) {
DiscoveryInfoRow( DiscoveryInfoRow(
icon = Icons.Default.Dns, icon = MaterialSymbols.Dns,
label = stringRes(R.string.relay_discovery_accepted_kinds), label = stringRes(R.string.relay_discovery_accepted_kinds),
value = value =
acceptedKinds.joinToString { kind -> acceptedKinds.joinToString { kind ->
@@ -176,7 +170,7 @@ fun RenderRelayDiscovery(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Icon( Icon(
Icons.Default.Tag, MaterialSymbols.Tag,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
tint = MaterialTheme.colorScheme.secondary, tint = MaterialTheme.colorScheme.secondary,
@@ -196,7 +190,7 @@ fun RenderRelayDiscovery(
// Geohashes // Geohashes
if (geohashes.isNotEmpty()) { if (geohashes.isNotEmpty()) {
DiscoveryInfoRow( DiscoveryInfoRow(
icon = Icons.Default.TravelExplore, icon = MaterialSymbols.TravelExplore,
label = stringRes(R.string.relay_discovery_geohash), label = stringRes(R.string.relay_discovery_geohash),
value = geohashes.joinToString(), value = geohashes.joinToString(),
) )
@@ -264,7 +258,7 @@ private fun TopicChip(topic: String) {
@Composable @Composable
private fun DiscoveryInfoRow( private fun DiscoveryInfoRow(
icon: ImageVector, icon: MaterialSymbol,
label: String, label: String,
value: String, value: String,
) { ) {
@@ -26,11 +26,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ExitToApp
import androidx.compose.material.icons.filled.People
import androidx.compose.material.icons.filled.PersonAdd
import androidx.compose.material.icons.filled.PersonRemove
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -38,11 +33,13 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember 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.vector.ImageVector
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
@@ -62,7 +59,7 @@ fun RenderRelayMembershipList(
val memberCount = remember(noteEvent) { noteEvent.members().size } val memberCount = remember(noteEvent) { noteEvent.members().size }
RelayMemberEventCard( RelayMemberEventCard(
icon = Icons.Default.People, icon = MaterialSymbols.People,
title = stringRes(R.string.relay_membership_list), title = stringRes(R.string.relay_membership_list),
subtitle = stringRes(R.string.relay_members_count, memberCount), subtitle = stringRes(R.string.relay_members_count, memberCount),
nav = nav, nav = nav,
@@ -87,7 +84,7 @@ fun RenderRelayAddMember(
val subtitle = remember(memberKeys) { memberKeys.joinToString(", ") { it.take(16) + "..." } } val subtitle = remember(memberKeys) { memberKeys.joinToString(", ") { it.take(16) + "..." } }
RelayMemberEventCard( RelayMemberEventCard(
icon = Icons.Default.PersonAdd, icon = MaterialSymbols.PersonAdd,
title = title, title = title,
subtitle = subtitle, subtitle = subtitle,
relayPubKey = noteEvent.pubKey, relayPubKey = noteEvent.pubKey,
@@ -111,7 +108,7 @@ fun RenderRelayRemoveMember(
val subtitle = remember(memberKeys) { memberKeys.joinToString(", ") { it.take(16) + "..." } } val subtitle = remember(memberKeys) { memberKeys.joinToString(", ") { it.take(16) + "..." } }
RelayMemberEventCard( RelayMemberEventCard(
icon = Icons.Default.PersonRemove, icon = MaterialSymbols.PersonRemove,
title = title, title = title,
subtitle = subtitle, subtitle = subtitle,
relayPubKey = noteEvent.pubKey, relayPubKey = noteEvent.pubKey,
@@ -125,7 +122,7 @@ fun RenderRelayJoinRequest(
nav: INav, nav: INav,
) { ) {
RelayMemberEventCard( RelayMemberEventCard(
icon = Icons.Default.PersonAdd, icon = MaterialSymbols.PersonAdd,
title = stringRes(R.string.relay_join_request), title = stringRes(R.string.relay_join_request),
subtitle = null, subtitle = null,
nav = nav, nav = nav,
@@ -140,7 +137,7 @@ fun RenderRelayLeaveRequest(
nav: INav, nav: INav,
) { ) {
RelayMemberEventCard( RelayMemberEventCard(
icon = Icons.AutoMirrored.Filled.ExitToApp, icon = MaterialSymbols.AutoMirrored.ExitToApp,
title = stringRes(R.string.relay_leave_request), title = stringRes(R.string.relay_leave_request),
subtitle = null, subtitle = null,
nav = nav, nav = nav,
@@ -150,7 +147,7 @@ fun RenderRelayLeaveRequest(
@Composable @Composable
private fun RelayMemberEventCard( private fun RelayMemberEventCard(
icon: ImageVector, icon: MaterialSymbol,
title: String, title: String,
subtitle: String?, subtitle: String?,
nav: INav? = null, nav: INav? = null,
@@ -167,7 +164,7 @@ private fun RelayMemberEventCard(
horizontalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
Icon( Icon(
imageVector = icon, symbol = icon,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(24.dp), modifier = Modifier.size(24.dp),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -195,7 +192,7 @@ private fun RelayMemberEventCard(
private fun RelayMembershipListCardPreview() { private fun RelayMembershipListCardPreview() {
ThemeComparisonColumn { ThemeComparisonColumn {
RelayMemberEventCard( RelayMemberEventCard(
icon = Icons.Default.People, icon = MaterialSymbols.People,
title = "Relay membership list", title = "Relay membership list",
subtitle = "42 members", subtitle = "42 members",
) )
@@ -207,7 +204,7 @@ private fun RelayMembershipListCardPreview() {
private fun RelayAddMemberCardPreview() { private fun RelayAddMemberCardPreview() {
ThemeComparisonColumn { ThemeComparisonColumn {
RelayMemberEventCard( RelayMemberEventCard(
icon = Icons.Default.PersonAdd, icon = MaterialSymbols.PersonAdd,
title = "Member added to relay", title = "Member added to relay",
subtitle = "a1b2c3d4e5f6a7b8...", subtitle = "a1b2c3d4e5f6a7b8...",
) )
@@ -219,7 +216,7 @@ private fun RelayAddMemberCardPreview() {
private fun RelayRemoveMemberCardPreview() { private fun RelayRemoveMemberCardPreview() {
ThemeComparisonColumn { ThemeComparisonColumn {
RelayMemberEventCard( RelayMemberEventCard(
icon = Icons.Default.PersonRemove, icon = MaterialSymbols.PersonRemove,
title = "Member removed from relay", title = "Member removed from relay",
subtitle = "a1b2c3d4e5f6a7b8...", subtitle = "a1b2c3d4e5f6a7b8...",
) )
@@ -231,7 +228,7 @@ private fun RelayRemoveMemberCardPreview() {
private fun RelayJoinRequestCardPreview() { private fun RelayJoinRequestCardPreview() {
ThemeComparisonColumn { ThemeComparisonColumn {
RelayMemberEventCard( RelayMemberEventCard(
icon = Icons.Default.PersonAdd, icon = MaterialSymbols.PersonAdd,
title = "Relay join request", title = "Relay join request",
subtitle = null, subtitle = null,
) )
@@ -243,7 +240,7 @@ private fun RelayJoinRequestCardPreview() {
private fun RelayLeaveRequestCardPreview() { private fun RelayLeaveRequestCardPreview() {
ThemeComparisonColumn { ThemeComparisonColumn {
RelayMemberEventCard( RelayMemberEventCard(
icon = Icons.AutoMirrored.Filled.ExitToApp, icon = MaterialSymbols.AutoMirrored.ExitToApp,
title = "Relay leave request", title = "Relay leave request",
subtitle = null, subtitle = null,
) )
@@ -28,8 +28,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.FileOpen
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -46,6 +44,8 @@ import androidx.compose.ui.text.style.TextOverflow
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.service.countToHumanReadableBytes import com.vitorpamplona.amethyst.service.countToHumanReadableBytes
@@ -249,7 +249,7 @@ fun ShortTorrentHeader(
modifier = modifier, modifier = modifier,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.FileOpen, symbol = MaterialSymbols.FileOpen,
contentDescription = stringRes(id = R.string.torrent_file), contentDescription = stringRes(id = R.string.torrent_file),
modifier = Modifier.size(20.dp), modifier = Modifier.size(20.dp),
) )
@@ -28,9 +28,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.PauseCircleOutline
import androidx.compose.material.icons.filled.PlayCircleOutline
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -51,6 +48,8 @@ import androidx.media3.ui.compose.ContentFrame
import androidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW import androidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW
import androidx.media3.ui.compose.state.rememberPlayPauseButtonState import androidx.media3.ui.compose.state.rememberPlayPauseButtonState
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.richtext.MediaUrlVideo import com.vitorpamplona.amethyst.commons.richtext.MediaUrlVideo
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.service.playback.composable.DEFAULT_MUTED_SETTING import com.vitorpamplona.amethyst.service.playback.composable.DEFAULT_MUTED_SETTING
@@ -252,7 +251,7 @@ fun PlayPauseButton(controllerState: MediaControllerState) {
modifier = Size75Modifier, modifier = Size75Modifier,
) { ) {
Icon( Icon(
imageVector = if (state.showPlay) Icons.Default.PlayCircleOutline else Icons.Default.PauseCircleOutline, symbol = if (state.showPlay) MaterialSymbols.PlayCircleOutline else MaterialSymbols.PauseCircleOutline,
contentDescription = if (state.showPlay) stringResource(R.string.play) else stringResource(R.string.pause), contentDescription = if (state.showPlay) stringResource(R.string.play) else stringResource(R.string.pause),
modifier = Size50Modifier, modifier = Size50Modifier,
tint = Color.White, tint = Color.White,
@@ -23,8 +23,6 @@ package com.vitorpamplona.amethyst.ui.note.types
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.ArrowForwardIos
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -38,6 +36,8 @@ 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.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
@@ -167,7 +167,7 @@ fun TransferCard(
) )
Icon( Icon(
imageVector = Icons.AutoMirrored.Outlined.ArrowForwardIos, symbol = MaterialSymbols.AutoMirrored.ArrowForwardIos,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.bitcoinColor, tint = MaterialTheme.colorScheme.bitcoinColor,
modifier = Size20Modifier, modifier = Size20Modifier,
@@ -21,14 +21,14 @@
package com.vitorpamplona.amethyst.ui.screen.loggedIn.articles package com.vitorpamplona.amethyst.ui.screen.loggedIn.articles
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Add
import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.FloatingActionButton
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.graphics.Color import androidx.compose.ui.graphics.Color
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.navigation.routes.Route import com.vitorpamplona.amethyst.ui.navigation.routes.Route
import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.stringRes
@@ -44,7 +44,7 @@ fun NewArticleButton(nav: INav) {
containerColor = MaterialTheme.colorScheme.primary, containerColor = MaterialTheme.colorScheme.primary,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.Add, symbol = MaterialSymbols.Add,
contentDescription = stringRes(id = R.string.new_long_form_post), contentDescription = stringRes(id = R.string.new_long_form_post),
modifier = Size26Modifier, modifier = Size26Modifier,
tint = Color.White, tint = Color.White,
@@ -28,9 +28,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.PanTool
import androidx.compose.material.icons.outlined.PanTool
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.FilledTonalIconButton import androidx.compose.material3.FilledTonalIconButton
@@ -50,6 +47,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.model.nip53LiveActivities.LiveActivitiesChannel import com.vitorpamplona.amethyst.commons.model.nip53LiveActivities.LiveActivitiesChannel
import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture
import com.vitorpamplona.amethyst.ui.note.LoadAddressableNote import com.vitorpamplona.amethyst.ui.note.LoadAddressableNote
@@ -181,7 +180,7 @@ private fun AudioRoomStageContent(
) { ) {
FilledTonalIconButton(onClick = { handRaised = !handRaised }) { FilledTonalIconButton(onClick = { handRaised = !handRaised }) {
Icon( Icon(
imageVector = if (handRaised) Icons.Filled.PanTool else Icons.Outlined.PanTool, symbol = if (handRaised) MaterialSymbols.PanTool else MaterialSymbols.PanTool,
contentDescription = contentDescription =
stringRes( stringRes(
if (handRaised) R.string.audio_room_lower_hand else R.string.audio_room_raise_hand, if (handRaised) R.string.audio_room_lower_hand else R.string.audio_room_raise_hand,
@@ -38,8 +38,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.AddPhotoAlternate
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -67,6 +65,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogProperties
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.actions.StrippingFailureDialog import com.vitorpamplona.amethyst.ui.actions.StrippingFailureDialog
import com.vitorpamplona.amethyst.ui.actions.mediaServers.DEFAULT_MEDIA_SERVERS import com.vitorpamplona.amethyst.ui.actions.mediaServers.DEFAULT_MEDIA_SERVERS
import com.vitorpamplona.amethyst.ui.actions.uploads.GallerySelect import com.vitorpamplona.amethyst.ui.actions.uploads.GallerySelect
@@ -216,7 +216,7 @@ private fun UploadPlaceholder(onClick: () -> Unit) {
) { ) {
Column(horizontalAlignment = Alignment.CenterHorizontally) { Column(horizontalAlignment = Alignment.CenterHorizontally) {
Icon( Icon(
imageVector = Icons.Default.AddPhotoAlternate, symbol = MaterialSymbols.AddPhotoAlternate,
contentDescription = null, contentDescription = null,
modifier = Modifier.size(56.dp), modifier = Modifier.size(56.dp),
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -21,19 +21,6 @@
package com.vitorpamplona.amethyst.ui.screen.loggedIn.bookmarkgroups.display package com.vitorpamplona.amethyst.ui.screen.loggedIn.bookmarkgroups.display
import android.content.Intent import android.content.Intent
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.BookmarkRemove
import androidx.compose.material.icons.outlined.CellTower
import androidx.compose.material.icons.outlined.ContentCopy
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material.icons.outlined.Edit
import androidx.compose.material.icons.outlined.Lock
import androidx.compose.material.icons.outlined.LockOpen
import androidx.compose.material.icons.outlined.PersonAdd
import androidx.compose.material.icons.outlined.PersonRemove
import androidx.compose.material.icons.outlined.Report
import androidx.compose.material.icons.outlined.Schedule
import androidx.compose.material.icons.outlined.Share
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@@ -45,6 +32,7 @@ import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.actions.EditPostView import com.vitorpamplona.amethyst.ui.actions.EditPostView
import com.vitorpamplona.amethyst.ui.components.ClickableBox import com.vitorpamplona.amethyst.ui.components.ClickableBox
@@ -166,13 +154,13 @@ fun BookmarkGroupItemOptionsMenu(
// Bookmark Management section // Bookmark Management section
M3ActionSection { M3ActionSection {
M3ActionRow( M3ActionRow(
icon = if (isBookmarkItemPrivate) Icons.Outlined.LockOpen else Icons.Outlined.Lock, icon = if (isBookmarkItemPrivate) MaterialSymbols.LockOpen else MaterialSymbols.Lock,
text = stringRes(if (isBookmarkItemPrivate) R.string.move_bookmark_to_public_label else R.string.move_bookmark_to_private_label), text = stringRes(if (isBookmarkItemPrivate) R.string.move_bookmark_to_public_label else R.string.move_bookmark_to_private_label),
) { ) {
if (isBookmarkItemPrivate) onMoveBookmarkToPublic() else onMoveBookmarkToPrivate() if (isBookmarkItemPrivate) onMoveBookmarkToPublic() else onMoveBookmarkToPrivate()
} }
M3ActionRow( M3ActionRow(
icon = Icons.Outlined.BookmarkRemove, icon = MaterialSymbols.BookmarkRemove,
text = stringRes(R.string.bookmark_remove_action_label), text = stringRes(R.string.bookmark_remove_action_label),
isDestructive = true, isDestructive = true,
) { ) {
@@ -184,13 +172,13 @@ fun BookmarkGroupItemOptionsMenu(
// Follow section // Follow section
M3ActionSection { M3ActionSection {
if (!state.isFollowingAuthor) { if (!state.isFollowingAuthor) {
M3ActionRow(icon = Icons.Outlined.PersonAdd, text = stringRes(R.string.follow)) { M3ActionRow(icon = MaterialSymbols.PersonAdd, text = stringRes(R.string.follow)) {
val author = note.author ?: return@M3ActionRow val author = note.author ?: return@M3ActionRow
accountViewModel.follow(author) accountViewModel.follow(author)
onDismiss() onDismiss()
} }
} else { } else {
M3ActionRow(icon = Icons.Outlined.PersonRemove, text = stringRes(R.string.unfollow)) { M3ActionRow(icon = MaterialSymbols.PersonRemove, text = stringRes(R.string.unfollow)) {
val author = note.author ?: return@M3ActionRow val author = note.author ?: return@M3ActionRow
accountViewModel.unfollow(author) accountViewModel.unfollow(author)
onDismiss() onDismiss()
@@ -200,7 +188,7 @@ fun BookmarkGroupItemOptionsMenu(
// Copy & Share section // Copy & Share section
M3ActionSection { M3ActionSection {
M3ActionRow(icon = Icons.Outlined.ContentCopy, text = stringRes(R.string.copy_text)) { M3ActionRow(icon = MaterialSymbols.ContentCopy, text = stringRes(R.string.copy_text)) {
val lastNoteVersion = (editState?.value as? GenericLoadable.Loaded)?.loaded?.modificationToShow?.value ?: note val lastNoteVersion = (editState?.value as? GenericLoadable.Loaded)?.loaded?.modificationToShow?.value ?: note
accountViewModel.decrypt(lastNoteVersion) { accountViewModel.decrypt(lastNoteVersion) {
scope.launch { scope.launch {
@@ -209,7 +197,7 @@ fun BookmarkGroupItemOptionsMenu(
} }
onDismiss() onDismiss()
} }
M3ActionRow(icon = Icons.Outlined.ContentCopy, text = stringRes(R.string.copy_user_pubkey)) { M3ActionRow(icon = MaterialSymbols.ContentCopy, text = stringRes(R.string.copy_user_pubkey)) {
note.author?.let { note.author?.let {
scope.launch(Dispatchers.IO) { scope.launch(Dispatchers.IO) {
clipboardManager.setText("nostr:${it.pubkeyNpub()}") clipboardManager.setText("nostr:${it.pubkeyNpub()}")
@@ -217,13 +205,13 @@ fun BookmarkGroupItemOptionsMenu(
} }
} }
} }
M3ActionRow(icon = Icons.Outlined.ContentCopy, text = stringRes(R.string.copy_note_id)) { M3ActionRow(icon = MaterialSymbols.ContentCopy, text = stringRes(R.string.copy_note_id)) {
scope.launch(Dispatchers.IO) { scope.launch(Dispatchers.IO) {
clipboardManager.setText(note.toNostrUri()) clipboardManager.setText(note.toNostrUri())
onDismiss() onDismiss()
} }
} }
M3ActionRow(icon = Icons.Outlined.Share, text = stringRes(R.string.quick_action_share)) { M3ActionRow(icon = MaterialSymbols.Share, text = stringRes(R.string.quick_action_share)) {
val sendIntent = val sendIntent =
Intent().apply { Intent().apply {
action = Intent.ACTION_SEND action = Intent.ACTION_SEND
@@ -248,7 +236,7 @@ fun BookmarkGroupItemOptionsMenu(
// Edit & Broadcast section // Edit & Broadcast section
M3ActionSection { M3ActionSection {
if (state.isLoggedUser && note.isDraft()) { if (state.isLoggedUser && note.isDraft()) {
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.edit_draft)) { M3ActionRow(icon = MaterialSymbols.Edit, text = stringRes(R.string.edit_draft)) {
nav.nav { nav.nav {
routeEditDraftTo(note, accountViewModel.account) routeEditDraftTo(note, accountViewModel.account)
} }
@@ -257,21 +245,21 @@ fun BookmarkGroupItemOptionsMenu(
if (!note.isDraft()) { if (!note.isDraft()) {
if (note.event is TextNoteEvent) { if (note.event is TextNoteEvent) {
if (state.isLoggedUser) { if (state.isLoggedUser) {
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.edit_post)) { M3ActionRow(icon = MaterialSymbols.Edit, text = stringRes(R.string.edit_post)) {
wantsToEditPost.value = true wantsToEditPost.value = true
} }
} else { } else {
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.propose_an_edit)) { M3ActionRow(icon = MaterialSymbols.Edit, text = stringRes(R.string.propose_an_edit)) {
wantsToEditPost.value = true wantsToEditPost.value = true
} }
} }
} else if (note.event is LongTextNoteEvent && state.isLoggedUser) { } else if (note.event is LongTextNoteEvent && state.isLoggedUser) {
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.edit_article)) { M3ActionRow(icon = MaterialSymbols.Edit, text = stringRes(R.string.edit_article)) {
nav.nav { Route.NewLongFormPost(version = note.idHex) } nav.nav { Route.NewLongFormPost(version = note.idHex) }
} }
} }
} }
M3ActionRow(icon = Icons.Outlined.CellTower, text = stringRes(R.string.broadcast)) { M3ActionRow(icon = MaterialSymbols.CellTower, text = stringRes(R.string.broadcast)) {
accountViewModel.broadcast(note) accountViewModel.broadcast(note)
onDismiss() onDismiss()
} }
@@ -280,22 +268,22 @@ fun BookmarkGroupItemOptionsMenu(
// Timestamp & Moderation section // Timestamp & Moderation section
M3ActionSection { M3ActionSection {
if (accountViewModel.account.otsState.hasPendingAttestations(note)) { if (accountViewModel.account.otsState.hasPendingAttestations(note)) {
M3ActionRow(icon = Icons.Outlined.Schedule, text = stringRes(R.string.timestamp_pending)) { M3ActionRow(icon = MaterialSymbols.Schedule, text = stringRes(R.string.timestamp_pending)) {
onDismiss() onDismiss()
} }
} else { } else {
M3ActionRow(icon = Icons.Outlined.Schedule, text = stringRes(R.string.timestamp_it)) { M3ActionRow(icon = MaterialSymbols.Schedule, text = stringRes(R.string.timestamp_it)) {
accountViewModel.timestamp(note) accountViewModel.timestamp(note)
onDismiss() onDismiss()
} }
} }
if (state.isLoggedUser) { if (state.isLoggedUser) {
M3ActionRow(icon = Icons.Outlined.Delete, text = stringRes(R.string.request_deletion), isDestructive = true) { M3ActionRow(icon = MaterialSymbols.Delete, text = stringRes(R.string.request_deletion), isDestructive = true) {
accountViewModel.delete(note) accountViewModel.delete(note)
onDismiss() onDismiss()
} }
} else { } else {
M3ActionRow(icon = Icons.Outlined.Report, text = stringRes(R.string.block_report), isDestructive = true) { M3ActionRow(icon = MaterialSymbols.Report, text = stringRes(R.string.block_report), isDestructive = true) {
reportDialogShowing = true reportDialogShowing = true
} }
} }
@@ -30,9 +30,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.PagerState
import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.CellTower
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -57,6 +54,7 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
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.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.ui.components.ClickableBox import com.vitorpamplona.amethyst.ui.components.ClickableBox
import com.vitorpamplona.amethyst.ui.components.DeletedItemsBanner import com.vitorpamplona.amethyst.ui.components.DeletedItemsBanner
@@ -383,14 +381,14 @@ fun BookmarkGroupActionsMenuButton(
) { ) {
M3ActionSection { M3ActionSection {
M3ActionRow( M3ActionRow(
icon = Icons.Outlined.CellTower, icon = MaterialSymbols.CellTower,
text = stringRes(R.string.bookmark_list_broadcast_btn_label), text = stringRes(R.string.bookmark_list_broadcast_btn_label),
) { ) {
onBroadcastList() onBroadcastList()
isActionListOpen.value = false isActionListOpen.value = false
} }
M3ActionRow( M3ActionRow(
icon = Icons.Outlined.Delete, icon = MaterialSymbols.Delete,
text = stringRes(R.string.bookmark_list_delete_btn_label), text = stringRes(R.string.bookmark_list_delete_btn_label),
isDestructive = true, isDestructive = true,
) { ) {
@@ -29,13 +29,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.offset
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.Article
import androidx.compose.material.icons.outlined.CollectionsBookmark
import androidx.compose.material.icons.outlined.ContentCopy
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material.icons.outlined.Description
import androidx.compose.material.icons.outlined.Edit
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.FilledTonalButton
@@ -57,6 +50,8 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.nip51Lists.labeledBookmarkLists.LabeledBookmarkList import com.vitorpamplona.amethyst.model.nip51Lists.labeledBookmarkLists.LabeledBookmarkList
import com.vitorpamplona.amethyst.ui.components.ClickableBox import com.vitorpamplona.amethyst.ui.components.ClickableBox
import com.vitorpamplona.amethyst.ui.components.M3ActionDialog import com.vitorpamplona.amethyst.ui.components.M3ActionDialog
@@ -135,7 +130,7 @@ fun BookmarkGroupItem(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.CollectionsBookmark, symbol = MaterialSymbols.CollectionsBookmark,
contentDescription = stringRes(R.string.bookmark_list_icon_label), contentDescription = stringRes(R.string.bookmark_list_icon_label),
modifier = Size40Modifier, modifier = Size40Modifier,
) )
@@ -186,7 +181,7 @@ private fun BookmarkGroupActions(
onClick = openArticleBookmarks, onClick = openArticleBookmarks,
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Outlined.Article, symbol = MaterialSymbols.AutoMirrored.Article,
contentDescription = null, contentDescription = null,
) )
Text(stringRes(R.string.bookmark_list_articles_btn_label)) Text(stringRes(R.string.bookmark_list_articles_btn_label))
@@ -233,7 +228,7 @@ fun BookmarkMembershipStatusAndNumberDisplay(
horizontalArrangement = SpacedBy2dp, horizontalArrangement = SpacedBy2dp,
) { ) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Outlined.Article, symbol = MaterialSymbols.AutoMirrored.Article,
modifier = Size10Modifier, modifier = Size10Modifier,
contentDescription = null, contentDescription = null,
) )
@@ -299,21 +294,21 @@ private fun GroupOptionsMenu(
onDismiss = onDismiss, onDismiss = onDismiss,
) { ) {
M3ActionSection { M3ActionSection {
M3ActionRow(icon = Icons.Outlined.Edit, text = stringRes(R.string.follow_set_rename_btn_label)) { M3ActionRow(icon = MaterialSymbols.Edit, text = stringRes(R.string.follow_set_rename_btn_label)) {
onGroupRename() onGroupRename()
onDismiss() onDismiss()
} }
M3ActionRow(icon = Icons.Outlined.Description, text = stringRes(R.string.follow_set_desc_modify_label)) { M3ActionRow(icon = MaterialSymbols.Description, text = stringRes(R.string.follow_set_desc_modify_label)) {
onGroupDescriptionChange() onGroupDescriptionChange()
onDismiss() onDismiss()
} }
M3ActionRow(icon = Icons.Outlined.ContentCopy, text = stringRes(R.string.follow_set_copy_action_btn_label)) { M3ActionRow(icon = MaterialSymbols.ContentCopy, text = stringRes(R.string.follow_set_copy_action_btn_label)) {
isCopyDialogOpen.value = true isCopyDialogOpen.value = true
onDismiss() onDismiss()
} }
} }
M3ActionSection { M3ActionSection {
M3ActionRow(icon = Icons.Outlined.Delete, text = stringRes(R.string.quick_action_delete), isDestructive = true) { M3ActionRow(icon = MaterialSymbols.Delete, text = stringRes(R.string.quick_action_delete), isDestructive = true) {
onDelete() onDelete()
onDismiss() onDismiss()
} }
@@ -29,9 +29,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.BookmarkBorder
import androidx.compose.material.icons.outlined.PushPin
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.ListItem import androidx.compose.material3.ListItem
@@ -43,6 +40,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.nip51Lists.BookmarkListState import com.vitorpamplona.amethyst.model.nip51Lists.BookmarkListState
import com.vitorpamplona.amethyst.model.nip51Lists.OldBookmarkListState import com.vitorpamplona.amethyst.model.nip51Lists.OldBookmarkListState
import com.vitorpamplona.amethyst.model.nip51Lists.PinListState import com.vitorpamplona.amethyst.model.nip51Lists.PinListState
@@ -138,7 +137,7 @@ fun DefaultBookmarkList(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.BookmarkBorder, symbol = MaterialSymbols.BookmarkBorder,
contentDescription = stringRes(R.string.bookmark_list_icon_label), contentDescription = stringRes(R.string.bookmark_list_icon_label),
modifier = Size40Modifier, modifier = Size40Modifier,
) )
@@ -182,7 +181,7 @@ fun PinnedNotesList(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.PushPin, symbol = MaterialSymbols.PushPin,
contentDescription = stringRes(R.string.bookmark_list_icon_label), contentDescription = stringRes(R.string.bookmark_list_icon_label),
modifier = Size40Modifier, modifier = Size40Modifier,
) )
@@ -226,7 +225,7 @@ fun OldBookmarkList(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.BookmarkBorder, symbol = MaterialSymbols.BookmarkBorder,
contentDescription = stringRes(R.string.bookmark_list_icon_label), contentDescription = stringRes(R.string.bookmark_list_icon_label),
modifier = Size40Modifier, modifier = Size40Modifier,
) )
@@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.PlaylistAdd
import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -34,6 +32,8 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.nip51Lists.BookmarkListState import com.vitorpamplona.amethyst.model.nip51Lists.BookmarkListState
import com.vitorpamplona.amethyst.model.nip51Lists.OldBookmarkListState import com.vitorpamplona.amethyst.model.nip51Lists.OldBookmarkListState
import com.vitorpamplona.amethyst.model.nip51Lists.PinListState import com.vitorpamplona.amethyst.model.nip51Lists.PinListState
@@ -149,7 +149,7 @@ fun BookmarkGroupFab(onAddGroup: () -> Unit) {
}, },
icon = { icon = {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.PlaylistAdd, symbol = MaterialSymbols.AutoMirrored.PlaylistAdd,
contentDescription = null, contentDescription = null,
) )
}, },
@@ -27,14 +27,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.BookmarkAdd
import androidx.compose.material.icons.filled.BookmarkRemove
import androidx.compose.material.icons.outlined.BookmarkAdd
import androidx.compose.material.icons.outlined.CollectionsBookmark
import androidx.compose.material.icons.outlined.Lock
import androidx.compose.material.icons.outlined.Public
import androidx.compose.material.icons.outlined.RemoveCircleOutline
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.ListItem import androidx.compose.material3.ListItem
@@ -47,6 +39,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.components.M3ActionDialog import com.vitorpamplona.amethyst.ui.components.M3ActionDialog
import com.vitorpamplona.amethyst.ui.components.M3ActionRow import com.vitorpamplona.amethyst.ui.components.M3ActionRow
import com.vitorpamplona.amethyst.ui.components.M3ActionSection import com.vitorpamplona.amethyst.ui.components.M3ActionSection
@@ -88,7 +82,7 @@ fun BookmarkGroupManagementItem(
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
) { ) {
Icon( Icon(
imageVector = Icons.Outlined.CollectionsBookmark, symbol = MaterialSymbols.CollectionsBookmark,
contentDescription = stringRes(R.string.bookmark_list_icon_label), contentDescription = stringRes(R.string.bookmark_list_icon_label),
modifier = Size50Modifier, modifier = Size50Modifier,
) )
@@ -131,15 +125,15 @@ fun BookmarkStatusInList(
val icon = val icon =
if (isPublicMemberBookmark) { if (isPublicMemberBookmark) {
Icons.Outlined.Public MaterialSymbols.Public
} else if (isPrivateMemberBookmark) { } else if (isPrivateMemberBookmark) {
Icons.Outlined.Lock MaterialSymbols.Lock
} else { } else {
Icons.Outlined.RemoveCircleOutline MaterialSymbols.RemoveCircleOutline
} }
Icon( Icon(
imageVector = icon, symbol = icon,
contentDescription = text, contentDescription = text,
modifier = Size15Modifier, modifier = Size15Modifier,
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
@@ -167,14 +161,14 @@ fun BookmarkManagementOptions(
) { ) {
M3ActionSection { M3ActionSection {
M3ActionRow( M3ActionRow(
icon = Icons.Outlined.BookmarkAdd, icon = MaterialSymbols.BookmarkAdd,
text = stringRes(R.string.public_bookmark_add_action_label), text = stringRes(R.string.public_bookmark_add_action_label),
) { ) {
onAddBookmark(false) onAddBookmark(false)
isBookmarkAddTapped.value = false isBookmarkAddTapped.value = false
} }
M3ActionRow( M3ActionRow(
icon = Icons.Outlined.Lock, icon = MaterialSymbols.Lock,
text = stringRes(R.string.private_bookmark_add_action_label), text = stringRes(R.string.private_bookmark_add_action_label),
) { ) {
onAddBookmark(true) onAddBookmark(true)
@@ -210,13 +204,13 @@ fun BookmarkManagementOptions(
) { ) {
if (isBookmarkInList) { if (isBookmarkInList) {
Icon( Icon(
imageVector = Icons.Filled.BookmarkRemove, symbol = MaterialSymbols.BookmarkRemove,
contentDescription = stringRes(R.string.bookmark_remove_action_desc), contentDescription = stringRes(R.string.bookmark_remove_action_desc),
tint = MaterialTheme.colorScheme.onErrorContainer, tint = MaterialTheme.colorScheme.onErrorContainer,
) )
} else { } else {
Icon( Icon(
imageVector = Icons.Filled.BookmarkAdd, symbol = MaterialSymbols.BookmarkAdd,
contentDescription = stringRes(R.string.bookmark_add_action_desc), contentDescription = stringRes(R.string.bookmark_add_action_desc),
tint = MaterialTheme.colorScheme.onPrimary, tint = MaterialTheme.colorScheme.onPrimary,
) )
@@ -30,8 +30,6 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.DriveFileMove
import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -52,6 +50,8 @@ import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.EventFinderQueryState import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.EventFinderQueryState
import com.vitorpamplona.amethyst.ui.components.DeletedItemsBanner import com.vitorpamplona.amethyst.ui.components.DeletedItemsBanner
@@ -163,7 +163,7 @@ private fun RenderOldBookmarkScreen(
text = { Text(stringRes(R.string.migrate_bookmarks_button)) }, text = { Text(stringRes(R.string.migrate_bookmarks_button)) },
icon = { icon = {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.DriveFileMove, symbol = MaterialSymbols.AutoMirrored.DriveFileMove,
contentDescription = stringRes(R.string.migrate_bookmarks_button), contentDescription = stringRes(R.string.migrate_bookmarks_button),
) )
}, },
@@ -23,8 +23,6 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.feed
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Timer
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -35,6 +33,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
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.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.ui.note.timeAgoShort import com.vitorpamplona.amethyst.ui.note.timeAgoShort
import com.vitorpamplona.amethyst.ui.note.timeAheadNoDot import com.vitorpamplona.amethyst.ui.note.timeAheadNoDot
@@ -75,7 +75,7 @@ fun ChatDisplayExpiration(expirationDate: Long) {
) { ) {
Spacer(modifier = StdHorzSpacer) Spacer(modifier = StdHorzSpacer)
Icon( Icon(
imageVector = Icons.Outlined.Timer, symbol = MaterialSymbols.Timer,
contentDescription = stringRes(R.string.expiration_date_label), contentDescription = stringRes(R.string.expiration_date_label),
modifier = Modifier.size(12.dp), modifier = Modifier.size(12.dp),
tint = MaterialTheme.colorScheme.placeholderText, tint = MaterialTheme.colorScheme.placeholderText,
@@ -31,8 +31,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Person
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
@@ -50,6 +48,8 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.compositeOver import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.theme.ChatBubbleMaxSizeModifier import com.vitorpamplona.amethyst.ui.theme.ChatBubbleMaxSizeModifier
import com.vitorpamplona.amethyst.ui.theme.ChatBubbleShapeMe import com.vitorpamplona.amethyst.ui.theme.ChatBubbleShapeMe
import com.vitorpamplona.amethyst.ui.theme.ChatBubbleShapeThem import com.vitorpamplona.amethyst.ui.theme.ChatBubbleShapeThem
@@ -218,7 +218,7 @@ private fun BubblePreview() {
UserDisplayNameLayout( UserDisplayNameLayout(
picture = { picture = {
Icon( Icon(
imageVector = Icons.Default.Person, symbol = MaterialSymbols.Person,
contentDescription = null, contentDescription = null,
modifier = modifier =
Modifier Modifier
@@ -253,7 +253,7 @@ private fun BubblePreview() {
UserDisplayNameLayout( UserDisplayNameLayout(
picture = { picture = {
Icon( Icon(
imageVector = Icons.Default.Person, symbol = MaterialSymbols.Person,
contentDescription = null, contentDescription = null,
modifier = modifier =
Modifier Modifier
@@ -287,7 +287,7 @@ private fun BubblePreview() {
UserDisplayNameLayout( UserDisplayNameLayout(
picture = { picture = {
Icon( Icon(
imageVector = Icons.Default.Person, symbol = MaterialSymbols.Person,
contentDescription = null, contentDescription = null,
modifier = modifier =
Modifier Modifier
@@ -321,7 +321,7 @@ private fun BubblePreview() {
UserDisplayNameLayout( UserDisplayNameLayout(
picture = { picture = {
Icon( Icon(
imageVector = Icons.Default.Person, symbol = MaterialSymbols.Person,
contentDescription = null, contentDescription = null,
modifier = modifier =
Modifier Modifier

Some files were not shown because too many files have changed in this diff Show More