Browse Source

Fix derivedStateOf errors (#8008)

Ivan Iskandar 2 years ago
parent
commit
6865c21c75

+ 2 - 1
app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt

@@ -11,6 +11,7 @@ import eu.kanade.presentation.library.components.LibraryContent
 import eu.kanade.presentation.library.components.LibraryToolbar
 import eu.kanade.tachiyomi.source.LocalSource
 import eu.kanade.tachiyomi.ui.library.LibraryPresenter
+import eu.kanade.tachiyomi.ui.library.setting.display
 
 @Composable
 fun LibraryScreen(
@@ -72,7 +73,7 @@ fun LibraryScreen(
                     onRefresh = onClickRefresh,
                     onGlobalSearchClicked = onGlobalSearchClicked,
                     getNumberOfMangaForCategory = { presenter.getMangaCountForCategory(it) },
-                    getDisplayModeForPage = { presenter.getDisplayMode(index = it) },
+                    getDisplayModeForPage = { presenter.categories[it].display },
                     getColumnsForOrientation = { presenter.getColumnsPreferenceForCurrentOrientation(it) },
                     getLibraryForPage = { presenter.getMangaForCategory(page = it) },
                     isIncognitoMode = presenter.isIncognitoMode,

+ 2 - 2
app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt

@@ -45,9 +45,9 @@ fun LibraryContent(
     onRefresh: (Category?) -> Boolean,
     onGlobalSearchClicked: () -> Unit,
     getNumberOfMangaForCategory: @Composable (Long) -> State<Int?>,
-    getDisplayModeForPage: @Composable (Int) -> State<LibraryDisplayMode>,
+    getDisplayModeForPage: @Composable (Int) -> LibraryDisplayMode,
     getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>,
-    getLibraryForPage: @Composable (Int) -> State<List<LibraryItem>>,
+    getLibraryForPage: @Composable (Int) -> List<LibraryItem>,
 ) {
     Column(
         modifier = Modifier.padding(contentPadding),

+ 4 - 5
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<LibraryManga>,
     searchQuery: String?,
     onGlobalSearchClicked: () -> Unit,
-    getDisplayModeForPage: @Composable (Int) -> State<LibraryDisplayMode>,
+    getDisplayModeForPage: @Composable (Int) -> LibraryDisplayMode,
     getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>,
-    getLibraryForPage: @Composable (Int) -> State<List<LibraryItem>>,
+    getLibraryForPage: @Composable (Int) -> List<LibraryItem>,
     onClickManga: (LibraryManga) -> Unit,
     onLongClickManga: (LibraryManga) -> Unit,
 ) {
@@ -40,8 +39,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

+ 5 - 16
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt

@@ -43,9 +43,7 @@ import eu.kanade.tachiyomi.source.SourceManager
 import eu.kanade.tachiyomi.source.model.SManga
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
-import eu.kanade.tachiyomi.ui.library.setting.LibraryDisplayMode
 import eu.kanade.tachiyomi.ui.library.setting.LibrarySort
-import eu.kanade.tachiyomi.ui.library.setting.display
 import eu.kanade.tachiyomi.ui.library.setting.sort
 import eu.kanade.tachiyomi.util.lang.combineLatest
 import eu.kanade.tachiyomi.util.lang.launchIO
@@ -642,13 +640,12 @@ class LibraryPresenter(
     }
 
     @Composable
-    fun getMangaForCategory(page: Int): androidx.compose.runtime.State<List<LibraryItem>> {
-        val categoryId = remember(categories) {
-            categories.getOrNull(page)?.id ?: -1
+    fun getMangaForCategory(page: Int): List<LibraryItem> {
+        val unfiltered = remember(categories, loadedManga) {
+            val categoryId = categories.getOrNull(page)?.id ?: -1
+            loadedManga[categoryId] ?: emptyList()
         }
-        val unfiltered = loadedManga[categoryId] ?: emptyList()
-
-        return derivedStateOf {
+        return remember(unfiltered) {
             val query = searchQuery
             if (query.isNullOrBlank().not()) {
                 unfiltered.filter {
@@ -660,14 +657,6 @@ class LibraryPresenter(
         }
     }
 
-    @Composable
-    fun getDisplayMode(index: Int): androidx.compose.runtime.State<LibraryDisplayMode> {
-        val category = categories[index]
-        return derivedStateOf {
-            category.display
-        }
-    }
-
     fun clearSelection() {
         state.selection = emptyList()
     }

+ 1 - 9
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
@@ -111,13 +110,6 @@ class MangaController : FullComposeController<MangaPresenter> {
             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()
@@ -152,7 +144,7 @@ class MangaController : FullComposeController<MangaPresenter> {
         )
 
         val onDismissRequest = { presenter.dismissDialog() }
-        when (val dialog = dialog) {
+        when (val dialog = (state as? MangaScreenState.Success)?.dialog) {
             is Dialog.ChangeCategory -> {
                 ChangeCategoryDialog(
                     initialSelection = dialog.initialSelection,