-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathScreens.kt
66 lines (63 loc) · 2.5 KB
/
Screens.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.github.jetbrains.rssreader.androidApp.composeui
import android.content.Intent
import android.net.Uri
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.platform.LocalContext
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
import com.github.jetbrains.rssreader.app.FeedAction
import com.github.jetbrains.rssreader.app.FeedStore
import com.google.accompanist.insets.LocalWindowInsets
import com.google.accompanist.insets.rememberInsetsPaddingValues
import com.google.accompanist.swiperefresh.SwipeRefresh
import com.google.accompanist.swiperefresh.SwipeRefreshIndicator
import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
class MainScreen : Screen, KoinComponent {
@Composable
override fun Content() {
val store: FeedStore by inject()
val context = LocalContext.current
val navigator = LocalNavigator.currentOrThrow
val state = store.observeState().collectAsState()
LaunchedEffect(Unit) {
store.dispatch(FeedAction.Refresh(false))
}
SwipeRefresh(
state = rememberSwipeRefreshState(state.value.progress),
indicatorPadding = rememberInsetsPaddingValues(LocalWindowInsets.current.systemBars),
clipIndicatorToPadding = false,
indicator = { indicatorState, refreshTriggerDistance ->
SwipeRefreshIndicator(
state = indicatorState,
refreshTriggerDistance = refreshTriggerDistance,
scale = true //https://github.com/google/accompanist/issues/572
)
},
onRefresh = { store.dispatch(FeedAction.Refresh(true)) }
) {
MainFeed(
store = store,
onPostClick = { post ->
post.link?.let { url ->
context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
},
onEditClick = {
navigator.push(FeedListScreen())
}
)
}
}
}
class FeedListScreen : Screen, KoinComponent {
@Composable
override fun Content() {
val store: FeedStore by inject()
FeedList(store = store)
}
}