mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Use Compose fast* functions in more places
This commit is contained in:
		| @@ -29,6 +29,7 @@ import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.text.style.TextAlign | ||||
| import androidx.compose.ui.tooling.preview.Preview | ||||
| import androidx.compose.ui.unit.dp | ||||
| import androidx.compose.ui.util.fastFirstOrNull | ||||
| import eu.kanade.presentation.theme.TachiyomiTheme | ||||
| import eu.kanade.presentation.util.secondaryItemAlpha | ||||
| import eu.kanade.tachiyomi.R | ||||
| @@ -100,9 +101,9 @@ fun EmptyScreen( | ||||
|         modifier = modifier.fillMaxSize(), | ||||
|     ) { measurables, constraints -> | ||||
|         val looseConstraints = constraints.copy(minWidth = 0, minHeight = 0) | ||||
|         val facePlaceable = measurables.first { it.layoutId == "face" } | ||||
|         val facePlaceable = measurables.fastFirstOrNull { it.layoutId == "face" }!! | ||||
|             .measure(looseConstraints) | ||||
|         val actionsPlaceable = measurables.firstOrNull { it.layoutId == "actions" } | ||||
|         val actionsPlaceable = measurables.fastFirstOrNull { it.layoutId == "actions" } | ||||
|             ?.measure(looseConstraints) | ||||
|  | ||||
|         layout(constraints.maxWidth, constraints.maxHeight) { | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.platform.LocalUriHandler | ||||
| import androidx.compose.ui.util.fastAll | ||||
| import eu.kanade.domain.category.model.Category | ||||
| import eu.kanade.domain.library.model.display | ||||
| import eu.kanade.domain.manga.model.isLocal | ||||
| @@ -62,7 +63,7 @@ fun LibraryScreen( | ||||
|                 onChangeCategoryClicked = onChangeCategoryClicked, | ||||
|                 onMarkAsReadClicked = onMarkAsReadClicked, | ||||
|                 onMarkAsUnreadClicked = onMarkAsUnreadClicked, | ||||
|                 onDownloadClicked = onDownloadClicked.takeIf { presenter.selection.none { it.manga.isLocal() } }, | ||||
|                 onDownloadClicked = onDownloadClicked.takeIf { presenter.selection.fastAll { !it.manga.isLocal() } }, | ||||
|                 onDeleteClicked = onDeleteClicked, | ||||
|             ) | ||||
|         }, | ||||
|   | ||||
| @@ -43,6 +43,9 @@ import androidx.compose.ui.platform.LocalDensity | ||||
| import androidx.compose.ui.platform.LocalHapticFeedback | ||||
| import androidx.compose.ui.platform.LocalLayoutDirection | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.util.fastAll | ||||
| import androidx.compose.ui.util.fastAny | ||||
| import androidx.compose.ui.util.fastMap | ||||
| import eu.kanade.domain.chapter.model.Chapter | ||||
| import eu.kanade.presentation.components.ChapterDownloadAction | ||||
| import eu.kanade.presentation.components.ExtendedFloatingActionButton | ||||
| @@ -204,7 +207,7 @@ private fun MangaScreenSmallImpl( | ||||
|     val chapters = remember(state) { state.processedChapters.toList() } | ||||
|  | ||||
|     val internalOnBackPressed = { | ||||
|         if (chapters.any { it.selected }) { | ||||
|         if (chapters.fastAny { it.selected }) { | ||||
|             onAllChapterSelected(false) | ||||
|         } else { | ||||
|             onBackClicked() | ||||
| @@ -258,13 +261,13 @@ private fun MangaScreenSmallImpl( | ||||
|         snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, | ||||
|         floatingActionButton = { | ||||
|             AnimatedVisibility( | ||||
|                 visible = chapters.any { !it.chapter.read } && chapters.none { it.selected }, | ||||
|                 visible = chapters.fastAny { !it.chapter.read } && chapters.fastAll { !it.selected }, | ||||
|                 enter = fadeIn(), | ||||
|                 exit = fadeOut(), | ||||
|             ) { | ||||
|                 ExtendedFloatingActionButton( | ||||
|                     text = { | ||||
|                         val id = if (chapters.any { it.chapter.read }) { | ||||
|                         val id = if (chapters.fastAny { it.chapter.read }) { | ||||
|                             R.string.action_resume | ||||
|                         } else { | ||||
|                             R.string.action_start | ||||
| @@ -283,7 +286,7 @@ private fun MangaScreenSmallImpl( | ||||
|         SwipeRefresh( | ||||
|             refreshing = state.isRefreshingData, | ||||
|             onRefresh = onRefresh, | ||||
|             enabled = chapters.none { it.selected }, | ||||
|             enabled = chapters.fastAll { !it.selected }, | ||||
|             indicatorPadding = contentPadding, | ||||
|         ) { | ||||
|             val layoutDirection = LocalLayoutDirection.current | ||||
| @@ -414,7 +417,7 @@ fun MangaScreenLargeImpl( | ||||
|     SwipeRefresh( | ||||
|         refreshing = state.isRefreshingData, | ||||
|         onRefresh = onRefresh, | ||||
|         enabled = chapters.none { it.selected }, | ||||
|         enabled = chapters.fastAll { !it.selected }, | ||||
|         indicatorPadding = PaddingValues( | ||||
|             start = insetPadding.calculateStartPadding(layoutDirection), | ||||
|             top = with(density) { topBarHeight.toDp() }, | ||||
| @@ -424,7 +427,7 @@ fun MangaScreenLargeImpl( | ||||
|         val chapterListState = rememberLazyListState() | ||||
|  | ||||
|         val internalOnBackPressed = { | ||||
|             if (chapters.any { it.selected }) { | ||||
|             if (chapters.fastAny { it.selected }) { | ||||
|                 onAllChapterSelected(false) | ||||
|             } else { | ||||
|                 onBackClicked() | ||||
| @@ -437,7 +440,7 @@ fun MangaScreenLargeImpl( | ||||
|                 MangaToolbar( | ||||
|                     modifier = Modifier.onSizeChanged { topBarHeight = it.height }, | ||||
|                     title = state.manga.title, | ||||
|                     titleAlphaProvider = { if (chapters.any { it.selected }) 1f else 0f }, | ||||
|                     titleAlphaProvider = { if (chapters.fastAny { it.selected }) 1f else 0f }, | ||||
|                     backgroundAlphaProvider = { 1f }, | ||||
|                     hasFilters = state.manga.chaptersFiltered(), | ||||
|                     incognitoMode = state.isIncognitoMode, | ||||
| @@ -472,13 +475,13 @@ fun MangaScreenLargeImpl( | ||||
|             snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, | ||||
|             floatingActionButton = { | ||||
|                 AnimatedVisibility( | ||||
|                     visible = chapters.any { !it.chapter.read } && chapters.none { it.selected }, | ||||
|                     visible = chapters.fastAny { !it.chapter.read } && chapters.fastAll { !it.selected }, | ||||
|                     enter = fadeIn(), | ||||
|                     exit = fadeOut(), | ||||
|                 ) { | ||||
|                     ExtendedFloatingActionButton( | ||||
|                         text = { | ||||
|                             val id = if (chapters.any { it.chapter.read }) { | ||||
|                             val id = if (chapters.fastAny { it.chapter.read }) { | ||||
|                                 R.string.action_resume | ||||
|                             } else { | ||||
|                                 R.string.action_start | ||||
| @@ -584,29 +587,29 @@ private fun SharedMangaBottomActionMenu( | ||||
|         visible = selected.isNotEmpty(), | ||||
|         modifier = modifier.fillMaxWidth(fillFraction), | ||||
|         onBookmarkClicked = { | ||||
|             onMultiBookmarkClicked.invoke(selected.map { it.chapter }, true) | ||||
|         }.takeIf { selected.any { !it.chapter.bookmark } }, | ||||
|             onMultiBookmarkClicked.invoke(selected.fastMap { it.chapter }, true) | ||||
|         }.takeIf { selected.fastAny { !it.chapter.bookmark } }, | ||||
|         onRemoveBookmarkClicked = { | ||||
|             onMultiBookmarkClicked.invoke(selected.map { it.chapter }, false) | ||||
|         }.takeIf { selected.all { it.chapter.bookmark } }, | ||||
|             onMultiBookmarkClicked.invoke(selected.fastMap { it.chapter }, false) | ||||
|         }.takeIf { selected.fastAll { it.chapter.bookmark } }, | ||||
|         onMarkAsReadClicked = { | ||||
|             onMultiMarkAsReadClicked(selected.map { it.chapter }, true) | ||||
|         }.takeIf { selected.any { !it.chapter.read } }, | ||||
|             onMultiMarkAsReadClicked(selected.fastMap { it.chapter }, true) | ||||
|         }.takeIf { selected.fastAny { !it.chapter.read } }, | ||||
|         onMarkAsUnreadClicked = { | ||||
|             onMultiMarkAsReadClicked(selected.map { it.chapter }, false) | ||||
|         }.takeIf { selected.any { it.chapter.read || it.chapter.lastPageRead > 0L } }, | ||||
|             onMultiMarkAsReadClicked(selected.fastMap { it.chapter }, false) | ||||
|         }.takeIf { selected.fastAny { it.chapter.read || it.chapter.lastPageRead > 0L } }, | ||||
|         onMarkPreviousAsReadClicked = { | ||||
|             onMarkPreviousAsReadClicked(selected[0].chapter) | ||||
|         }.takeIf { selected.size == 1 }, | ||||
|         onDownloadClicked = { | ||||
|             onDownloadChapter!!(selected.toList(), ChapterDownloadAction.START) | ||||
|         }.takeIf { | ||||
|             onDownloadChapter != null && selected.any { it.downloadState != Download.State.DOWNLOADED } | ||||
|             onDownloadChapter != null && selected.fastAny { it.downloadState != Download.State.DOWNLOADED } | ||||
|         }, | ||||
|         onDeleteClicked = { | ||||
|             onMultiDeleteClicked(selected.map { it.chapter }) | ||||
|             onMultiDeleteClicked(selected.fastMap { it.chapter }) | ||||
|         }.takeIf { | ||||
|             onDownloadChapter != null && selected.any { it.downloadState == Download.State.DOWNLOADED } | ||||
|             onDownloadChapter != null && selected.fastAny { it.downloadState == Download.State.DOWNLOADED } | ||||
|         }, | ||||
|     ) | ||||
| } | ||||
| @@ -662,7 +665,7 @@ private fun onChapterItemClick( | ||||
| ) { | ||||
|     when { | ||||
|         chapterItem.selected -> onToggleSelection(false) | ||||
|         chapters.any { it.selected } -> onToggleSelection(true) | ||||
|         chapters.fastAny { it.selected } -> onToggleSelection(true) | ||||
|         else -> onChapterClicked(chapterItem.chapter) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -25,6 +25,7 @@ import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.unit.dp | ||||
| import androidx.compose.ui.util.fastMap | ||||
| import cafe.adriel.voyager.core.model.StateScreenModel | ||||
| import cafe.adriel.voyager.core.model.coroutineScope | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| @@ -240,14 +241,14 @@ private class ClearDatabaseScreenModel : StateScreenModel<ClearDatabaseScreenMod | ||||
|  | ||||
|     fun selectAll() = mutableState.update { state -> | ||||
|         if (state !is State.Ready) return@update state | ||||
|         state.copy(selection = state.items.map { it.id }) | ||||
|         state.copy(selection = state.items.fastMap { it.id }) | ||||
|     } | ||||
|  | ||||
|     fun invertSelection() = mutableState.update { state -> | ||||
|         if (state !is State.Ready) return@update state | ||||
|         state.copy( | ||||
|             selection = state.items | ||||
|                 .map { it.id } | ||||
|                 .fastMap { it.id } | ||||
|                 .filterNot { it in state.selection }, | ||||
|         ) | ||||
|     } | ||||
|   | ||||
| @@ -16,6 +16,7 @@ import androidx.compose.runtime.setValue | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import androidx.compose.ui.res.pluralStringResource | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.util.fastMap | ||||
| import androidx.core.net.toUri | ||||
| import com.hippo.unifile.UniFile | ||||
| import eu.kanade.domain.category.interactor.GetCategories | ||||
| @@ -204,8 +205,8 @@ class SettingsDownloadScreen : SearchableSettings { | ||||
|                 itemLabel = { it.visualName }, | ||||
|                 onDismissRequest = { showDialog = false }, | ||||
|                 onValueChanged = { newIncluded, newExcluded -> | ||||
|                     downloadNewChapterCategoriesPref.set(newIncluded.map { it.id.toString() }.toSet()) | ||||
|                     downloadNewChapterCategoriesExcludePref.set(newExcluded.map { it.id.toString() }.toSet()) | ||||
|                     downloadNewChapterCategoriesPref.set(newIncluded.fastMap { it.id.toString() }.toSet()) | ||||
|                     downloadNewChapterCategoriesExcludePref.set(newExcluded.fastMap { it.id.toString() }.toSet()) | ||||
|                     showDialog = false | ||||
|                 }, | ||||
|             ) | ||||
|   | ||||
| @@ -25,6 +25,7 @@ import androidx.compose.ui.draw.clipToBounds | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import androidx.compose.ui.res.pluralStringResource | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.util.fastMap | ||||
| import androidx.core.content.ContextCompat | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import com.bluelinelabs.conductor.Router | ||||
| @@ -124,9 +125,9 @@ class SettingsLibraryScreen : SearchableSettings { | ||||
|  | ||||
|         // For default category | ||||
|         val ids = listOf(libraryPreferences.defaultCategory().defaultValue()) + | ||||
|             allCategories.map { it.id.toInt() } | ||||
|             allCategories.fastMap { it.id.toInt() } | ||||
|         val labels = listOf(stringResource(R.string.default_category_summary)) + | ||||
|             allCategories.map { it.visualName(context) } | ||||
|             allCategories.fastMap { it.visualName(context) } | ||||
|  | ||||
|         return Preference.PreferenceGroup( | ||||
|             title = stringResource(R.string.categories), | ||||
|   | ||||
| @@ -21,6 +21,8 @@ import androidx.compose.runtime.setValue | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.util.fastAll | ||||
| import androidx.compose.ui.util.fastAny | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.components.ChapterDownloadAction | ||||
| import eu.kanade.presentation.components.EmptyScreen | ||||
| @@ -241,24 +243,24 @@ private fun UpdatesBottomBar( | ||||
|         modifier = Modifier.fillMaxWidth(), | ||||
|         onBookmarkClicked = { | ||||
|             onMultiBookmarkClicked.invoke(selected, true) | ||||
|         }.takeIf { selected.any { !it.update.bookmark } }, | ||||
|         }.takeIf { selected.fastAny { !it.update.bookmark } }, | ||||
|         onRemoveBookmarkClicked = { | ||||
|             onMultiBookmarkClicked.invoke(selected, false) | ||||
|         }.takeIf { selected.all { it.update.bookmark } }, | ||||
|         }.takeIf { selected.fastAll { it.update.bookmark } }, | ||||
|         onMarkAsReadClicked = { | ||||
|             onMultiMarkAsReadClicked(selected, true) | ||||
|         }.takeIf { selected.any { !it.update.read } }, | ||||
|         }.takeIf { selected.fastAny { !it.update.read } }, | ||||
|         onMarkAsUnreadClicked = { | ||||
|             onMultiMarkAsReadClicked(selected, false) | ||||
|         }.takeIf { selected.any { it.update.read } }, | ||||
|         }.takeIf { selected.fastAny { it.update.read } }, | ||||
|         onDownloadClicked = { | ||||
|             onDownloadChapter(selected, ChapterDownloadAction.START) | ||||
|         }.takeIf { | ||||
|             selected.any { it.downloadStateProvider() != Download.State.DOWNLOADED } | ||||
|             selected.fastAny { it.downloadStateProvider() != Download.State.DOWNLOADED } | ||||
|         }, | ||||
|         onDeleteClicked = { | ||||
|             onMultiDeleteClicked(selected) | ||||
|         }.takeIf { selected.any { it.downloadStateProvider() == Download.State.DOWNLOADED } }, | ||||
|         }.takeIf { selected.fastAny { it.downloadStateProvider() == Download.State.DOWNLOADED } }, | ||||
|     ) | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user