@@ -2,43 +2,73 @@ package com.example.passedpath
22
33import android.content.Context
44import android.content.Intent
5+ import android.graphics.Color
56import android.os.Bundle
67import androidx.activity.ComponentActivity
8+ import androidx.activity.SystemBarStyle
79import androidx.activity.compose.setContent
10+ import androidx.activity.enableEdgeToEdge
811import androidx.activity.viewModels
912import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
13+ import androidx.lifecycle.compose.collectAsStateWithLifecycle
1014import androidx.navigation.compose.rememberNavController
1115import com.example.passedpath.app.appContainer
16+ import com.example.passedpath.feature.care.presentation.deeplink.CareInviteDeepLinkParser
1217import com.example.passedpath.navigation.AppEntryState
1318import com.example.passedpath.navigation.AppEntryViewModel
1419import com.example.passedpath.navigation.AppEntryViewModelFactory
1520import com.example.passedpath.navigation.AppNavHost
1621import com.example.passedpath.ui.theme.PassedPathTheme
22+ import kotlinx.coroutines.flow.MutableStateFlow
1723
1824class MainActivity : ComponentActivity () {
1925 private val appEntryViewModel: AppEntryViewModel by viewModels {
2026 AppEntryViewModelFactory (applicationContext.appContainer)
2127 }
28+ private val pendingCareInviteCode = MutableStateFlow <String ?>(null )
2229
2330 override fun onCreate (savedInstanceState : Bundle ? ) {
2431 installSplashScreen().setKeepOnScreenCondition {
2532 appEntryViewModel.state.value is AppEntryState .Loading
2633 }
34+ enableEdgeToEdge(
35+ statusBarStyle = SystemBarStyle .light(Color .TRANSPARENT , Color .TRANSPARENT ),
36+ navigationBarStyle = SystemBarStyle .light(Color .TRANSPARENT , Color .TRANSPARENT )
37+ )
2738
2839 super .onCreate(savedInstanceState)
40+ publishCareInviteCode(intent)
2941
3042 setContent {
3143 PassedPathTheme {
3244 val navController = rememberNavController()
45+ val careInviteCode = pendingCareInviteCode.collectAsStateWithLifecycle().value
3346
3447 AppNavHost (
3548 navController = navController,
36- appEntryViewModel = appEntryViewModel
49+ appEntryViewModel = appEntryViewModel,
50+ pendingCareInviteCode = careInviteCode,
51+ onCareInviteCodeConsumed = { consumedCode ->
52+ if (pendingCareInviteCode.value == consumedCode) {
53+ pendingCareInviteCode.value = null
54+ }
55+ }
3756 )
3857 }
3958 }
4059 }
4160
61+ override fun onNewIntent (intent : Intent ) {
62+ super .onNewIntent(intent)
63+ setIntent(intent)
64+ publishCareInviteCode(intent)
65+ }
66+
67+ private fun publishCareInviteCode (intent : Intent ? ) {
68+ val inviteCode = CareInviteDeepLinkParser .extractInviteCode(intent?.data) ? : return
69+ pendingCareInviteCode.value = inviteCode
70+ }
71+
4272 companion object {
4373 fun createIntent (context : Context ): Intent {
4474 return Intent (context, MainActivity ::class .java).apply {
0 commit comments