-
-
Notifications
You must be signed in to change notification settings - Fork 73
Expand file tree
/
Copy pathLightNovelReaderApp.kt
More file actions
49 lines (47 loc) · 2.15 KB
/
Copy pathLightNovelReaderApp.kt
File metadata and controls
49 lines (47 loc) · 2.15 KB
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
package indi.dmzz_yyhyy.lightnovelreader.ui
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.rememberNavController
import android.content.Intent
import indi.dmzz_yyhyy.lightnovelreader.ui.dialog.UpdatesAvailableDialogViewModel
import indi.dmzz_yyhyy.lightnovelreader.ui.dialog.navigateToPluginInstallerDialog
import indi.dmzz_yyhyy.lightnovelreader.ui.dialog.navigateToPluginStoreInstall
import indi.dmzz_yyhyy.lightnovelreader.ui.dialog.navigateUpdatesAvailableDialog
import indi.dmzz_yyhyy.lightnovelreader.ui.navigation.LightNovelReaderNavHost
import io.nightfish.lightnovelreader.api.ui.ReaderStyle
import kotlinx.coroutines.flow.Flow
@Composable
fun LightNovelReaderApp(
onBuildNavHost: NavGraphBuilder.() -> Unit,
readerStyle: ReaderStyle,
imageHeaderGetter: () -> Map<String, String>,
intentFlow: Flow<Intent>,
) {
val navController = rememberNavController()
val updatesAvailableDialogViewModel = hiltViewModel<UpdatesAvailableDialogViewModel>()
val available by updatesAvailableDialogViewModel.availableFlow.collectAsState(false)
LaunchedEffect(available) {
if (available) {
updatesAvailableDialogViewModel.resetAvailable()
navController.navigateUpdatesAvailableDialog()
}
}
LaunchedEffect(Unit) {
intentFlow.collect { intent ->
if (intent.action == Intent.ACTION_VIEW) {
val uri = intent.data ?: return@collect
if (uri.scheme == "lightnovelreader" && uri.host == "install_plugin") {
val pluginId = uri.getQueryParameter("id") ?: return@collect
navController.navigateToPluginStoreInstall(pluginId)
} else {
navController.navigateToPluginInstallerDialog(uri.toString())
}
}
}
}
LightNovelReaderNavHost(navController, onBuildNavHost, readerStyle, imageHeaderGetter)
}