mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	Resolve review comments for BrowseSourceScreens (#7912)
This commit is contained in:
		| @@ -4,17 +4,14 @@ import androidx.compose.material3.SnackbarHostState | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.compose.runtime.remember | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import androidx.compose.ui.platform.LocalUriHandler | ||||
| import androidx.paging.compose.collectAsLazyPagingItems | ||||
| import eu.kanade.domain.manga.model.Manga | ||||
| import eu.kanade.presentation.browse.components.BrowseLatestToolbar | ||||
| import eu.kanade.presentation.components.Scaffold | ||||
| import eu.kanade.tachiyomi.source.LocalSource | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourcePresenter | ||||
| import eu.kanade.tachiyomi.ui.more.MoreController | ||||
| import eu.kanade.tachiyomi.ui.webview.WebViewActivity | ||||
|  | ||||
| @Composable | ||||
| fun BrowseLatestScreen( | ||||
| @@ -22,21 +19,16 @@ fun BrowseLatestScreen( | ||||
|     navigateUp: () -> Unit, | ||||
|     onMangaClick: (Manga) -> Unit, | ||||
|     onMangaLongClick: (Manga) -> Unit, | ||||
|     onWebViewClick: () -> Unit, | ||||
| ) { | ||||
|     val columns by presenter.getColumnsPreferenceForCurrentOrientation() | ||||
|     val context = LocalContext.current | ||||
|  | ||||
|     val uriHandler = LocalUriHandler.current | ||||
|  | ||||
|     val onHelpClick = { | ||||
|         uriHandler.openUri(LocalSource.HELP_URL) | ||||
|     } | ||||
|  | ||||
|     val onWebViewClick = f@{ | ||||
|         val source = presenter.source as? HttpSource ?: return@f | ||||
|         val intent = WebViewActivity.newIntent(context, source.baseUrl, source.id, source.name) | ||||
|         context.startActivity(intent) | ||||
|     } | ||||
|  | ||||
|     Scaffold( | ||||
|         topBar = { scrollBehavior -> | ||||
|             BrowseLatestToolbar( | ||||
|   | ||||
| @@ -34,12 +34,10 @@ import eu.kanade.presentation.components.Scaffold | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.source.CatalogueSource | ||||
| import eu.kanade.tachiyomi.source.LocalSource | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourcePresenter | ||||
| import eu.kanade.tachiyomi.ui.browse.source.browse.NoResultsException | ||||
| import eu.kanade.tachiyomi.ui.library.setting.LibraryDisplayMode | ||||
| import eu.kanade.tachiyomi.ui.more.MoreController | ||||
| import eu.kanade.tachiyomi.ui.webview.WebViewActivity | ||||
| import eu.kanade.tachiyomi.widget.EmptyView | ||||
|  | ||||
| @Composable | ||||
| @@ -50,6 +48,7 @@ fun BrowseSourceScreen( | ||||
|     onFabClick: () -> Unit, | ||||
|     onMangaClick: (Manga) -> Unit, | ||||
|     onMangaLongClick: (Manga) -> Unit, | ||||
|     onWebViewClick: () -> Unit, | ||||
| ) { | ||||
|     val columns by presenter.getColumnsPreferenceForCurrentOrientation() | ||||
|  | ||||
| @@ -57,19 +56,12 @@ fun BrowseSourceScreen( | ||||
|  | ||||
|     val snackbarHostState = remember { SnackbarHostState() } | ||||
|  | ||||
|     val context = LocalContext.current | ||||
|     val uriHandler = LocalUriHandler.current | ||||
|  | ||||
|     val onHelpClick = { | ||||
|         uriHandler.openUri(LocalSource.HELP_URL) | ||||
|     } | ||||
|  | ||||
|     val onWebViewClick = f@{ | ||||
|         val source = presenter.source as? HttpSource ?: return@f | ||||
|         val intent = WebViewActivity.newIntent(context, source.baseUrl, source.id, source.name) | ||||
|         context.startActivity(intent) | ||||
|     } | ||||
|  | ||||
|     Scaffold( | ||||
|         topBar = { scrollBehavior -> | ||||
|             BrowseSourceToolbar( | ||||
|   | ||||
| @@ -1,8 +1,11 @@ | ||||
| package eu.kanade.presentation.browse | ||||
|  | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.glance.LocalContext | ||||
| import eu.kanade.domain.manga.model.Manga | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourcePresenter | ||||
| import eu.kanade.tachiyomi.ui.webview.WebViewActivity | ||||
|  | ||||
| @Composable | ||||
| fun SourceSearchScreen( | ||||
| @@ -11,6 +14,8 @@ fun SourceSearchScreen( | ||||
|     onFabClick: () -> Unit, | ||||
|     onClickManga: (Manga) -> Unit, | ||||
| ) { | ||||
|     val context = LocalContext.current | ||||
|  | ||||
|     BrowseSourceScreen( | ||||
|         presenter = presenter, | ||||
|         navigateUp = navigateUp, | ||||
| @@ -18,5 +23,10 @@ fun SourceSearchScreen( | ||||
|         onFabClick = onFabClick, | ||||
|         onMangaClick = onClickManga, | ||||
|         onMangaLongClick = onClickManga, | ||||
|         onWebViewClick = f@{ | ||||
|             val source = presenter.source as? HttpSource ?: return@f | ||||
|             val intent = WebViewActivity.newIntent(context, source.baseUrl, source.id, source.name) | ||||
|             context.startActivity(intent) | ||||
|         }, | ||||
|     ) | ||||
| } | ||||
|   | ||||
| @@ -42,19 +42,19 @@ fun BrowseLatestToolbar( | ||||
|             AppBarActions( | ||||
|                 actions = listOf( | ||||
|                     AppBar.Action( | ||||
|                         title = "display_mode", | ||||
|                         title = stringResource(id = R.string.action_display_mode), | ||||
|                         icon = Icons.Filled.ViewModule, | ||||
|                         onClick = { selectingDisplayMode = true }, | ||||
|                     ), | ||||
|                     if (source is LocalSource) { | ||||
|                         AppBar.Action( | ||||
|                             title = "help", | ||||
|                             title = stringResource(id = R.string.label_help), | ||||
|                             icon = Icons.Outlined.Help, | ||||
|                             onClick = onHelpClick, | ||||
|                         ) | ||||
|                     } else { | ||||
|                         AppBar.Action( | ||||
|                             title = "webview", | ||||
|                             title = stringResource(id = R.string.action_web_view), | ||||
|                             icon = Icons.Outlined.Public, | ||||
|                             onClick = onWebViewClick, | ||||
|                         ) | ||||
|   | ||||
| @@ -1,42 +1,33 @@ | ||||
| package eu.kanade.presentation.browse.components | ||||
|  | ||||
| import androidx.compose.foundation.layout.fillMaxWidth | ||||
| import androidx.compose.foundation.text.BasicTextField | ||||
| import androidx.compose.foundation.text.KeyboardActions | ||||
| import androidx.compose.foundation.text.KeyboardOptions | ||||
| import androidx.compose.material.icons.Icons | ||||
| import androidx.compose.material.icons.filled.ViewModule | ||||
| import androidx.compose.material.icons.outlined.Check | ||||
| import androidx.compose.material.icons.outlined.Clear | ||||
| import androidx.compose.material.icons.outlined.Help | ||||
| import androidx.compose.material.icons.outlined.Public | ||||
| import androidx.compose.material.icons.outlined.Search | ||||
| import androidx.compose.material3.DropdownMenuItem | ||||
| import androidx.compose.material3.Icon | ||||
| import androidx.compose.material3.MaterialTheme | ||||
| import androidx.compose.material3.Text | ||||
| import androidx.compose.material3.TopAppBarScrollBehavior | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.LaunchedEffect | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.compose.runtime.mutableStateOf | ||||
| import androidx.compose.runtime.remember | ||||
| import androidx.compose.runtime.setValue | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.focus.FocusRequester | ||||
| import androidx.compose.ui.focus.focusRequester | ||||
| import androidx.compose.ui.graphics.SolidColor | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.text.input.ImeAction | ||||
| import eu.kanade.presentation.browse.BrowseSourceState | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.components.AppBarActions | ||||
| import eu.kanade.presentation.components.DropdownMenu | ||||
| import eu.kanade.presentation.components.SearchToolbar | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.source.CatalogueSource | ||||
| import eu.kanade.tachiyomi.source.LocalSource | ||||
| import eu.kanade.tachiyomi.ui.library.setting.LibraryDisplayMode | ||||
| import kotlinx.coroutines.delay | ||||
|  | ||||
| @Composable | ||||
| fun BrowseSourceToolbar( | ||||
| @@ -95,24 +86,24 @@ fun BrowseSourceRegularToolbar( | ||||
|             AppBarActions( | ||||
|                 actions = listOf( | ||||
|                     AppBar.Action( | ||||
|                         title = "search", | ||||
|                         title = stringResource(id = R.string.action_search), | ||||
|                         icon = Icons.Outlined.Search, | ||||
|                         onClick = onSearchClick, | ||||
|                     ), | ||||
|                     AppBar.Action( | ||||
|                         title = "display_mode", | ||||
|                         title = stringResource(id = R.string.action_display_mode), | ||||
|                         icon = Icons.Filled.ViewModule, | ||||
|                         onClick = { selectingDisplayMode = true }, | ||||
|                     ), | ||||
|                     if (source is LocalSource) { | ||||
|                         AppBar.Action( | ||||
|                             title = "help", | ||||
|                             title = stringResource(id = R.string.label_help), | ||||
|                             icon = Icons.Outlined.Help, | ||||
|                             onClick = onHelpClick, | ||||
|                         ) | ||||
|                     } else { | ||||
|                         AppBar.Action( | ||||
|                             title = "webview", | ||||
|                             title = stringResource(id = R.string.action_web_view), | ||||
|                             icon = Icons.Outlined.Public, | ||||
|                             onClick = onWebViewClick, | ||||
|                         ) | ||||
| @@ -174,41 +165,17 @@ fun BrowseSourceSearchToolbar( | ||||
|     onSearchClick: () -> Unit, | ||||
|     scrollBehavior: TopAppBarScrollBehavior, | ||||
| ) { | ||||
|     val focusRequester = remember { FocusRequester() } | ||||
|     AppBar( | ||||
|         navigateUp = navigateUp, | ||||
|         titleContent = { | ||||
|             BasicTextField( | ||||
|                 value = searchQuery, | ||||
|                 onValueChange = onSearchQueryChanged, | ||||
|                 modifier = Modifier | ||||
|                     .fillMaxWidth() | ||||
|                     .focusRequester(focusRequester), | ||||
|                 keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), | ||||
|                 keyboardActions = KeyboardActions( | ||||
|                     onSearch = { | ||||
|                         onSearchClick() | ||||
|                     }, | ||||
|                 ), | ||||
|                 cursorBrush = SolidColor(MaterialTheme.colorScheme.onSurface), | ||||
|             ) | ||||
|         }, | ||||
|         actions = { | ||||
|             AppBarActions( | ||||
|                 actions = listOf( | ||||
|                     AppBar.Action( | ||||
|                         title = "clear", | ||||
|                         icon = Icons.Outlined.Clear, | ||||
|                         onClick = onResetClick, | ||||
|                     ), | ||||
|                 ), | ||||
|             ) | ||||
|         }, | ||||
|     SearchToolbar( | ||||
|         searchQuery = searchQuery, | ||||
|         onChangeSearchQuery = onSearchQueryChanged, | ||||
|         keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), | ||||
|         keyboardActions = KeyboardActions( | ||||
|             onSearch = { | ||||
|                 onSearchClick() | ||||
|             }, | ||||
|         ), | ||||
|         onClickCloseSearch = navigateUp, | ||||
|         onClickResetSearch = onResetClick, | ||||
|         scrollBehavior = scrollBehavior, | ||||
|     ) | ||||
|     LaunchedEffect(Unit) { | ||||
|         // TODO: https://issuetracker.google.com/issues/204502668 | ||||
|         delay(100) | ||||
|         focusRequester.requestFocus() | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.WindowInsets | ||||
| import androidx.compose.foundation.layout.fillMaxWidth | ||||
| import androidx.compose.foundation.layout.statusBars | ||||
| import androidx.compose.foundation.text.BasicTextField | ||||
| import androidx.compose.foundation.text.KeyboardActions | ||||
| import androidx.compose.foundation.text.KeyboardOptions | ||||
| import androidx.compose.material.icons.Icons | ||||
| import androidx.compose.material.icons.filled.ArrowBack | ||||
| import androidx.compose.material.icons.filled.Close | ||||
| @@ -220,6 +222,8 @@ fun AppBarActions( | ||||
| fun SearchToolbar( | ||||
|     searchQuery: String, | ||||
|     onChangeSearchQuery: (String) -> Unit, | ||||
|     keyboardOptions: KeyboardOptions = KeyboardOptions.Default, | ||||
|     keyboardActions: KeyboardActions = KeyboardActions.Default, | ||||
|     onClickCloseSearch: () -> Unit, | ||||
|     onClickResetSearch: () -> Unit, | ||||
|     incognitoMode: Boolean = false, | ||||
| @@ -236,6 +240,8 @@ fun SearchToolbar( | ||||
|                     .fillMaxWidth() | ||||
|                     .focusRequester(focusRequester), | ||||
|                 textStyle = MaterialTheme.typography.bodyMedium.copy(color = MaterialTheme.colorScheme.onBackground), | ||||
|                 keyboardOptions = keyboardOptions, | ||||
|                 keyboardActions = keyboardActions, | ||||
|                 singleLine = true, | ||||
|                 cursorBrush = SolidColor(MaterialTheme.colorScheme.onBackground), | ||||
|             ) | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import android.os.Bundle | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.LaunchedEffect | ||||
| import androidx.compose.runtime.rememberCoroutineScope | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import androidx.core.os.bundleOf | ||||
| import eu.kanade.domain.source.model.Source | ||||
| import eu.kanade.presentation.browse.BrowseSourceScreen | ||||
| @@ -12,11 +13,13 @@ import eu.kanade.presentation.components.ChangeCategoryDialog | ||||
| import eu.kanade.presentation.components.DuplicateMangaDialog | ||||
| import eu.kanade.tachiyomi.source.CatalogueSource | ||||
| import eu.kanade.tachiyomi.source.model.Filter | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| import eu.kanade.tachiyomi.ui.base.controller.FullComposeController | ||||
| import eu.kanade.tachiyomi.ui.base.controller.pushController | ||||
| import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourcePresenter.Dialog | ||||
| import eu.kanade.tachiyomi.ui.category.CategoryController | ||||
| import eu.kanade.tachiyomi.ui.manga.MangaController | ||||
| import eu.kanade.tachiyomi.ui.webview.WebViewActivity | ||||
| import eu.kanade.tachiyomi.util.lang.launchIO | ||||
|  | ||||
| open class BrowseSourceController(bundle: Bundle) : | ||||
| @@ -41,6 +44,7 @@ open class BrowseSourceController(bundle: Bundle) : | ||||
|     @Composable | ||||
|     override fun ComposeContent() { | ||||
|         val scope = rememberCoroutineScope() | ||||
|         val context = LocalContext.current | ||||
|  | ||||
|         BrowseSourceScreen( | ||||
|             presenter = presenter, | ||||
| @@ -58,6 +62,11 @@ open class BrowseSourceController(bundle: Bundle) : | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             onWebViewClick = f@{ | ||||
|                 val source = presenter.source as? HttpSource ?: return@f | ||||
|                 val intent = WebViewActivity.newIntent(context, source.baseUrl, source.id, source.name) | ||||
|                 context.startActivity(intent) | ||||
|             }, | ||||
|         ) | ||||
|  | ||||
|         val onDismissRequest = { presenter.dialog = null } | ||||
|   | ||||
| @@ -3,17 +3,20 @@ package eu.kanade.tachiyomi.ui.browse.source.latest | ||||
| import android.os.Bundle | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.rememberCoroutineScope | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import androidx.core.os.bundleOf | ||||
| import eu.kanade.domain.source.model.Source | ||||
| import eu.kanade.presentation.browse.BrowseLatestScreen | ||||
| import eu.kanade.presentation.browse.components.RemoveMangaDialog | ||||
| import eu.kanade.presentation.components.ChangeCategoryDialog | ||||
| import eu.kanade.presentation.components.DuplicateMangaDialog | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| import eu.kanade.tachiyomi.ui.base.controller.pushController | ||||
| import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController | ||||
| import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourcePresenter | ||||
| import eu.kanade.tachiyomi.ui.category.CategoryController | ||||
| import eu.kanade.tachiyomi.ui.manga.MangaController | ||||
| import eu.kanade.tachiyomi.ui.webview.WebViewActivity | ||||
| import eu.kanade.tachiyomi.util.lang.launchIO | ||||
|  | ||||
| /** | ||||
| @@ -32,6 +35,7 @@ class LatestUpdatesController(bundle: Bundle) : BrowseSourceController(bundle) { | ||||
|     @Composable | ||||
|     override fun ComposeContent() { | ||||
|         val scope = rememberCoroutineScope() | ||||
|         val context = LocalContext.current | ||||
|  | ||||
|         BrowseLatestScreen( | ||||
|             presenter = presenter, | ||||
| @@ -47,6 +51,11 @@ class LatestUpdatesController(bundle: Bundle) : BrowseSourceController(bundle) { | ||||
|                     } | ||||
|                 } | ||||
|             }, | ||||
|             onWebViewClick = f@{ | ||||
|                 val source = presenter.source as? HttpSource ?: return@f | ||||
|                 val intent = WebViewActivity.newIntent(context, source.baseUrl, source.id, source.name) | ||||
|                 context.startActivity(intent) | ||||
|             }, | ||||
|         ) | ||||
|  | ||||
|         val onDismissRequest = { presenter.dialog = null } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user