From bfb6c9acfe37cc3701959041153ccb63402a1565 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sun, 16 Aug 2026 16:04:22 -0400 Subject: [PATCH] =?UTF-8?q?style(android):=20satisfy=20detekt=20on=20the?= =?UTF-8?q?=20new=20browse=20tabs=20=E2=80=94=20#2467?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two findings, both fair: LibraryScreen was one line over the 60-line cap once Genres and Years were added to its pager. Split the page bodies into LibraryTabPage, so the screen is the scaffold and tab bar while the routing table lives on its own -- adding a tab is now one line there and one label in LIBRARY_TABS, rather than growing a function that was already at its limit. The decade arithmetic used a bare 10 twice. Named it YEARS_PER_DECADE: floor-to-decade reads as arbitrary without it. --- .../minstrel/library/ui/BrowseViewModel.kt | 7 ++- .../minstrel/library/ui/LibraryScreen.kt | 46 ++++++++++++------- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/android/app/src/main/java/com/fabledsword/minstrel/library/ui/BrowseViewModel.kt b/android/app/src/main/java/com/fabledsword/minstrel/library/ui/BrowseViewModel.kt index e0229dc3..957c1ed4 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/library/ui/BrowseViewModel.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/library/ui/BrowseViewModel.kt @@ -240,6 +240,11 @@ fun visibleGenres( } } +// Integer division by this floors a year to its decade: 2007 -> 2000. Named +// because detekt counts it as magic, and because the arithmetic reads as +// arbitrary otherwise. +private const val YEARS_PER_DECADE = 10 + /** A decade's worth of the year index, newest year first. */ data class DecadeGroup( val decade: Int, @@ -255,7 +260,7 @@ data class DecadeGroup( * same reason as [visibleGenres]. */ fun groupByDecade(years: List): List = - years.groupBy { (it.year / 10) * 10 } + years.groupBy { (it.year / YEARS_PER_DECADE) * YEARS_PER_DECADE } .map { (decade, entries) -> DecadeGroup( decade = decade, diff --git a/android/app/src/main/java/com/fabledsword/minstrel/library/ui/LibraryScreen.kt b/android/app/src/main/java/com/fabledsword/minstrel/library/ui/LibraryScreen.kt index 3e70fb43..47e4ab5b 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/library/ui/LibraryScreen.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/library/ui/LibraryScreen.kt @@ -117,26 +117,40 @@ fun LibraryScreen( state = pagerState, modifier = Modifier.fillMaxSize().padding(inner), ) { page -> - when (page) { - TAB_ARTISTS -> ArtistsTab(viewModel = viewModel, navController = navController) - TAB_ALBUMS -> AlbumsTab(viewModel = viewModel, navController = navController) - TAB_GENRES -> GenresTab( - onAlbumClick = { id -> navController.navigate(AlbumDetail(id)) }, - ) - TAB_YEARS -> YearsTab( - onAlbumClick = { id -> navController.navigate(AlbumDetail(id)) }, - ) - TAB_HISTORY -> HistoryTab( - onNavigateToAlbum = { id -> navController.navigate(AlbumDetail(id)) }, - onNavigateToArtist = { id -> navController.navigate(ArtistDetail(id)) }, - ) - TAB_LIKED -> LikedTab(navController = navController) - TAB_HIDDEN -> HiddenTab() - } + LibraryTabPage(page = page, viewModel = viewModel, navController = navController) } } } +/** + * The pager's page bodies, split out of [LibraryScreen] so the screen stays + * the scaffold + tab bar and this stays the routing table. Adding a tab is + * then one line here and one label in [LIBRARY_TABS]. + */ +@Composable +private fun LibraryTabPage( + page: Int, + viewModel: LibraryViewModel, + navController: NavHostController, +) { + when (page) { + TAB_ARTISTS -> ArtistsTab(viewModel = viewModel, navController = navController) + TAB_ALBUMS -> AlbumsTab(viewModel = viewModel, navController = navController) + TAB_GENRES -> GenresTab( + onAlbumClick = { id -> navController.navigate(AlbumDetail(id)) }, + ) + TAB_YEARS -> YearsTab( + onAlbumClick = { id -> navController.navigate(AlbumDetail(id)) }, + ) + TAB_HISTORY -> HistoryTab( + onNavigateToAlbum = { id -> navController.navigate(AlbumDetail(id)) }, + onNavigateToArtist = { id -> navController.navigate(ArtistDetail(id)) }, + ) + TAB_LIKED -> LikedTab(navController = navController) + TAB_HIDDEN -> HiddenTab() + } +} + private const val TAB_ARTISTS = 0 private const val TAB_ALBUMS = 1 private const val TAB_GENRES = 2