From e0decd0d7c090eed87fb652ff102aab192d2231a Mon Sep 17 00:00:00 2001 From: Infi Date: Wed, 23 Jul 2025 15:48:46 +0200 Subject: [PATCH 1/4] feat: update icon set Signed-off-by: Infi --- .../chat/revolt/activities/InviteActivity.kt | 7 +- .../activities/media/ImageViewActivity.kt | 8 +- .../java/chat/revolt/c2dm/HandlerService.kt | 4 +- .../revolt/composables/chat/InlineBadge.kt | 10 +- .../chat/revolt/composables/chat/Message.kt | 8 +- .../composables/chat/MessageAttachment.kt | 6 +- .../revolt/composables/chat/MessageField.kt | 10 +- .../revolt/composables/chat/UserBadgeList.kt | 4 +- .../revolt/composables/emoji/EmojiPicker.kt | 25 +- .../composables/generic/InlineMediaPicker.kt | 10 +- .../composables/generic/NonIdealState.kt | 5 +- .../revolt/composables/media/AudioPlayer.kt | 9 +- .../composables/media/MediaPickerGateway.kt | 6 +- .../screens/chat/AttachmentManager.kt | 2 +- .../composables/screens/chat/ChannelHeader.kt | 6 +- .../composables/screens/chat/ChannelIcon.kt | 17 +- .../composables/screens/chat/ReplyManager.kt | 3 +- .../screens/chat/atoms/RegularMessage.kt | 2 +- .../screens/chat/drawer/ChannelSideDrawer.kt | 16 +- .../screens/settings/UserButtons.kt | 8 +- .../settings/sessions/SessionItem.kt | 4 +- .../composables/sheets/SheetSelection.kt | 6 +- .../chat/revolt/screens/about/AboutScreen.kt | 2 +- .../revolt/screens/about/AttributionScreen.kt | 3 +- .../revolt/screens/chat/ChatRouterScreen.kt | 2 +- .../dialogs/safety/ReportMessageDialog.kt | 8 +- .../chat/dialogs/safety/ReportServerDialog.kt | 5 +- .../chat/dialogs/safety/ReportUserDialog.kt | 8 +- .../screens/chat/views/FriendsScreen.kt | 12 +- .../chat/views/NoCurrentChannelScreen.kt | 3 +- .../screens/chat/views/OverviewScreen.kt | 16 +- .../chat/views/channel/ChannelScreen.kt | 21 +- .../views/channel/ChannelScreenAgeGate.kt | 2 +- .../screens/create/CreateGroupScreen.kt | 11 +- .../revolt/screens/labs/LabsHomeScreen.kt | 22 +- .../revolt/screens/labs/LabsRootScreen.kt | 4 - .../labs/ui/mockups/CallScreenMockup.kt | 261 ------------------ .../chat/revolt/screens/login/LoginScreen.kt | 4 +- .../screens/main/ConversationsScreen.kt | 13 +- .../chat/revolt/screens/main/MainScreen.kt | 14 +- .../revolt/screens/services/DiscoverScreen.kt | 3 +- .../settings/AppearanceSettingsScreen.kt | 11 +- .../screens/settings/ChangelogsScreen.kt | 5 +- .../screens/settings/ChatSettingsScreen.kt | 3 +- .../screens/settings/DebugSettingsScreen.kt | 3 +- .../settings/LanguagePickerSettingsScreen.kt | 3 +- .../screens/settings/ProfileSettngsScreen.kt | 6 +- .../screens/settings/SessionSettngsScreen.kt | 3 +- .../revolt/screens/settings/SettingsScreen.kt | 123 +++++---- .../settings/channel/ChannelSettingsHome.kt | 31 ++- .../channel/ChannelSettingsOverview.kt | 5 +- .../channel/ChannelSettingsPermissions.kt | 3 +- .../chat/revolt/settings/dsl/SettingsPage.kt | 3 +- .../java/chat/revolt/sheets/AddServerSheet.kt | 7 +- .../chat/revolt/sheets/ChannelContextSheet.kt | 4 +- .../chat/revolt/sheets/ChannelInfoSheet.kt | 16 +- .../java/chat/revolt/sheets/EmoteInfoSheet.kt | 2 +- .../java/chat/revolt/sheets/LinkInfoSheet.kt | 6 +- .../chat/revolt/sheets/MemberContextSheet.kt | 6 +- .../chat/revolt/sheets/MessageContextSheet.kt | 25 +- .../chat/revolt/sheets/ServerContextSheet.kt | 8 +- .../java/chat/revolt/sheets/StatusSheet.kt | 5 +- .../java/chat/revolt/sheets/UserCardSheet.kt | 4 +- .../java/chat/revolt/sheets/UserInfoSheet.kt | 8 +- .../res/drawable/icn_account_box_24dp.xml | 10 + .../res/drawable/icn_account_circle_24dp.xml | 10 + .../res/drawable/icn_account_tree_24dp.xml | 10 + app/src/main/res/drawable/icn_add_24dp.xml | 10 + .../res/drawable/icn_add_reaction_24dp.xml | 10 + .../main/res/drawable/icn_arrow_back_24dp.xml | 11 + .../res/drawable/icn_arrow_forward_24dp.xml | 11 + .../res/drawable/icn_attach_file_24dp.xml | 10 + .../res/drawable/icn_attach_file_off_24dp.xml | 10 + app/src/main/res/drawable/icn_badge_24dp.xml | 10 + app/src/main/res/drawable/icn_block_24dp.xml | 11 + .../res/drawable/icn_brand_family_24dp.xml | 10 + .../drawable/icn_brightness_alert_24dp.xml | 10 + .../res/drawable/icn_bus_railway_24dp.xml | 10 + app/src/main/res/drawable/icn_camera_24dp.xml | 10 + app/src/main/res/drawable/icn_chat_24dp.xml | 11 + app/src/main/res/drawable/icn_check_24dp.xml | 10 + app/src/main/res/drawable/icn_close_24dp.xml | 10 + app/src/main/res/drawable/icn_cloud_24dp.xml | 10 + .../res/drawable/icn_content_copy_24dp.xml | 11 + app/src/main/res/drawable/icn_delete_24dp.xml | 10 + .../main/res/drawable/icn_devices_24dp.xml | 10 + .../main/res/drawable/icn_download_24dp.xml | 10 + app/src/main/res/drawable/icn_eda_24dp.xml | 10 + app/src/main/res/drawable/icn_edit_24dp.xml | 10 + .../res/drawable/icn_emoji_nature_24dp.xml | 10 + .../res/drawable/icn_emoji_objects_24dp.xml | 10 + .../res/drawable/icn_emoji_people_24dp.xml | 10 + .../res/drawable/icn_emoji_symbols_24dp.xml | 10 + app/src/main/res/drawable/icn_error_24dp.xml | 10 + .../main/res/drawable/icn_explore_24dp.xml | 10 + .../main/res/drawable/icn_feedback_24dp.xml | 10 + .../res/drawable/icn_file_export_24dp.xml | 10 + .../main/res/drawable/icn_file_open_24dp.xml | 10 + .../res/drawable/icn_file_present_24dp.xml | 10 + app/src/main/res/drawable/icn_flag_24dp.xml | 11 + app/src/main/res/drawable/icn_forum_24dp.xml | 10 + .../res/drawable/icn_forum_24dp__fill.xml | 10 + app/src/main/res/drawable/icn_group_24dp.xml | 10 + .../main/res/drawable/icn_hardware_24dp.xml | 10 + app/src/main/res/drawable/icn_home_24dp.xml | 10 + .../main/res/drawable/icn_id_card_24dp.xml | 10 + .../res/drawable/icn_identifier_copy_24dp.xml | 15 + .../main/res/drawable/icn_ios_share_24dp.xml | 10 + app/src/main/res/drawable/icn_keep_24dp.xml | 10 + .../icn_keyboard_arrow_right_24dp.xml | 11 + .../main/res/drawable/icn_language_24dp.xml | 10 + app/src/main/res/drawable/icn_link_24dp.xml | 10 + app/src/main/res/drawable/icn_list_24dp.xml | 11 + app/src/main/res/drawable/icn_lock_24dp.xml | 10 + app/src/main/res/drawable/icn_logout_24dp.xml | 11 + .../res/drawable/icn_mark_chat_read_24dp.xml | 10 + app/src/main/res/drawable/icn_menu_24dp.xml | 10 + app/src/main/res/drawable/icn_mood_24dp.xml | 10 + .../main/res/drawable/icn_more_vert_24dp.xml | 10 + .../main/res/drawable/icn_note_stack_24dp.xml | 10 + .../icn_notification_settings_24dp.xml | 10 + .../res/drawable/icn_open_in_browser_24dp.xml | 10 + .../main/res/drawable/icn_page_info_24dp.xml | 10 + .../main/res/drawable/icn_palette_24dp.xml | 10 + app/src/main/res/drawable/icn_pause_24dp.xml | 10 + .../main/res/drawable/icn_person_off_24dp.xml | 10 + .../res/drawable/icn_photo_library_24dp.xml | 10 + .../main/res/drawable/icn_play_arrow_24dp.xml | 10 + .../res/drawable/icn_qr_code_scanner_24dp.xml | 10 + app/src/main/res/drawable/icn_reply_24dp.xml | 11 + app/src/main/res/drawable/icn_report_24dp.xml | 10 + app/src/main/res/drawable/icn_search_24dp.xml | 10 + app/src/main/res/drawable/icn_send_24dp.xml | 11 + .../main/res/drawable/icn_settings_24dp.xml | 10 + .../res/drawable/icn_sign_language_24dp.xml | 10 + .../main/res/drawable/icn_smart_toy_24dp.xml | 10 + app/src/main/res/drawable/icn_south_24dp.xml | 10 + .../main/res/drawable/icn_sports_bar_24dp.xml | 10 + .../main/res/drawable/icn_star_shine_24dp.xml | 10 + .../drawable/icn_star_shine_24dp__fill.xml | 10 + app/src/main/res/drawable/icn_tag_24dp.xml | 10 + .../main/res/drawable/icn_visibility_24dp.xml | 10 + .../res/drawable/icn_visibility_off_24dp.xml | 10 + .../main/res/drawable/icn_volume_up_24dp.xml | 11 + .../main/res/drawable/icn_wand_shine_24dp.xml | 10 + app/src/main/res/menu/menu_videoplayer.xml | 4 +- 146 files changed, 1120 insertions(+), 591 deletions(-) delete mode 100644 app/src/main/java/chat/revolt/screens/labs/ui/mockups/CallScreenMockup.kt create mode 100644 app/src/main/res/drawable/icn_account_box_24dp.xml create mode 100644 app/src/main/res/drawable/icn_account_circle_24dp.xml create mode 100644 app/src/main/res/drawable/icn_account_tree_24dp.xml create mode 100644 app/src/main/res/drawable/icn_add_24dp.xml create mode 100644 app/src/main/res/drawable/icn_add_reaction_24dp.xml create mode 100644 app/src/main/res/drawable/icn_arrow_back_24dp.xml create mode 100644 app/src/main/res/drawable/icn_arrow_forward_24dp.xml create mode 100644 app/src/main/res/drawable/icn_attach_file_24dp.xml create mode 100644 app/src/main/res/drawable/icn_attach_file_off_24dp.xml create mode 100644 app/src/main/res/drawable/icn_badge_24dp.xml create mode 100644 app/src/main/res/drawable/icn_block_24dp.xml create mode 100644 app/src/main/res/drawable/icn_brand_family_24dp.xml create mode 100644 app/src/main/res/drawable/icn_brightness_alert_24dp.xml create mode 100644 app/src/main/res/drawable/icn_bus_railway_24dp.xml create mode 100644 app/src/main/res/drawable/icn_camera_24dp.xml create mode 100644 app/src/main/res/drawable/icn_chat_24dp.xml create mode 100644 app/src/main/res/drawable/icn_check_24dp.xml create mode 100644 app/src/main/res/drawable/icn_close_24dp.xml create mode 100644 app/src/main/res/drawable/icn_cloud_24dp.xml create mode 100644 app/src/main/res/drawable/icn_content_copy_24dp.xml create mode 100644 app/src/main/res/drawable/icn_delete_24dp.xml create mode 100644 app/src/main/res/drawable/icn_devices_24dp.xml create mode 100644 app/src/main/res/drawable/icn_download_24dp.xml create mode 100644 app/src/main/res/drawable/icn_eda_24dp.xml create mode 100644 app/src/main/res/drawable/icn_edit_24dp.xml create mode 100644 app/src/main/res/drawable/icn_emoji_nature_24dp.xml create mode 100644 app/src/main/res/drawable/icn_emoji_objects_24dp.xml create mode 100644 app/src/main/res/drawable/icn_emoji_people_24dp.xml create mode 100644 app/src/main/res/drawable/icn_emoji_symbols_24dp.xml create mode 100644 app/src/main/res/drawable/icn_error_24dp.xml create mode 100644 app/src/main/res/drawable/icn_explore_24dp.xml create mode 100644 app/src/main/res/drawable/icn_feedback_24dp.xml create mode 100644 app/src/main/res/drawable/icn_file_export_24dp.xml create mode 100644 app/src/main/res/drawable/icn_file_open_24dp.xml create mode 100644 app/src/main/res/drawable/icn_file_present_24dp.xml create mode 100644 app/src/main/res/drawable/icn_flag_24dp.xml create mode 100644 app/src/main/res/drawable/icn_forum_24dp.xml create mode 100644 app/src/main/res/drawable/icn_forum_24dp__fill.xml create mode 100644 app/src/main/res/drawable/icn_group_24dp.xml create mode 100644 app/src/main/res/drawable/icn_hardware_24dp.xml create mode 100644 app/src/main/res/drawable/icn_home_24dp.xml create mode 100644 app/src/main/res/drawable/icn_id_card_24dp.xml create mode 100644 app/src/main/res/drawable/icn_identifier_copy_24dp.xml create mode 100644 app/src/main/res/drawable/icn_ios_share_24dp.xml create mode 100644 app/src/main/res/drawable/icn_keep_24dp.xml create mode 100644 app/src/main/res/drawable/icn_keyboard_arrow_right_24dp.xml create mode 100644 app/src/main/res/drawable/icn_language_24dp.xml create mode 100644 app/src/main/res/drawable/icn_link_24dp.xml create mode 100644 app/src/main/res/drawable/icn_list_24dp.xml create mode 100644 app/src/main/res/drawable/icn_lock_24dp.xml create mode 100644 app/src/main/res/drawable/icn_logout_24dp.xml create mode 100644 app/src/main/res/drawable/icn_mark_chat_read_24dp.xml create mode 100644 app/src/main/res/drawable/icn_menu_24dp.xml create mode 100644 app/src/main/res/drawable/icn_mood_24dp.xml create mode 100644 app/src/main/res/drawable/icn_more_vert_24dp.xml create mode 100644 app/src/main/res/drawable/icn_note_stack_24dp.xml create mode 100644 app/src/main/res/drawable/icn_notification_settings_24dp.xml create mode 100644 app/src/main/res/drawable/icn_open_in_browser_24dp.xml create mode 100644 app/src/main/res/drawable/icn_page_info_24dp.xml create mode 100644 app/src/main/res/drawable/icn_palette_24dp.xml create mode 100644 app/src/main/res/drawable/icn_pause_24dp.xml create mode 100644 app/src/main/res/drawable/icn_person_off_24dp.xml create mode 100644 app/src/main/res/drawable/icn_photo_library_24dp.xml create mode 100644 app/src/main/res/drawable/icn_play_arrow_24dp.xml create mode 100644 app/src/main/res/drawable/icn_qr_code_scanner_24dp.xml create mode 100644 app/src/main/res/drawable/icn_reply_24dp.xml create mode 100644 app/src/main/res/drawable/icn_report_24dp.xml create mode 100644 app/src/main/res/drawable/icn_search_24dp.xml create mode 100644 app/src/main/res/drawable/icn_send_24dp.xml create mode 100644 app/src/main/res/drawable/icn_settings_24dp.xml create mode 100644 app/src/main/res/drawable/icn_sign_language_24dp.xml create mode 100644 app/src/main/res/drawable/icn_smart_toy_24dp.xml create mode 100644 app/src/main/res/drawable/icn_south_24dp.xml create mode 100644 app/src/main/res/drawable/icn_sports_bar_24dp.xml create mode 100644 app/src/main/res/drawable/icn_star_shine_24dp.xml create mode 100644 app/src/main/res/drawable/icn_star_shine_24dp__fill.xml create mode 100644 app/src/main/res/drawable/icn_tag_24dp.xml create mode 100644 app/src/main/res/drawable/icn_visibility_24dp.xml create mode 100644 app/src/main/res/drawable/icn_visibility_off_24dp.xml create mode 100644 app/src/main/res/drawable/icn_volume_up_24dp.xml create mode 100644 app/src/main/res/drawable/icn_wand_shine_24dp.xml diff --git a/app/src/main/java/chat/revolt/activities/InviteActivity.kt b/app/src/main/java/chat/revolt/activities/InviteActivity.kt index 0615a3a2..a0ebfb26 100644 --- a/app/src/main/java/chat/revolt/activities/InviteActivity.kt +++ b/app/src/main/java/chat/revolt/activities/InviteActivity.kt @@ -16,8 +16,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator @@ -38,6 +36,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -280,7 +279,7 @@ fun InvalidInviteError(error: RevoltError? = null, onDismissRequest: () -> Unit) onDismissRequest = onDismissRequest, icon = { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_error_24dp), contentDescription = null, // decorative tint = MaterialTheme.colorScheme.primary ) @@ -326,7 +325,7 @@ fun NoInviteSpecifiedError(onDismissRequest: () -> Unit) { onDismissRequest = onDismissRequest, icon = { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_error_24dp), contentDescription = null, // decorative tint = MaterialTheme.colorScheme.primary ) diff --git a/app/src/main/java/chat/revolt/activities/media/ImageViewActivity.kt b/app/src/main/java/chat/revolt/activities/media/ImageViewActivity.kt index 1657ae4a..2ca46ff0 100644 --- a/app/src/main/java/chat/revolt/activities/media/ImageViewActivity.kt +++ b/app/src/main/java/chat/revolt/activities/media/ImageViewActivity.kt @@ -14,8 +14,6 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api @@ -206,7 +204,7 @@ fun ImageViewScreen(resource: AutumnResource, onClose: () -> Unit = {}) { onClose() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(id = R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } @@ -216,7 +214,7 @@ fun ImageViewScreen(resource: AutumnResource, onClose: () -> Unit = {}) { shareSubmenuIsOpen.value = true }) { Icon( - painter = painterResource(id = R.drawable.ic_share_24dp), + painter = painterResource(id = R.drawable.icn_ios_share_24dp), contentDescription = stringResource(id = R.string.share) ) } @@ -255,7 +253,7 @@ fun ImageViewScreen(resource: AutumnResource, onClose: () -> Unit = {}) { saveToGallery() }) { Icon( - painter = painterResource(id = R.drawable.ic_download_24dp), + painter = painterResource(id = R.drawable.icn_download_24dp), contentDescription = stringResource( id = R.string.media_viewer_save ) diff --git a/app/src/main/java/chat/revolt/c2dm/HandlerService.kt b/app/src/main/java/chat/revolt/c2dm/HandlerService.kt index 4971eb51..a08561fe 100644 --- a/app/src/main/java/chat/revolt/c2dm/HandlerService.kt +++ b/app/src/main/java/chat/revolt/c2dm/HandlerService.kt @@ -134,7 +134,7 @@ class HandlerService : FirebaseMessagingService() { val action: NotificationCompat.Action = NotificationCompat.Action.Builder( - R.drawable.ic_reply_24dp, + R.drawable.icn_reply_24dp, getString(R.string.message_context_sheet_actions_reply), PendingIntent.getActivity( this, @@ -147,7 +147,7 @@ class HandlerService : FirebaseMessagingService() { .build() val builder = NotificationCompat.Builder(this, CHANNEL_ID_GROUP_SOCIAL_FRIENDREQUESTS) - .setSmallIcon(R.drawable.ic_message_text_24dp) + .setSmallIcon(R.drawable.icn_chat_24dp) .setContentTitle(user.displayName ?: user.username) .setContentText(message.content) .setCategory(NotificationCompat.CATEGORY_MESSAGE) diff --git a/app/src/main/java/chat/revolt/composables/chat/InlineBadge.kt b/app/src/main/java/chat/revolt/composables/chat/InlineBadge.kt index 9c92ca36..a5f9bfc5 100644 --- a/app/src/main/java/chat/revolt/composables/chat/InlineBadge.kt +++ b/app/src/main/java/chat/revolt/composables/chat/InlineBadge.kt @@ -27,35 +27,35 @@ fun InlineBadge( ) { when (badge) { InlineBadge.Bot -> Icon( - painter = painterResource(id = R.drawable.ic_robot_24dp), + painter = painterResource(id = R.drawable.icn_smart_toy_24dp), contentDescription = stringResource(id = R.string.badge_bot_alt), tint = colour, modifier = modifier ) InlineBadge.Bridge -> Icon( - painter = painterResource(id = R.drawable.ic_link_variant_24dp), + painter = painterResource(id = R.drawable.icn_link_24dp), contentDescription = stringResource(id = R.string.badge_masquerade_alt), tint = colour, modifier = modifier ) InlineBadge.PlatformModeration -> Icon( - painter = painterResource(id = R.drawable.ic_alert_decagram_24dp), + painter = painterResource(id = R.drawable.icn_brightness_alert_24dp), contentDescription = stringResource(id = R.string.badge_bot_alt), tint = colour, modifier = modifier ) InlineBadge.TeamMember -> Icon( - painter = painterResource(id = R.drawable.ic_hammer_wrench_24dp), + painter = painterResource(id = R.drawable.icn_hardware_24dp), contentDescription = stringResource(id = R.string.badge_team_member_alt), tint = colour, modifier = modifier ) InlineBadge.Webhook -> Icon( - painter = painterResource(id = R.drawable.ic_cloud_24dp), + painter = painterResource(id = R.drawable.icn_cloud_24dp), contentDescription = stringResource(id = R.string.badge_webhook_alt), tint = colour, modifier = modifier.padding(start = 4.dp) diff --git a/app/src/main/java/chat/revolt/composables/chat/Message.kt b/app/src/main/java/chat/revolt/composables/chat/Message.kt index 7869f12c..4e68651d 100644 --- a/app/src/main/java/chat/revolt/composables/chat/Message.kt +++ b/app/src/main/java/chat/revolt/composables/chat/Message.kt @@ -28,8 +28,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Edit import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor @@ -267,7 +265,7 @@ fun Message( modifier = Modifier.padding(vertical = 8.dp) ) { Icon( - painter = painterResource(R.drawable.ic_close_octagon_24dp), + painter = painterResource(R.drawable.icn_block_24dp), contentDescription = null ) @@ -415,7 +413,7 @@ fun Message( if (message.edited != null) { Icon( - imageVector = Icons.Default.Edit, + painter = painterResource(R.drawable.icn_edit_24dp), contentDescription = stringResource(id = R.string.edited), tint = MaterialTheme.colorScheme.onBackground.copy( alpha = 0.5f @@ -619,7 +617,7 @@ fun Message( .padding(8.dp) ) { Icon( - painter = painterResource(R.drawable.ic_hamburger_plus_24dp), + painter = painterResource(R.drawable.icn_add_reaction_24dp), contentDescription = stringResource(R.string.message_context_sheet_actions_react), modifier = Modifier.size(16.dp) ) diff --git a/app/src/main/java/chat/revolt/composables/chat/MessageAttachment.kt b/app/src/main/java/chat/revolt/composables/chat/MessageAttachment.kt index 6a489bb0..a10fa65c 100644 --- a/app/src/main/java/chat/revolt/composables/chat/MessageAttachment.kt +++ b/app/src/main/java/chat/revolt/composables/chat/MessageAttachment.kt @@ -13,8 +13,6 @@ import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme @@ -58,7 +56,7 @@ fun FileAttachment(attachment: AutumnResource) { verticalAlignment = Alignment.CenterVertically ) { Icon( - painter = painterResource(id = R.drawable.ic_file_24dp), + painter = painterResource(id = R.drawable.icn_file_present_24dp), contentDescription = null ) @@ -140,7 +138,7 @@ fun VideoPlayButton() { ) Icon( - imageVector = Icons.Default.PlayArrow, + painter = painterResource(R.drawable.icn_play_arrow_24dp), contentDescription = stringResource(id = R.string.media_viewer_play), modifier = Modifier .width(32.dp) diff --git a/app/src/main/java/chat/revolt/composables/chat/MessageField.kt b/app/src/main/java/chat/revolt/composables/chat/MessageField.kt index 2c44a11f..1036ff6f 100644 --- a/app/src/main/java/chat/revolt/composables/chat/MessageField.kt +++ b/app/src/main/java/chat/revolt/composables/chat/MessageField.kt @@ -35,9 +35,7 @@ import androidx.compose.foundation.text.input.rememberTextFieldState import androidx.compose.foundation.text.input.setTextAndPlaceCursorAtEnd import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.Send import androidx.compose.material.icons.filled.Add -import androidx.compose.material.icons.filled.Edit import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalTextStyle @@ -584,7 +582,7 @@ fun MessageField( ) Icon( - painter = painterResource(R.drawable.ic_emoticon_24dp), + painter = painterResource(R.drawable.icn_mood_24dp), tint = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f), contentDescription = stringResource(id = R.string.pick_emoji_alt), modifier = Modifier @@ -622,9 +620,9 @@ fun MessageField( ) + fadeOut(animationSpec = RevoltTweenFloat) ) { Icon( - when { - editMode -> Icons.Default.Edit - else -> Icons.AutoMirrored.Default.Send + painter = when { + editMode -> painterResource(R.drawable.icn_edit_24dp) + else -> painterResource(R.drawable.icn_send_24dp) }, tint = MaterialTheme.colorScheme.primary, contentDescription = stringResource(id = R.string.send_alt), diff --git a/app/src/main/java/chat/revolt/composables/chat/UserBadgeList.kt b/app/src/main/java/chat/revolt/composables/chat/UserBadgeList.kt index 0b12f0ef..b191652d 100644 --- a/app/src/main/java/chat/revolt/composables/chat/UserBadgeList.kt +++ b/app/src/main/java/chat/revolt/composables/chat/UserBadgeList.kt @@ -92,7 +92,7 @@ fun BadgeListEntry(badge: UserBadges) { UserBadges.ActiveSupporter.value -> { BadgeListEntryTemplate( label = stringResource(R.string.user_badge_active_supporter), - icon = painterResource(R.drawable.ic_human_greeting_variant_24dp) + icon = painterResource(R.drawable.icn_emoji_people_24dp) ) } @@ -157,7 +157,7 @@ fun UserBadgeRow(badges: Long) { UserBadges.ResponsibleDisclosure -> painterResource(R.drawable.user_badge_disclosure) UserBadges.Founder -> painterResource(R.drawable.user_badge_founder) UserBadges.PlatformModeration -> painterResource(R.drawable.user_badge_moderation) - UserBadges.ActiveSupporter -> painterResource(R.drawable.ic_human_greeting_variant_24dp) + UserBadges.ActiveSupporter -> painterResource(R.drawable.icn_emoji_people_24dp) UserBadges.Paw -> painterResource(R.drawable.user_badge_paw) UserBadges.EarlyAdopter -> painterResource(R.drawable.user_badge_early_adopter) UserBadges.ReservedRelevantJokeBadge1 -> painterResource(R.drawable.user_badge_reserved_relevant_one) diff --git a/app/src/main/java/chat/revolt/composables/emoji/EmojiPicker.kt b/app/src/main/java/chat/revolt/composables/emoji/EmojiPicker.kt index 8dd565d5..81cb153f 100644 --- a/app/src/main/java/chat/revolt/composables/emoji/EmojiPicker.kt +++ b/app/src/main/java/chat/revolt/composables/emoji/EmojiPicker.kt @@ -30,9 +30,6 @@ import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.text.BasicTextField -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight -import androidx.compose.material.icons.filled.Close import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor @@ -231,7 +228,7 @@ fun EmojiPicker( innerTextField() Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_close_24dp), contentDescription = stringResource(R.string.emoji_picker_clear_search), modifier = Modifier .clip(CircleShape) @@ -343,7 +340,7 @@ fun EmojiPicker( textAlign = TextAlign.Center ) Icon( - imageVector = Icons.AutoMirrored.Default.KeyboardArrowRight, + painter = painterResource(R.drawable.icn_keyboard_arrow_right_24dp), contentDescription = stringResource( R.string.emoji_picker_close_skin_tone_menu ), @@ -445,39 +442,39 @@ fun EmojiPicker( Icon( painter = when (category) { UnicodeEmojiSection.Smileys -> painterResource( - R.drawable.ic_emoticon_24dp + R.drawable.icn_mood_24dp ) UnicodeEmojiSection.People -> painterResource( - R.drawable.ic_human_greeting_variant_24dp + R.drawable.icn_emoji_people_24dp ) UnicodeEmojiSection.Animals -> painterResource( - R.drawable.ic_snake_24dp + R.drawable.icn_emoji_nature_24dp ) UnicodeEmojiSection.Food -> painterResource( - R.drawable.ic_glass_mug_variant_24dp + R.drawable.icn_sports_bar_24dp ) UnicodeEmojiSection.Travel -> painterResource( - R.drawable.ic_train_bus_24dp + R.drawable.icn_bus_railway_24dp ) UnicodeEmojiSection.Activities -> painterResource( - R.drawable.ic_skate_24dp + R.drawable.icn_sports_and_outdoors_24dp ) UnicodeEmojiSection.Objects -> painterResource( - R.drawable.ic_table_chair_24dp + R.drawable.icn_emoji_objects_24dp ) UnicodeEmojiSection.Symbols -> painterResource( - R.drawable.ic_symbol_24dp + R.drawable.icn_emoji_symbols_24dp ) UnicodeEmojiSection.Flags -> painterResource( - R.drawable.ic_flag_24dp + R.drawable.icn_flag_24dp ) }, contentDescription = null, diff --git a/app/src/main/java/chat/revolt/composables/generic/InlineMediaPicker.kt b/app/src/main/java/chat/revolt/composables/generic/InlineMediaPicker.kt index 86bc47dd..4c6cc06a 100644 --- a/app/src/main/java/chat/revolt/composables/generic/InlineMediaPicker.kt +++ b/app/src/main/java/chat/revolt/composables/generic/InlineMediaPicker.kt @@ -13,9 +13,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add -import androidx.compose.material.icons.filled.Close import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme @@ -26,6 +23,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -70,7 +68,7 @@ fun InlineMediaPicker( enabled = (currentModel != null) && enabled ) { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_close_24dp), contentDescription = stringResource(R.string.inline_media_picker_remove) ) } @@ -96,7 +94,7 @@ fun InlineMediaPicker( modifier = Modifier.width(480.dp) ) { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_close_24dp), contentDescription = null ) @@ -183,7 +181,7 @@ fun InlineMediaPickerMediaPicker( ) { if (circular) { Icon( - imageVector = Icons.Default.Add, + painter = painterResource(R.drawable.icn_add_24dp), contentDescription = stringResource(R.string.inline_media_picker_no_media_placeholder) ) } else { diff --git a/app/src/main/java/chat/revolt/composables/generic/NonIdealState.kt b/app/src/main/java/chat/revolt/composables/generic/NonIdealState.kt index 7e51bc23..2145a38c 100644 --- a/app/src/main/java/chat/revolt/composables/generic/NonIdealState.kt +++ b/app/src/main/java/chat/revolt/composables/generic/NonIdealState.kt @@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.Star import androidx.compose.material.icons.filled.Warning import androidx.compose.material3.Button @@ -22,10 +21,12 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import chat.revolt.R private val NoneLambda = @Composable { throw UnsupportedOperationException() } @@ -107,7 +108,7 @@ fun NonIdealStatePreviewNoActions() { NonIdealState( icon = { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_error_24dp), contentDescription = null, modifier = Modifier.size(it) ) diff --git a/app/src/main/java/chat/revolt/composables/media/AudioPlayer.kt b/app/src/main/java/chat/revolt/composables/media/AudioPlayer.kt index 76047b2f..3dd8d09d 100644 --- a/app/src/main/java/chat/revolt/composables/media/AudioPlayer.kt +++ b/app/src/main/java/chat/revolt/composables/media/AudioPlayer.kt @@ -12,9 +12,6 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.MoreVert -import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem @@ -235,12 +232,12 @@ fun AudioPlayer(url: String, filename: String, contentType: String) { } else { if (isPlaying.value) { Icon( - painter = painterResource(R.drawable.ic_pause_24dp), + painter = painterResource(R.drawable.icn_pause_24dp), contentDescription = stringResource(R.string.media_viewer_pause) ) } else { Icon( - imageVector = Icons.Filled.PlayArrow, + painter = painterResource(R.drawable.icn_play_arrow_24dp), contentDescription = stringResource(R.string.media_viewer_play) ) } @@ -268,7 +265,7 @@ fun AudioPlayer(url: String, filename: String, contentType: String) { showMenu.value = !showMenu.value }) { Icon( - imageVector = Icons.Filled.MoreVert, + painter = painterResource(R.drawable.icn_more_vert_24dp), contentDescription = stringResource(R.string.media_viewer_more) ) DropdownMenu( diff --git a/app/src/main/java/chat/revolt/composables/media/MediaPickerGateway.kt b/app/src/main/java/chat/revolt/composables/media/MediaPickerGateway.kt index 57c729c4..a8e90b94 100644 --- a/app/src/main/java/chat/revolt/composables/media/MediaPickerGateway.kt +++ b/app/src/main/java/chat/revolt/composables/media/MediaPickerGateway.kt @@ -66,7 +66,7 @@ fun MediaPickerGateway( .padding(8.dp) ) { Icon( - painterResource(R.drawable.ic_image_multiple_24dp), + painterResource(R.drawable.icn_photo_library_24dp), contentDescription = null, ) Text( @@ -102,7 +102,7 @@ fun MediaPickerGateway( .padding(8.dp) ) { Icon( - painterResource(R.drawable.ic_paperclip_24dp), + painterResource(R.drawable.icn_attach_file_24dp), contentDescription = null, ) Text( @@ -126,7 +126,7 @@ fun MediaPickerGateway( .padding(8.dp) ) { Icon( - painterResource(R.drawable.ic_camera_24dp), + painterResource(R.drawable.icn_camera_24dp), contentDescription = null, ) Text( diff --git a/app/src/main/java/chat/revolt/composables/screens/chat/AttachmentManager.kt b/app/src/main/java/chat/revolt/composables/screens/chat/AttachmentManager.kt index 3e02d219..04c8c9ad 100644 --- a/app/src/main/java/chat/revolt/composables/screens/chat/AttachmentManager.kt +++ b/app/src/main/java/chat/revolt/composables/screens/chat/AttachmentManager.kt @@ -137,7 +137,7 @@ fun FilePreviewSheet( onRemove() }, modifier = Modifier.weight(1f)) { Icon( - painterResource(R.drawable.ic_paperclip_minus_24dp), + painterResource(R.drawable.icn_attach_file_off_24dp), contentDescription = null ) Spacer(modifier = Modifier.width(8.dp)) diff --git a/app/src/main/java/chat/revolt/composables/screens/chat/ChannelHeader.kt b/app/src/main/java/chat/revolt/composables/screens/chat/ChannelHeader.kt index 0f33cd7a..a841cd63 100644 --- a/app/src/main/java/chat/revolt/composables/screens/chat/ChannelHeader.kt +++ b/app/src/main/java/chat/revolt/composables/screens/chat/ChannelHeader.kt @@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight import androidx.compose.material.icons.filled.Menu import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -18,6 +17,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -48,7 +48,7 @@ fun ChannelHeader( onToggleDrawer() }) { Icon( - imageVector = Icons.Default.Menu, + painter = painterResource(R.drawable.icn_menu_24dp), contentDescription = stringResource(R.string.menu) ) } @@ -92,7 +92,7 @@ fun ChannelHeader( Spacer(modifier = Modifier.width(4.dp)) Icon( - imageVector = Icons.AutoMirrored.Default.KeyboardArrowRight, + painter = painterResource(R.drawable.icn_keyboard_arrow_right_24dp), contentDescription = stringResource(R.string.menu), modifier = Modifier .size(18.dp) diff --git a/app/src/main/java/chat/revolt/composables/screens/chat/ChannelIcon.kt b/app/src/main/java/chat/revolt/composables/screens/chat/ChannelIcon.kt index c244f7cb..9713296a 100644 --- a/app/src/main/java/chat/revolt/composables/screens/chat/ChannelIcon.kt +++ b/app/src/main/java/chat/revolt/composables/screens/chat/ChannelIcon.kt @@ -1,8 +1,5 @@ package chat.revolt.composables.screens.chat -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.AccountBox -import androidx.compose.material.icons.filled.AccountCircle import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -19,35 +16,39 @@ fun ChannelIcon(channelType: ChannelType, modifier: Modifier = Modifier) { when (channelType) { ChannelType.TextChannel -> { Icon( - painter = painterResource(R.drawable.ic_pound_24dp), + painter = painterResource(R.drawable.icn_tag_24dp), contentDescription = stringResource(R.string.channel_text), modifier = modifier ) } + ChannelType.VoiceChannel -> { Icon( - painter = painterResource(R.drawable.ic_volume_up_24dp), + painter = painterResource(R.drawable.icn_volume_up_24dp), contentDescription = stringResource(R.string.channel_voice), modifier = modifier ) } + ChannelType.SavedMessages -> { Icon( - painter = painterResource(R.drawable.ic_note_24dp), + painter = painterResource(R.drawable.icn_note_stack_24dp), contentDescription = stringResource(R.string.channel_notes), modifier = modifier ) } + ChannelType.DirectMessage -> { Icon( - imageVector = Icons.Default.AccountCircle, + painter = painterResource(R.drawable.icn_account_circle_24dp), contentDescription = stringResource(R.string.channel_dm), modifier = modifier ) } + ChannelType.Group -> { Icon( - imageVector = Icons.Default.AccountBox, + painter = painterResource(R.drawable.icn_account_box_24dp), contentDescription = stringResource(R.string.channel_group), modifier = modifier ) diff --git a/app/src/main/java/chat/revolt/composables/screens/chat/ReplyManager.kt b/app/src/main/java/chat/revolt/composables/screens/chat/ReplyManager.kt index 43271c29..5250e1e2 100644 --- a/app/src/main/java/chat/revolt/composables/screens/chat/ReplyManager.kt +++ b/app/src/main/java/chat/revolt/composables/screens/chat/ReplyManager.kt @@ -21,6 +21,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -59,7 +60,7 @@ fun ManageableReply(reply: SendMessageReply, onToggleMention: () -> Unit, onRemo verticalAlignment = Alignment.CenterVertically ) { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_close_24dp), contentDescription = stringResource(id = R.string.remove_reply_alt), modifier = Modifier .clip(MaterialTheme.shapes.small) diff --git a/app/src/main/java/chat/revolt/composables/screens/chat/atoms/RegularMessage.kt b/app/src/main/java/chat/revolt/composables/screens/chat/atoms/RegularMessage.kt index 325321a9..3ba2a7e4 100644 --- a/app/src/main/java/chat/revolt/composables/screens/chat/atoms/RegularMessage.kt +++ b/app/src/main/java/chat/revolt/composables/screens/chat/atoms/RegularMessage.kt @@ -242,7 +242,7 @@ fun RegularMessage( ) ) { Icon( - painter = painterResource(R.drawable.ic_reply_24dp), + painter = painterResource(R.drawable.icn_reply_24dp), contentDescription = null, modifier = Modifier.size( min( diff --git a/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt b/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt index 4df73658..5e5cb176 100644 --- a/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt +++ b/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt @@ -37,10 +37,6 @@ import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CornerSize -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add -import androidx.compose.material.icons.filled.MoreVert -import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.DrawerState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.HorizontalDivider @@ -410,7 +406,7 @@ fun ChannelSideDrawer( contentAlignment = Alignment.Center ) { Icon( - imageVector = Icons.Default.Add, + painter = painterResource(R.drawable.icn_add_24dp), contentDescription = stringResource(R.string.server_plus_alt) ) } @@ -428,7 +424,7 @@ fun ChannelSideDrawer( contentAlignment = Alignment.Center ) { Icon( - painter = painterResource(R.drawable.ic_compass_24dp), + painter = painterResource(R.drawable.icn_explore_24dp), contentDescription = stringResource(R.string.discover_alt) ) } @@ -450,7 +446,7 @@ fun ChannelSideDrawer( contentAlignment = Alignment.Center ) { Icon( - imageVector = Icons.Default.Settings, + painter = painterResource(R.drawable.icn_settings_24dp), contentDescription = stringResource(R.string.settings) ) } @@ -564,7 +560,7 @@ fun ChannelSideDrawer( server?.id?.let { srvId -> onShowServerContextSheet(srvId) } }) { Icon( - imageVector = Icons.Default.MoreVert, + painter = painterResource(R.drawable.icn_more_vert_24dp), contentDescription = stringResource(R.string.menu), tint = LocalContentColor.current ) @@ -628,7 +624,7 @@ fun ColumnScope.DirectMessagesChannelListRenderer( name = stringResource(R.string.overview_screen_title), channelType = ChannelType.TextChannel ), - iconType = ChannelItemIconType.Painter(painterResource(R.drawable.ic_creation_24dp)), + iconType = ChannelItemIconType.Painter(painterResource(R.drawable.icn_star_shine_24dp)), isCurrent = currentDestination is ChatRouterDestination.Overview, onDestinationChanged = { onDestinationChanged(ChatRouterDestination.Overview) @@ -649,7 +645,7 @@ fun ColumnScope.DirectMessagesChannelListRenderer( name = stringResource(R.string.friends), channelType = ChannelType.TextChannel ), - iconType = ChannelItemIconType.Painter(painterResource(R.drawable.ic_human_greeting_variant_24dp)), + iconType = ChannelItemIconType.Painter(painterResource(R.drawable.icn_group_24dp)), isCurrent = currentDestination is ChatRouterDestination.Friends, onDestinationChanged = { onDestinationChanged(ChatRouterDestination.Friends) diff --git a/app/src/main/java/chat/revolt/composables/screens/settings/UserButtons.kt b/app/src/main/java/chat/revolt/composables/screens/settings/UserButtons.kt index ebeb13e0..35a8cc51 100644 --- a/app/src/main/java/chat/revolt/composables/screens/settings/UserButtons.kt +++ b/app/src/main/java/chat/revolt/composables/screens/settings/UserButtons.kt @@ -7,8 +7,6 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.DropdownMenu @@ -71,7 +69,7 @@ fun UserButtons( } catch (e: Exception) { // Button did nothing, but not an error if (e.message == "NoEffect") return@launch - + // Log all other errors logcat(LogPriority.ERROR) { e.asLog() } } @@ -120,7 +118,7 @@ fun UserButtons( .weight(1f) ) { Icon( - painter = painterResource(R.drawable.ic_robot_24dp), + painter = painterResource(R.drawable.icn_smart_toy_24dp), contentDescription = null ) Text( @@ -336,7 +334,7 @@ fun UserButtons( } ) { Icon( - imageVector = Icons.Default.MoreVert, + painter = painterResource(R.drawable.icn_more_vert_24dp), contentDescription = stringResource(R.string.menu) ) } diff --git a/app/src/main/java/chat/revolt/composables/settings/sessions/SessionItem.kt b/app/src/main/java/chat/revolt/composables/settings/sessions/SessionItem.kt index 3403c7cc..660f9c15 100644 --- a/app/src/main/java/chat/revolt/composables/settings/sessions/SessionItem.kt +++ b/app/src/main/java/chat/revolt/composables/settings/sessions/SessionItem.kt @@ -1,8 +1,8 @@ package chat.revolt.composables.settings.sessions import android.text.format.DateUtils -import androidx.compose.material3.IconButton import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.ListItem import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -54,7 +54,7 @@ fun SessionItem( onLogout(session) }) { Icon( - painter = painterResource(R.drawable.ic_logout_24dp), + painter = painterResource(R.drawable.icn_logout_24dp), contentDescription = stringResource(R.string.logout) ) } diff --git a/app/src/main/java/chat/revolt/composables/sheets/SheetSelection.kt b/app/src/main/java/chat/revolt/composables/sheets/SheetSelection.kt index 066042b4..5efeccf3 100644 --- a/app/src/main/java/chat/revolt/composables/sheets/SheetSelection.kt +++ b/app/src/main/java/chat/revolt/composables/sheets/SheetSelection.kt @@ -5,8 +5,6 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle @@ -15,7 +13,9 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp +import chat.revolt.R /** * Sheet selection. Used when a modal sheet prompts a choice out of x options. @@ -55,7 +55,7 @@ fun SheetSelection( } } Icon( - imageVector = Icons.AutoMirrored.Default.KeyboardArrowRight, + painter = painterResource(R.drawable.icn_keyboard_arrow_right_24dp), contentDescription = null, tint = arrowTint ) diff --git a/app/src/main/java/chat/revolt/screens/about/AboutScreen.kt b/app/src/main/java/chat/revolt/screens/about/AboutScreen.kt index fe55987e..c21c60d9 100644 --- a/app/src/main/java/chat/revolt/screens/about/AboutScreen.kt +++ b/app/src/main/java/chat/revolt/screens/about/AboutScreen.kt @@ -170,7 +170,7 @@ fun AboutScreen(navController: NavController, viewModel: AboutViewModel = viewMo navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } diff --git a/app/src/main/java/chat/revolt/screens/about/AttributionScreen.kt b/app/src/main/java/chat/revolt/screens/about/AttributionScreen.kt index c89f0c1d..cc9a002d 100644 --- a/app/src/main/java/chat/revolt/screens/about/AttributionScreen.kt +++ b/app/src/main/java/chat/revolt/screens/about/AttributionScreen.kt @@ -35,6 +35,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow @@ -171,7 +172,7 @@ fun AttributionScreen(navController: NavController) { navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } diff --git a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt index ff53b22e..0489ba8d 100644 --- a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt @@ -636,7 +636,7 @@ fun ChatRouterScreen( }, icon = { Icon( - painter = painterResource(R.drawable.ic_lock_alert_24dp), + painter = painterResource(R.drawable.icn_lock_24dp), contentDescription = null, // decorative tint = MaterialTheme.colorScheme.primary ) diff --git a/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportMessageDialog.kt b/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportMessageDialog.kt index 58390f6a..114deea9 100644 --- a/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportMessageDialog.kt +++ b/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportMessageDialog.kt @@ -11,9 +11,6 @@ import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Check -import androidx.compose.material.icons.filled.Close import androidx.compose.material3.AlertDialog import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.DropdownMenuItem @@ -34,6 +31,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -272,7 +270,7 @@ fun ReportMessageDialog(onDismiss: () -> Unit, messageId: String) { }, icon = { Icon( - imageVector = Icons.Default.Check, + painter = painterResource(R.drawable.icn_check_24dp), contentDescription = null, // decorative tint = MaterialTheme.colorScheme.primary ) @@ -339,7 +337,7 @@ fun ReportMessageDialog(onDismiss: () -> Unit, messageId: String) { }, icon = { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_error_24dp), contentDescription = null, // decorative tint = MaterialTheme.colorScheme.primary ) diff --git a/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportServerDialog.kt b/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportServerDialog.kt index f9f982a0..d7bf403c 100644 --- a/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportServerDialog.kt +++ b/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportServerDialog.kt @@ -26,6 +26,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -236,7 +237,7 @@ fun ReportServerDialog(onDismiss: () -> Unit, serverId: String) { }, icon = { Icon( - imageVector = Icons.Default.Check, + painter = painterResource(R.drawable.icn_check_24dp), contentDescription = null, // decorative tint = MaterialTheme.colorScheme.primary ) @@ -281,7 +282,7 @@ fun ReportServerDialog(onDismiss: () -> Unit, serverId: String) { }, icon = { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_close_24dp), contentDescription = null, // decorative tint = MaterialTheme.colorScheme.primary ) diff --git a/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportUserDialog.kt b/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportUserDialog.kt index 9fddd36c..cf8c7a43 100644 --- a/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportUserDialog.kt +++ b/app/src/main/java/chat/revolt/screens/chat/dialogs/safety/ReportUserDialog.kt @@ -5,9 +5,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Check -import androidx.compose.material.icons.filled.Close import androidx.compose.material3.AlertDialog import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.DropdownMenuItem @@ -27,6 +24,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -234,7 +232,7 @@ fun ReportUserDialog(onDismiss: () -> Unit, userId: String) { }, icon = { Icon( - imageVector = Icons.Default.Check, + painter = painterResource(R.drawable.icn_check_24dp), contentDescription = null, // decorative tint = MaterialTheme.colorScheme.primary ) @@ -301,7 +299,7 @@ fun ReportUserDialog(onDismiss: () -> Unit, userId: String) { }, icon = { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_error_24dp), contentDescription = null, // decorative tint = MaterialTheme.colorScheme.primary ) diff --git a/app/src/main/java/chat/revolt/screens/chat/views/FriendsScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/FriendsScreen.kt index 21ff0ab9..38e54d16 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/FriendsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/FriendsScreen.kt @@ -28,8 +28,6 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Menu -import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material3.Button import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem @@ -500,7 +498,7 @@ fun FriendsScreen(topNav: NavController, useDrawer: Boolean, onDrawerClicked: () onDrawerClicked() }) { Icon( - imageVector = Icons.Default.Menu, + painter = painterResource(R.drawable.icn_menu_24dp), contentDescription = stringResource(id = R.string.menu) ) } @@ -511,7 +509,7 @@ fun FriendsScreen(topNav: NavController, useDrawer: Boolean, onDrawerClicked: () overflowMenuShown = true }) { Icon( - imageVector = Icons.Default.MoreVert, + painter = painterResource(R.drawable.icn_more_vert_24dp), contentDescription = stringResource(R.string.menu) ) } @@ -720,7 +718,7 @@ fun FriendsScreen(topNav: NavController, useDrawer: Boolean, onDrawerClicked: () }, icon = { Icon( - painterResource(R.drawable.ic_account_multiple_plus_24dp), + painterResource(R.drawable.icn_group_add_24dp), contentDescription = null ) }, @@ -734,7 +732,7 @@ fun FriendsScreen(topNav: NavController, useDrawer: Boolean, onDrawerClicked: () }, icon = { Icon( - painterResource(R.drawable.ic_qrcode_scan_24dp), + painterResource(R.drawable.icn_qr_code_scanner_24dp), contentDescription = null ) }, @@ -748,7 +746,7 @@ fun FriendsScreen(topNav: NavController, useDrawer: Boolean, onDrawerClicked: () }, icon = { Icon( - painterResource(R.drawable.ic_pound_24dp), + painterResource(R.drawable.icn_tag_24dp), contentDescription = null ) }, diff --git a/app/src/main/java/chat/revolt/screens/chat/views/NoCurrentChannelScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/NoCurrentChannelScreen.kt index 20e1432f..5354c8a8 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/NoCurrentChannelScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/NoCurrentChannelScreen.kt @@ -22,6 +22,7 @@ import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -53,7 +54,7 @@ fun NoCurrentChannelScreen(useDrawer: Boolean, onDrawerClicked: () -> Unit) { onDrawerClicked() }) { Icon( - imageVector = Icons.Default.Menu, + painter = painterResource(R.drawable.icn_menu_24dp), contentDescription = stringResource(id = R.string.menu) ) } diff --git a/app/src/main/java/chat/revolt/screens/chat/views/OverviewScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/OverviewScreen.kt index 2b0769b8..31622127 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/OverviewScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/OverviewScreen.kt @@ -22,10 +22,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Menu -import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api @@ -131,7 +127,7 @@ fun OverviewScreen( onDrawerClicked() }) { Icon( - imageVector = Icons.Default.Menu, + painter = painterResource(R.drawable.icn_menu_24dp), contentDescription = stringResource(id = R.string.menu) ) } @@ -149,7 +145,7 @@ fun OverviewScreen( NonIdealState( icon = { size -> Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_error_24dp), contentDescription = null, modifier = Modifier.size(size) ) @@ -219,7 +215,7 @@ fun OverviewScreen( horizontalArrangement = Arrangement.spacedBy(8.dp) ) { Icon( - imageVector = Icons.Default.Settings, + painter = painterResource(R.drawable.icn_settings_24dp), contentDescription = null, modifier = Modifier.size(22.dp) ) @@ -242,7 +238,7 @@ fun OverviewScreen( horizontalArrangement = Arrangement.spacedBy(8.dp) ) { Icon( - painter = painterResource(R.drawable.ic_share_24dp), + painter = painterResource(R.drawable.icn_ios_share_24dp), contentDescription = null, modifier = Modifier.size(22.dp) ) @@ -266,7 +262,7 @@ fun OverviewScreen( horizontalArrangement = Arrangement.spacedBy(8.dp) ) { Icon( - painter = painterResource(R.drawable.ic_flask_24dp), + painter = painterResource(R.drawable.icn_wand_shine_24dp), contentDescription = null, modifier = Modifier.size(22.dp) ) @@ -294,7 +290,7 @@ fun OverviewScreen( horizontalArrangement = Arrangement.spacedBy(8.dp) ) { Icon( - painter = painterResource(R.drawable.ic_creation_24dp), + painter = painterResource(R.drawable.icn_star_shine_24dp), contentDescription = null, modifier = Modifier.size(22.dp) ) diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt index 93643853..72633ae1 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt @@ -53,10 +53,7 @@ import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.text.InlineTextContent import androidx.compose.foundation.text.appendInlineContent import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.filled.Menu import androidx.compose.material3.AssistChip import androidx.compose.material3.Button @@ -617,7 +614,7 @@ fun ChannelScreen( } Icon( - imageVector = Icons.AutoMirrored.Default.KeyboardArrowRight, + painter = painterResource(R.drawable.icn_keyboard_arrow_right_24dp), contentDescription = null, modifier = Modifier .size(16.dp) @@ -631,7 +628,7 @@ fun ChannelScreen( if (useDrawer) { IconButton(onClick = onToggleDrawer) { Icon( - imageVector = Icons.Default.Menu, + painter = painterResource(R.drawable.icn_menu_24dp), contentDescription = stringResource(id = R.string.menu) ) } @@ -639,7 +636,7 @@ fun ChannelScreen( if (useBackButton) { IconButton(onClick = backButtonAction ?: {}) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } @@ -856,7 +853,7 @@ fun ChannelScreen( containerColor = MaterialTheme.colorScheme.surfaceVariant ) { Icon( - painter = painterResource(R.drawable.ic_arrow_down_24dp), + painter = painterResource(R.drawable.icn_south_24dp), contentDescription = stringResource(R.string.scroll_to_bottom) ) } @@ -1011,13 +1008,13 @@ fun ChannelScreen( }, leadingIcon = { Icon( - imageVector = Icons.Default.Edit, + painter = painterResource(R.drawable.icn_edit_24dp), contentDescription = null ) }, trailingIcon = { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_close_24dp), contentDescription = stringResource(R.string.message_field_editing_message_cancel_alt), tint = MaterialTheme.colorScheme.onSurface, modifier = Modifier.alpha(0.8f) @@ -1084,7 +1081,7 @@ fun ChannelScreen( DropdownMenuItem( leadingIcon = { Icon( - painter = painterResource(R.drawable.ic_paperclip_24dp), + painter = painterResource(R.drawable.icn_attach_file_24dp), contentDescription = null // Provided by text below ) }, @@ -1097,7 +1094,7 @@ fun ChannelScreen( DropdownMenuItem( leadingIcon = { Icon( - painter = painterResource(R.drawable.ic_camera_24dp), + painter = painterResource(R.drawable.icn_camera_24dp), contentDescription = null // Provided by text below ) }, @@ -1110,7 +1107,7 @@ fun ChannelScreen( DropdownMenuItem( leadingIcon = { Icon( - painter = painterResource(R.drawable.ic_image_multiple_24dp), + painter = painterResource(R.drawable.icn_photo_library_24dp), contentDescription = null // Provided by text below ) }, diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenAgeGate.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenAgeGate.kt index 3ffb6a91..23898040 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenAgeGate.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenAgeGate.kt @@ -122,7 +122,7 @@ fun ChannelScreenAgeGate( verticalArrangement = Arrangement.spacedBy(16.dp, Alignment.CenterVertically) ) { Icon( - painter = painterResource(R.drawable.ic_comment_alert_24dp), + painter = painterResource(R.drawable.icn_eda_24dp), contentDescription = null, modifier = Modifier.size(48.dp), ) diff --git a/app/src/main/java/chat/revolt/screens/create/CreateGroupScreen.kt b/app/src/main/java/chat/revolt/screens/create/CreateGroupScreen.kt index 79694c67..cdbb61ed 100644 --- a/app/src/main/java/chat/revolt/screens/create/CreateGroupScreen.kt +++ b/app/src/main/java/chat/revolt/screens/create/CreateGroupScreen.kt @@ -10,10 +10,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material.icons.filled.Check -import androidx.compose.material.icons.filled.Search import androidx.compose.material3.Checkbox import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FloatingActionButton @@ -32,6 +28,7 @@ import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -124,7 +121,7 @@ fun CreateGroupScreen( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } @@ -139,7 +136,7 @@ fun CreateGroupScreen( ) { FloatingActionButton(onClick = { viewModel.createGroup(navController::popBackStack) }) { Icon( - imageVector = Icons.Default.Check, + painter = painterResource(R.drawable.icn_check_24dp), contentDescription = stringResource(R.string.create_group_action) ) } @@ -180,7 +177,7 @@ fun CreateGroupScreen( onValueChange = { viewModel.updateFriendSearchQuery(it) }, leadingIcon = { Icon( - imageVector = Icons.Default.Search, + painter = painterResource(R.drawable.icn_search_24dp), contentDescription = null ) }, diff --git a/app/src/main/java/chat/revolt/screens/labs/LabsHomeScreen.kt b/app/src/main/java/chat/revolt/screens/labs/LabsHomeScreen.kt index 567a4910..3f878803 100644 --- a/app/src/main/java/chat/revolt/screens/labs/LabsHomeScreen.kt +++ b/app/src/main/java/chat/revolt/screens/labs/LabsHomeScreen.kt @@ -11,9 +11,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material.icons.filled.Home -import androidx.compose.material.icons.filled.Menu import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.HorizontalDivider @@ -32,11 +29,13 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.navigation.NavController +import chat.revolt.R import chat.revolt.ui.theme.FragmentMono enum class LabsHomeScreenTab { @@ -62,7 +61,7 @@ fun LabsHomeScreen(navController: NavController, topNav: NavController) { topNav.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = "Back" ) } @@ -76,7 +75,7 @@ fun LabsHomeScreen(navController: NavController, topNav: NavController) { onClick = { currentTab.value = LabsHomeScreenTab.Home }, icon = { Icon( - imageVector = Icons.Default.Home, + painter = painterResource(R.drawable.icn_home_24dp), contentDescription = null, ) }, @@ -89,7 +88,7 @@ fun LabsHomeScreen(navController: NavController, topNav: NavController) { onClick = { currentTab.value = LabsHomeScreenTab.Mockups }, icon = { Icon( - imageVector = Icons.Default.Menu, + painter = painterResource(R.drawable.icn_menu_24dp), contentDescription = null, ) }, @@ -102,7 +101,7 @@ fun LabsHomeScreen(navController: NavController, topNav: NavController) { onClick = { currentTab.value = LabsHomeScreenTab.Sandboxes }, icon = { Icon( - imageVector = Icons.Default.PlayArrow, + painter = painterResource(R.drawable.icn_play_arrow_24dp), contentDescription = null, ) }, @@ -147,15 +146,6 @@ fun LabsHomeScreen(navController: NavController, topNav: NavController) { Column( modifier = Modifier.verticalScroll(rememberScrollState()) ) { - ListItem( - headlineContent = { - Text("Call Screen") - }, - modifier = Modifier.clickable { - navController.navigate("mockups/call") - } - ) - HorizontalDivider() ListItem( headlineContent = { Text("New Login Experience") diff --git a/app/src/main/java/chat/revolt/screens/labs/LabsRootScreen.kt b/app/src/main/java/chat/revolt/screens/labs/LabsRootScreen.kt index bcaf0b6f..a4f81a9e 100644 --- a/app/src/main/java/chat/revolt/screens/labs/LabsRootScreen.kt +++ b/app/src/main/java/chat/revolt/screens/labs/LabsRootScreen.kt @@ -12,7 +12,6 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import chat.revolt.api.settings.FeatureFlags -import chat.revolt.screens.labs.ui.mockups.CallScreenMockup import chat.revolt.screens.labs.ui.mockups.NewLoginExperienceMockup import chat.revolt.screens.labs.ui.sandbox.CoreLibSandbox import chat.revolt.screens.labs.ui.sandbox.GradientEditorSandbox @@ -64,9 +63,6 @@ fun LabsRootScreen(topNav: NavController) { LabsHomeScreen(labsNav, topNav) } - composable("mockups/call") { - CallScreenMockup() - } composable("mockups/newlogin") { NewLoginExperienceMockup(labsNav) } diff --git a/app/src/main/java/chat/revolt/screens/labs/ui/mockups/CallScreenMockup.kt b/app/src/main/java/chat/revolt/screens/labs/ui/mockups/CallScreenMockup.kt deleted file mode 100644 index ae95c189..00000000 --- a/app/src/main/java/chat/revolt/screens/labs/ui/mockups/CallScreenMockup.kt +++ /dev/null @@ -1,261 +0,0 @@ -package chat.revolt.screens.labs.ui.mockups - -import androidx.compose.animation.animateColorAsState -import androidx.compose.animation.core.spring -import androidx.compose.foundation.background -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.interaction.collectIsPressedAsState -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.BoxWithConstraints -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.heightIn -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.safeDrawingPadding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight -import androidx.compose.material.icons.filled.KeyboardArrowDown -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.Checkbox -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.material3.TextButton -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.alpha -import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import chat.revolt.R -import chat.revolt.api.schemas.ChannelType -import chat.revolt.composables.screens.chat.ChannelIcon -import chat.revolt.screens.labs.LabsFeature - -@LabsFeature -@Composable -fun CallScreenMockup() { - var showOptions by remember { mutableStateOf(false) } - var pushToTalk by remember { mutableStateOf(false) } - - val interactionSource = remember { MutableInteractionSource() } - val pushToTalkIsHeld by interactionSource.collectIsPressedAsState() - - val pttBackground by animateColorAsState( - targetValue = if (pushToTalkIsHeld) { - MaterialTheme.colorScheme.primaryContainer - } else { - MaterialTheme.colorScheme.secondaryContainer - }, - animationSpec = spring(), - label = "pttBackground" - ) - val pttText by animateColorAsState( - targetValue = if (pushToTalkIsHeld) { - MaterialTheme.colorScheme.onPrimaryContainer - } else { - MaterialTheme.colorScheme.onSecondaryContainer - }, - animationSpec = spring(), - label = "pttText" - ) - - if (showOptions) { - Dialog( - onDismissRequest = { showOptions = false } - ) { - BoxWithConstraints { - Column( - modifier = Modifier - .clip(MaterialTheme.shapes.large) - .background(MaterialTheme.colorScheme.surface) - .padding(24.dp) - .width(maxWidth * 0.85f) - .heightIn(max = maxHeight * 0.85f) - ) { - Row { - Checkbox( - checked = pushToTalk, - onCheckedChange = { pushToTalk = it }, - modifier = Modifier - .padding(16.dp) - ) - Text( - text = "Push to talk", - modifier = Modifier - .padding(16.dp) - ) - } - } - } - } - } - - Column( - modifier = Modifier - .fillMaxSize() - .safeDrawingPadding() - ) { - Row( - verticalAlignment = Alignment.CenterVertically - ) { - Row( - modifier = Modifier - .weight(1f) - .padding(vertical = 4.dp, horizontal = 4.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Spacer( - modifier = Modifier - .height(48.dp) - .width(12.dp) - ) - - ChannelIcon( - channelType = ChannelType.VoiceChannel, - modifier = Modifier.alpha(0.6f) - ) - - Spacer(modifier = Modifier.width(8.dp)) - - Row( - modifier = Modifier.weight(1f), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = "Voice Channel", - fontWeight = FontWeight.Medium, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - - Spacer(modifier = Modifier.width(4.dp)) - - Icon( - imageVector = Icons.AutoMirrored.Default.KeyboardArrowRight, - contentDescription = stringResource(R.string.menu), - modifier = Modifier - .size(18.dp) - .alpha(0.4f) - ) - } - } - IconButton(onClick = { - showOptions = true - }) { - Icon( - imageVector = Icons.Default.KeyboardArrowDown, - contentDescription = null - ) - } - Spacer(modifier = Modifier.width(4.dp)) - } - Column( - modifier = Modifier - .weight(1f) - ) { - } - if (pushToTalk) { - Row( - modifier = Modifier - .padding(16.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp) - ) { - TextButton( - onClick = {}, - ) { - Icon( - painter = painterResource(R.drawable.ic_headphones_24dp), - contentDescription = null - ) - Spacer(modifier = Modifier.width(8.dp)) - Text( - text = "Galaxy Buds Live", - ) - } - } - Row( - modifier = Modifier - .padding(horizontal = 16.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp) - ) { - Button( - onClick = {}, - colors = ButtonDefaults.buttonColors( - containerColor = pttBackground, - contentColor = pttText - ), - interactionSource = interactionSource, - modifier = Modifier - .weight(1f) - ) { - Icon( - painter = painterResource(R.drawable.ic_gesture_tap_button_24dp), - contentDescription = null - ) - Spacer(modifier = Modifier.width(8.dp)) - Text( - text = "Hold to talk", - ) - } - } - } - Row( - modifier = Modifier - .padding(16.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp) - ) { - if (!pushToTalk) { - Button( - onClick = {} - ) { - Icon( - painter = painterResource(R.drawable.ic_microphone_off_24dp), - contentDescription = null - ) - } - } - - Button( - onClick = {}, - colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.errorContainer, - contentColor = MaterialTheme.colorScheme.onErrorContainer - ), - modifier = Modifier - .weight(1f) - ) { - Text( - text = "Leave call", - ) - } - - if (!pushToTalk) { - Button( - onClick = {} - ) { - Icon( - painter = painterResource(R.drawable.ic_headphones_24dp), - contentDescription = null - ) - } - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/chat/revolt/screens/login/LoginScreen.kt b/app/src/main/java/chat/revolt/screens/login/LoginScreen.kt index 868fdde7..9b5931f5 100644 --- a/app/src/main/java/chat/revolt/screens/login/LoginScreen.kt +++ b/app/src/main/java/chat/revolt/screens/login/LoginScreen.kt @@ -252,14 +252,14 @@ fun LoginScreen(navController: NavController, viewModel: LoginViewModel = hiltVi when { showPassword.value -> { Icon( - painter = painterResource(R.drawable.ic_eye_off_24dp), + painter = painterResource(R.drawable.icn_visibility_off_24dp), contentDescription = stringResource(R.string.hide_password) ) } else -> { Icon( - painter = painterResource(R.drawable.ic_eye_24dp), + painter = painterResource(R.drawable.icn_visibility_24dp), contentDescription = stringResource(R.string.show_password) ) } diff --git a/app/src/main/java/chat/revolt/screens/main/ConversationsScreen.kt b/app/src/main/java/chat/revolt/screens/main/ConversationsScreen.kt index bebe1e88..22cb903e 100644 --- a/app/src/main/java/chat/revolt/screens/main/ConversationsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/main/ConversationsScreen.kt @@ -103,7 +103,7 @@ fun ConversationsScreen(navController: NavController) { } Badge { Icon( - painter = painterResource(R.drawable.ic_pin_24dp), + painter = painterResource(R.drawable.icn_keep_24dp), contentDescription = null, modifier = Modifier.size(12.dp) ) @@ -118,11 +118,12 @@ fun ConversationsScreen(navController: NavController) { } } items(1000) { - Text("Conversation $it", modifier = Modifier - .clickable { - navController.navigate("main/conversation/${it}") - } - .fillMaxWidth()) + Text( + "Conversation $it", modifier = Modifier + .clickable { + navController.navigate("main/conversation/${it}") + } + .fillMaxWidth()) } } } diff --git a/app/src/main/java/chat/revolt/screens/main/MainScreen.kt b/app/src/main/java/chat/revolt/screens/main/MainScreen.kt index eb98221b..afb3b3d1 100644 --- a/app/src/main/java/chat/revolt/screens/main/MainScreen.kt +++ b/app/src/main/java/chat/revolt/screens/main/MainScreen.kt @@ -38,11 +38,7 @@ fun MainScreen(navController: NavController) { icon = { Icon( painter = painterResource( - if (currentTab == MainScreenTab.Communities) { - R.drawable.ic_account_group_24dp - } else { - R.drawable.ic_account_group_outline_24dp - } + R.drawable.icn_tag_24dp ), contentDescription = null, ) @@ -58,9 +54,9 @@ fun MainScreen(navController: NavController) { Icon( painter = painterResource( if (currentTab == MainScreenTab.Conversations) { - R.drawable.ic_forum_24dp + R.drawable.icn_forum_24dp__fill } else { - R.drawable.ic_forum_outline_24dp + R.drawable.icn_forum_24dp } ), contentDescription = null, @@ -77,9 +73,9 @@ fun MainScreen(navController: NavController) { Icon( painter = painterResource( if (currentTab == MainScreenTab.Overview) { - R.drawable.ic_creation_24dp + R.drawable.icn_star_shine_24dp__fill } else { - R.drawable.ic_creation_outline_24dp + R.drawable.icn_star_shine_24dp } ), contentDescription = null, diff --git a/app/src/main/java/chat/revolt/screens/services/DiscoverScreen.kt b/app/src/main/java/chat/revolt/screens/services/DiscoverScreen.kt index 5aa88c56..119406d0 100644 --- a/app/src/main/java/chat/revolt/screens/services/DiscoverScreen.kt +++ b/app/src/main/java/chat/revolt/screens/services/DiscoverScreen.kt @@ -13,6 +13,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.navigation.NavController @@ -37,7 +38,7 @@ fun DiscoverScreen(navController: NavController) { navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } diff --git a/app/src/main/java/chat/revolt/screens/settings/AppearanceSettingsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/AppearanceSettingsScreen.kt index 98c46e82..cd7fe0a4 100644 --- a/app/src/main/java/chat/revolt/screens/settings/AppearanceSettingsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/settings/AppearanceSettingsScreen.kt @@ -23,9 +23,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -292,7 +289,7 @@ fun AppearanceSettingsScreen( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } @@ -425,7 +422,7 @@ fun AppearanceSettingsScreen( verticalAlignment = Alignment.CenterVertically ) { Icon( - imageVector = Icons.AutoMirrored.Default.KeyboardArrowRight, + painter = painterResource(R.drawable.icn_keyboard_arrow_right_24dp), contentDescription = null, modifier = Modifier .padding(start = 20.dp, end = 4.dp) @@ -457,7 +454,7 @@ fun AppearanceSettingsScreen( modifier = Modifier.weight(1f) ) { Icon( - painter = painterResource(R.drawable.ic_folder_24dp), + painter = painterResource(R.drawable.icn_file_open_24dp), contentDescription = null ) @@ -475,7 +472,7 @@ fun AppearanceSettingsScreen( modifier = Modifier.weight(1f) ) { Icon( - painter = painterResource(R.drawable.ic_content_save_24dp), + painter = painterResource(R.drawable.icn_file_export_24dp), contentDescription = null ) diff --git a/app/src/main/java/chat/revolt/screens/settings/ChangelogsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/ChangelogsScreen.kt index b3400497..6dd235ec 100644 --- a/app/src/main/java/chat/revolt/screens/settings/ChangelogsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/settings/ChangelogsScreen.kt @@ -12,8 +12,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.HorizontalDivider @@ -34,6 +32,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -128,7 +127,7 @@ fun ChangelogsSettingsScreen( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } diff --git a/app/src/main/java/chat/revolt/screens/settings/ChatSettingsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/ChatSettingsScreen.kt index 83b0ff8c..96ab36aa 100644 --- a/app/src/main/java/chat/revolt/screens/settings/ChatSettingsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/settings/ChatSettingsScreen.kt @@ -29,6 +29,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -87,7 +88,7 @@ fun ChatSettingsScreen( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } diff --git a/app/src/main/java/chat/revolt/screens/settings/DebugSettingsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/DebugSettingsScreen.kt index 525fc048..44e33dea 100644 --- a/app/src/main/java/chat/revolt/screens/settings/DebugSettingsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/settings/DebugSettingsScreen.kt @@ -40,6 +40,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -202,7 +203,7 @@ fun DebugSettingsScreen( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } diff --git a/app/src/main/java/chat/revolt/screens/settings/LanguagePickerSettingsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/LanguagePickerSettingsScreen.kt index 75d89dc6..1b801a9c 100644 --- a/app/src/main/java/chat/revolt/screens/settings/LanguagePickerSettingsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/settings/LanguagePickerSettingsScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.core.os.LocaleListCompat @@ -81,7 +82,7 @@ fun LanguagePickerSettingsScreen( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } diff --git a/app/src/main/java/chat/revolt/screens/settings/ProfileSettngsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/ProfileSettngsScreen.kt index a9cd9142..d5cf2815 100644 --- a/app/src/main/java/chat/revolt/screens/settings/ProfileSettngsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/settings/ProfileSettngsScreen.kt @@ -19,7 +19,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.Check import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api @@ -41,6 +40,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -259,7 +259,7 @@ fun ProfileSettingsScreen( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } @@ -425,7 +425,7 @@ fun ProfileSettingsScreen( modifier = Modifier.fillMaxWidth() ) { Icon( - imageVector = Icons.Default.Check, + painter = painterResource(R.drawable.icn_check_24dp), contentDescription = null ) diff --git a/app/src/main/java/chat/revolt/screens/settings/SessionSettngsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/SessionSettngsScreen.kt index 495968e6..483a16a5 100644 --- a/app/src/main/java/chat/revolt/screens/settings/SessionSettngsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/settings/SessionSettngsScreen.kt @@ -39,6 +39,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -154,7 +155,7 @@ fun SessionSettingsScreen( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } diff --git a/app/src/main/java/chat/revolt/screens/settings/SettingsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/SettingsScreen.kt index 69599ae9..01af3010 100644 --- a/app/src/main/java/chat/revolt/screens/settings/SettingsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/settings/SettingsScreen.kt @@ -10,11 +10,6 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material.icons.automirrored.filled.ArrowForward -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.DateRange -import androidx.compose.material.icons.filled.Info -import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -90,7 +85,7 @@ fun SettingsScreen( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } @@ -120,10 +115,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - painter = painterResource(R.drawable.ic_card_account_details_24dp), - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_id_card_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_profile") @@ -139,10 +136,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - painter = painterResource(R.drawable.ic_tablet_cellphone_24dp), - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_devices_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_sessions") @@ -162,10 +161,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - painter = painterResource(R.drawable.ic_palette_24dp), - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_palette_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_appearance") @@ -181,10 +182,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - painter = painterResource(R.drawable.ic_earth_24dp), - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_language_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_language") @@ -200,10 +203,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - painter = painterResource(R.drawable.ic_message_text_24dp), - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_chat_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_chat") @@ -223,10 +228,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - imageVector = Icons.Default.Info, - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_info_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_about") @@ -243,10 +250,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - imageVector = Icons.Default.Settings, - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_sign_language_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_debug") @@ -264,10 +273,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - imageVector = Icons.AutoMirrored.Default.ArrowForward, - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_sign_language_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_labs") @@ -285,10 +296,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - painter = painterResource(R.drawable.ic_flask_24dp), - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_brand_family_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_experiments") @@ -314,10 +327,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - imageVector = Icons.Default.DateRange, - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_wand_shine_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_changelogs") @@ -338,10 +353,12 @@ fun SettingsScreen( ) }, leadingContent = { - Icon( - painter = painterResource(R.drawable.ic_comment_quote_24dp), - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_feedback_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("settings_view_feedback") @@ -365,9 +382,9 @@ fun SettingsScreen( } }, leadingContent = { - CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.error) { + SettingsIcon(danger = true) { Icon( - imageVector = Icons.Default.Close, + painter = painterResource(R.drawable.icn_logout_24dp), contentDescription = null, ) } @@ -390,7 +407,7 @@ fun SettingsScreen( } @Composable -private fun SettingsIcon(danger: Boolean = false, content: @Composable () -> Unit) { +fun SettingsIcon(danger: Boolean = false, content: @Composable () -> Unit) { CompositionLocalProvider( LocalContentColor provides if (danger) MaterialTheme.colorScheme.error diff --git a/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsHome.kt b/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsHome.kt index 2e167be4..e3729722 100644 --- a/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsHome.kt +++ b/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsHome.kt @@ -7,10 +7,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material.icons.filled.Delete -import androidx.compose.material.icons.filled.Info import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator @@ -48,6 +44,7 @@ import chat.revolt.api.routes.channel.leaveDeleteOrCloseChannel import chat.revolt.api.schemas.ChannelType import chat.revolt.api.settings.FeatureFlags import chat.revolt.internals.extensions.rememberChannelPermissions +import chat.revolt.screens.settings.SettingsIcon import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class) @@ -113,7 +110,7 @@ fun ChannelSettingsHome(navController: NavController, channelId: String) { navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } @@ -136,10 +133,12 @@ fun ChannelSettingsHome(navController: NavController, channelId: String) { ) }, leadingContent = { - Icon( - imageVector = Icons.Default.Info, - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(R.drawable.icn_info_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("channel_settings_view_overview") @@ -158,10 +157,12 @@ fun ChannelSettingsHome(navController: NavController, channelId: String) { ) }, leadingContent = { - Icon( - painter = painterResource(id = R.drawable.ic_list_status_24dp), - contentDescription = null, - ) + SettingsIcon { + Icon( + painter = painterResource(id = R.drawable.icn_page_info_24dp), + contentDescription = null, + ) + } }, modifier = Modifier .testTag("channel_settings_view_permissions") @@ -181,9 +182,9 @@ fun ChannelSettingsHome(navController: NavController, channelId: String) { } }, leadingContent = { - CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.error) { + SettingsIcon(danger = true) { Icon( - imageVector = Icons.Default.Delete, + painter = painterResource(R.drawable.icn_delete_24dp), contentDescription = null, ) } diff --git a/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsOverview.kt b/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsOverview.kt index f2687998..ae583738 100644 --- a/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsOverview.kt +++ b/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsOverview.kt @@ -44,6 +44,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -300,7 +301,7 @@ fun ChannelSettingsOverview( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } @@ -315,7 +316,7 @@ fun ChannelSettingsOverview( ) { FloatingActionButton(onClick = { viewModel.updateChannel() }) { Icon( - imageVector = Icons.Default.Check, + painter = painterResource(R.drawable.icn_check_24dp), contentDescription = stringResource(R.string.channel_settings_overview_save) ) } diff --git a/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsPermissions.kt b/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsPermissions.kt index 58da4906..695c4d16 100644 --- a/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsPermissions.kt +++ b/app/src/main/java/chat/revolt/screens/settings/channel/ChannelSettingsPermissions.kt @@ -21,6 +21,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.navigation.NavController @@ -50,7 +51,7 @@ fun ChannelSettingsPermissions(navController: NavController, channelId: String) navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } diff --git a/app/src/main/java/chat/revolt/settings/dsl/SettingsPage.kt b/app/src/main/java/chat/revolt/settings/dsl/SettingsPage.kt index c8ee0e12..7c7b0a73 100644 --- a/app/src/main/java/chat/revolt/settings/dsl/SettingsPage.kt +++ b/app/src/main/java/chat/revolt/settings/dsl/SettingsPage.kt @@ -24,6 +24,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.navigation.NavController @@ -107,7 +108,7 @@ fun SettingsPage( navController.popBackStack() }) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back) ) } diff --git a/app/src/main/java/chat/revolt/sheets/AddServerSheet.kt b/app/src/main/java/chat/revolt/sheets/AddServerSheet.kt index 3e57496c..f207933c 100644 --- a/app/src/main/java/chat/revolt/sheets/AddServerSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/AddServerSheet.kt @@ -25,8 +25,6 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.input.TextFieldLineLimits import androidx.compose.foundation.text.input.rememberTextFieldState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.Button import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -47,6 +45,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.PathEffect import androidx.compose.ui.graphics.drawscope.Stroke 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.text.style.TextAlign @@ -219,7 +218,7 @@ fun AddServerSheet(onDismiss: () -> Unit) { } ) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back), ) } @@ -372,7 +371,7 @@ fun AddServerSheet(onDismiss: () -> Unit) { } ) { Icon( - imageVector = Icons.AutoMirrored.Default.ArrowBack, + painter = painterResource(R.drawable.icn_arrow_back_24dp), contentDescription = stringResource(id = R.string.back), ) } diff --git a/app/src/main/java/chat/revolt/sheets/ChannelContextSheet.kt b/app/src/main/java/chat/revolt/sheets/ChannelContextSheet.kt index bb1d1c43..57ef991d 100644 --- a/app/src/main/java/chat/revolt/sheets/ChannelContextSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/ChannelContextSheet.kt @@ -51,7 +51,7 @@ fun ChannelContextSheet(channelId: String, onHideSheet: suspend () -> Unit) { }, leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_content_copy_id_24dp), + painter = painterResource(id = R.drawable.icn_identifier_copy_24dp), contentDescription = null ) }, @@ -82,7 +82,7 @@ fun ChannelContextSheet(channelId: String, onHideSheet: suspend () -> Unit) { }, leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_eye_check_24dp), + painter = painterResource(id = R.drawable.icn_mark_chat_read_24dp), contentDescription = null ) }, diff --git a/app/src/main/java/chat/revolt/sheets/ChannelInfoSheet.kt b/app/src/main/java/chat/revolt/sheets/ChannelInfoSheet.kt index ed00919d..36ffb27b 100644 --- a/app/src/main/java/chat/revolt/sheets/ChannelInfoSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/ChannelInfoSheet.kt @@ -6,11 +6,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.List -import androidx.compose.material.icons.filled.Add -import androidx.compose.material.icons.filled.Notifications -import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.HorizontalDivider @@ -26,6 +21,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog @@ -128,7 +124,7 @@ fun ChannelInfoSheet(channelId: String, onHideSheet: suspend () -> Unit) { }, leadingContent = { Icon( - imageVector = Icons.AutoMirrored.Default.List, + painter = painterResource(R.drawable.icn_list_24dp), contentDescription = null ) }, @@ -157,7 +153,7 @@ fun ChannelInfoSheet(channelId: String, onHideSheet: suspend () -> Unit) { }, leadingContent = { Icon( - imageVector = Icons.Default.Add, + painter = painterResource(R.drawable.icn_add_24dp), contentDescription = null ) }, @@ -176,7 +172,7 @@ fun ChannelInfoSheet(channelId: String, onHideSheet: suspend () -> Unit) { }, leadingContent = { Icon( - imageVector = Icons.Default.Add, + painter = painterResource(R.drawable.icn_add_24dp), contentDescription = null ) }, @@ -196,7 +192,7 @@ fun ChannelInfoSheet(channelId: String, onHideSheet: suspend () -> Unit) { }, leadingContent = { Icon( - imageVector = Icons.Default.Notifications, + painter = painterResource(R.drawable.icn_notification_settings_24dp), contentDescription = null ) }, @@ -215,7 +211,7 @@ fun ChannelInfoSheet(channelId: String, onHideSheet: suspend () -> Unit) { }, leadingContent = { Icon( - imageVector = Icons.Default.Settings, + painter = painterResource(R.drawable.icn_settings_24dp), contentDescription = null ) }, diff --git a/app/src/main/java/chat/revolt/sheets/EmoteInfoSheet.kt b/app/src/main/java/chat/revolt/sheets/EmoteInfoSheet.kt index 1574ee9a..80c36386 100644 --- a/app/src/main/java/chat/revolt/sheets/EmoteInfoSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/EmoteInfoSheet.kt @@ -107,7 +107,7 @@ fun EmoteInfoSheet(id: String, onDismiss: () -> Unit) { }, leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_content_copy_24dp), + painter = painterResource(R.drawable.icn_content_copy_24dp), contentDescription = null ) }, diff --git a/app/src/main/java/chat/revolt/sheets/LinkInfoSheet.kt b/app/src/main/java/chat/revolt/sheets/LinkInfoSheet.kt index b59481d2..45c5dde5 100644 --- a/app/src/main/java/chat/revolt/sheets/LinkInfoSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/LinkInfoSheet.kt @@ -10,8 +10,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ExitToApp import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -83,7 +81,7 @@ fun LinkInfoSheet(url: String, onDismiss: () -> Unit) { }, leadingContent = { Icon( - imageVector = Icons.AutoMirrored.Default.ExitToApp, + painter = painterResource(R.drawable.icn_open_in_browser_24dp), contentDescription = null ) }, @@ -114,7 +112,7 @@ fun LinkInfoSheet(url: String, onDismiss: () -> Unit) { }, leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_content_copy_24dp), + painter = painterResource(R.drawable.icn_content_copy_24dp), contentDescription = null ) }, diff --git a/app/src/main/java/chat/revolt/sheets/MemberContextSheet.kt b/app/src/main/java/chat/revolt/sheets/MemberContextSheet.kt index c4a2b022..6ccf99c0 100644 --- a/app/src/main/java/chat/revolt/sheets/MemberContextSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/MemberContextSheet.kt @@ -60,7 +60,7 @@ fun ColumnScope.GroupDMMemberContextSheet( leadingContent = { CompositionLocalProvider(value = LocalContentColor provides MaterialTheme.colorScheme.error) { Icon( - painter = painterResource(R.drawable.ic_account_cancel_24dp), + painter = painterResource(R.drawable.icn_person_off_24dp), contentDescription = null ) } @@ -82,7 +82,7 @@ fun ColumnScope.GroupDMMemberContextSheet( }, leadingContent = { Icon( - painter = painterResource(R.drawable.ic_content_copy_id_24dp), + painter = painterResource(R.drawable.icn_identifier_copy_24dp), contentDescription = null ) }, @@ -132,7 +132,7 @@ fun ColumnScope.ServerMemberContextSheet( }, leadingContent = { Icon( - painter = painterResource(R.drawable.ic_content_copy_id_24dp), + painter = painterResource(R.drawable.icn_identifier_copy_24dp), contentDescription = null ) }, diff --git a/app/src/main/java/chat/revolt/sheets/MessageContextSheet.kt b/app/src/main/java/chat/revolt/sheets/MessageContextSheet.kt index 832e3b9e..89608dbc 100644 --- a/app/src/main/java/chat/revolt/sheets/MessageContextSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/MessageContextSheet.kt @@ -9,9 +9,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Delete -import androidx.compose.material.icons.filled.Edit import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator @@ -98,7 +95,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_content_copy_24dp), + painter = painterResource(id = R.drawable.icn_content_copy_24dp), contentDescription = null ) }, @@ -144,7 +141,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_link_variant_24dp), + painter = painterResource(id = R.drawable.icn_link_24dp), contentDescription = null ) }, @@ -204,7 +201,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_content_copy_id_24dp), + painter = painterResource(id = R.drawable.icn_identifier_copy_24dp), contentDescription = null ) }, @@ -344,7 +341,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_reply_24dp), + painter = painterResource(id = R.drawable.icn_reply_24dp), contentDescription = null ) }, @@ -364,7 +361,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_hamburger_plus_24dp), + painter = painterResource(id = R.drawable.icn_add_reaction_24dp), contentDescription = null ) }, @@ -382,7 +379,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - imageVector = Icons.Default.Edit, + painter = painterResource(R.drawable.icn_edit_24dp), contentDescription = null ) }, @@ -403,7 +400,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_eye_off_24dp), + painter = painterResource(id = R.drawable.icn_visibility_off_24dp), contentDescription = null ) }, @@ -429,7 +426,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_file_tree_24dp), + painter = painterResource(id = R.drawable.icn_account_tree_24dp), contentDescription = null ) }, @@ -448,7 +445,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_share_24dp), + painter = painterResource(id = R.drawable.icn_ios_share_24dp), contentDescription = null, ) }, @@ -474,7 +471,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - imageVector = Icons.Default.Delete, + painter = painterResource(R.drawable.icn_delete_24dp), contentDescription = null ) }, @@ -494,7 +491,7 @@ fun MessageContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_flag_24dp), + painter = painterResource(id = R.drawable.icn_report_24dp), contentDescription = null ) }, diff --git a/app/src/main/java/chat/revolt/sheets/ServerContextSheet.kt b/app/src/main/java/chat/revolt/sheets/ServerContextSheet.kt index 55ce84c6..62625b70 100644 --- a/app/src/main/java/chat/revolt/sheets/ServerContextSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/ServerContextSheet.kt @@ -208,7 +208,7 @@ fun ServerContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_content_copy_id_24dp), + painter = painterResource(id = R.drawable.icn_identifier_copy_24dp), contentDescription = null ) }, @@ -239,7 +239,7 @@ fun ServerContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_eye_check_24dp), + painter = painterResource(id = R.drawable.icn_mark_chat_read_24dp), contentDescription = null ) }, @@ -262,7 +262,7 @@ fun ServerContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_flag_24dp), + painter = painterResource(id = R.drawable.icn_report_24dp), contentDescription = null ) }, @@ -280,7 +280,7 @@ fun ServerContextSheet( SheetButton( leadingContent = { Icon( - painter = painterResource(id = R.drawable.ic_arrow_left_bold_box_24dp), + painter = painterResource(id = R.drawable.icn_door_open_24dp), contentDescription = null, ) }, diff --git a/app/src/main/java/chat/revolt/sheets/StatusSheet.kt b/app/src/main/java/chat/revolt/sheets/StatusSheet.kt index 9a8c21ce..fb2fdac0 100644 --- a/app/src/main/java/chat/revolt/sheets/StatusSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/StatusSheet.kt @@ -33,6 +33,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -225,7 +226,7 @@ fun StatusSheet(onBeforeNavigation: () -> Unit, onGoSettings: () -> Unit) { ) Icon( - imageVector = Icons.Default.Edit, + painter = painterResource(R.drawable.icn_edit_24dp), contentDescription = null, modifier = Modifier.padding(16.dp) ) @@ -235,7 +236,7 @@ fun StatusSheet(onBeforeNavigation: () -> Unit, onGoSettings: () -> Unit) { SheetButton( leadingContent = { Icon( - imageVector = Icons.Default.Settings, + painter = painterResource(R.drawable.icn_settings_24dp), contentDescription = null ) }, diff --git a/app/src/main/java/chat/revolt/sheets/UserCardSheet.kt b/app/src/main/java/chat/revolt/sheets/UserCardSheet.kt index c1d5301a..c6386a55 100644 --- a/app/src/main/java/chat/revolt/sheets/UserCardSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/UserCardSheet.kt @@ -209,7 +209,7 @@ fun UserCardSheet(user: User?) { modifier = Modifier.weight(1f) ) { Icon( - painter = painterResource(R.drawable.ic_share_24dp), + painter = painterResource(R.drawable.icn_ios_share_24dp), contentDescription = null ) Spacer(modifier = Modifier.width(8.dp)) @@ -229,7 +229,7 @@ fun UserCardSheet(user: User?) { modifier = Modifier.weight(1f) ) { Icon( - painter = painterResource(R.drawable.ic_content_copy_24dp), + painter = painterResource(R.drawable.icn_content_copy_24dp), contentDescription = null ) Spacer(modifier = Modifier.width(8.dp)) diff --git a/app/src/main/java/chat/revolt/sheets/UserInfoSheet.kt b/app/src/main/java/chat/revolt/sheets/UserInfoSheet.kt index 267841aa..fee3cf9d 100644 --- a/app/src/main/java/chat/revolt/sheets/UserInfoSheet.kt +++ b/app/src/main/java/chat/revolt/sheets/UserInfoSheet.kt @@ -90,7 +90,7 @@ fun UserInfoSheet( NonIdealState( icon = { Icon( - painter = painterResource(R.drawable.ic_alert_decagram_24dp), + painter = painterResource(R.drawable.icn_error_24dp), contentDescription = null, modifier = Modifier.size(it) ) @@ -164,7 +164,7 @@ fun UserInfoSheet( onClick = { showUserCard = true }, ) { Icon( - painter = painterResource(R.drawable.ic_badge_account_horizontal_24dp), + painter = painterResource(R.drawable.icn_badge_24dp), contentDescription = null ) } @@ -360,7 +360,7 @@ fun UserInfoSheet( ) } ?: run { Icon( - painter = painterResource(id = R.drawable.ic_alert_decagram_24dp), + painter = painterResource(id = R.drawable.icn_error_24dp), contentDescription = null ) Spacer(modifier = Modifier.width(8.dp)) @@ -380,7 +380,7 @@ fun UserInfoSheet( NonIdealState( icon = { Icon( - painter = painterResource(R.drawable.ic_alert_decagram_24dp), + painter = painterResource(R.drawable.icn_error_24dp), contentDescription = null, modifier = Modifier.size(24.dp) ) diff --git a/app/src/main/res/drawable/icn_account_box_24dp.xml b/app/src/main/res/drawable/icn_account_box_24dp.xml new file mode 100644 index 00000000..af9e42c6 --- /dev/null +++ b/app/src/main/res/drawable/icn_account_box_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_account_circle_24dp.xml b/app/src/main/res/drawable/icn_account_circle_24dp.xml new file mode 100644 index 00000000..5e4f932b --- /dev/null +++ b/app/src/main/res/drawable/icn_account_circle_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_account_tree_24dp.xml b/app/src/main/res/drawable/icn_account_tree_24dp.xml new file mode 100644 index 00000000..e89e4764 --- /dev/null +++ b/app/src/main/res/drawable/icn_account_tree_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_add_24dp.xml b/app/src/main/res/drawable/icn_add_24dp.xml new file mode 100644 index 00000000..d6fd3d37 --- /dev/null +++ b/app/src/main/res/drawable/icn_add_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_add_reaction_24dp.xml b/app/src/main/res/drawable/icn_add_reaction_24dp.xml new file mode 100644 index 00000000..8297412b --- /dev/null +++ b/app/src/main/res/drawable/icn_add_reaction_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_arrow_back_24dp.xml b/app/src/main/res/drawable/icn_arrow_back_24dp.xml new file mode 100644 index 00000000..0e2e8635 --- /dev/null +++ b/app/src/main/res/drawable/icn_arrow_back_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_arrow_forward_24dp.xml b/app/src/main/res/drawable/icn_arrow_forward_24dp.xml new file mode 100644 index 00000000..81139b11 --- /dev/null +++ b/app/src/main/res/drawable/icn_arrow_forward_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_attach_file_24dp.xml b/app/src/main/res/drawable/icn_attach_file_24dp.xml new file mode 100644 index 00000000..6d9ac738 --- /dev/null +++ b/app/src/main/res/drawable/icn_attach_file_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_attach_file_off_24dp.xml b/app/src/main/res/drawable/icn_attach_file_off_24dp.xml new file mode 100644 index 00000000..a4c1f00a --- /dev/null +++ b/app/src/main/res/drawable/icn_attach_file_off_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_badge_24dp.xml b/app/src/main/res/drawable/icn_badge_24dp.xml new file mode 100644 index 00000000..2deaec7d --- /dev/null +++ b/app/src/main/res/drawable/icn_badge_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_block_24dp.xml b/app/src/main/res/drawable/icn_block_24dp.xml new file mode 100644 index 00000000..540750b3 --- /dev/null +++ b/app/src/main/res/drawable/icn_block_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_brand_family_24dp.xml b/app/src/main/res/drawable/icn_brand_family_24dp.xml new file mode 100644 index 00000000..51364ae9 --- /dev/null +++ b/app/src/main/res/drawable/icn_brand_family_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_brightness_alert_24dp.xml b/app/src/main/res/drawable/icn_brightness_alert_24dp.xml new file mode 100644 index 00000000..0b0b1b57 --- /dev/null +++ b/app/src/main/res/drawable/icn_brightness_alert_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_bus_railway_24dp.xml b/app/src/main/res/drawable/icn_bus_railway_24dp.xml new file mode 100644 index 00000000..f8694174 --- /dev/null +++ b/app/src/main/res/drawable/icn_bus_railway_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_camera_24dp.xml b/app/src/main/res/drawable/icn_camera_24dp.xml new file mode 100644 index 00000000..95a7ab12 --- /dev/null +++ b/app/src/main/res/drawable/icn_camera_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_chat_24dp.xml b/app/src/main/res/drawable/icn_chat_24dp.xml new file mode 100644 index 00000000..6ce2d158 --- /dev/null +++ b/app/src/main/res/drawable/icn_chat_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_check_24dp.xml b/app/src/main/res/drawable/icn_check_24dp.xml new file mode 100644 index 00000000..280f0bd8 --- /dev/null +++ b/app/src/main/res/drawable/icn_check_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_close_24dp.xml b/app/src/main/res/drawable/icn_close_24dp.xml new file mode 100644 index 00000000..7a0ff35d --- /dev/null +++ b/app/src/main/res/drawable/icn_close_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_cloud_24dp.xml b/app/src/main/res/drawable/icn_cloud_24dp.xml new file mode 100644 index 00000000..b6651328 --- /dev/null +++ b/app/src/main/res/drawable/icn_cloud_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_content_copy_24dp.xml b/app/src/main/res/drawable/icn_content_copy_24dp.xml new file mode 100644 index 00000000..a423fecf --- /dev/null +++ b/app/src/main/res/drawable/icn_content_copy_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_delete_24dp.xml b/app/src/main/res/drawable/icn_delete_24dp.xml new file mode 100644 index 00000000..d724c2e0 --- /dev/null +++ b/app/src/main/res/drawable/icn_delete_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_devices_24dp.xml b/app/src/main/res/drawable/icn_devices_24dp.xml new file mode 100644 index 00000000..7d69f1aa --- /dev/null +++ b/app/src/main/res/drawable/icn_devices_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_download_24dp.xml b/app/src/main/res/drawable/icn_download_24dp.xml new file mode 100644 index 00000000..dba46014 --- /dev/null +++ b/app/src/main/res/drawable/icn_download_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_eda_24dp.xml b/app/src/main/res/drawable/icn_eda_24dp.xml new file mode 100644 index 00000000..feb34f1f --- /dev/null +++ b/app/src/main/res/drawable/icn_eda_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_edit_24dp.xml b/app/src/main/res/drawable/icn_edit_24dp.xml new file mode 100644 index 00000000..b2531085 --- /dev/null +++ b/app/src/main/res/drawable/icn_edit_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_emoji_nature_24dp.xml b/app/src/main/res/drawable/icn_emoji_nature_24dp.xml new file mode 100644 index 00000000..958ed649 --- /dev/null +++ b/app/src/main/res/drawable/icn_emoji_nature_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_emoji_objects_24dp.xml b/app/src/main/res/drawable/icn_emoji_objects_24dp.xml new file mode 100644 index 00000000..13e69fbf --- /dev/null +++ b/app/src/main/res/drawable/icn_emoji_objects_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_emoji_people_24dp.xml b/app/src/main/res/drawable/icn_emoji_people_24dp.xml new file mode 100644 index 00000000..95c476d5 --- /dev/null +++ b/app/src/main/res/drawable/icn_emoji_people_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_emoji_symbols_24dp.xml b/app/src/main/res/drawable/icn_emoji_symbols_24dp.xml new file mode 100644 index 00000000..a8637d9d --- /dev/null +++ b/app/src/main/res/drawable/icn_emoji_symbols_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_error_24dp.xml b/app/src/main/res/drawable/icn_error_24dp.xml new file mode 100644 index 00000000..8355c11c --- /dev/null +++ b/app/src/main/res/drawable/icn_error_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_explore_24dp.xml b/app/src/main/res/drawable/icn_explore_24dp.xml new file mode 100644 index 00000000..9cd59b9e --- /dev/null +++ b/app/src/main/res/drawable/icn_explore_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_feedback_24dp.xml b/app/src/main/res/drawable/icn_feedback_24dp.xml new file mode 100644 index 00000000..1765191e --- /dev/null +++ b/app/src/main/res/drawable/icn_feedback_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_file_export_24dp.xml b/app/src/main/res/drawable/icn_file_export_24dp.xml new file mode 100644 index 00000000..783669eb --- /dev/null +++ b/app/src/main/res/drawable/icn_file_export_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_file_open_24dp.xml b/app/src/main/res/drawable/icn_file_open_24dp.xml new file mode 100644 index 00000000..c94ebed3 --- /dev/null +++ b/app/src/main/res/drawable/icn_file_open_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_file_present_24dp.xml b/app/src/main/res/drawable/icn_file_present_24dp.xml new file mode 100644 index 00000000..9513c4b2 --- /dev/null +++ b/app/src/main/res/drawable/icn_file_present_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_flag_24dp.xml b/app/src/main/res/drawable/icn_flag_24dp.xml new file mode 100644 index 00000000..2b2dd31f --- /dev/null +++ b/app/src/main/res/drawable/icn_flag_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_forum_24dp.xml b/app/src/main/res/drawable/icn_forum_24dp.xml new file mode 100644 index 00000000..8531a432 --- /dev/null +++ b/app/src/main/res/drawable/icn_forum_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_forum_24dp__fill.xml b/app/src/main/res/drawable/icn_forum_24dp__fill.xml new file mode 100644 index 00000000..1339c1a1 --- /dev/null +++ b/app/src/main/res/drawable/icn_forum_24dp__fill.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_group_24dp.xml b/app/src/main/res/drawable/icn_group_24dp.xml new file mode 100644 index 00000000..556499a8 --- /dev/null +++ b/app/src/main/res/drawable/icn_group_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_hardware_24dp.xml b/app/src/main/res/drawable/icn_hardware_24dp.xml new file mode 100644 index 00000000..e5aea58d --- /dev/null +++ b/app/src/main/res/drawable/icn_hardware_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_home_24dp.xml b/app/src/main/res/drawable/icn_home_24dp.xml new file mode 100644 index 00000000..16b05380 --- /dev/null +++ b/app/src/main/res/drawable/icn_home_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_id_card_24dp.xml b/app/src/main/res/drawable/icn_id_card_24dp.xml new file mode 100644 index 00000000..b70f75ca --- /dev/null +++ b/app/src/main/res/drawable/icn_id_card_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_identifier_copy_24dp.xml b/app/src/main/res/drawable/icn_identifier_copy_24dp.xml new file mode 100644 index 00000000..203b5f1d --- /dev/null +++ b/app/src/main/res/drawable/icn_identifier_copy_24dp.xml @@ -0,0 +1,15 @@ + + + + diff --git a/app/src/main/res/drawable/icn_ios_share_24dp.xml b/app/src/main/res/drawable/icn_ios_share_24dp.xml new file mode 100644 index 00000000..3a65b172 --- /dev/null +++ b/app/src/main/res/drawable/icn_ios_share_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_keep_24dp.xml b/app/src/main/res/drawable/icn_keep_24dp.xml new file mode 100644 index 00000000..b7be67f8 --- /dev/null +++ b/app/src/main/res/drawable/icn_keep_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_keyboard_arrow_right_24dp.xml b/app/src/main/res/drawable/icn_keyboard_arrow_right_24dp.xml new file mode 100644 index 00000000..3d036ecb --- /dev/null +++ b/app/src/main/res/drawable/icn_keyboard_arrow_right_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_language_24dp.xml b/app/src/main/res/drawable/icn_language_24dp.xml new file mode 100644 index 00000000..2211f7a2 --- /dev/null +++ b/app/src/main/res/drawable/icn_language_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_link_24dp.xml b/app/src/main/res/drawable/icn_link_24dp.xml new file mode 100644 index 00000000..e8af9e16 --- /dev/null +++ b/app/src/main/res/drawable/icn_link_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_list_24dp.xml b/app/src/main/res/drawable/icn_list_24dp.xml new file mode 100644 index 00000000..a16c9370 --- /dev/null +++ b/app/src/main/res/drawable/icn_list_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_lock_24dp.xml b/app/src/main/res/drawable/icn_lock_24dp.xml new file mode 100644 index 00000000..11d93f2f --- /dev/null +++ b/app/src/main/res/drawable/icn_lock_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_logout_24dp.xml b/app/src/main/res/drawable/icn_logout_24dp.xml new file mode 100644 index 00000000..77efdba7 --- /dev/null +++ b/app/src/main/res/drawable/icn_logout_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_mark_chat_read_24dp.xml b/app/src/main/res/drawable/icn_mark_chat_read_24dp.xml new file mode 100644 index 00000000..0b11386c --- /dev/null +++ b/app/src/main/res/drawable/icn_mark_chat_read_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_menu_24dp.xml b/app/src/main/res/drawable/icn_menu_24dp.xml new file mode 100644 index 00000000..538d1cf6 --- /dev/null +++ b/app/src/main/res/drawable/icn_menu_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_mood_24dp.xml b/app/src/main/res/drawable/icn_mood_24dp.xml new file mode 100644 index 00000000..947ca7fe --- /dev/null +++ b/app/src/main/res/drawable/icn_mood_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_more_vert_24dp.xml b/app/src/main/res/drawable/icn_more_vert_24dp.xml new file mode 100644 index 00000000..e4aa85d5 --- /dev/null +++ b/app/src/main/res/drawable/icn_more_vert_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_note_stack_24dp.xml b/app/src/main/res/drawable/icn_note_stack_24dp.xml new file mode 100644 index 00000000..fe180949 --- /dev/null +++ b/app/src/main/res/drawable/icn_note_stack_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_notification_settings_24dp.xml b/app/src/main/res/drawable/icn_notification_settings_24dp.xml new file mode 100644 index 00000000..806f9692 --- /dev/null +++ b/app/src/main/res/drawable/icn_notification_settings_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_open_in_browser_24dp.xml b/app/src/main/res/drawable/icn_open_in_browser_24dp.xml new file mode 100644 index 00000000..40fcc742 --- /dev/null +++ b/app/src/main/res/drawable/icn_open_in_browser_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_page_info_24dp.xml b/app/src/main/res/drawable/icn_page_info_24dp.xml new file mode 100644 index 00000000..9dd10189 --- /dev/null +++ b/app/src/main/res/drawable/icn_page_info_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_palette_24dp.xml b/app/src/main/res/drawable/icn_palette_24dp.xml new file mode 100644 index 00000000..58c504c2 --- /dev/null +++ b/app/src/main/res/drawable/icn_palette_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_pause_24dp.xml b/app/src/main/res/drawable/icn_pause_24dp.xml new file mode 100644 index 00000000..e80541fd --- /dev/null +++ b/app/src/main/res/drawable/icn_pause_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_person_off_24dp.xml b/app/src/main/res/drawable/icn_person_off_24dp.xml new file mode 100644 index 00000000..bbf48374 --- /dev/null +++ b/app/src/main/res/drawable/icn_person_off_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_photo_library_24dp.xml b/app/src/main/res/drawable/icn_photo_library_24dp.xml new file mode 100644 index 00000000..492224cb --- /dev/null +++ b/app/src/main/res/drawable/icn_photo_library_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_play_arrow_24dp.xml b/app/src/main/res/drawable/icn_play_arrow_24dp.xml new file mode 100644 index 00000000..9bc6b5d6 --- /dev/null +++ b/app/src/main/res/drawable/icn_play_arrow_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_qr_code_scanner_24dp.xml b/app/src/main/res/drawable/icn_qr_code_scanner_24dp.xml new file mode 100644 index 00000000..f7ec937a --- /dev/null +++ b/app/src/main/res/drawable/icn_qr_code_scanner_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_reply_24dp.xml b/app/src/main/res/drawable/icn_reply_24dp.xml new file mode 100644 index 00000000..718f8e91 --- /dev/null +++ b/app/src/main/res/drawable/icn_reply_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_report_24dp.xml b/app/src/main/res/drawable/icn_report_24dp.xml new file mode 100644 index 00000000..e462b1dd --- /dev/null +++ b/app/src/main/res/drawable/icn_report_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_search_24dp.xml b/app/src/main/res/drawable/icn_search_24dp.xml new file mode 100644 index 00000000..390774bb --- /dev/null +++ b/app/src/main/res/drawable/icn_search_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_send_24dp.xml b/app/src/main/res/drawable/icn_send_24dp.xml new file mode 100644 index 00000000..254f05c6 --- /dev/null +++ b/app/src/main/res/drawable/icn_send_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_settings_24dp.xml b/app/src/main/res/drawable/icn_settings_24dp.xml new file mode 100644 index 00000000..4bcd4aae --- /dev/null +++ b/app/src/main/res/drawable/icn_settings_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_sign_language_24dp.xml b/app/src/main/res/drawable/icn_sign_language_24dp.xml new file mode 100644 index 00000000..8bee9795 --- /dev/null +++ b/app/src/main/res/drawable/icn_sign_language_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_smart_toy_24dp.xml b/app/src/main/res/drawable/icn_smart_toy_24dp.xml new file mode 100644 index 00000000..b0ba9a07 --- /dev/null +++ b/app/src/main/res/drawable/icn_smart_toy_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_south_24dp.xml b/app/src/main/res/drawable/icn_south_24dp.xml new file mode 100644 index 00000000..387721ae --- /dev/null +++ b/app/src/main/res/drawable/icn_south_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_sports_bar_24dp.xml b/app/src/main/res/drawable/icn_sports_bar_24dp.xml new file mode 100644 index 00000000..446144f8 --- /dev/null +++ b/app/src/main/res/drawable/icn_sports_bar_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_star_shine_24dp.xml b/app/src/main/res/drawable/icn_star_shine_24dp.xml new file mode 100644 index 00000000..aa19f98e --- /dev/null +++ b/app/src/main/res/drawable/icn_star_shine_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_star_shine_24dp__fill.xml b/app/src/main/res/drawable/icn_star_shine_24dp__fill.xml new file mode 100644 index 00000000..85a0a7ba --- /dev/null +++ b/app/src/main/res/drawable/icn_star_shine_24dp__fill.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_tag_24dp.xml b/app/src/main/res/drawable/icn_tag_24dp.xml new file mode 100644 index 00000000..ab04cfea --- /dev/null +++ b/app/src/main/res/drawable/icn_tag_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_visibility_24dp.xml b/app/src/main/res/drawable/icn_visibility_24dp.xml new file mode 100644 index 00000000..23d640a8 --- /dev/null +++ b/app/src/main/res/drawable/icn_visibility_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_visibility_off_24dp.xml b/app/src/main/res/drawable/icn_visibility_off_24dp.xml new file mode 100644 index 00000000..6fa698a6 --- /dev/null +++ b/app/src/main/res/drawable/icn_visibility_off_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_volume_up_24dp.xml b/app/src/main/res/drawable/icn_volume_up_24dp.xml new file mode 100644 index 00000000..bc9c5c82 --- /dev/null +++ b/app/src/main/res/drawable/icn_volume_up_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_wand_shine_24dp.xml b/app/src/main/res/drawable/icn_wand_shine_24dp.xml new file mode 100644 index 00000000..c31fd904 --- /dev/null +++ b/app/src/main/res/drawable/icn_wand_shine_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/menu/menu_videoplayer.xml b/app/src/main/res/menu/menu_videoplayer.xml index 02482fe7..90588d7e 100644 --- a/app/src/main/res/menu/menu_videoplayer.xml +++ b/app/src/main/res/menu/menu_videoplayer.xml @@ -4,7 +4,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> Date: Sat, 26 Jul 2025 07:09:23 +0200 Subject: [PATCH 2/4] chore: update metadata Signed-off-by: Infi --- .idea/codeStyles/Project.xml | 35 +++++++++++++++++++++++++++++++++++ .idea/deviceManager.xml | 13 +++++++++++++ .idea/misc.xml | 2 ++ .idea/valkyrie_settings.xml | 2 +- 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 .idea/deviceManager.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 7643783a..7f70f7ef 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,5 +1,40 @@ + + + diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml new file mode 100644 index 00000000..91f95584 --- /dev/null +++ b/.idea/deviceManager.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index bfb8555a..7542ef6d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,3 +1,4 @@ + + diff --git a/.idea/valkyrie_settings.xml b/.idea/valkyrie_settings.xml index ae129850..237dcfcd 100644 --- a/.idea/valkyrie_settings.xml +++ b/.idea/valkyrie_settings.xml @@ -2,6 +2,6 @@ \ No newline at end of file From a92a07e2ed4788edb345d8c8207b108e95f8aad0 Mon Sep 17 00:00:00 2001 From: Infi Date: Sat, 26 Jul 2025 07:12:29 +0200 Subject: [PATCH 3/4] feat: geo support Signed-off-by: Infi --- .../chat/revolt/activities/MainActivity.kt | 13 + .../api/routes/microservices/geo/Geo.kt | 35 + .../revolt/api/settings/GeoStateProvider.kt | 18 + .../composables/screens/chat/ChannelIcon.kt | 2 +- .../screens/chat/drawer/ChannelSideDrawer.kt | 13 +- .../composables/vectorassets/GeoGateUX.kt | 92 ++ .../chat/views/channel/ChannelScreen.kt | 1124 +++++++++-------- .../views/channel/ChannelScreenGeoGate.kt | 81 ++ .../views/channel/ChannelScreenViewModel.kt | 6 + .../main/res/drawable/icn_grid_3x3_24dp.xml | 10 + .../res/drawable/icn_grid_3x3_off_24dp.xml | 10 + app/src/main/res/values/strings.xml | 6 + 12 files changed, 851 insertions(+), 559 deletions(-) create mode 100644 app/src/main/java/chat/revolt/api/routes/microservices/geo/Geo.kt create mode 100644 app/src/main/java/chat/revolt/api/settings/GeoStateProvider.kt create mode 100644 app/src/main/java/chat/revolt/composables/vectorassets/GeoGateUX.kt create mode 100644 app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenGeoGate.kt create mode 100644 app/src/main/res/drawable/icn_grid_3x3_24dp.xml create mode 100644 app/src/main/res/drawable/icn_grid_3x3_off_24dp.xml diff --git a/app/src/main/java/chat/revolt/activities/MainActivity.kt b/app/src/main/java/chat/revolt/activities/MainActivity.kt index 153b10c6..161db1fd 100644 --- a/app/src/main/java/chat/revolt/activities/MainActivity.kt +++ b/app/src/main/java/chat/revolt/activities/MainActivity.kt @@ -79,10 +79,12 @@ import chat.revolt.api.HitRateLimitException import chat.revolt.api.RevoltAPI import chat.revolt.api.RevoltHttp import chat.revolt.api.api +import chat.revolt.api.routes.microservices.geo.queryGeo import chat.revolt.api.routes.microservices.health.healthCheck import chat.revolt.api.routes.onboard.needsOnboarding import chat.revolt.api.schemas.HealthNotice import chat.revolt.api.settings.Experiments +import chat.revolt.api.settings.GeoStateProvider import chat.revolt.api.settings.LoadedSettings import chat.revolt.api.settings.SyncedSettings import chat.revolt.composables.generic.HealthAlert @@ -184,6 +186,17 @@ class MainActivityViewModel @Inject constructor( Experiments.hydrateWithKv() Log.d("MainActivity", "Performing health check") doHealthCheck() + Log.d("MainActivity", "Performing update geo state") + updateGeoState() + } + } + + private suspend fun updateGeoState() { + try { + Log.d("MainActivity", "Querying geo state") + GeoStateProvider.updateGeoState(queryGeo()) + } catch (e: Exception) { + Log.e("MainActivity", "Failed to query geo state", e) } } diff --git a/app/src/main/java/chat/revolt/api/routes/microservices/geo/Geo.kt b/app/src/main/java/chat/revolt/api/routes/microservices/geo/Geo.kt new file mode 100644 index 00000000..a54ea4b4 --- /dev/null +++ b/app/src/main/java/chat/revolt/api/routes/microservices/geo/Geo.kt @@ -0,0 +1,35 @@ +package chat.revolt.api.routes.microservices.geo + +import chat.revolt.api.HitRateLimitException +import chat.revolt.api.RevoltHttp +import chat.revolt.api.RevoltJson +import chat.revolt.api.buildUserAgent +import io.ktor.client.request.get +import io.ktor.client.request.header +import io.ktor.client.statement.bodyAsText +import io.ktor.http.HttpStatusCode +import kotlinx.serialization.Serializable + +@Serializable +data class GeoResponse( + val countryCode: String, + val isAgeRestrictedGeo: Boolean, +) + +suspend fun queryGeo(): GeoResponse { + try { + val response = RevoltHttp.get("https://geo.revolt.chat/?client=android") { + header("User-Agent", buildUserAgent("Ktor queryGeo")) + } + + if (response.status == HttpStatusCode.OK) { + return RevoltJson.decodeFromString(response.bodyAsText()) + } else throw Exception("Failed to query geo: ${response.status.value} ${response.status.description}") + } catch (e: Exception) { + throw Exception("Failed to query geo: ${e.message}", e).also { + if (e is HitRateLimitException) { + throw e + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/chat/revolt/api/settings/GeoStateProvider.kt b/app/src/main/java/chat/revolt/api/settings/GeoStateProvider.kt new file mode 100644 index 00000000..47f50b35 --- /dev/null +++ b/app/src/main/java/chat/revolt/api/settings/GeoStateProvider.kt @@ -0,0 +1,18 @@ +package chat.revolt.api.settings + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import chat.revolt.api.routes.microservices.geo.GeoResponse + +object GeoStateProvider { + var geoState by mutableStateOf(null) + private set + + fun updateGeoState(newGeoState: GeoResponse?) { + checkNotNull(newGeoState) { "You shall not unset this value" } + check(if (geoState?.isAgeRestrictedGeo == true) newGeoState.isAgeRestrictedGeo else true) { "You shall not apply a laxer value" } + + geoState = newGeoState + } +} \ No newline at end of file diff --git a/app/src/main/java/chat/revolt/composables/screens/chat/ChannelIcon.kt b/app/src/main/java/chat/revolt/composables/screens/chat/ChannelIcon.kt index 9713296a..59e00931 100644 --- a/app/src/main/java/chat/revolt/composables/screens/chat/ChannelIcon.kt +++ b/app/src/main/java/chat/revolt/composables/screens/chat/ChannelIcon.kt @@ -16,7 +16,7 @@ fun ChannelIcon(channelType: ChannelType, modifier: Modifier = Modifier) { when (channelType) { ChannelType.TextChannel -> { Icon( - painter = painterResource(R.drawable.icn_tag_24dp), + painter = painterResource(R.drawable.icn_grid_3x3_24dp), contentDescription = stringResource(R.string.channel_text), modifier = modifier ) diff --git a/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt b/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt index 5e5cb176..c78fb7c4 100644 --- a/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt +++ b/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt @@ -87,6 +87,7 @@ import chat.revolt.api.schemas.ChannelType import chat.revolt.api.schemas.ServerFlags import chat.revolt.api.schemas.User import chat.revolt.api.schemas.has +import chat.revolt.api.settings.GeoStateProvider import chat.revolt.api.settings.NotificationSettingsProvider import chat.revolt.api.settings.SyncedSettings import chat.revolt.composables.generic.GroupIcon @@ -914,7 +915,17 @@ fun ChannelItem( .fillMaxWidth()) { when (iconType) { is ChannelItemIconType.Channel -> { - ChannelIcon(iconType.type) + when { + GeoStateProvider.geoState?.isAgeRestrictedGeo == true && + channel.nsfw == true -> { + Icon( + painter = painterResource(R.drawable.icn_grid_3x3_off_24dp), + contentDescription = stringResource(R.string.geogate_channel_icon_alt), + ) + } + + else -> ChannelIcon(iconType.type) + } } is ChannelItemIconType.Painter -> { diff --git a/app/src/main/java/chat/revolt/composables/vectorassets/GeoGateUX.kt b/app/src/main/java/chat/revolt/composables/vectorassets/GeoGateUX.kt new file mode 100644 index 00000000..d5a04e9a --- /dev/null +++ b/app/src/main/java/chat/revolt/composables/vectorassets/GeoGateUX.kt @@ -0,0 +1,92 @@ +package chat.revolt.composables.vectorassets + +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +val GeoGateUX: ImageVector + @Composable + get() { + if (_GeoGateUX != null) { + return _GeoGateUX!! + } + _GeoGateUX = ImageVector.Builder( + name = "GeoGate", + defaultWidth = 282.dp, + defaultHeight = 342.dp, + viewportWidth = 282f, + viewportHeight = 342f + ).apply { + path(fill = SolidColor(MaterialTheme.colorScheme.onBackground)) { + moveTo(173.19f, 30.41f) + lineTo(207.56f, 26.67f) + lineTo(214.24f, 88.06f) + lineTo(171.27f, 92.73f) + lineTo(167.48f, 80.72f) + lineTo(133.1f, 84.46f) + lineTo(136.83f, 118.76f) + curveTo(148.6f, 118.88f, 160.25f, 121.25f, 171.13f, 125.76f) + curveTo(182.29f, 130.38f, 192.44f, 137.16f, 200.98f, 145.71f) + curveTo(209.53f, 154.25f, 216.31f, 164.4f, 220.93f, 175.56f) + curveTo(225.56f, 186.73f, 227.94f, 198.69f, 227.94f, 210.78f) + curveTo(227.94f, 235.19f, 218.24f, 258.59f, 200.98f, 275.85f) + curveTo(183.72f, 293.11f, 160.32f, 302.8f, 135.91f, 302.8f) + curveTo(123.83f, 302.8f, 111.86f, 300.42f, 100.69f, 295.8f) + curveTo(89.53f, 291.17f, 79.38f, 284.4f, 70.84f, 275.85f) + curveTo(53.58f, 258.59f, 43.88f, 235.19f, 43.88f, 210.78f) + curveTo(43.88f, 186.37f, 53.58f, 162.96f, 70.84f, 145.71f) + curveTo(79.38f, 137.16f, 89.53f, 130.38f, 100.69f, 125.76f) + curveTo(108.32f, 122.6f, 116.32f, 120.49f, 124.48f, 119.47f) + lineTo(114.15f, 24.41f) + lineTo(169.4f, 18.4f) + lineTo(173.19f, 30.41f) + close() + moveTo(64.22f, 194.31f) + curveTo(63.03f, 199.55f, 62.29f, 205.07f, 62.29f, 210.78f) + curveTo(62.29f, 248.03f, 89.92f, 278.76f, 125.86f, 283.64f) + lineTo(126.71f, 265.99f) + curveTo(121.83f, 265.99f, 117.14f, 264.05f, 113.69f, 260.6f) + curveTo(110.24f, 257.15f, 108.3f, 252.47f, 108.3f, 247.59f) + verticalLineTo(238.39f) + lineTo(64.22f, 194.31f) + close() + moveTo(163.52f, 146.36f) + curveTo(163.52f, 151.24f, 161.58f, 155.92f, 158.13f, 159.38f) + curveTo(154.68f, 162.83f, 149.99f, 164.77f, 145.11f, 164.77f) + horizontalLineTo(126.71f) + verticalLineTo(183.17f) + curveTo(126.71f, 185.61f, 125.74f, 187.95f, 124.01f, 189.68f) + curveTo(122.29f, 191.4f, 119.95f, 192.37f, 117.51f, 192.37f) + horizontalLineTo(99.1f) + verticalLineTo(210.78f) + horizontalLineTo(154.32f) + curveTo(156.76f, 210.78f, 159.1f, 211.75f, 160.82f, 213.48f) + curveTo(162.55f, 215.2f, 163.52f, 217.54f, 163.52f, 219.98f) + verticalLineTo(247.59f) + horizontalLineTo(172.72f) + curveTo(180.91f, 247.59f, 187.81f, 253.02f, 190.21f, 260.38f) + curveTo(198.23f, 251.63f, 204.01f, 241.07f, 207.06f, 229.59f) + curveTo(210.1f, 218.12f, 210.33f, 206.07f, 207.7f, 194.5f) + curveTo(205.08f, 182.92f, 199.69f, 172.15f, 191.99f, 163.11f) + curveTo(184.3f, 154.07f, 174.53f, 147.03f, 163.52f, 142.59f) + verticalLineTo(146.36f) + close() + } + path(fill = SolidColor(MaterialTheme.colorScheme.error)) { + moveTo(281.1f, 314.38f) + lineTo(246.16f, 341.74f) + lineTo(0.5f, 28.08f) + lineTo(35.43f, 0.72f) + lineTo(281.1f, 314.38f) + close() + } + }.build() + + return _GeoGateUX!! + } + +@Suppress("ObjectPropertyName") +private var _GeoGateUX: ImageVector? = null diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt index 72633ae1..5c8b80ab 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt @@ -52,9 +52,6 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.text.InlineTextContent import androidx.compose.foundation.text.appendInlineContent -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Menu import androidx.compose.material3.AssistChip import androidx.compose.material3.Button import androidx.compose.material3.Card @@ -646,622 +643,635 @@ fun ChannelScreen( } } ) { pv -> - Crossfade( - targetState = viewModel.ageGateUnlocked, - label = "ageGateUnlocked" - ) { ageGateUnlocked -> - if (ageGateUnlocked == false) { - ChannelScreenAgeGate( - onAccept = { - scope.launch { - viewModel.unlockAgeGate() - } - }, - onDeny = { - onToggleDrawer() - } - ) - } else if (ageGateUnlocked == null) { - Box(Modifier.fillMaxSize()) { - CircularProgressIndicator(modifier = Modifier.size(48.dp)) - } - } else if (ageGateUnlocked == true) { - Column( - modifier = Modifier - .padding(pv) - ) { - Box( - modifier = Modifier.weight(1f), - contentAlignment = Alignment.BottomCenter - ) { - LazyColumn( - state = lazyListState, - userScrollEnabled = !disableScroll, - reverseLayout = true, - contentPadding = PaddingValues(top = 16.dp, bottom = 32.dp) - ) { - - // If we don't have a guaranteed first item, the message list will not scroll - // to the bottom when new messages are added. Evil hack to make our other evil - // hack (clear/addAll) work. Too bad! - item(key = "guaranteed_first") { - Box {} + if (viewModel.showGeoGate) { + ChannelScreenGeoGate { onToggleDrawer() } + } else { + Crossfade( + targetState = viewModel.ageGateUnlocked, + label = "ageGateUnlocked" + ) { ageGateUnlocked -> + if (ageGateUnlocked == false) { + ChannelScreenAgeGate( + onAccept = { + scope.launch { + viewModel.unlockAgeGate() } + }, + onDeny = { + onToggleDrawer() + } + ) + } else if (ageGateUnlocked == null) { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier.fillMaxSize(), + ) { + CircularProgressIndicator(modifier = Modifier.size(48.dp)) + } + } else if (ageGateUnlocked == true) { + Column( + modifier = Modifier + .padding(pv) + ) { + Box( + modifier = Modifier.weight(1f), + contentAlignment = Alignment.BottomCenter + ) { + LazyColumn( + state = lazyListState, + userScrollEnabled = !disableScroll, + reverseLayout = true, + contentPadding = PaddingValues(top = 16.dp, bottom = 32.dp) + ) { - items( - viewModel.items.size, - key = { index -> - when (val item = viewModel.items[index]) { - is ChannelScreenItem.RegularMessage -> item.message.id!! - is ChannelScreenItem.ProspectiveMessage -> item.message.id!! - is ChannelScreenItem.FailedMessage -> item.message.id!! - is ChannelScreenItem.SystemMessage -> item.message.id!! - is ChannelScreenItem.DateDivider -> item.instant.toEpochMilliseconds() - is ChannelScreenItem.LoadTrigger -> index - is ChannelScreenItem.Loading -> index - } - }, - contentType = { index -> - when (viewModel.items.getOrNull(index)) { - null -> null - is ChannelScreenItem.RegularMessage -> "RegularMessage" - is ChannelScreenItem.ProspectiveMessage -> "ProspectiveMessage" - is ChannelScreenItem.FailedMessage -> "FailedMessage" - is ChannelScreenItem.SystemMessage -> "SystemMessage" - is ChannelScreenItem.DateDivider -> "DateDivider" - is ChannelScreenItem.LoadTrigger -> "LoadTrigger" - is ChannelScreenItem.Loading -> "Loading" - } + // If we don't have a guaranteed first item, the message list will not scroll + // to the bottom when new messages are added. Evil hack to make our other evil + // hack (clear/addAll) work. Too bad! + item(key = "guaranteed_first") { + Box {} } - ) { index -> - when (val item = viewModel.items[index]) { - is ChannelScreenItem.RegularMessage -> { - RegularMessage( - item.message, - viewModel.channel, - drawerIsOpen = drawerIsOpen, - setDrawerGestureEnabled = { - setDrawerGestureEnabled(it) - }, - setDisableScroll = { - disableScroll = it - }, - showMessageBottomSheet = { - messageContextSheetTarget = it - messageContextSheetShown = true - }, - showReactBottomSheet = { - item.message.id?.let { - reactSheetTarget = it - reactSheetShown = true - } - }, - putTextAtCursorPosition = viewModel::putAtCursorPosition, - replyToMessage = viewModel::addReplyTo, - scope = scope - ) - } - is ChannelScreenItem.ProspectiveMessage -> { - Box(Modifier.alpha(0.5f)) { - Message( - message = item.message, - onMessageContextMenu = { - // TODO Context menu that allows you to cancel send - }, - onAvatarClick = {}, - onNameClick = {}, - canReply = false, - onReply = {}, - onAddReaction = {} - ) + items( + viewModel.items.size, + key = { index -> + when (val item = viewModel.items[index]) { + is ChannelScreenItem.RegularMessage -> item.message.id!! + is ChannelScreenItem.ProspectiveMessage -> item.message.id!! + is ChannelScreenItem.FailedMessage -> item.message.id!! + is ChannelScreenItem.SystemMessage -> item.message.id!! + is ChannelScreenItem.DateDivider -> item.instant.toEpochMilliseconds() + is ChannelScreenItem.LoadTrigger -> index + is ChannelScreenItem.Loading -> index + } + }, + contentType = { index -> + when (viewModel.items.getOrNull(index)) { + null -> null + is ChannelScreenItem.RegularMessage -> "RegularMessage" + is ChannelScreenItem.ProspectiveMessage -> "ProspectiveMessage" + is ChannelScreenItem.FailedMessage -> "FailedMessage" + is ChannelScreenItem.SystemMessage -> "SystemMessage" + is ChannelScreenItem.DateDivider -> "DateDivider" + is ChannelScreenItem.LoadTrigger -> "LoadTrigger" + is ChannelScreenItem.Loading -> "Loading" } } + ) { index -> + when (val item = viewModel.items[index]) { + is ChannelScreenItem.RegularMessage -> { + RegularMessage( + item.message, + viewModel.channel, + drawerIsOpen = drawerIsOpen, + setDrawerGestureEnabled = { + setDrawerGestureEnabled(it) + }, + setDisableScroll = { + disableScroll = it + }, + showMessageBottomSheet = { + messageContextSheetTarget = it + messageContextSheetShown = true + }, + showReactBottomSheet = { + item.message.id?.let { + reactSheetTarget = it + reactSheetShown = true + } + }, + putTextAtCursorPosition = viewModel::putAtCursorPosition, + replyToMessage = viewModel::addReplyTo, + scope = scope + ) + } - is ChannelScreenItem.FailedMessage -> { - CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.error) { - Column { + is ChannelScreenItem.ProspectiveMessage -> { + Box(Modifier.alpha(0.5f)) { Message( message = item.message, - onMessageContextMenu = {}, + onMessageContextMenu = { + // TODO Context menu that allows you to cancel send + }, onAvatarClick = {}, onNameClick = {}, canReply = false, onReply = {}, onAddReaction = {} ) - Row { - UserAvatarWidthPlaceholder() - Text( - stringResource(R.string.message_failed_to_send), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.error.copy( - alpha = 0.8f - ), - modifier = Modifier.padding( - top = 4.dp, - bottom = 4.dp, - start = 20.dp - ) - ) - } } } - } - is ChannelScreenItem.SystemMessage -> { - SystemMessage(message = item.message) - } - - is ChannelScreenItem.DateDivider -> { - DateDivider(instant = item.instant) - } - - is ChannelScreenItem.LoadTrigger -> { - LaunchedEffect(Unit) { - Log.d( - "ChannelScreen", - "LoadTrigger: After ${item.after} Before ${item.before}" - ) - } - } - - is ChannelScreenItem.Loading -> { - Column( - modifier = Modifier - .fillMaxWidth() - .shimmer(rememberShimmer(ShimmerBounds.Window)), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(8.dp) - ) { - MessageSkeleton(MessageSkeletonVariant.One) - MessageSkeleton(MessageSkeletonVariant.Two) - MessageSkeleton(MessageSkeletonVariant.Three) - } - } - } - } - } - - TypingIndicator( - users = viewModel.typingUsers, - serverId = viewModel.channel?.server - ) - - androidx.compose.animation.AnimatedVisibility( - !isScrolledToBottom.value, - enter = slideInVertically( - animationSpec = RevoltTweenInt, - initialOffsetY = { it } - ) + fadeIn(animationSpec = RevoltTweenFloat), - exit = slideOutVertically( - animationSpec = RevoltTweenInt, - targetOffsetY = { it } - ) + fadeOut(animationSpec = RevoltTweenFloat) - ) { - SmallFloatingActionButton( - modifier = Modifier - .padding(bottom = scrollDownFABPadding) - .align(Alignment.BottomCenter) - .padding(16.dp), - onClick = { - scope.launch { - lazyListState.animateScrollToItem(0) - } - }, - contentColor = MaterialTheme.colorScheme.onSurfaceVariant, - containerColor = MaterialTheme.colorScheme.surfaceVariant - ) { - Icon( - painter = painterResource(R.drawable.icn_south_24dp), - contentDescription = stringResource(R.string.scroll_to_bottom) - ) - } - } - - Column( - verticalArrangement = Arrangement.spacedBy(8.dp), - modifier = Modifier - .align(Alignment.TopCenter) - .padding(8.dp) - ) { - if (viewModel.showPhysicalKeyboardSpark) { - Card { - Column( - verticalArrangement = Arrangement.spacedBy(8.dp), - modifier = Modifier.padding(16.dp) - ) { - Text( - stringResource(R.string.spark_keyboard_shortcuts), - style = MaterialTheme.typography.bodyLarge, - fontWeight = FontWeight.SemiBold - ) - Text( - buildAnnotatedString { - val raw = - stringResource(R.string.spark_keyboard_shortcuts_description) - val before = raw.substringBefore("%1\$s") - val after = raw.substringAfter("%1\$s") - - append(before) - appendInlineContent("metaKey", "Meta") - append(" + /") - append(after) - }, - inlineContent = mapOf( - "metaKey" to InlineTextContent( - placeholder = Placeholder( - width = 1.em, - height = 1.em, - placeholderVerticalAlign = PlaceholderVerticalAlign.Center + is ChannelScreenItem.FailedMessage -> { + CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.error) { + Column { + Message( + message = item.message, + onMessageContextMenu = {}, + onAvatarClick = {}, + onNameClick = {}, + canReply = false, + onReply = {}, + onAddReaction = {} ) - ) { - with(LocalDensity.current) { - Image( - painterResource(R.drawable.ic_meta_key_24dp), - contentDescription = null, - colorFilter = ColorFilter.tint( - LocalContentColor.current + Row { + UserAvatarWidthPlaceholder() + Text( + stringResource(R.string.message_failed_to_send), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.error.copy( + alpha = 0.8f + ), + modifier = Modifier.padding( + top = 4.dp, + bottom = 4.dp, + start = 20.dp ) ) } } - ), - style = MaterialTheme.typography.bodyLarge - ) - Row( - horizontalArrangement = Arrangement.spacedBy(8.dp), - ) { - Button( - onClick = { - viewModel.dismissPhysicalKeyboardSpark() - }, - modifier = Modifier.weight(1f) - ) { - Text(stringResource(R.string.spark_keyboard_shortcuts_dismiss)) } - TextButton( - onClick = { - (context as Activity).requestShowKeyboardShortcuts() - }, - modifier = Modifier.weight(1f) + } + + is ChannelScreenItem.SystemMessage -> { + SystemMessage(message = item.message) + } + + is ChannelScreenItem.DateDivider -> { + DateDivider(instant = item.instant) + } + + is ChannelScreenItem.LoadTrigger -> { + LaunchedEffect(Unit) { + Log.d( + "ChannelScreen", + "LoadTrigger: After ${item.after} Before ${item.before}" + ) + } + } + + is ChannelScreenItem.Loading -> { + Column( + modifier = Modifier + .fillMaxWidth() + .shimmer(rememberShimmer(ShimmerBounds.Window)), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp) ) { - Text(stringResource(R.string.spark_keyboard_shortcuts_cta)) + MessageSkeleton(MessageSkeletonVariant.One) + MessageSkeleton(MessageSkeletonVariant.Two) + MessageSkeleton(MessageSkeletonVariant.Three) } } } } } - if (viewModel.channel?.channelType == ChannelType.VoiceChannel - && FeatureFlags.voiceChannels2_0Granted + TypingIndicator( + users = viewModel.typingUsers, + serverId = viewModel.channel?.server + ) + + androidx.compose.animation.AnimatedVisibility( + !isScrolledToBottom.value, + enter = slideInVertically( + animationSpec = RevoltTweenInt, + initialOffsetY = { it } + ) + fadeIn(animationSpec = RevoltTweenFloat), + exit = slideOutVertically( + animationSpec = RevoltTweenInt, + targetOffsetY = { it } + ) + fadeOut(animationSpec = RevoltTweenFloat) ) { - JoinVoiceChannelButton(channelId) + SmallFloatingActionButton( + modifier = Modifier + .padding(bottom = scrollDownFABPadding) + .align(Alignment.BottomCenter) + .padding(16.dp), + onClick = { + scope.launch { + lazyListState.animateScrollToItem(0) + } + }, + contentColor = MaterialTheme.colorScheme.onSurfaceVariant, + containerColor = MaterialTheme.colorScheme.surfaceVariant + ) { + Icon( + painter = painterResource(R.drawable.icn_south_24dp), + contentDescription = stringResource(R.string.scroll_to_bottom) + ) + } } - } - } - Column( - modifier = Modifier - .background(MaterialTheme.colorScheme.surfaceContainer) - .fillMaxWidth(), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally - ) { - AnimatedContent( - targetState = viewModel.denyMessageField, - label = "denyMessageField" - ) { deny -> - if (!deny) { - Column { - AnimatedVisibility( - visible = viewModel.draftReplyTo.isNotEmpty() && !viewModel.denyMessageField - ) { - ReplyManager( - replies = viewModel.draftReplyTo, - onToggleMention = { - scope.launch { viewModel.toggleMentionOnReply(it.id) } - }, - onRemove = { - viewModel.draftReplyTo.remove(it) - } - ) - } + Column( + verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier + .align(Alignment.TopCenter) + .padding(8.dp) + ) { + if (viewModel.showPhysicalKeyboardSpark) { + Card { + Column( + verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier.padding(16.dp) + ) { + Text( + stringResource(R.string.spark_keyboard_shortcuts), + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.SemiBold + ) + Text( + buildAnnotatedString { + val raw = + stringResource(R.string.spark_keyboard_shortcuts_description) + val before = raw.substringBefore("%1\$s") + val after = raw.substringAfter("%1\$s") - AnimatedVisibility( - visible = viewModel.draftAttachments.isNotEmpty() && !viewModel.denyMessageField - ) { - AttachmentManager( - attachments = viewModel.draftAttachments, - uploading = viewModel.attachmentUploadProgress > 0, - uploadProgress = viewModel.attachmentUploadProgress, - canRemove = true, - canPreview = true, - onRemove = { - viewModel.draftAttachments.remove(it) - }, - onToggleSpoiler = { - val index = viewModel.draftAttachments - .indexOfFirst { a -> a.pickerIdentifier == it.pickerIdentifier } - - if (index != -1) { - val attachment = - viewModel.draftAttachments[index] - viewModel.draftAttachments[index] = - attachment.copy( - spoiler = !attachment.spoiler + append(before) + appendInlineContent("metaKey", "Meta") + append(" + /") + append(after) + }, + inlineContent = mapOf( + "metaKey" to InlineTextContent( + placeholder = Placeholder( + width = 1.em, + height = 1.em, + placeholderVerticalAlign = PlaceholderVerticalAlign.Center ) + ) { + with(LocalDensity.current) { + Image( + painterResource(R.drawable.ic_meta_key_24dp), + contentDescription = null, + colorFilter = ColorFilter.tint( + LocalContentColor.current + ) + ) + } + } + ), + style = MaterialTheme.typography.bodyLarge + ) + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + Button( + onClick = { + viewModel.dismissPhysicalKeyboardSpark() + }, + modifier = Modifier.weight(1f) + ) { + Text(stringResource(R.string.spark_keyboard_shortcuts_dismiss)) + } + TextButton( + onClick = { + (context as Activity).requestShowKeyboardShortcuts() + }, + modifier = Modifier.weight(1f) + ) { + Text(stringResource(R.string.spark_keyboard_shortcuts_cta)) } } - ) + } } + } - AnimatedVisibility(visible = viewModel.editingMessage != null) { - Row(Modifier.padding(start = 24.dp, top = 8.dp)) { - AssistChip( - onClick = { - viewModel.editingMessage = null - viewModel.putDraftContent("", true) + if (viewModel.channel?.channelType == ChannelType.VoiceChannel + && FeatureFlags.voiceChannels2_0Granted + ) { + JoinVoiceChannelButton(channelId) + } + } + } + + Column( + modifier = Modifier + .background(MaterialTheme.colorScheme.surfaceContainer) + .fillMaxWidth(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + AnimatedContent( + targetState = viewModel.denyMessageField, + label = "denyMessageField" + ) { deny -> + if (!deny) { + Column { + AnimatedVisibility( + visible = viewModel.draftReplyTo.isNotEmpty() && !viewModel.denyMessageField + ) { + ReplyManager( + replies = viewModel.draftReplyTo, + onToggleMention = { + scope.launch { viewModel.toggleMentionOnReply(it.id) } }, - label = { - Text(stringResource(R.string.message_field_editing_message)) + onRemove = { + viewModel.draftReplyTo.remove(it) + } + ) + } + + AnimatedVisibility( + visible = viewModel.draftAttachments.isNotEmpty() && !viewModel.denyMessageField + ) { + AttachmentManager( + attachments = viewModel.draftAttachments, + uploading = viewModel.attachmentUploadProgress > 0, + uploadProgress = viewModel.attachmentUploadProgress, + canRemove = true, + canPreview = true, + onRemove = { + viewModel.draftAttachments.remove(it) }, + onToggleSpoiler = { + val index = viewModel.draftAttachments + .indexOfFirst { a -> a.pickerIdentifier == it.pickerIdentifier } + + if (index != -1) { + val attachment = + viewModel.draftAttachments[index] + viewModel.draftAttachments[index] = + attachment.copy( + spoiler = !attachment.spoiler + ) + } + } + ) + } + + AnimatedVisibility(visible = viewModel.editingMessage != null) { + Row(Modifier.padding(start = 24.dp, top = 8.dp)) { + AssistChip( + onClick = { + viewModel.editingMessage = null + viewModel.putDraftContent("", true) + }, + label = { + Text(stringResource(R.string.message_field_editing_message)) + }, + leadingIcon = { + Icon( + painter = painterResource(R.drawable.icn_edit_24dp), + contentDescription = null + ) + }, + trailingIcon = { + Icon( + painter = painterResource(R.drawable.icn_close_24dp), + contentDescription = stringResource(R.string.message_field_editing_message_cancel_alt), + tint = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.alpha(0.8f) + ) + } + ) + } + } + + MessageField( + initialValue = viewModel.initialTextFieldValue, + initialValueDirtyMarker = viewModel.initialTextFieldValueDirtyMarker, + onValueChange = viewModel::putDraftContent, + onAddAttachment = { + if (viewModel.activePane == ChannelScreenActivePane.AttachmentPicker) { + viewModel.activePane = + ChannelScreenActivePane.None + } else { + viewModel.activePane = + ChannelScreenActivePane.AttachmentPicker + } + }, + onCommitAttachment = { + processFileUri(it, null) + }, + onPickEmoji = { + if (viewModel.activePane == ChannelScreenActivePane.EmojiPicker) { + viewModel.activePane = + ChannelScreenActivePane.None + } else { + viewModel.activePane = + ChannelScreenActivePane.EmojiPicker + } + }, + onSendMessage = viewModel::sendPendingMessage, + channelType = viewModel.channel?.channelType + ?: ChannelType.TextChannel, + channelName = viewModel.channel?.let { channel -> + ChannelUtils.resolveName(channel) + } + ?: stringResource(R.string.unknown), + onFocusChange = { isFocused -> + if (isFocused && viewModel.activePane != ChannelScreenActivePane.None) { + viewModel.activePane = + ChannelScreenActivePane.None + imeInTransition = true + } + }, + forceSendButton = viewModel.draftAttachments.isNotEmpty(), + canAttach = (channelPermissions has PermissionBit.UploadFiles) && viewModel.editingMessage == null, + serverId = viewModel.channel?.server, + channelId = channelId, + failedValidation = viewModel.draftContent.length > 2000, + valueIsBlank = viewModel.draftContent.isBlank(), + cancelEdit = { + viewModel.editingMessage = null + viewModel.putDraftContent("", true) + } + ) + + DropdownMenu( + expanded = viewModel.activePane == ChannelScreenActivePane.AttachmentPicker && notEnoughSpaceForPanes, + onDismissRequest = { + viewModel.activePane = ChannelScreenActivePane.None + } + ) { + DropdownMenuItem( leadingIcon = { Icon( - painter = painterResource(R.drawable.icn_edit_24dp), - contentDescription = null + painter = painterResource(R.drawable.icn_attach_file_24dp), + contentDescription = null // Provided by text below ) }, - trailingIcon = { + text = { Text(stringResource(R.string.file_picker_chip_documents)) }, + onClick = { + openDocumentPickerCallback() + viewModel.activePane = + ChannelScreenActivePane.None + } + ) + DropdownMenuItem( + leadingIcon = { Icon( - painter = painterResource(R.drawable.icn_close_24dp), - contentDescription = stringResource(R.string.message_field_editing_message_cancel_alt), - tint = MaterialTheme.colorScheme.onSurface, - modifier = Modifier.alpha(0.8f) + painter = painterResource(R.drawable.icn_camera_24dp), + contentDescription = null // Provided by text below ) + }, + text = { Text(stringResource(R.string.file_picker_chip_camera)) }, + onClick = { + openCameraCallback() + viewModel.activePane = + ChannelScreenActivePane.None + } + ) + DropdownMenuItem( + leadingIcon = { + Icon( + painter = painterResource(R.drawable.icn_photo_library_24dp), + contentDescription = null // Provided by text below + ) + }, + text = { Text(stringResource(R.string.file_picker_chip_photo_picker)) }, + onClick = { + openPhotoPickerCallback() + viewModel.activePane = + ChannelScreenActivePane.None } ) } } - - MessageField( - initialValue = viewModel.initialTextFieldValue, - initialValueDirtyMarker = viewModel.initialTextFieldValueDirtyMarker, - onValueChange = viewModel::putDraftContent, - onAddAttachment = { - if (viewModel.activePane == ChannelScreenActivePane.AttachmentPicker) { - viewModel.activePane = ChannelScreenActivePane.None - } else { - viewModel.activePane = - ChannelScreenActivePane.AttachmentPicker - } - }, - onCommitAttachment = { - processFileUri(it, null) - }, - onPickEmoji = { - if (viewModel.activePane == ChannelScreenActivePane.EmojiPicker) { - viewModel.activePane = ChannelScreenActivePane.None - } else { - viewModel.activePane = - ChannelScreenActivePane.EmojiPicker - } - }, - onSendMessage = viewModel::sendPendingMessage, - channelType = viewModel.channel?.channelType - ?: ChannelType.TextChannel, - channelName = viewModel.channel?.let { channel -> - ChannelUtils.resolveName(channel) - } - ?: stringResource(R.string.unknown), - onFocusChange = { isFocused -> - if (isFocused && viewModel.activePane != ChannelScreenActivePane.None) { - viewModel.activePane = ChannelScreenActivePane.None - imeInTransition = true - } - }, - forceSendButton = viewModel.draftAttachments.isNotEmpty(), - canAttach = (channelPermissions has PermissionBit.UploadFiles) && viewModel.editingMessage == null, - serverId = viewModel.channel?.server, - channelId = channelId, - failedValidation = viewModel.draftContent.length > 2000, - valueIsBlank = viewModel.draftContent.isBlank(), - cancelEdit = { - viewModel.editingMessage = null - viewModel.putDraftContent("", true) - } - ) - - DropdownMenu( - expanded = viewModel.activePane == ChannelScreenActivePane.AttachmentPicker && notEnoughSpaceForPanes, - onDismissRequest = { - viewModel.activePane = ChannelScreenActivePane.None - } + } else { + Box( + modifier = Modifier + .padding(horizontal = 32.dp, vertical = 16.dp) ) { - DropdownMenuItem( - leadingIcon = { - Icon( - painter = painterResource(R.drawable.icn_attach_file_24dp), - contentDescription = null // Provided by text below - ) - }, - text = { Text(stringResource(R.string.file_picker_chip_documents)) }, - onClick = { - openDocumentPickerCallback() - viewModel.activePane = ChannelScreenActivePane.None - } - ) - DropdownMenuItem( - leadingIcon = { - Icon( - painter = painterResource(R.drawable.icn_camera_24dp), - contentDescription = null // Provided by text below - ) - }, - text = { Text(stringResource(R.string.file_picker_chip_camera)) }, - onClick = { - openCameraCallback() - viewModel.activePane = ChannelScreenActivePane.None - } - ) - DropdownMenuItem( - leadingIcon = { - Icon( - painter = painterResource(R.drawable.icn_photo_library_24dp), - contentDescription = null // Provided by text below - ) - }, - text = { Text(stringResource(R.string.file_picker_chip_photo_picker)) }, - onClick = { - openPhotoPickerCallback() - viewModel.activePane = ChannelScreenActivePane.None - } + Text( + stringResource(viewModel.denyMessageFieldReasonResource), + color = MaterialTheme.colorScheme.error, + style = MaterialTheme.typography.bodyMedium, + textAlign = TextAlign.Center ) } } - } else { - Box( - modifier = Modifier - .padding(horizontal = 32.dp, vertical = 16.dp) - ) { - Text( - stringResource(viewModel.denyMessageFieldReasonResource), - color = MaterialTheme.colorScheme.error, - style = MaterialTheme.typography.bodyMedium, - textAlign = TextAlign.Center - ) - } } - } - if (viewModel.activePane == ChannelScreenActivePane.None && !imeInTransition) { - Spacer( - Modifier - .imePadding() - .navigationBarsPadding() - .background(MaterialTheme.colorScheme.surfaceContainer) - ) - } else { - if (!notEnoughSpaceForPanes) { - Box( - Modifier - .heightIn(min = pxAsDp(fallbackKeyboardHeight)) - ) { - Box( - Modifier.then( - if (emojiSearchFocused) { - Modifier.requiredHeight( - pxAsDp( - max( - imeCurrentInset * 2, - fallbackKeyboardHeight - ) - ) - ) - } else { - Modifier.requiredHeight( - pxAsDp( - fallbackKeyboardHeight - ) - ) - } - ) - ) { - when (viewModel.activePane) { - ChannelScreenActivePane.EmojiPicker -> { - BackHandler(enabled = viewModel.activePane == ChannelScreenActivePane.EmojiPicker) { - viewModel.activePane = - ChannelScreenActivePane.None - } - - Column( - modifier = Modifier - .fillMaxWidth() - .background(MaterialTheme.colorScheme.surfaceContainer) - .padding(4.dp) - .navigationBarsPadding() - ) { - EmojiPicker( - onEmojiSelected = viewModel::putAtCursorPosition, - bottomInset = pxAsDp( - max( - imeCurrentInset - navigationBarsInset, - 0 - ) - ), - onSearchFocus = { - emojiSearchFocused = it - } - ) - } - } - - ChannelScreenActivePane.AttachmentPicker -> { - BackHandler(enabled = viewModel.activePane == ChannelScreenActivePane.AttachmentPicker) { - viewModel.activePane = - ChannelScreenActivePane.None - } - - MediaPickerGateway( - onOpenPhotoPicker = { - openPhotoPickerCallback() - viewModel.activePane = - ChannelScreenActivePane.None - }, - onOpenDocumentPicker = { - openDocumentPickerCallback() - viewModel.activePane = - ChannelScreenActivePane.None - }, - onOpenCamera = { - openCameraCallback() - viewModel.activePane = - ChannelScreenActivePane.None - }, - ) - } - - else -> { - // Do nothing - } - } - } - Box(Modifier.imePadding()) - } - } else { - if (viewModel.activePane == ChannelScreenActivePane.EmojiPicker) { - BackHandler(enabled = viewModel.activePane == ChannelScreenActivePane.EmojiPicker) { - viewModel.activePane = - ChannelScreenActivePane.None - } - - Column( - modifier = Modifier - .fillMaxWidth() - .height(600.dp) - .background(MaterialTheme.colorScheme.surfaceContainer) - .padding(4.dp) - .navigationBarsPadding() - ) { - EmojiPicker( - onEmojiSelected = viewModel::putAtCursorPosition, - bottomInset = pxAsDp( - max( - imeCurrentInset - navigationBarsInset, - 0 - ) - ), - onSearchFocus = { - emojiSearchFocused = it - } - ) - } - } - Box( + if (viewModel.activePane == ChannelScreenActivePane.None && !imeInTransition) { + Spacer( Modifier .imePadding() .navigationBarsPadding() + .background(MaterialTheme.colorScheme.surfaceContainer) ) + } else { + if (!notEnoughSpaceForPanes) { + Box( + Modifier + .heightIn(min = pxAsDp(fallbackKeyboardHeight)) + ) { + Box( + Modifier.then( + if (emojiSearchFocused) { + Modifier.requiredHeight( + pxAsDp( + max( + imeCurrentInset * 2, + fallbackKeyboardHeight + ) + ) + ) + } else { + Modifier.requiredHeight( + pxAsDp( + fallbackKeyboardHeight + ) + ) + } + ) + ) { + when (viewModel.activePane) { + ChannelScreenActivePane.EmojiPicker -> { + BackHandler(enabled = viewModel.activePane == ChannelScreenActivePane.EmojiPicker) { + viewModel.activePane = + ChannelScreenActivePane.None + } + + Column( + modifier = Modifier + .fillMaxWidth() + .background(MaterialTheme.colorScheme.surfaceContainer) + .padding(4.dp) + .navigationBarsPadding() + ) { + EmojiPicker( + onEmojiSelected = viewModel::putAtCursorPosition, + bottomInset = pxAsDp( + max( + imeCurrentInset - navigationBarsInset, + 0 + ) + ), + onSearchFocus = { + emojiSearchFocused = it + } + ) + } + } + + ChannelScreenActivePane.AttachmentPicker -> { + BackHandler(enabled = viewModel.activePane == ChannelScreenActivePane.AttachmentPicker) { + viewModel.activePane = + ChannelScreenActivePane.None + } + + MediaPickerGateway( + onOpenPhotoPicker = { + openPhotoPickerCallback() + viewModel.activePane = + ChannelScreenActivePane.None + }, + onOpenDocumentPicker = { + openDocumentPickerCallback() + viewModel.activePane = + ChannelScreenActivePane.None + }, + onOpenCamera = { + openCameraCallback() + viewModel.activePane = + ChannelScreenActivePane.None + }, + ) + } + + else -> { + // Do nothing + } + } + } + Box(Modifier.imePadding()) + } + } else { + if (viewModel.activePane == ChannelScreenActivePane.EmojiPicker) { + BackHandler(enabled = viewModel.activePane == ChannelScreenActivePane.EmojiPicker) { + viewModel.activePane = + ChannelScreenActivePane.None + } + + Column( + modifier = Modifier + .fillMaxWidth() + .height(600.dp) + .background(MaterialTheme.colorScheme.surfaceContainer) + .padding(4.dp) + .navigationBarsPadding() + ) { + EmojiPicker( + onEmojiSelected = viewModel::putAtCursorPosition, + bottomInset = pxAsDp( + max( + imeCurrentInset - navigationBarsInset, + 0 + ) + ), + onSearchFocus = { + emojiSearchFocused = it + } + ) + } + } + Box( + Modifier + .imePadding() + .navigationBarsPadding() + ) + } } } } diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenGeoGate.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenGeoGate.kt new file mode 100644 index 00000000..9fa9d6b6 --- /dev/null +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenGeoGate.kt @@ -0,0 +1,81 @@ +package chat.revolt.screens.chat.views.channel + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import chat.revolt.R +import chat.revolt.api.settings.GeoStateProvider +import chat.revolt.composables.vectorassets.GeoGateUX + +@Composable +fun ChannelScreenGeoGate( + onAcknowledge: () -> Unit, +) { + Column( + modifier = Modifier + .fillMaxSize() + .imePadding(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(16.dp, Alignment.CenterVertically) + ) { + Image( + imageVector = GeoGateUX, + contentDescription = null, + modifier = Modifier.size(128.dp), + ) + + Text( + text = stringResource(R.string.geogate_header), + style = MaterialTheme.typography.titleMedium.copy( + textAlign = TextAlign.Center + ), + modifier = Modifier.padding(horizontal = 16.dp) + ) + + when (GeoStateProvider.geoState?.countryCode) { + "GB" -> { + Text( + text = stringResource(R.string.geogate_description_variant_osa_uk_25), + style = MaterialTheme.typography.bodyMedium.copy( + textAlign = TextAlign.Center + ), + modifier = Modifier.padding(horizontal = 16.dp) + ) + } + + else -> { + Text( + text = stringResource(R.string.geogate_description), + style = MaterialTheme.typography.bodyMedium.copy( + textAlign = TextAlign.Center + ), + modifier = Modifier.padding(horizontal = 16.dp) + ) + } + } + + Button(onClick = { onAcknowledge() }) { + Text(stringResource(R.string.geogate_acknowledge)) + } + } +} + +@Preview(showBackground = true) +@Composable +private fun GeoGatePreview() { + ChannelScreenGeoGate { } +} \ No newline at end of file diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt index 3d9bc031..1402e278 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt @@ -43,6 +43,7 @@ import chat.revolt.api.routes.user.addUserIfUnknown import chat.revolt.api.routes.user.fetchUser import chat.revolt.api.schemas.Channel import chat.revolt.api.schemas.Message +import chat.revolt.api.settings.GeoStateProvider import chat.revolt.callbacks.Action import chat.revolt.callbacks.ActionChannel import chat.revolt.callbacks.UiCallback @@ -103,6 +104,7 @@ class ChannelScreenViewModel @Inject constructor( var editingMessage by mutableStateOf(null) var ageGateUnlocked by mutableStateOf(null) + var showGeoGate by mutableStateOf(false) init { viewModelScope.launch { @@ -126,6 +128,10 @@ class ChannelScreenViewModel @Inject constructor( this.denyMessageFieldReasonResource = R.string.typing_blank this.editingMessage = null this.ageGateUnlocked = channel?.nsfw != true + this.showGeoGate = when { + channel?.nsfw == true && GeoStateProvider.geoState?.isAgeRestrictedGeo == true -> true + else -> false + } viewModelScope.launch { if (ageGateUnlocked != true) { ageGateUnlocked = AgeGateUnlockedStorageProvider.getAgeGateUnlocked() diff --git a/app/src/main/res/drawable/icn_grid_3x3_24dp.xml b/app/src/main/res/drawable/icn_grid_3x3_24dp.xml new file mode 100644 index 00000000..507c5ea8 --- /dev/null +++ b/app/src/main/res/drawable/icn_grid_3x3_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_grid_3x3_off_24dp.xml b/app/src/main/res/drawable/icn_grid_3x3_off_24dp.xml new file mode 100644 index 00000000..726b1c42 --- /dev/null +++ b/app/src/main/res/drawable/icn_grid_3x3_off_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1a5b3bf3..7695422e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -794,4 +794,10 @@ Messaging New Line Send Message + + Not available in your region + Unavailable channel + Revolt may block content in certain jurisdictions in response to legislation or legal notices + This channel is not available in your region while we review options on legal compliance. + Acknowledge From 302ad04c69ec982815284a609f53433cbd784faf Mon Sep 17 00:00:00 2001 From: Infi Date: Sat, 26 Jul 2025 07:23:34 +0200 Subject: [PATCH 4/4] chore: bump to 1.3.6a Signed-off-by: Infi --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3c2afdd0..65194852 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -80,8 +80,8 @@ android { applicationId = "chat.revolt" minSdk = 24 targetSdk = 35 - versionCode = Integer.parseInt("001_003_006".replace("_", ""), 10) - versionName = "1.3.6" + versionCode = Integer.parseInt("001_003_106".replace("_", ""), 10) + versionName = "1.3.6a" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables {