@@ -17,6 +17,7 @@ package org.groundplatform.android
1717
1818import android.app.AlertDialog
1919import android.content.Intent
20+ import android.net.Uri
2021import android.os.Bundle
2122import androidx.activity.OnBackPressedCallback
2223import androidx.activity.enableEdgeToEdge
@@ -27,12 +28,15 @@ import androidx.compose.runtime.remember
2728import androidx.compose.runtime.setValue
2829import androidx.core.view.WindowInsetsCompat
2930import androidx.lifecycle.lifecycleScope
31+ import androidx.navigation.NavController
3032import androidx.navigation.NavDirections
3133import androidx.navigation.fragment.NavHostFragment
3234import dagger.hilt.android.AndroidEntryPoint
3335import javax.inject.Inject
3436import kotlinx.coroutines.flow.filterNotNull
37+ import kotlinx.coroutines.flow.first
3538import kotlinx.coroutines.launch
39+ import org.groundplatform.android.Config.SURVEY_PATH_SEGMENT
3640import org.groundplatform.android.databinding.MainActBinding
3741import org.groundplatform.android.repository.UserRepository
3842import org.groundplatform.android.system.ActivityCallback
@@ -60,6 +64,8 @@ class MainActivity : AbstractActivity() {
6064
6165 private var signInProgressDialog: AlertDialog ? = null
6266
67+ private var pendingDeepLink: Uri ? = null
68+
6369 override fun onCreate (savedInstanceState : Bundle ? ) {
6470 // Make sure this is before calling super.onCreate()
6571 setTheme(R .style.AppTheme )
@@ -83,7 +89,19 @@ class MainActivity : AbstractActivity() {
8389
8490 viewModel = viewModelFactory[this , MainViewModel ::class .java]
8591
86- lifecycleScope.launch { viewModel.navigationRequests.filterNotNull().collect { updateUi(it) } }
92+ lifecycleScope.launch {
93+ viewModel.navigationRequests.filterNotNull().first()
94+
95+ intent.data?.let {
96+ if (navHostFragment.navController.currentDestination?.id != R .id.sign_in_fragment) {
97+ navHostFragment.navController.handleDeepLinkIfNeeded(it)
98+ } else {
99+ pendingDeepLink = it
100+ }
101+ }
102+
103+ viewModel.navigationRequests.filterNotNull().collect { updateUi(it) }
104+ }
87105
88106 onBackPressedDispatcher.addCallback(
89107 this ,
@@ -234,4 +252,13 @@ class MainActivity : AbstractActivity() {
234252 navHostFragment.navController.navigate(directions)
235253 }
236254 }
255+
256+ private fun NavController.handleDeepLinkIfNeeded (uri : Uri ) {
257+ if (uri.pathSegments.firstOrNull() == SURVEY_PATH_SEGMENT ) {
258+ val surveyId = uri.lastPathSegment
259+ val action = SurveySelectorFragmentDirections .showSurveySelectorScreen(false )
260+ action.surveyId = surveyId
261+ navigate(action)
262+ }
263+ }
237264}
0 commit comments