@@ -12,11 +12,15 @@ import androidx.compose.runtime.mutableStateOf
1212import androidx.compose.runtime.remember
1313import androidx.compose.runtime.setValue
1414import androidx.compose.ui.Modifier
15+ import androidx.compose.ui.platform.LocalContext
1516import androidx.lifecycle.Lifecycle
17+ import cafe.adriel.voyager.core.registry.ScreenRegistry
1618import cafe.adriel.voyager.core.stack.StackEvent
19+ import cafe.adriel.voyager.hilt.getViewModel
1720import cafe.adriel.voyager.navigator.CurrentScreen
1821import cafe.adriel.voyager.navigator.Navigator
1922import cafe.adriel.voyager.transitions.SlideTransition
23+ import com.getcode.navigation.NavScreenProvider
2024import xyz.flipchat.app.features.payments.PaymentScaffold
2125import com.getcode.navigation.core.BottomSheetNavigator
2226import com.getcode.navigation.core.CombinedNavigator
@@ -33,17 +37,22 @@ import com.getcode.ui.components.bars.TopBarContainer
3337import com.getcode.ui.components.bars.rememberBarManager
3438import com.getcode.ui.decor.ScrimSupport
3539import com.getcode.ui.theme.CodeScaffold
40+ import com.getcode.ui.utils.getActivity
3641import dev.bmcreations.tipkit.TipScaffold
3742import dev.bmcreations.tipkit.engines.TipsEngine
3843import dev.theolm.rinku.DeepLink
3944import dev.theolm.rinku.compose.ext.DeepLinkListener
4045import xyz.flipchat.app.features.home.HomeViewModel
46+ import xyz.flipchat.app.util.DeeplinkType
4147
4248@Composable
4349fun App (
4450 tipsEngine : TipsEngine ,
4551) {
4652 val homeViewModel = getActivityScopedViewModel<HomeViewModel >()
53+ val router = homeViewModel.router
54+ val context = LocalContext .current
55+
4756 OnLifecycleEvent { _, event ->
4857 when (event) {
4958 Lifecycle .Event .ON_RESUME -> {
@@ -59,6 +68,20 @@ fun App(
5968 }
6069 }
6170
71+ // We are obtaining deep link here, in case we want to allow for some amount of deep linking when not
72+ // authenticated. Currently we will require authentication to see anything, but can be changed in future.
73+ var deepLink by remember { mutableStateOf<DeepLink ?>(null ) }
74+ var loginRequest by remember { mutableStateOf<String ?>(null ) }
75+
76+ DeepLinkListener {
77+ val type = router.processType(it)
78+ if (type is DeeplinkType .Login ) {
79+ loginRequest = type.entropy
80+ return @DeepLinkListener
81+ }
82+ deepLink = it
83+ }
84+
6285 FlipchatTheme {
6386 val barManager = rememberBarManager()
6487 AppScreenContent {
@@ -83,6 +106,33 @@ fun App(
83106 ) {
84107 SlideTransition (navigator)
85108 }
109+
110+ LaunchedEffect (deepLink) {
111+ if (deepLink != null ) {
112+ val screenSet = router.processDestination(deepLink)
113+ codeNavigator.replaceAll(screenSet)
114+ }
115+ }
116+
117+ LaunchedEffect (loginRequest) {
118+ loginRequest?.let { entropy ->
119+ homeViewModel.handleLoginEntropy(
120+ entropy,
121+ onSwitchAccounts = {
122+ loginRequest = null
123+ context.getActivity()?.let {
124+ homeViewModel.logout(it) {
125+ codeNavigator.replaceAll(ScreenRegistry .get(NavScreenProvider .Login .Home (entropy)))
126+ }
127+ }
128+ },
129+ onCancel = {
130+ loginRequest = null
131+ }
132+ )
133+ }
134+ }
135+
86136 }
87137 }
88138 }
0 commit comments