11package com.intercom.sample
22
3+ import android.content.Context
34import android.os.Bundle
45import androidx.activity.ComponentActivity
56import androidx.activity.compose.setContent
67import androidx.compose.foundation.layout.fillMaxSize
78import androidx.compose.material.MaterialTheme
89import androidx.compose.material.Surface
10+ import androidx.compose.runtime.collectAsState
11+ import androidx.compose.runtime.rememberCoroutineScope
912import androidx.compose.ui.Modifier
13+ import androidx.datastore.preferences.core.booleanPreferencesKey
14+ import androidx.datastore.preferences.core.edit
15+ import androidx.datastore.preferences.preferencesDataStore
16+ import androidx.lifecycle.lifecycleScope
1017import androidx.navigation.compose.NavHost
1118import androidx.navigation.compose.composable
1219import androidx.navigation.compose.rememberNavController
1320import com.intercom.sample.screens.HomeScreen
1421import com.intercom.sample.screens.UserDetailsScreen
1522import com.intercom.sample.ui.theme.SampleTheme
23+ import io.intercom.android.sdk.Intercom
24+ import kotlinx.coroutines.flow.Flow
25+ import kotlinx.coroutines.flow.collect
26+ import kotlinx.coroutines.flow.map
27+ import kotlinx.coroutines.launch
28+
29+ private val Context .dataStore by preferencesDataStore(" settings" )
1630
1731class MainActivity : ComponentActivity () {
32+ private val USER_REGISTERED = booleanPreferencesKey(" user_registered" )
1833
1934 override fun onCreate (savedInstanceState : Bundle ? ) {
2035 super .onCreate(savedInstanceState)
36+
37+ val registrationStatusFlow: Flow <Boolean > = dataStore.data.map { preferences ->
38+ preferences[USER_REGISTERED ] ? : false
39+ }
40+
41+ lifecycleScope.launch {
42+ registrationStatusFlow.collect {
43+ if (it) {
44+ Intercom .client().setLauncherVisibility(Intercom .VISIBLE )
45+ } else {
46+ Intercom .client().setLauncherVisibility(Intercom .GONE )
47+ }
48+ }
49+ }
50+
2151 setContent {
2252 SampleTheme {
2353 val navController = rememberNavController()
@@ -27,12 +57,19 @@ class MainActivity : ComponentActivity() {
2757 color = MaterialTheme .colors.background
2858 ) {
2959 NavHost (navController = navController, startDestination = " home" ) {
30-
3160 composable(" home" ) {
32- // Not going to work as user_editor doesn't have access 🤔
33- HomeScreen (onUserEditorLaunched = {
34- navController.navigate(" user_editor" )
35- })
61+ val rememberCoroutineScope = rememberCoroutineScope()
62+ val userRegistrationsStatus =
63+ registrationStatusFlow.collectAsState(initial = false )
64+
65+ HomeScreen (
66+ onUserEditorLaunched = {
67+ navController.navigate(" user_editor" )
68+ },
69+ currentRegistrationStatus = userRegistrationsStatus.value,
70+ toggleRegistrationStatus = {
71+ rememberCoroutineScope.launch { saveRegistrationStatus(it) }
72+ })
3673 }
3774 composable(" user_editor" ) {
3875 UserDetailsScreen (onUserDetailsSaved = {
@@ -44,4 +81,10 @@ class MainActivity : ComponentActivity() {
4481 }
4582 }
4683 }
84+
85+ suspend fun saveRegistrationStatus (status : Boolean ) {
86+ dataStore.edit { preferences ->
87+ preferences[USER_REGISTERED ] = status
88+ }
89+ }
4790}
0 commit comments