From f960ec883d51cfa6635449476dc81ac22d3b47af Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 11 Aug 2026 13:46:33 -0400 Subject: [PATCH] Add view archive to menu and add icons. --- .../thoughtcrime/securesms/MainActivity.kt | 8 +- .../securesms/main/MainToolbar.kt | 92 +++++++++++-------- .../res/drawable/symbol_bell_sleep_24.xml | 15 +++ app/src/main/res/menu/text_secure_normal.xml | 29 ------ .../signal/core/ui/compose/DropdownMenus.kt | 13 +++ 5 files changed, 86 insertions(+), 71 deletions(-) create mode 100644 app/src/main/res/drawable/symbol_bell_sleep_24.xml delete mode 100644 app/src/main/res/menu/text_secure_normal.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt index c6d2bf9bf9..425aad1ef5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt @@ -1174,10 +1174,6 @@ class MainActivity : toolbarViewModel.markAllMessagesRead() } - override fun onInviteFriendsClick() { - openSettings.launch(AppSettingsActivity.invite(this@MainActivity)) - } - override fun onFilterUnreadChatsClick() { toolbarViewModel.setChatFilter(ConversationFilter.UNREAD) } @@ -1186,6 +1182,10 @@ class MainActivity : toolbarViewModel.setChatFilter(ConversationFilter.OFF) } + override fun onOpenArchiveClick() { + mainNavigationViewModel.onArchiveSelected() + } + override fun onStarredMessagesClick() { startActivity(StarredMessagesActivity.createIntent(this@MainActivity)) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt b/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt index 968093d286..313df449e9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/main/MainToolbar.kt @@ -85,14 +85,15 @@ import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.rememberRecipientField +import org.signal.core.ui.R as CoreUiR interface MainToolbarCallback { fun onNewGroupClick() fun onClearPassphraseClick() fun onMarkReadClick() - fun onInviteFriendsClick() fun onFilterUnreadChatsClick() fun onClearUnreadChatsFilterClick() + fun onOpenArchiveClick() fun onSettingsClick() fun onNotificationProfileClick() fun onProxyClick() @@ -114,9 +115,9 @@ interface MainToolbarCallback { override fun onNewGroupClick() = Unit override fun onClearPassphraseClick() = Unit override fun onMarkReadClick() = Unit - override fun onInviteFriendsClick() = Unit override fun onFilterUnreadChatsClick() = Unit override fun onClearUnreadChatsFilterClick() = Unit + override fun onOpenArchiveClick() = Unit override fun onSettingsClick() = Unit override fun onNotificationProfileClick() = Unit override fun onProxyClick() = Unit @@ -570,6 +571,7 @@ private fun HeadsUpIndicator(state: MainToolbarState, modifier: Modifier = Modif @Composable private fun StoryDropDownItems(callback: MainToolbarCallback, onOptionSelected: () -> Unit) { DropdownMenus.Item( + leadingIconResId = CoreUiR.drawable.symbol_lock_24, text = { Text( text = stringResource(R.string.StoriesLandingFragment__story_privacy) @@ -585,6 +587,7 @@ private fun StoryDropDownItems(callback: MainToolbarCallback, onOptionSelected: @Composable private fun CallDropdownItems(callFilter: CallLogFilter, callback: MainToolbarCallback, onOptionSelected: () -> Unit) { DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_x_circle_24, text = { Text( text = stringResource(R.string.CallLogFragment__clear_call_history) @@ -598,6 +601,7 @@ private fun CallDropdownItems(callFilter: CallLogFilter, callback: MainToolbarCa if (callFilter == CallLogFilter.ALL) { DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_filter_24, text = { Text( text = stringResource(R.string.CallLogFragment__filter_missed_calls) @@ -610,6 +614,7 @@ private fun CallDropdownItems(callFilter: CallLogFilter, callback: MainToolbarCa ) } else { DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_filter_24, text = { Text( text = stringResource(R.string.CallLogFragment__clear_filter) @@ -623,18 +628,7 @@ private fun CallDropdownItems(callFilter: CallLogFilter, callback: MainToolbarCa } DropdownMenus.Item( - text = { - Text( - text = stringResource(R.string.text_secure_normal__menu_settings) - ) - }, - onClick = { - callback.onSettingsClick() - onOptionSelected() - } - ) - - DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_bell_sleep_24, text = { Text( text = stringResource(R.string.ConversationListFragment__notification_profile) @@ -645,11 +639,25 @@ private fun CallDropdownItems(callFilter: CallLogFilter, callback: MainToolbarCa onOptionSelected() } ) + + DropdownMenus.Item( + leadingIconResId = CoreUiR.drawable.symbol_settings_android_24, + text = { + Text( + text = stringResource(R.string.text_secure_normal__menu_settings) + ) + }, + onClick = { + callback.onSettingsClick() + onOptionSelected() + } + ) } @Composable private fun ChatDropdownItems(state: MainToolbarState, callback: MainToolbarCallback, onOptionSelected: () -> Unit) { DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_group_24, text = { Text( text = stringResource(R.string.text_secure_normal__menu_new_group) @@ -663,6 +671,7 @@ private fun ChatDropdownItems(state: MainToolbarState, callback: MainToolbarCall if (state.hasPassphrase) { DropdownMenus.Item( + leadingIconResId = CoreUiR.drawable.symbol_lock_24, text = { Text( text = stringResource(R.string.text_secure_normal__menu_clear_passphrase) @@ -676,6 +685,7 @@ private fun ChatDropdownItems(state: MainToolbarState, callback: MainToolbarCall } DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_chat_check, text = { Text( text = stringResource(R.string.text_secure_normal__mark_all_as_read) @@ -687,20 +697,9 @@ private fun ChatDropdownItems(state: MainToolbarState, callback: MainToolbarCall } ) - DropdownMenus.Item( - text = { - Text( - text = stringResource(R.string.text_secure_normal__invite_friends) - ) - }, - onClick = { - callback.onInviteFriendsClick() - onOptionSelected() - } - ) - if (state.chatFilter == ConversationFilter.OFF) { DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_filter_24, text = { Text( text = stringResource(R.string.text_secure_normal__filter_unread_chats) @@ -713,6 +712,7 @@ private fun ChatDropdownItems(state: MainToolbarState, callback: MainToolbarCall ) } else { DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_filter_24, text = { Text( text = stringResource(R.string.text_secure_normal__clear_unread_filter) @@ -725,8 +725,35 @@ private fun ChatDropdownItems(state: MainToolbarState, callback: MainToolbarCall ) } + DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_bell_sleep_24, + text = { + Text( + text = stringResource(R.string.ConversationListFragment__notification_profile) + ) + }, + onClick = { + callback.onNotificationProfileClick() + onOptionSelected() + } + ) + + DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_archive_24, + text = { + Text( + text = stringResource(R.string.AndroidManifest_archived_conversations) + ) + }, + onClick = { + callback.onOpenArchiveClick() + onOptionSelected() + } + ) + if (SignalStore.labs.starredMessages) { DropdownMenus.Item( + leadingIconResId = R.drawable.symbol_star_24, text = { Text( text = stringResource(R.string.text_secure_normal__starred_messages) @@ -740,6 +767,7 @@ private fun ChatDropdownItems(state: MainToolbarState, callback: MainToolbarCall } DropdownMenus.Item( + leadingIconResId = CoreUiR.drawable.symbol_settings_android_24, text = { Text( text = stringResource(R.string.text_secure_normal__menu_settings) @@ -750,18 +778,6 @@ private fun ChatDropdownItems(state: MainToolbarState, callback: MainToolbarCall onOptionSelected() } ) - - DropdownMenus.Item( - text = { - Text( - text = stringResource(R.string.ConversationListFragment__notification_profile) - ) - }, - onClick = { - callback.onNotificationProfileClick() - onOptionSelected() - } - ) } @DayNightPreviews diff --git a/app/src/main/res/drawable/symbol_bell_sleep_24.xml b/app/src/main/res/drawable/symbol_bell_sleep_24.xml new file mode 100644 index 0000000000..a74a7720ef --- /dev/null +++ b/app/src/main/res/drawable/symbol_bell_sleep_24.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/menu/text_secure_normal.xml b/app/src/main/res/menu/text_secure_normal.xml deleted file mode 100644 index e0b6605bfd..0000000000 --- a/app/src/main/res/menu/text_secure_normal.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/core/ui/src/main/java/org/signal/core/ui/compose/DropdownMenus.kt b/core/ui/src/main/java/org/signal/core/ui/compose/DropdownMenus.kt index 0b3742bda6..bae8ce7268 100644 --- a/core/ui/src/main/java/org/signal/core/ui/compose/DropdownMenus.kt +++ b/core/ui/src/main/java/org/signal/core/ui/compose/DropdownMenus.kt @@ -21,6 +21,7 @@ import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.MenuDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -80,6 +81,7 @@ object DropdownMenus { fun Item( modifier: Modifier = Modifier, contentPadding: PaddingValues = PaddingValues(horizontal = 16.dp), + @DrawableRes leadingIconResId: Int? = null, text: @Composable () -> Unit, onClick: () -> Unit ) { @@ -90,6 +92,17 @@ object DropdownMenus { text() } }, + leadingIcon = if (leadingIconResId != null) { + { + Icon( + imageVector = ImageVector.vectorResource(id = leadingIconResId), + contentDescription = null + ) + } + } else { + null + }, + colors = MenuDefaults.itemColors(leadingIconColor = MaterialTheme.colorScheme.onSurface), onClick = onClick, modifier = modifier )