@@ -7,6 +7,7 @@ import androidx.compose.foundation.pager.rememberPagerState
77import androidx.compose.runtime.Composable
88import androidx.compose.runtime.LaunchedEffect
99import androidx.compose.runtime.getValue
10+ import androidx.compose.runtime.snapshotFlow
1011import androidx.compose.ui.platform.LocalContext
1112import androidx.lifecycle.compose.collectAsStateWithLifecycle
1213import cafe.adriel.voyager.core.model.rememberScreenModel
@@ -26,6 +27,7 @@ import eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.GlobalAnimeSearch
2627import eu.kanade.tachiyomi.ui.browse.manga.extension.MangaExtensionsScreenModel
2728import eu.kanade.tachiyomi.ui.browse.manga.extension.mangaExtensionsTab
2829import eu.kanade.tachiyomi.ui.browse.manga.migration.sources.migrateMangaSourceTab
30+ import eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.GlobalMangaSearchScreen
2931import eu.kanade.tachiyomi.ui.browse.manga.source.mangaSourcesTab
3032import eu.kanade.tachiyomi.ui.browse.novel.source.novelSourcesTab
3133import eu.kanade.tachiyomi.ui.main.MainActivity
@@ -41,6 +43,9 @@ import uy.kohesive.injekt.api.get
4143
4244data object BrowseTab : Tab {
4345
46+ @Volatile
47+ private var lastKnownSearchTarget = BrowseSearchTarget .UNKNOWN
48+
4449 override val options: TabOptions
4550 @Composable
4651 get() {
@@ -54,7 +59,11 @@ data object BrowseTab : Tab {
5459 }
5560
5661 override suspend fun onReselect (navigator : Navigator ) {
57- navigator.push(GlobalAnimeSearchScreen ())
62+ when (resolveBrowseReselectTarget(lastKnownSearchTarget)) {
63+ BrowseSearchTarget .ANIME -> navigator.push(GlobalAnimeSearchScreen ())
64+ BrowseSearchTarget .MANGA -> navigator.push(GlobalMangaSearchScreen ())
65+ BrowseSearchTarget .UNKNOWN -> navigator.push(GlobalAnimeSearchScreen ())
66+ }
5867 }
5968
6069 private val switchToTabNumberChannel = Channel <Int >(1 , BufferOverflow .DROP_OLDEST )
@@ -119,6 +128,13 @@ data object BrowseTab : Tab {
119128 }
120129 }
121130
131+ LaunchedEffect (state) {
132+ snapshotFlow { state.currentPage }
133+ .collectLatest { page ->
134+ lastKnownSearchTarget = updateBrowseSearchTarget(lastKnownSearchTarget, page)
135+ }
136+ }
137+
122138 LaunchedEffect (Unit ) {
123139 (context as ? MainActivity )?.ready = true
124140 }
@@ -128,3 +144,41 @@ data object BrowseTab : Tab {
128144internal fun shouldShowNovelSourcesTab (uiState : LightNovelPluginUiState ): Boolean {
129145 return uiState is LightNovelPluginUiState .Ready
130146}
147+
148+ internal enum class BrowseSearchTarget {
149+ ANIME ,
150+ MANGA ,
151+ UNKNOWN ,
152+ }
153+
154+ private const val ANIME_SOURCES_PAGE = 0
155+ private const val MANGA_SOURCES_PAGE = 1
156+ private const val ANIME_EXTENSIONS_PAGE = 2
157+ private const val MANGA_EXTENSIONS_PAGE = 3
158+ private const val ANIME_MIGRATION_PAGE = 4
159+ private const val MANGA_MIGRATION_PAGE = 5
160+
161+ internal fun browseSearchTargetForPage (page : Int ): BrowseSearchTarget {
162+ return when (page) {
163+ ANIME_SOURCES_PAGE , ANIME_EXTENSIONS_PAGE , ANIME_MIGRATION_PAGE -> BrowseSearchTarget .ANIME
164+ MANGA_SOURCES_PAGE , MANGA_EXTENSIONS_PAGE , MANGA_MIGRATION_PAGE -> BrowseSearchTarget .MANGA
165+ else -> BrowseSearchTarget .UNKNOWN
166+ }
167+ }
168+
169+ internal fun updateBrowseSearchTarget (
170+ lastKnownSearchTarget : BrowseSearchTarget ,
171+ page : Int ,
172+ ): BrowseSearchTarget {
173+ return when (val pageTarget = browseSearchTargetForPage(page)) {
174+ BrowseSearchTarget .UNKNOWN -> lastKnownSearchTarget
175+ else -> pageTarget
176+ }
177+ }
178+
179+ internal fun resolveBrowseReselectTarget (lastKnownSearchTarget : BrowseSearchTarget ): BrowseSearchTarget {
180+ return when (lastKnownSearchTarget) {
181+ BrowseSearchTarget .UNKNOWN -> BrowseSearchTarget .ANIME
182+ else -> lastKnownSearchTarget
183+ }
184+ }
0 commit comments