Click on the missing Source name in MangaScreen will search for missing extension in ExtensionsScreen

This commit is contained in:
Cuong M. Tran 2024-05-02 15:31:09 +07:00
parent ba1414d70d
commit 5392999e39
No known key found for this signature in database
GPG key ID: 733AA7624B9315C2
2 changed files with 53 additions and 4 deletions

View file

@ -1,17 +1,66 @@
package eu.kanade.tachiyomi.ui.browse.extension
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import cafe.adriel.voyager.core.model.rememberScreenModel
import eu.kanade.presentation.browse.BrowseTabWrapper
import eu.kanade.presentation.components.AppBarActions
import eu.kanade.presentation.components.AppBarTitle
import eu.kanade.presentation.components.SearchToolbar
import eu.kanade.presentation.more.settings.screen.browse.ExtensionReposScreen
import eu.kanade.presentation.util.Screen
import eu.kanade.tachiyomi.ui.main.MainActivity
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.i18n.stringResource
/**
* An alternative ExtensionsScreen used when want to open [extensionsTab] directly
*/
class ExtensionsScreen : Screen() {
class ExtensionsScreen(private val searchSource: String? = null) : Screen() {
@Composable
override fun Content() {
val context = LocalContext.current
val extensionsScreenModel = rememberScreenModel { ExtensionsScreenModel() }
BrowseTabWrapper(extensionsTab(extensionsScreenModel))
val extensionsState by extensionsScreenModel.state.collectAsState()
val extensionsTab = extensionsTab(extensionsScreenModel)
val searchQuery = extensionsState.searchQuery
val onChangeSearchQuery = extensionsScreenModel::search
val snackbarHostState = remember { SnackbarHostState() }
Scaffold(
topBar = {
val searchEnabled = extensionsTab.searchEnabled
SearchToolbar(
titleContent = { AppBarTitle(stringResource(MR.strings.label_extensions)) },
searchEnabled = searchEnabled,
searchQuery = if (searchEnabled) searchQuery else null,
onChangeSearchQuery = onChangeSearchQuery,
actions = { AppBarActions(extensionsTab.actions) },
)
},
snackbarHost = { SnackbarHost(hostState = snackbarHostState) },
) { paddingValues ->
extensionsTab.content(paddingValues, snackbarHostState)
}
LaunchedEffect(Unit) {
(context as? MainActivity)?.ready = true
/**
* This will redo the searching for [searchSource] every times the screen is launched, for example when
* back from the [ExtensionFilterScreen] or from the [ExtensionReposScreen].
* Not really desired but let's accept it.
*/
if (!searchSource.isNullOrBlank()) onChangeSearchQuery(searchSource)
}
}
}

View file

@ -254,7 +254,7 @@ class MangaScreen(
}
navigator.push(screen)
} else {
navigator.push(ExtensionsScreen())
navigator.push(ExtensionsScreen(searchSource = successState.source.name))
}
},
// KMK <--