GlobalSearchScreen: Skip result screen when using search intent (#9299)
This commit is contained in:
parent
b7cd7b8b4e
commit
c1e23ec18e
1 changed files with 43 additions and 15 deletions
|
@ -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)) },
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue