GlobalSearchScreen: Skip result screen when using search intent (#9299)

This commit is contained in:
Ivan Iskandar 2023-04-08 09:18:48 +07:00 committed by GitHub
parent b7cd7b8b4e
commit c1e23ec18e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,8 +1,12 @@
package eu.kanade.tachiyomi.ui.browse.source.globalsearch package eu.kanade.tachiyomi.ui.browse.source.globalsearch
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel
import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow import cafe.adriel.voyager.navigator.currentOrThrow
@ -10,10 +14,11 @@ import eu.kanade.presentation.browse.GlobalSearchScreen
import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.Screen
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen
import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen
import tachiyomi.presentation.core.screens.LoadingScreen
class GlobalSearchScreen( class GlobalSearchScreen(
val searchQuery: String = "", val searchQuery: String = "",
val extensionFilter: String = "", private val extensionFilter: String = "",
) : Screen() { ) : Screen() {
@Composable @Composable
@ -27,21 +32,44 @@ class GlobalSearchScreen(
) )
} }
val state by screenModel.state.collectAsState() val state by screenModel.state.collectAsState()
var showSingleLoadingScreen by remember {
mutableStateOf(searchQuery.isNotEmpty() && extensionFilter.isNotEmpty() && state.total == 1)
}
GlobalSearchScreen( if (showSingleLoadingScreen) {
state = state, LoadingScreen()
navigateUp = navigator::pop,
onChangeSearchQuery = screenModel::updateSearchQuery, LaunchedEffect(state.items) {
onSearch = screenModel::search, when (val result = state.items.values.singleOrNull()) {
getManga = { screenModel.getManga(it) }, SearchItemResult.Loading -> return@LaunchedEffect
onClickSource = { is SearchItemResult.Success -> {
if (!screenModel.incognitoMode.get()) { val manga = result.result.singleOrNull()
screenModel.lastUsedSourceId.set(it.id) if (manga != null) {
navigator.replace(MangaScreen(manga.id, true))
} else {
// Backoff to result screen
showSingleLoadingScreen = false
}
}
else -> showSingleLoadingScreen = false
} }
navigator.push(BrowseSourceScreen(it.id, state.searchQuery)) }
}, } else {
onClickItem = { navigator.push(MangaScreen(it.id, true)) }, GlobalSearchScreen(
onLongClickItem = { navigator.push(MangaScreen(it.id, true)) }, state = state,
) navigateUp = navigator::pop,
onChangeSearchQuery = screenModel::updateSearchQuery,
onSearch = screenModel::search,
getManga = { screenModel.getManga(it) },
onClickSource = {
if (!screenModel.incognitoMode.get()) {
screenModel.lastUsedSourceId.set(it.id)
}
navigator.push(BrowseSourceScreen(it.id, state.searchQuery))
},
onClickItem = { navigator.push(MangaScreen(it.id, true)) },
onLongClickItem = { navigator.push(MangaScreen(it.id, true)) },
)
}
} }
} }