Skip to content

Commit 3bf6a4a

Browse files
kraftysmprithivraj
andauthored
Add datastore preferences (#573)
* Add datastore preferences to manage logged-in status and launcher visibility. * Changed datastore listening * Fixed error Co-authored-by: prithivraj <[email protected]>
1 parent 1af143d commit 3bf6a4a

File tree

3 files changed

+60
-19
lines changed

3 files changed

+60
-19
lines changed

sample/app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ dependencies {
5353
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
5454
implementation 'androidx.activity:activity-compose:1.3.1'
5555
implementation("androidx.navigation:navigation-compose:2.4.1")
56+
implementation("androidx.datastore:datastore-preferences:1.0.0")
5657

5758
implementation("io.intercom.android:intercom-sdk:12.1.1")
5859
implementation("com.google.firebase:firebase-messaging:20.2.+")

sample/app/src/main/java/com/intercom/sample/MainActivity.kt

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,53 @@
11
package com.intercom.sample
22

3+
import android.content.Context
34
import android.os.Bundle
45
import androidx.activity.ComponentActivity
56
import androidx.activity.compose.setContent
67
import androidx.compose.foundation.layout.fillMaxSize
78
import androidx.compose.material.MaterialTheme
89
import androidx.compose.material.Surface
10+
import androidx.compose.runtime.collectAsState
11+
import androidx.compose.runtime.rememberCoroutineScope
912
import 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
1017
import androidx.navigation.compose.NavHost
1118
import androidx.navigation.compose.composable
1219
import androidx.navigation.compose.rememberNavController
1320
import com.intercom.sample.screens.HomeScreen
1421
import com.intercom.sample.screens.UserDetailsScreen
1522
import 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

1731
class 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
}

sample/app/src/main/java/com/intercom/sample/screens/HomeScreen.kt

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@ package com.intercom.sample.screens
22

33
import androidx.compose.foundation.layout.Column
44
import androidx.compose.runtime.Composable
5-
import androidx.compose.runtime.mutableStateOf
6-
import androidx.compose.runtime.saveable.rememberSaveable
75
import androidx.compose.ui.tooling.preview.Devices
86
import androidx.compose.ui.tooling.preview.Preview
9-
import com.google.android.gms.common.api.internal.StatusCallback
107
import com.intercom.sample.components.InputPanel
118
import com.intercom.sample.components.SelfServe
129
import com.intercom.sample.components.UserUpdate
@@ -18,23 +15,23 @@ import io.intercom.android.sdk.identity.Registration
1815

1916
@Preview(device = Devices.PIXEL_4)
2017
@Composable
21-
fun HomeScreen(onUserEditorLaunched: () -> Unit = {}) {
22-
val showRegistrationDetails = rememberSaveable { mutableStateOf(false) }
18+
fun HomeScreen(
19+
onUserEditorLaunched: () -> Unit = {},
20+
currentRegistrationStatus: Boolean = false,
21+
toggleRegistrationStatus: (Boolean) -> Unit = {}
22+
) {
2323
Column {
2424
InputPanel(
2525
onRegisterClicked = { uniqueId: String, hasUserId: Boolean ->
26-
if (hasUserId) {
26+
if (hasUserId)
2727
Intercom.client().loginIdentifiedUser(userRegistration = Registration().withUserId(uniqueId))
28-
}
29-
else {
28+
else
3029
Intercom.client().loginIdentifiedUser(userRegistration = Registration().withEmail(uniqueId))
31-
}
32-
Intercom.client().setLauncherVisibility(Intercom.VISIBLE)
33-
showRegistrationDetails.value = true
30+
toggleRegistrationStatus.invoke(true)
3431
},
3532
onUnregisterClicked = {
3633
Intercom.client().logout()
37-
showRegistrationDetails.value = false
34+
toggleRegistrationStatus(false)
3835
},
3936
onRegisterUnidentifiedClicked = {
4037
Intercom.client().loginUnidentifiedUser(
@@ -46,14 +43,14 @@ fun HomeScreen(onUserEditorLaunched: () -> Unit = {}) {
4643
override fun onSuccess() {
4744
// Handle success
4845
Intercom.client().setLauncherVisibility(Intercom.VISIBLE)
49-
showRegistrationDetails.value = true
5046
}
5147
}
5248
)
49+
toggleRegistrationStatus(true)
5350
}
5451
)
5552

56-
if (showRegistrationDetails.value) {
53+
if (currentRegistrationStatus) {
5754
UserUpdate(
5855
onUserUpdateClicked = { onUserEditorLaunched() }
5956
)

0 commit comments

Comments
 (0)