@@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.browse
3
3
import androidx.compose.animation.graphics.res.animatedVectorResource
4
4
import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter
5
5
import androidx.compose.animation.graphics.vector.AnimatedImageVector
6
+ import androidx.compose.foundation.pager.rememberPagerState
6
7
import androidx.compose.runtime.Composable
7
8
import androidx.compose.runtime.LaunchedEffect
8
9
import androidx.compose.runtime.collectAsState
@@ -22,12 +23,14 @@ import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen
22
23
import eu.kanade.tachiyomi.ui.browse.source.sourcesTab
23
24
import eu.kanade.tachiyomi.ui.main.MainActivity
24
25
import kotlinx.collections.immutable.persistentListOf
26
+ import kotlinx.coroutines.channels.BufferOverflow
27
+ import kotlinx.coroutines.channels.Channel
28
+ import kotlinx.coroutines.flow.collectLatest
29
+ import kotlinx.coroutines.flow.receiveAsFlow
25
30
import tachiyomi.i18n.MR
26
31
import tachiyomi.presentation.core.i18n.stringResource
27
32
28
- data class BrowseTab (
29
- private val toExtensions : Boolean = false ,
30
- ) : Tab {
33
+ data object BrowseTab : Tab {
31
34
32
35
override val options: TabOptions
33
36
@Composable
@@ -45,6 +48,12 @@ data class BrowseTab(
45
48
navigator.push(GlobalSearchScreen ())
46
49
}
47
50
51
+ private val switchToExtensionTabChannel = Channel <Unit >(1 , BufferOverflow .DROP_OLDEST )
52
+
53
+ fun showExtension () {
54
+ switchToExtensionTabChannel.trySend(Unit )
55
+ }
56
+
48
57
@Composable
49
58
override fun Content () {
50
59
val context = LocalContext .current
@@ -53,17 +62,25 @@ data class BrowseTab(
53
62
val extensionsScreenModel = rememberScreenModel { ExtensionsScreenModel () }
54
63
val extensionsState by extensionsScreenModel.state.collectAsState()
55
64
65
+ val tabs = persistentListOf(
66
+ sourcesTab(),
67
+ extensionsTab(extensionsScreenModel),
68
+ migrateSourceTab(),
69
+ )
70
+
71
+ val state = rememberPagerState { tabs.size }
72
+
56
73
TabbedScreen (
57
74
titleRes = MR .strings.browse,
58
- tabs = persistentListOf(
59
- sourcesTab(),
60
- extensionsTab(extensionsScreenModel),
61
- migrateSourceTab(),
62
- ),
63
- startIndex = 1 .takeIf { toExtensions },
75
+ tabs = tabs,
76
+ state = state,
64
77
searchQuery = extensionsState.searchQuery,
65
78
onChangeSearchQuery = extensionsScreenModel::search,
66
79
)
80
+ LaunchedEffect (Unit ) {
81
+ switchToExtensionTabChannel.receiveAsFlow()
82
+ .collectLatest { state.scrollToPage(1 ) }
83
+ }
67
84
68
85
LaunchedEffect (Unit ) {
69
86
(context as ? MainActivity )?.ready = true
0 commit comments