From b4a68f4b78573301ebe8949449bde0729db5fedc Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 25 Jun 2026 13:50:42 +0000 Subject: [PATCH 1/3] feat: reorder drawer menu items Move BROWSER to the Navigate section (between VIDEO and DISCOVER). Reorganise Feeds into logical clusters: content types first, then live/social, communities/chats, calendar, apps/tools, packs, misc. Co-Authored-By: Claude Sonnet 4.6 Claude-Session: https://claude.ai/code/session_01AdbTQuhuk2g5XGWEqmKLRz --- .../ui/navigation/bottombars/NavBarItem.kt | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt index 6f0468d5fb..766072f576 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt @@ -391,10 +391,13 @@ val DefaultBottomBarEntries: List = DefaultBottomBarItems.map { // each id in NavBarCatalog, so adding a new screen only requires editing the catalog + the // matching section list below — not two separate files. val DrawerNavigateItems: List = - listOf( + listOfNotNull( NavBarItem.HOME, NavBarItem.MESSAGES, NavBarItem.VIDEO, + // The embedded browser renders a cross-process surface (SurfaceControlViewHost), which needs + // API 30+. Below that the item is hidden so the feature can't be pinned or opened. + NavBarItem.BROWSER.takeIf { Build.VERSION.SDK_INT >= Build.VERSION_CODES.R }, NavBarItem.DISCOVER, NavBarItem.NOTIFICATIONS, ) @@ -414,33 +417,36 @@ val DrawerYouItems: List = val DrawerFeedsItems: List = listOfNotNull( - NavBarItem.COMMUNITIES, NavBarItem.ARTICLES, NavBarItem.PICTURES, + NavBarItem.SHORTS, + NavBarItem.LONGS, + NavBarItem.PODCAST_EPISODES, + NavBarItem.PODCASTS, + NavBarItem.MUSIC_TRACKS, + NavBarItem.MUSIC_PLAYLISTS, + NavBarItem.POLLS, + NavBarItem.PRODUCTS, NavBarItem.WORKOUTS, + + NavBarItem.LIVE_STREAMS, + NavBarItem.NESTS, + + NavBarItem.COMMUNITIES, + NavBarItem.PUBLIC_CHATS, + + NavBarItem.CALENDARS, + NavBarItem.CALENDAR_COLLECTIONS, + NavBarItem.SOFTWARE_APPS, - NavBarItem.NAPPLETS, - NavBarItem.NSITES, - // The Browser tab opens each site full-screen in its own direct-WebView activity, so it works - // on any API — no SurfaceControlViewHost surface involved. - NavBarItem.BROWSER, // Favorites can be pinned as inline tabs that render on a cross-process surface // (SurfaceControlViewHost), which needs API 30+. Gate the whole grid on R+ for that reason. NavBarItem.FAVORITE_APPS.takeIf { Build.VERSION.SDK_INT >= Build.VERSION_CODES.R }, - NavBarItem.CALENDARS, - NavBarItem.CALENDAR_COLLECTIONS, - NavBarItem.SHORTS, - NavBarItem.MUSIC_TRACKS, - NavBarItem.MUSIC_PLAYLISTS, - NavBarItem.PODCAST_EPISODES, - NavBarItem.PODCASTS, - NavBarItem.PUBLIC_CHATS, + NavBarItem.NAPPLETS, + NavBarItem.NSITES, + NavBarItem.FOLLOW_PACKS, - NavBarItem.LIVE_STREAMS, - NavBarItem.NESTS, - NavBarItem.LONGS, - NavBarItem.POLLS, + NavBarItem.BADGES, - NavBarItem.PRODUCTS, NavBarItem.EMOJI_SETS, ) From dfe74b983e62ab6451021507be7376c586e8f712 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 25 Jun 2026 13:52:09 +0000 Subject: [PATCH 2/3] style: apply spotless formatting to NavBarItem.kt Co-Authored-By: Claude Sonnet 4.6 Claude-Session: https://claude.ai/code/session_01AdbTQuhuk2g5XGWEqmKLRz --- .../amethyst/ui/navigation/bottombars/NavBarItem.kt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt index 766072f576..bccea8c685 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt @@ -428,25 +428,19 @@ val DrawerFeedsItems: List = NavBarItem.POLLS, NavBarItem.PRODUCTS, NavBarItem.WORKOUTS, - NavBarItem.LIVE_STREAMS, NavBarItem.NESTS, - NavBarItem.COMMUNITIES, NavBarItem.PUBLIC_CHATS, - NavBarItem.CALENDARS, NavBarItem.CALENDAR_COLLECTIONS, - NavBarItem.SOFTWARE_APPS, // Favorites can be pinned as inline tabs that render on a cross-process surface // (SurfaceControlViewHost), which needs API 30+. Gate the whole grid on R+ for that reason. NavBarItem.FAVORITE_APPS.takeIf { Build.VERSION.SDK_INT >= Build.VERSION_CODES.R }, NavBarItem.NAPPLETS, NavBarItem.NSITES, - NavBarItem.FOLLOW_PACKS, - NavBarItem.BADGES, NavBarItem.EMOJI_SETS, ) From 8978e0d023378934afca9690eba1f24391b13f54 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 25 Jun 2026 14:09:53 +0000 Subject: [PATCH 3/3] feat: reorder settings sections and drop API-30 gate on drawer Browser Reorder Account Settings: group network (relays/sync/follows, media/nests), interactions (reactions/zaps), media playback, identity (DVMs/badges/payments), then safety/i18n. Reorder App Settings: group UI (privacy/prefs), composition, personalization (home/reactions/bottom-bar/profile), then advanced (calendar/OTS/namecoin). Also drop the now-redundant Build.VERSION_CODES.R gate on BROWSER in DrawerNavigateItems, matching the fix landed in main (PR #3361). Co-Authored-By: Claude Sonnet 4.6 Claude-Session: https://claude.ai/code/session_01AdbTQuhuk2g5XGWEqmKLRz --- .../ui/navigation/bottombars/NavBarItem.kt | 6 ++---- .../loggedIn/settings/SettingsCatalogBuilder.kt | 16 ++++++++-------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt index bccea8c685..c5c04ac01b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/bottombars/NavBarItem.kt @@ -391,13 +391,11 @@ val DefaultBottomBarEntries: List = DefaultBottomBarItems.map { // each id in NavBarCatalog, so adding a new screen only requires editing the catalog + the // matching section list below — not two separate files. val DrawerNavigateItems: List = - listOfNotNull( + listOf( NavBarItem.HOME, NavBarItem.MESSAGES, NavBarItem.VIDEO, - // The embedded browser renders a cross-process surface (SurfaceControlViewHost), which needs - // API 30+. Below that the item is hidden so the feature can't be pinned or opened. - NavBarItem.BROWSER.takeIf { Build.VERSION.SDK_INT >= Build.VERSION_CODES.R }, + NavBarItem.BROWSER, NavBarItem.DISCOVER, NavBarItem.NOTIFICATIONS, ) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/SettingsCatalogBuilder.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/SettingsCatalogBuilder.kt index 14bc2e4141..023e57df6f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/SettingsCatalogBuilder.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/SettingsCatalogBuilder.kt @@ -67,12 +67,12 @@ fun buildSettingsCatalog( symEntry(R.string.route_import_follows, MaterialSymbols.GroupAdd, R.string.import_follows_search_keywords, Route.ImportFollowsSelectUser), symEntry(R.string.media_servers, MaterialSymbols.CloudUpload, R.string.media_servers_search_keywords, Route.EditMediaServers), symEntry(R.string.nests_servers_title, MaterialSymbols.CloudUpload, R.string.nests_servers_search_keywords, Route.EditNestsServers), - symEntry(R.string.profile_badges_title, MaterialSymbols.MilitaryTech, R.string.profile_badges_search_keywords, Route.ProfileBadges), - symEntry(R.string.favorite_dvms_title, MaterialSymbols.AutoAwesome, R.string.favorite_dvms_search_keywords, Route.EditFavoriteAlgoFeeds), symEntry(R.string.reactions, MaterialSymbols.FavoriteBorder, R.string.reactions_search_keywords, Route.UpdateReactionType), + symEntry(R.string.zaps, MaterialSymbols.Bolt, R.string.zaps_search_keywords, Route.UpdateZapAmount()), symEntry(R.string.video_player_settings, MaterialSymbols.VideoSettings, R.string.video_player_search_keywords, Route.VideoPlayerSettings), symEntry(R.string.audio_visualizer_settings, MaterialSymbols.MusicNote, R.string.audio_visualizer_search_keywords, Route.AudioVisualizerSettings), - symEntry(R.string.zaps, MaterialSymbols.Bolt, R.string.zaps_search_keywords, Route.UpdateZapAmount()), + symEntry(R.string.favorite_dvms_title, MaterialSymbols.AutoAwesome, R.string.favorite_dvms_search_keywords, Route.EditFavoriteAlgoFeeds), + symEntry(R.string.profile_badges_title, MaterialSymbols.MilitaryTech, R.string.profile_badges_search_keywords, Route.ProfileBadges), symEntry(R.string.payment_targets, MaterialSymbols.Payment, R.string.payment_targets_search_keywords, Route.EditPaymentTargets), symEntry(R.string.security_filters, MaterialSymbols.Security, R.string.security_filters_search_keywords, Route.SecurityFilters), symEntry(R.string.call_settings, MaterialSymbols.Phone, R.string.call_settings_search_keywords, Route.CallSettings), @@ -90,16 +90,16 @@ fun buildSettingsCatalog( icon = SettingsIcon.Painter(R.drawable.ic_tor, 1), keywordsRes = R.string.privacy_options_search_keywords, ) { nav.nav(Route.PrivacyOptions) }, - symEntry(R.string.ots_explorer_settings, MaterialSymbols.Search, R.string.ots_explorer_search_keywords, Route.OtsSettings), - symEntry(R.string.namecoin_settings, MaterialSymbols.Security, R.string.namecoin_search_keywords, Route.NamecoinSettings), symEntry(R.string.ui_preferences, MaterialSymbols.Settings, R.string.ui_preferences_search_keywords, Route.Settings), - symEntry(R.string.notification_settings, MaterialSymbols.Notifications, R.string.notification_settings_search_keywords, Route.NotificationSettings), - symEntry(R.string.calendar_reminder_settings_title, MaterialSymbols.CalendarMonth, R.string.calendar_reminder_search_keywords, Route.CalendarReminderSettings), symEntry(R.string.compose_settings, MaterialSymbols.Edit, R.string.compose_search_keywords, Route.ComposeSettings), + symEntry(R.string.notification_settings, MaterialSymbols.Notifications, R.string.notification_settings_search_keywords, Route.NotificationSettings), + symEntry(R.string.home_tabs_settings, MaterialSymbols.Home, R.string.home_tabs_search_keywords, Route.HomeTabsSettings), symEntry(R.string.reactions_settings, MaterialSymbols.ThumbUp, R.string.reactions_settings_search_keywords, Route.ReactionsSettings), symEntry(R.string.bottom_bar_settings, MaterialSymbols.Dashboard, R.string.bottom_bar_search_keywords, Route.BottomBarSettings), - symEntry(R.string.home_tabs_settings, MaterialSymbols.Home, R.string.home_tabs_search_keywords, Route.HomeTabsSettings), symEntry(R.string.profile_ui_settings, MaterialSymbols.AccountCircle, R.string.profile_ui_search_keywords, Route.ProfileUiSettings), + symEntry(R.string.calendar_reminder_settings_title, MaterialSymbols.CalendarMonth, R.string.calendar_reminder_search_keywords, Route.CalendarReminderSettings), + symEntry(R.string.ots_explorer_settings, MaterialSymbols.Search, R.string.ots_explorer_search_keywords, Route.OtsSettings), + symEntry(R.string.namecoin_settings, MaterialSymbols.Security, R.string.namecoin_search_keywords, Route.NamecoinSettings), ), )