diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 29ace29..e0586e1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -82,6 +82,9 @@ dependencies { // Icons extended implementation("androidx.compose.material:material-icons-extended:1.5.4") + + // Tabler Icons for Compose + implementation("br.com.devsrsouza.compose.icons:tabler-icons:1.1.0") // Lottie for animations implementation("com.airbnb.android:lottie-compose:6.1.0") diff --git a/app/src/main/java/com/rosetta/messenger/ui/auth/SetPasswordScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/auth/SetPasswordScreen.kt index 60e9063..52c2725 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/auth/SetPasswordScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/auth/SetPasswordScreen.kt @@ -6,9 +6,9 @@ import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -106,7 +106,7 @@ fun SetPasswordScreen( ) { IconButton(onClick = onBack, enabled = !isCreating) { Icon( - imageVector = Icons.Default.ArrowBack, + imageVector = TablerIcons.ArrowLeft, contentDescription = "Back", tint = textColor.copy(alpha = 0.6f) ) @@ -166,7 +166,7 @@ fun SetPasswordScreen( contentAlignment = Alignment.Center ) { Icon( - Icons.Default.Lock, + TablerIcons.Lock, contentDescription = null, tint = PrimaryBlue, modifier = Modifier.size(iconInnerSize) @@ -227,8 +227,8 @@ fun SetPasswordScreen( IconButton(onClick = { passwordVisible = !passwordVisible }) { Icon( imageVector = - if (passwordVisible) Icons.Default.VisibilityOff - else Icons.Default.Visibility, + if (passwordVisible) TablerIcons.EyeOff + else TablerIcons.Eye, contentDescription = if (passwordVisible) "Hide" else "Show" ) @@ -280,7 +280,7 @@ fun SetPasswordScreen( else -> Color(0xFF4CAF50) } Icon( - imageVector = Icons.Default.Shield, + imageVector = TablerIcons.Shield, contentDescription = null, tint = strengthColor, modifier = Modifier.size(16.dp) @@ -306,7 +306,7 @@ fun SetPasswordScreen( verticalAlignment = Alignment.Top ) { Icon( - imageVector = Icons.Default.Warning, + imageVector = TablerIcons.AlertTriangle, contentDescription = null, tint = Color(0xFFE53935), modifier = Modifier.size(16.dp) @@ -353,8 +353,8 @@ fun SetPasswordScreen( Icon( imageVector = if (confirmPasswordVisible) - Icons.Default.VisibilityOff - else Icons.Default.Visibility, + TablerIcons.EyeOff + else TablerIcons.Eye, contentDescription = if (confirmPasswordVisible) "Hide" else "Show" ) @@ -394,7 +394,7 @@ fun SetPasswordScreen( verticalAlignment = Alignment.CenterVertically ) { val matchIcon = - if (passwordsMatch) Icons.Default.Check else Icons.Default.Close + if (passwordsMatch) TablerIcons.Check else TablerIcons.X val matchColor = if (passwordsMatch) Color(0xFF4CAF50) else Color(0xFFE53935) val matchText = @@ -446,7 +446,7 @@ fun SetPasswordScreen( verticalAlignment = Alignment.Top ) { Icon( - imageVector = Icons.Default.Info, + imageVector = TablerIcons.InfoCircle, contentDescription = null, tint = PrimaryBlue, modifier = Modifier.size(20.dp) diff --git a/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt index e337f31..697635b 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt @@ -9,9 +9,10 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -430,7 +431,7 @@ fun UnlockScreen( // Dropdown arrow with rotation (only show if multiple accounts) if (accounts.size > 1) { Icon( - imageVector = Icons.Default.KeyboardArrowDown, + imageVector = TablerIcons.ChevronDown, contentDescription = null, tint = secondaryTextColor.copy(alpha = 0.6f), modifier = @@ -488,7 +489,7 @@ fun UnlockScreen( }, leadingIcon = { Icon( - Icons.Default.Search, + TablerIcons.Search, contentDescription = null, tint = secondaryTextColor.copy(alpha = 0.6f) ) @@ -606,7 +607,7 @@ fun UnlockScreen( if (isSelected) { Icon( - Icons.Default.Check, + TablerIcons.Check, contentDescription = null, tint = PrimaryBlue, modifier = Modifier.size(20.dp) @@ -657,8 +658,8 @@ fun UnlockScreen( IconButton(onClick = { passwordVisible = !passwordVisible }) { Icon( imageVector = - if (passwordVisible) Icons.Default.VisibilityOff - else Icons.Default.Visibility, + if (passwordVisible) TablerIcons.EyeOff + else TablerIcons.Eye, contentDescription = if (passwordVisible) "Hide" else "Show" ) } @@ -771,7 +772,7 @@ fun UnlockScreen( ) } else { Icon( - imageVector = Icons.Default.LockOpen, + imageVector = TablerIcons.LockOpen, contentDescription = null, modifier = Modifier.size(20.dp) ) @@ -791,7 +792,7 @@ fun UnlockScreen( ) { TextButton(onClick = onSwitchAccount) { Icon( - imageVector = Icons.Default.PersonAdd, + imageVector = TablerIcons.UserPlus, contentDescription = null, tint = PrimaryBlue, modifier = Modifier.size(20.dp) diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt index 400d56b..601dfe5 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt @@ -10,10 +10,9 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* -import androidx.compose.material.icons.outlined.* import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.runtime.* import androidx.compose.runtime.Immutable import androidx.compose.runtime.saveable.rememberSaveable @@ -493,7 +492,7 @@ fun ChatsListScreen( // 👤 Profile Section DrawerMenuItemEnhanced( - icon = Icons.Outlined.Person, + icon = TablerIcons.User, text = "My Profile", iconColor = menuIconColor, textColor = textColor, @@ -507,7 +506,7 @@ fun ChatsListScreen( // 📖 Saved Messages DrawerMenuItemEnhanced( - icon = Icons.Outlined.Bookmark, + icon = TablerIcons.Bookmark, text = "Saved Messages", iconColor = menuIconColor, textColor = textColor, @@ -528,7 +527,7 @@ fun ChatsListScreen( // ⚙️ Settings DrawerMenuItemEnhanced( - icon = Icons.Outlined.Settings, + icon = TablerIcons.Settings, text = "Settings", iconColor = menuIconColor, textColor = textColor, @@ -544,11 +543,9 @@ fun ChatsListScreen( DrawerMenuItemEnhanced( icon = if (isDarkTheme) - Icons.Outlined - .LightMode + TablerIcons.Sun else - Icons.Outlined - .DarkMode, + TablerIcons.Moon, text = if (isDarkTheme) "Light Mode" @@ -573,7 +570,7 @@ fun ChatsListScreen( // Logout DrawerMenuItemEnhanced( - icon = Icons.Outlined.Logout, + icon = TablerIcons.Logout, text = "Log Out", iconColor = Color(0xFFFF4444), textColor = Color(0xFFFF4444), @@ -654,8 +651,7 @@ fun ChatsListScreen( } ) { Icon( - Icons.Default - .ArrowBack, + TablerIcons.ArrowLeft, contentDescription = "Back", tint = @@ -675,8 +671,7 @@ fun ChatsListScreen( } ) { Icon( - Icons.Default - .Menu, + TablerIcons.Menu2, contentDescription = "Menu", tint = @@ -785,8 +780,7 @@ fun ChatsListScreen( .AUTHENTICATED ) { Icon( - Icons.Default - .Search, + TablerIcons.Search, contentDescription = "Search", tint = @@ -849,7 +843,7 @@ fun ChatsListScreen( shape = CircleShape ) { Icon( - Icons.Default.Edit, + TablerIcons.Edit, contentDescription = "New Chat" ) } @@ -1290,7 +1284,7 @@ fun ChatItem(chat: Chat, isDarkTheme: Boolean, onClick: () -> Unit) { Row(verticalAlignment = Alignment.CenterVertically) { // Read status Icon( - Icons.Default.DoneAll, + TablerIcons.Checks, contentDescription = null, tint = PrimaryBlue, modifier = Modifier.size(16.dp) @@ -1325,7 +1319,7 @@ fun ChatItem(chat: Chat, isDarkTheme: Boolean, onClick: () -> Unit) { // Pin icon if (chat.isPinned) { Icon( - Icons.Default.PushPin, + TablerIcons.Pin, contentDescription = "Pinned", tint = secondaryTextColor.copy( @@ -1527,8 +1521,8 @@ fun SwipeableDialogItem( Icon( imageVector = if (isBlocked) - Icons.Default.LockOpen - else Icons.Default.Block, + TablerIcons.LockOpen + else TablerIcons.Ban, contentDescription = if (isBlocked) "Unblock" else "Block", @@ -1566,7 +1560,7 @@ fun SwipeableDialogItem( verticalArrangement = Arrangement.Center ) { Icon( - imageVector = Icons.Default.Delete, + imageVector = TablerIcons.Trash, contentDescription = "Delete", tint = Color.White, modifier = Modifier.size(22.dp) @@ -1736,7 +1730,7 @@ fun DialogItemContent( contentAlignment = Alignment.Center ) { Icon( - Icons.Default.Bookmark, + TablerIcons.Bookmark, contentDescription = null, tint = Color.White, modifier = Modifier.size(24.dp) @@ -1799,7 +1793,7 @@ fun DialogItemContent( // галочки (прочитано) if (dialog.isSavedMessages) { Icon( - imageVector = Icons.Default.DoneAll, + imageVector = TablerIcons.Checks, contentDescription = null, tint = PrimaryBlue, modifier = Modifier.size(16.dp) @@ -1822,8 +1816,7 @@ fun DialogItemContent( // ERROR - показываем иконку ошибки Icon( imageVector = - Icons.Outlined - .ErrorOutline, + TablerIcons.AlertCircle, contentDescription = "Sending failed", tint = @@ -1843,8 +1836,7 @@ fun DialogItemContent( // галочки Icon( imageVector = - Icons.Default - .DoneAll, + TablerIcons.Checks, contentDescription = null, tint = PrimaryBlue, modifier = @@ -1860,7 +1852,7 @@ fun DialogItemContent( // одна серая галочка Icon( imageVector = - Icons.Default.Done, + TablerIcons.Check, contentDescription = null, tint = secondaryTextColor @@ -2025,7 +2017,7 @@ fun RequestsSection(count: Int, isDarkTheme: Boolean, onClick: () -> Unit) { ) Icon( - imageVector = Icons.Default.ChevronRight, + imageVector = TablerIcons.ChevronRight, contentDescription = "Open requests", tint = arrowColor.copy(alpha = 0.6f), modifier = Modifier.size(24.dp) @@ -2168,8 +2160,8 @@ fun FcmLogsSection(logs: List, isDarkTheme: Boolean, onClearLogs: () -> ) { Icon( imageVector = - if (expanded) Icons.Default.KeyboardArrowDown - else Icons.Default.KeyboardArrowRight, + if (expanded) TablerIcons.ChevronDown + else TablerIcons.ChevronRight, contentDescription = null, tint = accentColor, modifier = Modifier.size(24.dp) diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/SearchScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/SearchScreen.kt index cc2d3b6..3237dc6 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/SearchScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/SearchScreen.kt @@ -11,8 +11,10 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* +import compose.icons.TablerIcons +import compose.icons.tablericons.ArrowLeft +import compose.icons.tablericons.X +import compose.icons.tablericons.CircleCheck import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment @@ -139,7 +141,7 @@ fun SearchScreen( } ) { Icon( - Icons.Default.ArrowBack, + TablerIcons.ArrowLeft, contentDescription = "Back", tint = textColor.copy(alpha = 0.6f) ) @@ -199,7 +201,7 @@ fun SearchScreen( ) { IconButton(onClick = { searchViewModel.clearSearchQuery() }) { Icon( - Icons.Default.Clear, + TablerIcons.X, contentDescription = "Clear", tint = secondaryTextColor.copy(alpha = 0.6f) ) @@ -372,7 +374,7 @@ private fun RecentUserItem( if (user.verified != 0) { Spacer(modifier = Modifier.width(4.dp)) Icon( - Icons.Default.Verified, + TablerIcons.CircleCheck, contentDescription = "Verified", tint = PrimaryBlue, modifier = Modifier.size(16.dp) @@ -393,7 +395,7 @@ private fun RecentUserItem( // Remove button IconButton(onClick = onRemove, modifier = Modifier.size(40.dp)) { Icon( - Icons.Default.Close, + TablerIcons.X, contentDescription = "Remove", tint = secondaryTextColor.copy(alpha = 0.6f), modifier = Modifier.size(20.dp) diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/components/ChatDetailComponents.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/components/ChatDetailComponents.kt index 3a0c4da..2f731dd 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/components/ChatDetailComponents.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/components/ChatDetailComponents.kt @@ -13,9 +13,9 @@ import androidx.compose.foundation.interaction.collectIsPressedAsState import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -235,7 +235,7 @@ fun MessageBubble( contentAlignment = Alignment.Center ) { Icon( - Icons.Default.Reply, + TablerIcons.CornerUpLeft, contentDescription = "Reply", tint = if (swipeProgress >= 1f) Color.White else if (isDarkTheme) Color.White.copy(alpha = 0.7f) @@ -286,7 +286,7 @@ fun MessageBubble( contentAlignment = Alignment.Center ) { Icon( - Icons.Default.Check, + TablerIcons.Check, contentDescription = "Selected", tint = Color.White, modifier = Modifier.size(16.dp) @@ -492,11 +492,11 @@ fun AnimatedMessageStatus( Icon( imageVector = when (currentStatus) { - MessageStatus.SENDING -> Icons.Default.Schedule - MessageStatus.SENT -> Icons.Default.Done - MessageStatus.DELIVERED -> Icons.Default.Done - MessageStatus.READ -> Icons.Default.DoneAll - MessageStatus.ERROR -> Icons.Default.Error + MessageStatus.SENDING -> TablerIcons.Clock + MessageStatus.SENT -> TablerIcons.Check + MessageStatus.DELIVERED -> TablerIcons.Check + MessageStatus.READ -> TablerIcons.Checks + MessageStatus.ERROR -> TablerIcons.AlertCircle }, contentDescription = null, tint = animatedColor, @@ -523,7 +523,7 @@ fun AnimatedMessageStatus( }, leadingIcon = { Icon( - Icons.Default.Refresh, + TablerIcons.Refresh, contentDescription = null, modifier = Modifier.size(18.dp) ) @@ -537,7 +537,7 @@ fun AnimatedMessageStatus( }, leadingIcon = { Icon( - Icons.Default.Delete, + TablerIcons.Trash, contentDescription = null, tint = Color(0xFFE53935), modifier = Modifier.size(18.dp) @@ -695,7 +695,7 @@ fun KebabMenu( ) { if (!isSavedMessages) { KebabMenuItem( - icon = if (isBlocked) Icons.Default.CheckCircle else Icons.Default.Block, + icon = if (isBlocked) TablerIcons.CircleCheck else TablerIcons.Ban, text = if (isBlocked) "Unblock User" else "Block User", onClick = { if (isBlocked) onUnblockClick() else onBlockClick() }, tintColor = PrimaryBlue, @@ -712,7 +712,7 @@ fun KebabMenu( } KebabMenuItem( - icon = Icons.Default.Delete, + icon = TablerIcons.Trash, text = "Delete Chat", onClick = onDeleteClick, tintColor = Color(0xFFFF3B30), @@ -778,7 +778,7 @@ fun ProfilePhotoMenu( ) ) { ProfilePhotoMenuItem( - icon = Icons.Default.AddAPhoto, + icon = TablerIcons.CameraPlus, text = "Set Profile Photo", onClick = onSetPhotoClick, tintColor = if (isDarkTheme) Color.White else Color.Black, @@ -810,7 +810,7 @@ fun OtherProfileMenu( ) ) { ProfilePhotoMenuItem( - icon = if (isBlocked) Icons.Default.CheckCircle else Icons.Default.Block, + icon = if (isBlocked) TablerIcons.CircleCheck else TablerIcons.Ban, text = if (isBlocked) "Unblock User" else "Block User", onClick = onBlockClick, tintColor = PrimaryBlue, @@ -826,7 +826,7 @@ fun OtherProfileMenu( ) ProfilePhotoMenuItem( - icon = Icons.Default.Delete, + icon = TablerIcons.Trash, text = "Clear Chat History", onClick = onClearChatClick, tintColor = Color(0xFFFF3B30), diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt index 110deba..ff4e37f 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt @@ -8,9 +8,9 @@ import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.runtime.* import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment @@ -230,7 +230,7 @@ fun MessageInputBar( horizontalArrangement = Arrangement.Center ) { Icon( - Icons.Default.Block, + TablerIcons.Ban, contentDescription = null, tint = Color(0xFFFF6B6B), modifier = Modifier.size(20.dp) @@ -341,7 +341,7 @@ fun MessageInputBar( contentAlignment = Alignment.Center ) { Icon( - Icons.Default.Close, + TablerIcons.X, contentDescription = "Cancel", tint = if (isDarkTheme) Color.White.copy(alpha = 0.5f) else Color.Black.copy(alpha = 0.4f), @@ -364,7 +364,7 @@ fun MessageInputBar( modifier = Modifier.size(40.dp) ) { Icon( - Icons.Default.AttachFile, + TablerIcons.Paperclip, contentDescription = "Attach", tint = if (isDarkTheme) Color(0xFF8E8E93).copy(alpha = 0.6f) else Color(0xFF8E8E93).copy(alpha = 0.6f), @@ -407,8 +407,8 @@ fun MessageInputBar( modifier = Modifier.size(40.dp) ) { Icon( - if (showEmojiPicker) Icons.Default.Keyboard - else Icons.Default.SentimentSatisfiedAlt, + if (showEmojiPicker) TablerIcons.Keyboard + else TablerIcons.MoodSmile, contentDescription = "Emoji", tint = if (isDarkTheme) Color(0xFF8E8E93).copy(alpha = 0.6f) else Color(0xFF8E8E93).copy(alpha = 0.6f), diff --git a/app/src/main/java/com/rosetta/messenger/ui/components/AppleEmojiPicker.kt b/app/src/main/java/com/rosetta/messenger/ui/components/AppleEmojiPicker.kt index 61b3f0e..e4f4e4d 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/components/AppleEmojiPicker.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/components/AppleEmojiPicker.kt @@ -15,9 +15,9 @@ import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -57,7 +57,7 @@ data class EmojiCategory( // Порядок категорий согласно Unicode CLDR val EMOJI_CATEGORIES = listOf( // 😀 Smileys & Emotion (Unicode ordering) - EmojiCategory("Smileys", "Смайлы", Icons.Default.SentimentSatisfied, listOf( + EmojiCategory("Smileys", "Смайлы", TablerIcons.MoodSmile, listOf( // Face-Smiling 0x1F600 to 0x1F60F, // 😀-😏 // Face-Affection @@ -103,7 +103,7 @@ val EMOJI_CATEGORIES = listOf( 0x2639 to 0x2639 // ☹ )), // 👋 People & Body (Hands, Body parts, Persons) - EmojiCategory("People", "Люди", Icons.Default.Person, listOf( + EmojiCategory("People", "Люди", TablerIcons.User, listOf( // Hand-Fingers-Open 0x1F44B to 0x1F44D, // 👋-👍 0x1FAF0 to 0x1FAF8, // 🫰-🫸 @@ -137,7 +137,7 @@ val EMOJI_CATEGORIES = listOf( 0x1F9CE to 0x1F9CF // 🧎-🧏 )), // 🐱 Animals & Nature - EmojiCategory("Animals", "Животные", Icons.Default.Pets, listOf( + EmojiCategory("Animals", "Животные", TablerIcons.Leaf, listOf( // Animal-Mammal 0x1F435 to 0x1F43E, // 🐵-🐾 0x1F9A0 to 0x1F9AE, // 🦠-🦮 @@ -174,7 +174,7 @@ val EMOJI_CATEGORIES = listOf( 0x2618 to 0x2618 // ☘ )), // 🍎 Food & Drink - EmojiCategory("Food", "Еда", Icons.Default.Restaurant, listOf( + EmojiCategory("Food", "Еда", TablerIcons.ToolsKitchen, listOf( // Food-Fruit 0x1F347 to 0x1F353, // 🍇-🍓 0x1FAD0 to 0x1FAD4, // 🫐-🫔 @@ -195,7 +195,7 @@ val EMOJI_CATEGORIES = listOf( 0x1F9C3 to 0x1F9C9 // 🧃-🧉 )), // ✈️ Travel & Places - EmojiCategory("Travel", "Места", Icons.Default.Flight, listOf( + EmojiCategory("Travel", "Места", TablerIcons.Plane, listOf( // Place-Map 0x1F30D to 0x1F310, // 🌍-🌐 0x1F5FA to 0x1F5FA, // 🗺 @@ -221,7 +221,7 @@ val EMOJI_CATEGORIES = listOf( 0x2708 to 0x2708 // ✈ )), // ⚽ Activities - EmojiCategory("Activities", "Спорт", Icons.Default.SportsSoccer, listOf( + EmojiCategory("Activities", "Спорт", TablerIcons.BallFootball, listOf( // Event 0x1F380 to 0x1F393, // 🎀-🎓 0x1F9E7 to 0x1F9E7, // 🧧 @@ -247,7 +247,7 @@ val EMOJI_CATEGORIES = listOf( 0x1F9F6 to 0x1F9FF // 🧶-🧿 )), // 💡 Objects - EmojiCategory("Objects", "Объекты", Icons.Default.Lightbulb, listOf( + EmojiCategory("Objects", "Объекты", TablerIcons.Bulb, listOf( // Clothing 0x1F451 to 0x1F462, // 👑-👢 0x1F97B to 0x1F97F, // 🥻-🥿 @@ -302,7 +302,7 @@ val EMOJI_CATEGORIES = listOf( 0x1F4FF to 0x1F4FF // 📿 )), // ❤️ Symbols - EmojiCategory("Symbols", "Символы", Icons.Default.Favorite, listOf( + EmojiCategory("Symbols", "Символы", TablerIcons.Heart, listOf( // Heart 0x2764 to 0x2764, // ❤ 0x1F493 to 0x1F49F, // 💓-💟 @@ -343,7 +343,7 @@ val EMOJI_CATEGORIES = listOf( 0x2753 to 0x2757 // ❓-❗ )), // 🏳️ Flags - EmojiCategory("Flags", "Флаги", Icons.Default.Flag, listOf( + EmojiCategory("Flags", "Флаги", TablerIcons.Flag, listOf( // Flag 0x1F3C1 to 0x1F3C1, // 🏁 0x1F6A9 to 0x1F6A9, // 🚩 diff --git a/app/src/main/java/com/rosetta/messenger/ui/components/OptimizedEmojiPicker.kt b/app/src/main/java/com/rosetta/messenger/ui/components/OptimizedEmojiPicker.kt index 3e7d2e3..b63395b 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/components/OptimizedEmojiPicker.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/components/OptimizedEmojiPicker.kt @@ -15,9 +15,9 @@ import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier diff --git a/app/src/main/java/com/rosetta/messenger/ui/components/VerifiedBadge.kt b/app/src/main/java/com/rosetta/messenger/ui/components/VerifiedBadge.kt index f68153c..d3cbe55 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/components/VerifiedBadge.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/components/VerifiedBadge.kt @@ -4,8 +4,6 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Verified import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -13,6 +11,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp +import compose.icons.TablerIcons +import compose.icons.tablericons.CircleCheck /** * Значок верификации пользователя @@ -37,7 +37,7 @@ fun VerifiedBadge( } Icon( - Icons.Default.Verified, + TablerIcons.CircleCheck, contentDescription = "Verified", tint = badgeColor, modifier = modifier.size(size.dp) diff --git a/app/src/main/java/com/rosetta/messenger/ui/onboarding/OnboardingScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/onboarding/OnboardingScreen.kt index ee31acf..6628b1a 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/onboarding/OnboardingScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/onboarding/OnboardingScreen.kt @@ -14,10 +14,10 @@ import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.DarkMode -import androidx.compose.material.icons.filled.LightMode import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.Sun +import compose.icons.tablericons.Moon import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -379,8 +379,8 @@ fun ThemeToggleButton( ) { Icon( imageVector = - if (isDarkTheme) Icons.Default.LightMode - else Icons.Default.DarkMode, + if (isDarkTheme) TablerIcons.Sun + else TablerIcons.Moon, contentDescription = if (isDarkTheme) "Switch to Light Mode" else "Switch to Dark Mode", diff --git a/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileLogsScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileLogsScreen.kt index 6e2bc4c..2ed3b07 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileLogsScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileLogsScreen.kt @@ -6,10 +6,9 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Delete import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -64,7 +63,7 @@ fun ProfileLogsScreen( ) { IconButton(onClick = onBack) { Icon( - imageVector = Icons.Filled.ArrowBack, + imageVector = TablerIcons.ArrowLeft, contentDescription = "Back", tint = textColor ) @@ -80,7 +79,7 @@ fun ProfileLogsScreen( ) IconButton(onClick = onClearLogs) { Icon( - imageVector = Icons.Filled.Delete, + imageVector = TablerIcons.Trash, contentDescription = "Clear logs", tint = secondaryTextColor ) diff --git a/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileScreen.kt index 3102183..f767a66 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileScreen.kt @@ -19,10 +19,9 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* -import androidx.compose.material.icons.outlined.* import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -403,7 +402,7 @@ fun ProfileScreen( TelegramSectionTitle(title = "Settings", isDarkTheme = isDarkTheme) TelegramSettingsItem( - icon = Icons.Outlined.Palette, + icon = TablerIcons.Palette, title = "Theme", onClick = onNavigateToTheme, isDarkTheme = isDarkTheme, @@ -411,7 +410,7 @@ fun ProfileScreen( ) TelegramSettingsItem( - icon = Icons.Outlined.Lock, + icon = TablerIcons.Lock, title = "Safety", onClick = onNavigateToSafety, isDarkTheme = isDarkTheme, @@ -586,7 +585,7 @@ private fun CollapsingProfileHeader( modifier = Modifier.size(48.dp) ) { Icon( - imageVector = Icons.Filled.ArrowBack, + imageVector = TablerIcons.ArrowLeft, contentDescription = "Back", tint = Color.White, modifier = Modifier.size(24.dp) @@ -610,7 +609,7 @@ private fun CollapsingProfileHeader( modifier = Modifier.size(48.dp) ) { Icon( - imageVector = Icons.Default.MoreVert, + imageVector = TablerIcons.DotsVertical, contentDescription = "Profile menu", tint = Color.White, modifier = Modifier.size(24.dp) @@ -766,7 +765,7 @@ fun ProfileCard( .padding(4.dp) ) { Icon( - imageVector = Icons.Filled.ArrowBack, + imageVector = TablerIcons.ArrowLeft, contentDescription = "Back", tint = Color.White ) @@ -1058,7 +1057,7 @@ private fun TelegramBiometricItem( verticalAlignment = Alignment.CenterVertically ) { Icon( - imageVector = Icons.Outlined.Fingerprint, + imageVector = TablerIcons.Fingerprint, contentDescription = null, tint = iconColor, modifier = Modifier.size(24.dp) @@ -1101,7 +1100,7 @@ private fun TelegramLogoutItem( verticalAlignment = Alignment.CenterVertically ) { Icon( - imageVector = Icons.Outlined.Logout, + imageVector = TablerIcons.Logout, contentDescription = null, tint = redColor, modifier = Modifier.size(24.dp) @@ -1193,7 +1192,7 @@ fun ProfileNavigationItem( if (!hideChevron) { Icon( - imageVector = Icons.Default.ChevronRight, + imageVector = TablerIcons.ChevronRight, contentDescription = null, tint = iconTintColor.copy(alpha = 0.5f), modifier = Modifier.size(20.dp) diff --git a/app/src/main/java/com/rosetta/messenger/ui/settings/ThemeScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/settings/ThemeScreen.kt index fc7754b..140fc72 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/settings/ThemeScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/settings/ThemeScreen.kt @@ -11,13 +11,9 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Check -import androidx.compose.material.icons.filled.DarkMode -import androidx.compose.material.icons.filled.DoneAll -import androidx.compose.material.icons.filled.LightMode -import androidx.compose.material.icons.filled.Smartphone +import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment @@ -66,7 +62,7 @@ fun ThemeScreen( ) { IconButton(onClick = onBack) { Icon( - imageVector = Icons.Filled.ArrowBack, + imageVector = TablerIcons.ArrowLeft, contentDescription = "Back", tint = textColor ) @@ -103,7 +99,7 @@ fun ThemeScreen( Column { TelegramThemeOption( - icon = Icons.Filled.LightMode, + icon = TablerIcons.Sun, title = "Light", isSelected = themeMode == "light", onClick = { @@ -119,7 +115,7 @@ fun ThemeScreen( ) TelegramThemeOption( - icon = Icons.Filled.DarkMode, + icon = TablerIcons.Moon, title = "Dark", isSelected = themeMode == "dark", onClick = { @@ -135,7 +131,7 @@ fun ThemeScreen( ) TelegramThemeOption( - icon = Icons.Filled.Smartphone, + icon = TablerIcons.DeviceMobile, title = "System", isSelected = themeMode == "auto", onClick = { @@ -210,7 +206,7 @@ private fun TelegramThemeOption( // Radio button if (isSelected) { Icon( - imageVector = Icons.Filled.Check, + imageVector = TablerIcons.Check, contentDescription = null, tint = Color(0xFF007AFF), modifier = Modifier.size(20.dp) @@ -359,7 +355,7 @@ private fun MessageBubble( if (isMe) { // Read checkmarks (DoneAll icon like in real chat) Icon( - imageVector = Icons.Default.DoneAll, + imageVector = TablerIcons.Checks, contentDescription = null, tint = Color(0xFF4FC3F7), // Blue checkmarks for read messages modifier = Modifier.size(14.dp) diff --git a/app/src/main/java/com/rosetta/messenger/ui/settings/UpdatesScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/settings/UpdatesScreen.kt index c3fee5b..d38185b 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/settings/UpdatesScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/settings/UpdatesScreen.kt @@ -6,9 +6,9 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material3.* +import compose.icons.TablerIcons +import compose.icons.tablericons.* import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -48,7 +48,7 @@ fun UpdatesScreen( ) { IconButton(onClick = onBack) { Icon( - imageVector = Icons.Filled.ArrowBack, + imageVector = TablerIcons.ArrowLeft, contentDescription = "Back", tint = if (isDarkTheme) Color.White else Color.Black )