diff --git a/app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt b/app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt index 879aa6cd8..90be2d2c5 100644 --- a/app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt @@ -88,7 +88,9 @@ fun LibraryScreen( onRefresh = onClickRefresh, onGlobalSearchClicked = onGlobalSearchClicked, getNumberOfMangaForCategory = { presenter.getMangaCountForCategory(it) }, + // SY --> getDisplayModeForPage = { presenter.getDisplayMode(index = it) }, + // SY <-- getColumnsForOrientation = { presenter.getColumnsPreferenceForCurrentOrientation(it) }, getLibraryForPage = { presenter.getMangaForCategory(page = it) }, isIncognitoMode = presenter.isIncognitoMode, 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 418fc180d..789f09cbc 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 @@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.State -import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -48,9 +47,9 @@ fun LibraryContent( onRefresh: (Category?) -> Boolean, onGlobalSearchClicked: () -> Unit, getNumberOfMangaForCategory: @Composable (Long) -> State, - getDisplayModeForPage: @Composable (Int) -> State, + getDisplayModeForPage: @Composable (Int) -> LibraryDisplayMode, getColumnsForOrientation: (Boolean) -> PreferenceMutableState, - getLibraryForPage: @Composable (Int) -> State>, + getLibraryForPage: @Composable (Int) -> List, // SY --> onOpenReader: (LibraryManga) -> Unit, getCategoryName: (Context, Category, Int, String) -> String, @@ -77,9 +76,9 @@ fun LibraryContent( // SY --> getCategoryName = { category, name -> val context = LocalContext.current - derivedStateOf { + remember(context, category, state.groupType, name) { getCategoryName(context, category, state.groupType, name) - }.value + } }, // SY <-- ) diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryPager.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryPager.kt index 0b55e7797..1f418729a 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryPager.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryPager.kt @@ -3,7 +3,6 @@ package eu.kanade.presentation.library.components import android.content.res.Configuration import androidx.compose.foundation.layout.fillMaxSize 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 @@ -24,9 +23,9 @@ fun LibraryPager( selectedManga: List, searchQuery: String?, onGlobalSearchClicked: () -> Unit, - getDisplayModeForPage: @Composable (Int) -> State, + getDisplayModeForPage: @Composable (Int) -> LibraryDisplayMode, getColumnsForOrientation: (Boolean) -> PreferenceMutableState, - getLibraryForPage: @Composable (Int) -> State>, + getLibraryForPage: @Composable (Int) -> List, onClickManga: (LibraryManga) -> Unit, onLongClickManga: (LibraryManga) -> Unit, // SY --> @@ -43,8 +42,8 @@ fun LibraryPager( // To make sure only one offscreen page is being composed return@HorizontalPager } - val library by getLibraryForPage(page) - val displayMode by getDisplayModeForPage(page) + val library = getLibraryForPage(page) + val displayMode = getDisplayModeForPage(page) val columns by if (displayMode != LibraryDisplayMode.List) { val configuration = LocalConfiguration.current val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index bf3a639e2..468f88a96 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -962,13 +962,13 @@ class LibraryPresenter( // SY --> @Composable - fun getMangaForCategory(page: Int): androidx.compose.runtime.State> { - val categoryId = remember(categories) { - categories.getOrNull(page)?.id ?: -1 + fun getMangaForCategory(page: Int): List { + val unfiltered = remember(categories, loadedManga) { + val categoryId = categories.getOrNull(page)?.id ?: -1 + loadedManga[categoryId] ?: emptyList() } - val unfiltered = loadedManga[categoryId] ?: emptyList() - return produceState(initialValue = unfiltered, unfiltered, searchQuery) { + val items = produceState(initialValue = unfiltered, unfiltered, searchQuery) { val query = searchQuery value = withIOContext { if (unfiltered.isNotEmpty() && !query.isNullOrBlank()) { @@ -1023,6 +1023,8 @@ class LibraryPresenter( } } } + + return items.value } private fun filterManga( @@ -1114,9 +1116,9 @@ class LibraryPresenter( // SY <-- @Composable - fun getDisplayMode(index: Int): androidx.compose.runtime.State { + fun getDisplayMode(index: Int): LibraryDisplayMode { val category = categories[index] - return derivedStateOf { + return remember(groupType, libraryDisplayMode, category) { // SY --> if (groupType != LibraryGroup.BY_DEFAULT) { libraryDisplayMode diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt index f98eb30a3..51a538598 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt @@ -11,7 +11,6 @@ import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarResult import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope @@ -158,13 +157,6 @@ class MangaController : FullComposeController { return } - val dialog by derivedStateOf { - when (val state = state) { - MangaScreenState.Loading -> null - is MangaScreenState.Success -> state.dialog - } - } - val successState = state as MangaScreenState.Success val isHttpSource = remember { successState.source is HttpSource } val scope = rememberCoroutineScope() @@ -210,7 +202,7 @@ class MangaController : FullComposeController { ) val onDismissRequest = { presenter.dismissDialog() } - when (val dialog = dialog) { + when (val dialog = (state as? MangaScreenState.Success)?.dialog) { is Dialog.ChangeCategory -> { ChangeCategoryDialog( initialSelection = dialog.initialSelection,