diff --git a/app/src/main/assets/design-icons/README.md b/app/src/main/assets/design-icons/README.md
new file mode 100644
index 00000000..cd04de8f
--- /dev/null
+++ b/app/src/main/assets/design-icons/README.md
@@ -0,0 +1,6 @@
+# Design-spec icons
+
+These standalone SVGs were extracted from the supplied 393 px Figma screen exports. The matching
+Android vector resources in `res/drawable/ic_spec_*.xml` are the runtime copies used by Compose.
+Paths and stroke weights remain faithful to the exports; UI tint and opacity are applied at the
+call site so selected and disabled states remain theme-aware.
diff --git a/app/src/main/assets/design-icons/bookmark-filled.svg b/app/src/main/assets/design-icons/bookmark-filled.svg
new file mode 100644
index 00000000..a2f90c78
--- /dev/null
+++ b/app/src/main/assets/design-icons/bookmark-filled.svg
@@ -0,0 +1,3 @@
+
diff --git a/app/src/main/assets/design-icons/bookmark-outline.svg b/app/src/main/assets/design-icons/bookmark-outline.svg
new file mode 100644
index 00000000..7ffb105f
--- /dev/null
+++ b/app/src/main/assets/design-icons/bookmark-outline.svg
@@ -0,0 +1,3 @@
+
diff --git a/app/src/main/assets/design-icons/chat-bubbles.svg b/app/src/main/assets/design-icons/chat-bubbles.svg
new file mode 100644
index 00000000..32546ff8
--- /dev/null
+++ b/app/src/main/assets/design-icons/chat-bubbles.svg
@@ -0,0 +1,6 @@
+
diff --git a/app/src/main/assets/design-icons/command.svg b/app/src/main/assets/design-icons/command.svg
new file mode 100644
index 00000000..3be46195
--- /dev/null
+++ b/app/src/main/assets/design-icons/command.svg
@@ -0,0 +1,6 @@
+
diff --git a/app/src/main/assets/design-icons/eye-off.svg b/app/src/main/assets/design-icons/eye-off.svg
new file mode 100644
index 00000000..1e8ad44d
--- /dev/null
+++ b/app/src/main/assets/design-icons/eye-off.svg
@@ -0,0 +1,6 @@
+
diff --git a/app/src/main/assets/design-icons/globe.svg b/app/src/main/assets/design-icons/globe.svg
new file mode 100644
index 00000000..e0dc1a45
--- /dev/null
+++ b/app/src/main/assets/design-icons/globe.svg
@@ -0,0 +1,7 @@
+
diff --git a/app/src/main/assets/design-icons/lock.svg b/app/src/main/assets/design-icons/lock.svg
new file mode 100644
index 00000000..28a95cb0
--- /dev/null
+++ b/app/src/main/assets/design-icons/lock.svg
@@ -0,0 +1,7 @@
+
diff --git a/app/src/main/assets/design-icons/mention.svg b/app/src/main/assets/design-icons/mention.svg
new file mode 100644
index 00000000..59f2fa19
--- /dev/null
+++ b/app/src/main/assets/design-icons/mention.svg
@@ -0,0 +1,6 @@
+
diff --git a/app/src/main/assets/design-icons/panic.svg b/app/src/main/assets/design-icons/panic.svg
new file mode 100644
index 00000000..614b9070
--- /dev/null
+++ b/app/src/main/assets/design-icons/panic.svg
@@ -0,0 +1,3 @@
+
diff --git a/app/src/main/assets/design-icons/people.svg b/app/src/main/assets/design-icons/people.svg
new file mode 100644
index 00000000..f0bce1af
--- /dev/null
+++ b/app/src/main/assets/design-icons/people.svg
@@ -0,0 +1,6 @@
+
diff --git a/app/src/main/assets/design-icons/person.svg b/app/src/main/assets/design-icons/person.svg
new file mode 100644
index 00000000..c0c93053
--- /dev/null
+++ b/app/src/main/assets/design-icons/person.svg
@@ -0,0 +1,6 @@
+
diff --git a/app/src/main/assets/design-icons/range.svg b/app/src/main/assets/design-icons/range.svg
new file mode 100644
index 00000000..88c36115
--- /dev/null
+++ b/app/src/main/assets/design-icons/range.svg
@@ -0,0 +1,6 @@
+
diff --git a/app/src/main/assets/design-icons/shuffle.svg b/app/src/main/assets/design-icons/shuffle.svg
new file mode 100644
index 00000000..7f054978
--- /dev/null
+++ b/app/src/main/assets/design-icons/shuffle.svg
@@ -0,0 +1,3 @@
+
diff --git a/app/src/main/assets/design-icons/star.svg b/app/src/main/assets/design-icons/star.svg
new file mode 100644
index 00000000..b385fc1f
--- /dev/null
+++ b/app/src/main/assets/design-icons/star.svg
@@ -0,0 +1,3 @@
+
diff --git a/app/src/main/assets/design-icons/teleport.svg b/app/src/main/assets/design-icons/teleport.svg
new file mode 100644
index 00000000..4209d337
--- /dev/null
+++ b/app/src/main/assets/design-icons/teleport.svg
@@ -0,0 +1,5 @@
+
diff --git a/app/src/main/assets/design-icons/waveform.svg b/app/src/main/assets/design-icons/waveform.svg
new file mode 100644
index 00000000..558ccc9d
--- /dev/null
+++ b/app/src/main/assets/design-icons/waveform.svg
@@ -0,0 +1,3 @@
+
diff --git a/app/src/main/assets/design-icons/wifi-off.svg b/app/src/main/assets/design-icons/wifi-off.svg
new file mode 100644
index 00000000..5bb5a4d7
--- /dev/null
+++ b/app/src/main/assets/design-icons/wifi-off.svg
@@ -0,0 +1,8 @@
+
diff --git a/app/src/main/java/com/bitchat/android/ui/AboutSections.kt b/app/src/main/java/com/bitchat/android/ui/AboutSections.kt
index af0cc08b..e6da1eee 100644
--- a/app/src/main/java/com/bitchat/android/ui/AboutSections.kt
+++ b/app/src/main/java/com/bitchat/android/ui/AboutSections.kt
@@ -1,15 +1,6 @@
package com.bitchat.android.ui
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.AlternateEmail
-import androidx.compose.material.icons.filled.DeleteForever
-import androidx.compose.material.icons.filled.Person
-import androidx.compose.material.icons.filled.Terminal
-import androidx.compose.material.icons.filled.WifiOff
-import androidx.compose.material.icons.outlined.BookmarkBorder
-import androidx.compose.material.icons.outlined.Lock
-import androidx.compose.material.icons.outlined.Public
-import androidx.compose.material.icons.outlined.VisibilityOff
+import androidx.annotation.DrawableRes
import androidx.compose.animation.core.FastOutSlowInEasing
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.animateColorAsState
@@ -45,6 +36,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
@@ -122,7 +114,7 @@ internal fun AboutSectionLabel(
*/
@Composable
internal fun SheetIconSectionHeader(
- icon: ImageVector,
+ @DrawableRes iconRes: Int,
title: String,
subtitle: String? = null,
modifier: Modifier = Modifier
@@ -141,7 +133,7 @@ internal fun SheetIconSectionHeader(
horizontalArrangement = Arrangement.spacedBy(10.dp)
) {
Icon(
- imageVector = icon,
+ painter = painterResource(iconRes),
contentDescription = null,
tint = colorScheme.primary,
modifier = Modifier.size(22.dp)
@@ -332,7 +324,7 @@ private fun AboutTabLabel(
/** One line of the "How To Use" list: an icon plus a single instruction. */
@Composable
private fun AboutInstructionRow(
- icon: ImageVector,
+ @DrawableRes iconRes: Int,
text: String
) {
val colorScheme = MaterialTheme.colorScheme
@@ -346,7 +338,7 @@ private fun AboutInstructionRow(
verticalAlignment = Alignment.Top
) {
Icon(
- imageVector = icon,
+ painter = painterResource(iconRes),
contentDescription = null,
tint = colorScheme.primary,
modifier = Modifier
@@ -385,31 +377,31 @@ internal fun AboutHowToUseSection(modifier: Modifier = Modifier) {
)
AboutInstructionRow(
- icon = Icons.Filled.AlternateEmail,
+ iconRes = R.drawable.ic_spec_person,
text = stringResource(R.string.about_howto_nickname)
)
AboutInstructionRow(
- icon = Icons.Outlined.Public,
+ iconRes = R.drawable.ic_spec_globe,
text = stringResource(R.string.about_howto_channels)
)
AboutInstructionRow(
- icon = Icons.Filled.Person,
+ iconRes = R.drawable.ic_spec_people,
text = stringResource(R.string.about_howto_people)
)
AboutInstructionRow(
- icon = Icons.Outlined.BookmarkBorder,
+ iconRes = R.drawable.ic_spec_bookmark_outline,
text = stringResource(R.string.about_howto_bookmark)
)
AboutInstructionRow(
- icon = Icons.Filled.AlternateEmail,
+ iconRes = R.drawable.ic_spec_mention,
text = stringResource(R.string.about_howto_mention)
)
AboutInstructionRow(
- icon = Icons.Filled.Terminal,
+ iconRes = R.drawable.ic_spec_command,
text = stringResource(R.string.about_howto_commands)
)
AboutInstructionRow(
- icon = Icons.Filled.DeleteForever,
+ iconRes = R.drawable.ic_spec_waveform,
text = stringResource(R.string.about_howto_panic)
)
}
@@ -422,22 +414,22 @@ internal fun AboutHowToUseSection(modifier: Modifier = Modifier) {
internal fun AboutFeatureCard(modifier: Modifier = Modifier) {
val features = listOf(
Triple(
- Icons.Filled.WifiOff,
+ R.drawable.ic_spec_wifi_off,
R.string.about_offline_mesh_title,
R.string.about_offline_mesh_desc
),
Triple(
- Icons.Outlined.Lock,
+ R.drawable.ic_spec_lock,
R.string.about_e2e_title,
R.string.about_e2e_desc
),
Triple(
- Icons.Outlined.Public,
+ R.drawable.ic_spec_globe,
R.string.about_online_geohash_title,
R.string.about_online_geohash_desc
),
Triple(
- Icons.Outlined.VisibilityOff,
+ R.drawable.ic_spec_eye_off,
R.string.about_no_tracking_title,
R.string.about_no_tracking_desc
),
@@ -446,7 +438,7 @@ internal fun AboutFeatureCard(modifier: Modifier = Modifier) {
Column(modifier = modifier.fillMaxWidth()) {
features.forEach { (icon, titleRes, descRes) ->
AboutFeatureRow(
- icon = icon,
+ iconRes = icon,
title = stringResource(titleRes),
subtitle = stringResource(descRes)
)
@@ -456,7 +448,7 @@ internal fun AboutFeatureCard(modifier: Modifier = Modifier) {
@Composable
private fun AboutFeatureRow(
- icon: ImageVector,
+ @DrawableRes iconRes: Int,
title: String,
subtitle: String
) {
@@ -471,7 +463,7 @@ private fun AboutFeatureRow(
verticalAlignment = Alignment.Top
) {
Icon(
- imageVector = icon,
+ painter = painterResource(iconRes),
contentDescription = null,
tint = colorScheme.primary,
modifier = Modifier
@@ -617,4 +609,3 @@ internal fun SheetDestructiveButton(
}
}
}
-
diff --git a/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt b/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt
index 2811bff4..50cd5ab4 100644
--- a/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt
+++ b/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt
@@ -32,7 +32,9 @@ import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.graphics.lerp
import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.ImeAction
@@ -203,6 +205,64 @@ internal fun TorAwareHeaderIcon(
}
}
+/** Painter-resource counterpart used by the extracted Figma SVG family. */
+@Composable
+internal fun TorAwareHeaderIcon(
+ painter: Painter,
+ tint: Color,
+ isProgress: Boolean,
+ contentDescription: String?,
+ modifier: Modifier = Modifier,
+) {
+ val pulse = if (isProgress) {
+ val transition = rememberInfiniteTransition(label = "torPainterGlow")
+ transition.animateFloat(
+ initialValue = 0.42f,
+ targetValue = 1f,
+ animationSpec = infiniteRepeatable(
+ animation = tween(durationMillis = 1800, easing = FastOutSlowInEasing),
+ repeatMode = RepeatMode.Reverse
+ ),
+ label = "torPainterGlowPulse"
+ ).value
+ } else {
+ 1f
+ }
+
+ Box(
+ contentAlignment = Alignment.Center,
+ modifier = modifier.size(HeaderIconSize)
+ ) {
+ if (isProgress) {
+ val glowBrush = remember(tint) {
+ Brush.radialGradient(
+ colorStops = arrayOf(
+ 0.0f to tint.copy(alpha = 0.55f),
+ 0.45f to tint.copy(alpha = 0.22f),
+ 1.0f to Color.Transparent,
+ )
+ )
+ }
+ Box(
+ modifier = Modifier
+ .requiredSize(HeaderIconSize + 14.dp)
+ .graphicsLayer { alpha = pulse * 0.85f }
+ .background(glowBrush)
+ )
+ }
+ Icon(
+ painter = painter,
+ contentDescription = contentDescription,
+ modifier = Modifier
+ .size(HeaderIconSize)
+ .graphicsLayer {
+ alpha = if (isProgress) 0.55f + pulse * 0.45f else 1f
+ },
+ tint = tint
+ )
+ }
+}
+
@Composable
fun NoiseSessionIcon(
sessionState: String?,
@@ -342,7 +402,7 @@ fun PeerCounter(
Icon(
// A single silhouette rather than a crowd: at 22.dp a multi-person glyph collapses
// into an indistinct blob, and the number beside it already conveys "how many".
- imageVector = Icons.Filled.Person,
+ painter = painterResource(R.drawable.ic_spec_people),
contentDescription = when (selectedLocationChannel) {
is com.bitchat.android.geohash.ChannelID.Location -> stringResource(R.string.cd_geohash_participants)
else -> stringResource(R.string.cd_connected_peers)
@@ -628,7 +688,11 @@ private fun LocationChannelsButton(
} else {
TorConnectionVisual(tint = channelColor, isProgress = false)
}
- val badgeIcon = if (isLocation) Icons.Outlined.Public else Icons.Filled.Hub
+ val badgeIconRes = if (isLocation) {
+ R.drawable.ic_spec_globe
+ } else {
+ R.drawable.ic_spec_range
+ }
Row(
verticalAlignment = Alignment.CenterVertically,
@@ -645,7 +709,7 @@ private fun LocationChannelsButton(
.padding(start = 0.dp, end = 6.dp)
) {
TorAwareHeaderIcon(
- imageVector = badgeIcon,
+ painter = painterResource(badgeIconRes),
tint = torVisual.tint,
isProgress = torVisual.isProgress,
contentDescription = stringResource(R.string.cd_tor_status)
diff --git a/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt b/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt
index 8bbe89c4..0efab46f 100644
--- a/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt
+++ b/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt
@@ -24,6 +24,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.res.painterResource
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.bitchat.android.ui.theme.BitchatFontFamily
import com.bitchat.android.R
@@ -60,7 +61,7 @@ fun GeohashPeopleList(
Column(modifier = modifier) {
if (geohashPeople.isEmpty()) {
SheetIconSectionHeader(
- icon = Icons.Outlined.Person,
+ iconRes = R.drawable.ic_spec_people,
title = stringResource(R.string.section_people)
)
Surface(
@@ -163,7 +164,7 @@ fun GeohashPeopleList(
if (namedPeople.isNotEmpty()) {
SheetIconSectionHeader(
- icon = Icons.Outlined.Person,
+ iconRes = R.drawable.ic_spec_people,
title = stringResource(R.string.section_people)
)
PeopleCard(people = namedPeople, row = { personRow(it) })
@@ -171,7 +172,7 @@ fun GeohashPeopleList(
if (anonPeople.isNotEmpty()) {
SheetIconSectionHeader(
- icon = Icons.Outlined.HelpOutline,
+ iconRes = R.drawable.ic_spec_teleport,
title = stringResource(R.string.section_anon),
modifier = Modifier.padding(top = if (namedPeople.isNotEmpty()) 20.dp else 0.dp)
)
@@ -307,9 +308,9 @@ private fun GeohashPersonItem(
isMe -> "face.smiling" to palette.accentOrange
else -> "face.smiling" to palette.textSecondary
}
- val statusIcon = when (iconName) {
- "face.dashed" -> Icons.Outlined.Explore
- else -> Icons.Outlined.LocationOn
+ val statusIconRes = when (iconName) {
+ "face.dashed" -> R.drawable.ic_spec_teleport
+ else -> R.drawable.ic_spec_person
}
val (baseNameRaw, suffixRaw) = splitSuffix(person.displayName)
@@ -341,7 +342,7 @@ private fun GeohashPersonItem(
)
} else {
Icon(
- imageVector = statusIcon,
+ painter = painterResource(statusIconRes),
contentDescription = if (isTeleported || isMyTeleported) "Teleported user" else "User",
modifier = Modifier.size(22.dp),
tint = iconColor.copy(alpha = if (iconName == "face.dashed") 0.6f else 1.0f)
diff --git a/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt b/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt
index 4004c520..b6db766e 100644
--- a/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt
+++ b/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt
@@ -40,6 +40,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
@@ -192,7 +193,7 @@ fun LocationChannelsSheet(
item(key = "mesh_card") {
Column {
SheetIconSectionHeader(
- icon = Icons.Filled.Hub,
+ iconRes = R.drawable.ic_spec_range,
title = stringResource(R.string.mesh_title),
subtitle = stringResource(R.string.mesh_section_subtitle),
modifier = Modifier.padding(top = 8.dp)
@@ -230,7 +231,7 @@ fun LocationChannelsSheet(
item(key = "location_channels_header") {
SheetIconSectionHeader(
- icon = Icons.Outlined.Public,
+ iconRes = R.drawable.ic_spec_globe,
title = stringResource(R.string.location_channels_heading),
subtitle = stringResource(R.string.location_channels_desc),
modifier = Modifier.padding(top = 20.dp)
@@ -726,7 +727,13 @@ private fun ChannelBookmarkButton(
contentAlignment = Alignment.Center
) {
Icon(
- imageVector = if (bookmarked) Icons.Filled.Bookmark else Icons.Outlined.BookmarkBorder,
+ painter = painterResource(
+ if (bookmarked) {
+ R.drawable.ic_spec_bookmark_filled
+ } else {
+ R.drawable.ic_spec_bookmark_outline
+ }
+ ),
contentDescription = stringResource(
if (bookmarked) R.string.cd_remove_bookmark else R.string.cd_add_bookmark
),
diff --git a/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt b/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt
index 23157e5d..70f98d5a 100644
--- a/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt
+++ b/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt
@@ -1,7 +1,5 @@
package com.bitchat.android.ui
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.outlined.Description
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
@@ -17,6 +15,7 @@ import androidx.compose.ui.draw.scale
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.bitchat.android.R
import com.bitchat.android.geohash.ChannelID
@@ -66,7 +65,7 @@ fun LocationNotesButton(
contentAlignment = Alignment.Center
) {
TorAwareHeaderIcon(
- imageVector = Icons.Outlined.Description,
+ painter = painterResource(R.drawable.ic_spec_chat_bubbles),
tint = torVisual.tint,
isProgress = torVisual.isProgress,
contentDescription = contentDescription
diff --git a/app/src/main/java/com/bitchat/android/ui/MeshPeerListSheet.kt b/app/src/main/java/com/bitchat/android/ui/MeshPeerListSheet.kt
index 05af5f24..a09ff487 100644
--- a/app/src/main/java/com/bitchat/android/ui/MeshPeerListSheet.kt
+++ b/app/src/main/java/com/bitchat/android/ui/MeshPeerListSheet.kt
@@ -28,6 +28,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
@@ -122,7 +123,7 @@ fun MeshPeerListSheet(
item(key = "channels_section") {
Column {
SheetIconSectionHeader(
- icon = Icons.Filled.Tag,
+ iconRes = R.drawable.ic_spec_chat_bubbles,
title = stringResource(R.string.channels),
modifier = Modifier.padding(top = 8.dp)
)
@@ -321,7 +322,7 @@ fun PeopleSection(
Column(modifier = modifier) {
SheetIconSectionHeader(
- icon = Icons.Filled.Person,
+ iconRes = R.drawable.ic_spec_people,
title = stringResource(R.string.people_count_title, peopleCount)
)
@@ -616,7 +617,7 @@ private fun PeerItem(
)
} else if (showNostrGlobe) {
Icon(
- imageVector = Icons.Filled.Public,
+ painter = painterResource(R.drawable.ic_spec_globe),
contentDescription = stringResource(R.string.cd_reachable_via_nostr),
modifier = Modifier.size(PeerRowIconSize),
tint = palette.accentPurple
@@ -690,7 +691,7 @@ private fun PeerItem(
contentAlignment = Alignment.Center
) {
Icon(
- imageVector = if (isFavorite) Icons.Filled.Star else Icons.Outlined.Star,
+ painter = painterResource(R.drawable.ic_spec_star),
contentDescription = if (isFavorite) "Remove from favorites" else "Add to favorites",
modifier = Modifier.size(PeerRowIconSize),
tint = if (isFavorite) palette.accentOrange else palette.textTertiary
@@ -971,7 +972,7 @@ fun PrivateChatSheet(
when {
isNostrPeer || isNostrReachableFavorite -> {
Icon(
- imageVector = Icons.Filled.Public,
+ painter = painterResource(R.drawable.ic_spec_globe),
contentDescription = stringResource(R.string.cd_nostr_reachable),
modifier = Modifier.size(14.dp),
tint = Color(0xFF9C27B0)
@@ -1039,7 +1040,7 @@ fun PrivateChatSheet(
modifier = Modifier.size(28.dp)
) {
Icon(
- imageVector = if (isFavorite) Icons.Filled.Star else Icons.Outlined.Star,
+ painter = painterResource(R.drawable.ic_spec_star),
contentDescription = if (isFavorite) stringResource(R.string.cd_remove_favorite) else stringResource(R.string.cd_add_favorite),
modifier = Modifier.size(16.dp),
tint = if (isFavorite) Color(0xFFFFD700) else colorScheme.onSurface.copy(alpha = 0.6f)
diff --git a/app/src/main/res/drawable/ic_spec_bookmark_filled.xml b/app/src/main/res/drawable/ic_spec_bookmark_filled.xml
new file mode 100644
index 00000000..2e73b458
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_bookmark_filled.xml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_bookmark_outline.xml b/app/src/main/res/drawable/ic_spec_bookmark_outline.xml
new file mode 100644
index 00000000..988fe44c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_bookmark_outline.xml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_chat_bubbles.xml b/app/src/main/res/drawable/ic_spec_chat_bubbles.xml
new file mode 100644
index 00000000..76109058
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_chat_bubbles.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_command.xml b/app/src/main/res/drawable/ic_spec_command.xml
new file mode 100644
index 00000000..366173cd
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_command.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_eye_off.xml b/app/src/main/res/drawable/ic_spec_eye_off.xml
new file mode 100644
index 00000000..2e852cf4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_eye_off.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_globe.xml b/app/src/main/res/drawable/ic_spec_globe.xml
new file mode 100644
index 00000000..b56bb3a8
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_globe.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_lock.xml b/app/src/main/res/drawable/ic_spec_lock.xml
new file mode 100644
index 00000000..42713a11
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_lock.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_mention.xml b/app/src/main/res/drawable/ic_spec_mention.xml
new file mode 100644
index 00000000..a57bf9af
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_mention.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_panic.xml b/app/src/main/res/drawable/ic_spec_panic.xml
new file mode 100644
index 00000000..7c876da3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_panic.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_people.xml b/app/src/main/res/drawable/ic_spec_people.xml
new file mode 100644
index 00000000..3b2d46f5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_people.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_person.xml b/app/src/main/res/drawable/ic_spec_person.xml
new file mode 100644
index 00000000..33c42dcb
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_person.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_range.xml b/app/src/main/res/drawable/ic_spec_range.xml
new file mode 100644
index 00000000..5ba47d6c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_range.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_shuffle.xml b/app/src/main/res/drawable/ic_spec_shuffle.xml
new file mode 100644
index 00000000..9f431732
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_shuffle.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_star.xml b/app/src/main/res/drawable/ic_spec_star.xml
new file mode 100644
index 00000000..c48025ab
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_star.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_teleport.xml b/app/src/main/res/drawable/ic_spec_teleport.xml
new file mode 100644
index 00000000..6d215dea
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_teleport.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_waveform.xml b/app/src/main/res/drawable/ic_spec_waveform.xml
new file mode 100644
index 00000000..2e0070b6
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_waveform.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_spec_wifi_off.xml b/app/src/main/res/drawable/ic_spec_wifi_off.xml
new file mode 100644
index 00000000..4a716e57
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spec_wifi_off.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+