feat: Replace Material Icons with Tabler Icons across multiple screens
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<String>, 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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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, // 🚩
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user