feat: add global search shortcut to SmartSearch (#1377)

* feat: add global search shortcut to SmartSearch

* feat: add global search shortcut to SmartSearch

* feat: add back button to BrowseTabWrapper
This commit is contained in:
Tim Schneeberger 2025-01-21 20:30:28 +01:00 committed by GitHub
parent d80ad3f145
commit 46dea6d598
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 29 additions and 18 deletions

View File

@ -11,7 +11,7 @@ import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.i18n.stringResource
@Composable @Composable
fun BrowseTabWrapper(tab: TabContent) { fun BrowseTabWrapper(tab: TabContent, onBackPressed: (() -> Unit)? = null) {
val snackbarHostState = remember { SnackbarHostState() } val snackbarHostState = remember { SnackbarHostState() }
Scaffold( Scaffold(
topBar = { scrollBehavior -> topBar = { scrollBehavior ->
@ -20,6 +20,7 @@ fun BrowseTabWrapper(tab: TabContent) {
actions = { actions = {
AppBarActions(tab.actions) AppBarActions(tab.actions)
}, },
navigateUp = onBackPressed,
scrollBehavior = scrollBehavior, scrollBehavior = scrollBehavior,
) )
}, },

View File

@ -1,12 +1,15 @@
package eu.kanade.tachiyomi.ui.browse.migration.sources package eu.kanade.tachiyomi.ui.browse.migration.sources
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
import eu.kanade.presentation.browse.BrowseTabWrapper import eu.kanade.presentation.browse.BrowseTabWrapper
import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.Screen
class MigrationSourcesScreen : Screen() { class MigrationSourcesScreen : Screen() {
@Composable @Composable
override fun Content() { override fun Content() {
BrowseTabWrapper(migrateSourceTab()) val navigator = LocalNavigator.currentOrThrow
BrowseTabWrapper(migrateSourceTab(), onBackPressed = navigator::pop)
} }
} }

View File

@ -1,6 +1,8 @@
package eu.kanade.tachiyomi.ui.browse.source package eu.kanade.tachiyomi.ui.browse.source
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
import eu.kanade.presentation.browse.BrowseTabWrapper import eu.kanade.presentation.browse.BrowseTabWrapper
import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.Screen
import java.io.Serializable import java.io.Serializable
@ -8,7 +10,8 @@ import java.io.Serializable
class SourcesScreen(private val smartSearchConfig: SmartSearchConfig?) : Screen() { class SourcesScreen(private val smartSearchConfig: SmartSearchConfig?) : Screen() {
@Composable @Composable
override fun Content() { override fun Content() {
BrowseTabWrapper(sourcesTab(smartSearchConfig)) val navigator = LocalNavigator.currentOrThrow
BrowseTabWrapper(sourcesTab(smartSearchConfig), onBackPressed = navigator::pop)
} }
data class SmartSearchConfig(val origTitle: String, val origMangaId: Long? = null) : Serializable data class SmartSearchConfig(val origTitle: String, val origMangaId: Long? = null) : Serializable

View File

@ -43,21 +43,25 @@ fun Screen.sourcesTab(
true -> MR.strings.label_sources true -> MR.strings.label_sources
false -> SYMR.strings.find_in_another_source false -> SYMR.strings.find_in_another_source
}, },
actions = if (smartSearchConfig == null) { actions = persistentListOf(
persistentListOf( AppBar.Action(
AppBar.Action( title = stringResource(MR.strings.action_global_search),
title = stringResource(MR.strings.action_global_search), icon = Icons.Outlined.TravelExplore,
icon = Icons.Outlined.TravelExplore, onClick = { navigator.push(GlobalSearchScreen(smartSearchConfig?.origTitle ?: "")) },
onClick = { navigator.push(GlobalSearchScreen()) }, ),
), ).let {
AppBar.Action( when (smartSearchConfig) {
title = stringResource(MR.strings.action_filter), null -> {
icon = Icons.Outlined.FilterList, it.add(
onClick = { navigator.push(SourcesFilterScreen()) }, AppBar.Action(
), title = stringResource(MR.strings.action_filter),
) icon = Icons.Outlined.FilterList,
} else { onClick = { navigator.push(SourcesFilterScreen()) },
persistentListOf() ),
)
}
else -> it
}
}, },
// SY <-- // SY <--
content = { contentPadding, snackbarHostState -> content = { contentPadding, snackbarHostState ->