diff --git a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt index e7354d11e..1aaebdaa9 100644 --- a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt @@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Tab import androidx.compose.material3.TabRow import androidx.compose.runtime.Composable @@ -80,9 +81,8 @@ fun TabbedScreen( Tab( selected = state.currentPage == index, onClick = { scope.launch { state.animateScrollToPage(index) } }, - text = { - TabText(stringResource(tab.titleRes), tab.badgeNumber, state.currentPage == index) - }, + text = { TabText(text = stringResource(tab.titleRes), badgeCount = tab.badgeNumber) }, + unselectedContentColor = MaterialTheme.colorScheme.onSurface, ) } } diff --git a/app/src/main/java/eu/kanade/presentation/components/Tabs.kt b/app/src/main/java/eu/kanade/presentation/components/Tabs.kt index 2ba0f1301..ce8c4b53f 100644 --- a/app/src/main/java/eu/kanade/presentation/components/Tabs.kt +++ b/app/src/main/java/eu/kanade/presentation/components/Tabs.kt @@ -30,17 +30,13 @@ fun TabIndicator(currentTabPosition: TabPosition) { fun TabText( text: String, badgeCount: Int? = null, - isCurrentPage: Boolean, ) { val pillAlpha = if (isSystemInDarkTheme()) 0.12f else 0.08f Row( verticalAlignment = Alignment.CenterVertically, ) { - Text( - text = text, - color = if (isCurrentPage) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onBackground, - ) + Text(text = text) if (badgeCount != null) { Pill( text = "$badgeCount", diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt index 134fa5936..b36186df0 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt @@ -68,12 +68,13 @@ fun LibraryContent( if (isLibraryEmpty.not() && showPageTabs && categories.size > 1) { LibraryTabs( - state = pagerState, categories = categories, + currentPageIndex = pagerState.currentPage, showMangaCount = showMangaCount, getNumberOfMangaForCategory = getNumberOfMangaForCategory, isDownloadOnly = isDownloadOnly, isIncognitoMode = isIncognitoMode, + onTabItemClick = { scope.launch { pagerState.animateScrollToPage(it) } }, ) } diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt index 621f29e95..f23ca01f4 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt @@ -1,56 +1,54 @@ package eu.kanade.presentation.library.components import androidx.compose.foundation.layout.Column +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ScrollableTabRow import androidx.compose.material3.Tab import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.unit.dp import eu.kanade.domain.category.model.Category import eu.kanade.presentation.category.visualName import eu.kanade.presentation.components.AppStateBanners import eu.kanade.presentation.components.Divider -import eu.kanade.presentation.components.PagerState import eu.kanade.presentation.components.TabIndicator import eu.kanade.presentation.components.TabText -import kotlinx.coroutines.launch @Composable fun LibraryTabs( - state: PagerState, categories: List, + currentPageIndex: Int, showMangaCount: Boolean, isDownloadOnly: Boolean, isIncognitoMode: Boolean, getNumberOfMangaForCategory: @Composable (Long) -> State, + onTabItemClick: (Int) -> Unit, ) { - val scope = rememberCoroutineScope() - Column { ScrollableTabRow( - selectedTabIndex = state.currentPage, + selectedTabIndex = currentPageIndex, edgePadding = 0.dp, - indicator = { TabIndicator(it[state.currentPage]) }, + indicator = { TabIndicator(it[currentPageIndex]) }, // TODO: use default when width is fixed upstream // https://issuetracker.google.com/issues/242879624 divider = {}, ) { categories.forEachIndexed { index, category -> - val count by if (showMangaCount) { - getNumberOfMangaForCategory(category.id) - } else { - remember { mutableStateOf(null) } - } Tab( - selected = state.currentPage == index, - onClick = { scope.launch { state.animateScrollToPage(index) } }, + selected = currentPageIndex == index, + onClick = { onTabItemClick(index) }, text = { - TabText(category.visualName, count, state.currentPage == index) + TabText( + text = category.visualName, + badgeCount = if (showMangaCount) { + getNumberOfMangaForCategory(category.id) + } else { + null + }?.value, + ) }, + unselectedContentColor = MaterialTheme.colorScheme.onSurface, ) } }