mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Add ability to open random manga (#8232)
* Add ability to open random manga * Use `getMangaForCategory` instead * Put it in overflow menu instead of using EFAB * Partial review changes * Merge remote-tracking branch 'refs/remotes/origin/patch-6' into patch-6 # Conflicts: # app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt * Merge remote-tracking branch 'refs/remotes/origin/patch-6' into patch-6 # Conflicts: # app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt * Wording changes
This commit is contained in:
		| @@ -36,6 +36,7 @@ fun LibraryScreen( | ||||
|     onClickInvertSelection: () -> Unit, | ||||
|     onClickFilter: () -> Unit, | ||||
|     onClickRefresh: (Category?) -> Boolean, | ||||
|     onClickOpenRandomManga: () -> Unit, | ||||
| ) { | ||||
|     Scaffold( | ||||
|         topBar = { scrollBehavior -> | ||||
| @@ -51,6 +52,7 @@ fun LibraryScreen( | ||||
|                 onClickInvertSelection = onClickInvertSelection, | ||||
|                 onClickFilter = onClickFilter, | ||||
|                 onClickRefresh = { onClickRefresh(null) }, | ||||
|                 onClickOpenRandomManga = onClickOpenRandomManga, | ||||
|                 scrollBehavior = scrollBehavior.takeIf { !tabVisible }, // For scroll overlay when no tab | ||||
|             ) | ||||
|         }, | ||||
|   | ||||
| @@ -1,15 +1,17 @@ | ||||
| package eu.kanade.presentation.library.components | ||||
|  | ||||
| import androidx.compose.foundation.isSystemInDarkTheme | ||||
| import androidx.compose.foundation.layout.Box | ||||
| import androidx.compose.foundation.layout.Row | ||||
| import androidx.compose.foundation.text.KeyboardActions | ||||
| import androidx.compose.foundation.text.KeyboardOptions | ||||
| import androidx.compose.material.icons.Icons | ||||
| import androidx.compose.material.icons.outlined.FilterList | ||||
| import androidx.compose.material.icons.outlined.FlipToBack | ||||
| import androidx.compose.material.icons.outlined.Refresh | ||||
| import androidx.compose.material.icons.outlined.MoreVert | ||||
| import androidx.compose.material.icons.outlined.Search | ||||
| import androidx.compose.material.icons.outlined.SelectAll | ||||
| import androidx.compose.material3.DropdownMenuItem | ||||
| import androidx.compose.material3.Icon | ||||
| import androidx.compose.material3.IconButton | ||||
| import androidx.compose.material3.LocalContentColor | ||||
| @@ -17,6 +19,10 @@ import androidx.compose.material3.MaterialTheme | ||||
| import androidx.compose.material3.Text | ||||
| import androidx.compose.material3.TopAppBarScrollBehavior | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.compose.runtime.mutableStateOf | ||||
| import androidx.compose.runtime.remember | ||||
| import androidx.compose.runtime.setValue | ||||
| import androidx.compose.ui.Alignment | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.platform.LocalFocusManager | ||||
| @@ -26,6 +32,7 @@ import androidx.compose.ui.text.input.ImeAction | ||||
| import androidx.compose.ui.text.style.TextOverflow | ||||
| import androidx.compose.ui.unit.sp | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.components.DropdownMenu | ||||
| import eu.kanade.presentation.components.Pill | ||||
| import eu.kanade.presentation.components.SearchToolbar | ||||
| import eu.kanade.presentation.library.LibraryState | ||||
| @@ -43,6 +50,7 @@ fun LibraryToolbar( | ||||
|     onClickInvertSelection: () -> Unit, | ||||
|     onClickFilter: () -> Unit, | ||||
|     onClickRefresh: () -> Unit, | ||||
|     onClickOpenRandomManga: () -> Unit, | ||||
|     scrollBehavior: TopAppBarScrollBehavior?, | ||||
| ) = when { | ||||
|     state.selectionMode -> LibrarySelectionToolbar( | ||||
| @@ -85,6 +93,7 @@ fun LibraryToolbar( | ||||
|         onClickSearch = { state.searchQuery = "" }, | ||||
|         onClickFilter = onClickFilter, | ||||
|         onClickRefresh = onClickRefresh, | ||||
|         onClickOpenRandomManga = onClickOpenRandomManga, | ||||
|         scrollBehavior = scrollBehavior, | ||||
|     ) | ||||
| } | ||||
| @@ -98,6 +107,7 @@ fun LibraryRegularToolbar( | ||||
|     onClickSearch: () -> Unit, | ||||
|     onClickFilter: () -> Unit, | ||||
|     onClickRefresh: () -> Unit, | ||||
|     onClickOpenRandomManga: () -> Unit, | ||||
|     scrollBehavior: TopAppBarScrollBehavior?, | ||||
| ) { | ||||
|     val pillAlpha = if (isSystemInDarkTheme()) 0.12f else 0.08f | ||||
| @@ -127,8 +137,34 @@ fun LibraryRegularToolbar( | ||||
|             IconButton(onClick = onClickFilter) { | ||||
|                 Icon(Icons.Outlined.FilterList, contentDescription = stringResource(R.string.action_filter), tint = filterTint) | ||||
|             } | ||||
|             IconButton(onClick = onClickRefresh) { | ||||
|                 Icon(Icons.Outlined.Refresh, contentDescription = stringResource(R.string.pref_category_library_update)) | ||||
|             var moreExpanded by remember { mutableStateOf(false) } | ||||
|             Box { | ||||
|                 IconButton(onClick = { moreExpanded = !moreExpanded }) { | ||||
|                     Icon( | ||||
|                         imageVector = Icons.Outlined.MoreVert, | ||||
|                         contentDescription = stringResource(R.string.abc_action_menu_overflow_description), | ||||
|                     ) | ||||
|                 } | ||||
|                 val onDismissRequest = { moreExpanded = false } | ||||
|                 DropdownMenu( | ||||
|                     expanded = moreExpanded, | ||||
|                     onDismissRequest = onDismissRequest, | ||||
|                 ) { | ||||
|                     DropdownMenuItem( | ||||
|                         text = { Text(text = stringResource(R.string.pref_category_library_update)) }, | ||||
|                         onClick = { | ||||
|                             onClickRefresh() | ||||
|                             onDismissRequest() | ||||
|                         }, | ||||
|                     ) | ||||
|                     DropdownMenuItem( | ||||
|                         text = { Text(text = stringResource(R.string.action_open_random_manga)) }, | ||||
|                         onClick = { | ||||
|                             onClickOpenRandomManga() | ||||
|                             onDismissRequest() | ||||
|                         }, | ||||
|                     ) | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         incognitoMode = incognitoMode, | ||||
|   | ||||
| @@ -43,6 +43,8 @@ class LibraryController( | ||||
|     @Composable | ||||
|     override fun ComposeContent() { | ||||
|         val context = LocalContext.current | ||||
|         val getMangaForCategory = presenter.getMangaForCategory(page = presenter.activeCategory) | ||||
|  | ||||
|         LibraryScreen( | ||||
|             presenter = presenter, | ||||
|             onMangaClicked = ::openManga, | ||||
| @@ -60,6 +62,14 @@ class LibraryController( | ||||
|                 context.toast(if (started) R.string.updating_category else R.string.update_already_running) | ||||
|                 started | ||||
|             }, | ||||
|             onClickOpenRandomManga = { | ||||
|                 val items = getMangaForCategory.map { it.libraryManga.manga.id } | ||||
|                 if (getMangaForCategory.isNotEmpty()) { | ||||
|                     openManga(items.random()) | ||||
|                 } else { | ||||
|                     context.toast(R.string.information_no_entries_found) | ||||
|                 } | ||||
|             }, | ||||
|             onClickInvertSelection = { presenter.invertSelection(presenter.activeCategory) }, | ||||
|             onClickSelectAll = { presenter.selectAll(presenter.activeCategory) }, | ||||
|             onClickUnselectAll = ::clearSelection, | ||||
|   | ||||
| @@ -526,7 +526,7 @@ class LibraryPresenter( | ||||
|  | ||||
|     @Composable | ||||
|     fun getMangaForCategory(page: Int): List<LibraryItem> { | ||||
|         val unfiltered = remember(categories, loadedManga) { | ||||
|         val unfiltered = remember(categories, loadedManga, page) { | ||||
|             val categoryId = categories.getOrNull(page)?.id ?: -1 | ||||
|             loadedManga[categoryId] ?: emptyList() | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user