From 3a9b9b1f053db5292b675409d9dd9ad9958022da Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Tue, 21 Nov 2023 11:28:55 +0800 Subject: [PATCH] Add intercom hash to Android --- android/Omnivore/app/build.gradle | 4 ++-- .../Omnivore/app/src/main/graphql/Viewer.graphql | 1 + .../java/app/omnivore/omnivore/EventTracker.kt | 5 ++++- .../omnivore/omnivore/networking/ViewerQuery.kt | 3 ++- .../omnivore/omnivore/persistence/AppDatabase.kt | 2 +- .../omnivore/persistence/entities/Viewer.kt | 1 + .../omnivore/omnivore/ui/auth/LoginViewModel.kt | 2 +- .../omnivore/ui/settings/SettingsContent.kt | 6 +++++- .../omnivore/ui/settings/SettingsViewModel.kt | 15 +++++++++++++++ 9 files changed, 32 insertions(+), 7 deletions(-) diff --git a/android/Omnivore/app/build.gradle b/android/Omnivore/app/build.gradle index db3e4d4d1..54f8b399c 100644 --- a/android/Omnivore/app/build.gradle +++ b/android/Omnivore/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "app.omnivore.omnivore" minSdk 26 targetSdk 33 - versionCode 146 - versionName "0.0.146" + versionCode 152 + versionName "0.0.152" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/android/Omnivore/app/src/main/graphql/Viewer.graphql b/android/Omnivore/app/src/main/graphql/Viewer.graphql index 9bfe75182..1430d4e6f 100644 --- a/android/Omnivore/app/src/main/graphql/Viewer.graphql +++ b/android/Omnivore/app/src/main/graphql/Viewer.graphql @@ -3,6 +3,7 @@ query Viewer { id name isFullUser + intercomHash profile { id username diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/EventTracker.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/EventTracker.kt index 4d364868e..e5ce9fbcc 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/EventTracker.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/EventTracker.kt @@ -24,9 +24,12 @@ class EventTracker @Inject constructor(val app: Context) { PostHog.setSingletonInstance(posthog) } - fun registerUser(userID: String) { + fun registerUser(userID: String, intercomHash: String?) { posthog.identify(userID) Intercom.client().loginIdentifiedUser(Registration.create().withUserId(userID)) + intercomHash?.let { intercomHash -> + Intercom.client().setUserHash(intercomHash) + } } fun track(eventName: String, properties: Properties = Properties()) { diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/ViewerQuery.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/ViewerQuery.kt index d27c5fc15..8a4118504 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/ViewerQuery.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/ViewerQuery.kt @@ -13,7 +13,8 @@ suspend fun Networker.viewer(): Viewer? { userID = me.id, name = me.name, username = me.profile.username, - profileImageURL = me.profile.pictureUrl + profileImageURL = me.profile.pictureUrl, + intercomHash = me.intercomHash, ) } else { null diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt index bf98747fd..07f25d645 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt @@ -13,7 +13,7 @@ import app.omnivore.omnivore.persistence.entities.* SavedItemAndSavedItemLabelCrossRef::class, SavedItemAndHighlightCrossRef::class ], - version = 12 + version = 15 ) abstract class AppDatabase : RoomDatabase() { abstract fun viewerDao(): ViewerDao diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/Viewer.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/Viewer.kt index 5fb2d329d..e323a8257 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/Viewer.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/Viewer.kt @@ -9,6 +9,7 @@ data class Viewer( val name: String, val username: String, val profileImageURL: String?, + val intercomHash: String?, ) @Dao diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/LoginViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/LoginViewModel.kt index 293f8f921..8ded2dc6c 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/LoginViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/auth/LoginViewModel.kt @@ -131,7 +131,7 @@ class LoginViewModel @Inject constructor( viewModelScope.launch { val viewer = networker.viewer() viewer?.let { - eventTracker.registerUser(viewer.userID) + eventTracker.registerUser(viewer.userID, viewer.intercomHash) } } } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/settings/SettingsContent.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/settings/SettingsContent.kt index 720745d75..0892aa828 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/settings/SettingsContent.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/settings/SettingsContent.kt @@ -16,9 +16,12 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewModelScope import androidx.navigation.NavHostController import app.omnivore.omnivore.R import app.omnivore.omnivore.Routes +import app.omnivore.omnivore.networking.Networker +import app.omnivore.omnivore.networking.viewer import app.omnivore.omnivore.ui.auth.LoginViewModel import app.omnivore.omnivore.ui.settings.LogoutDialog import app.omnivore.omnivore.ui.settings.ManageAccountDialog @@ -27,6 +30,7 @@ import com.google.android.gms.auth.api.signin.GoogleSignIn import com.google.android.gms.auth.api.signin.GoogleSignInOptions import io.intercom.android.sdk.Intercom import io.intercom.android.sdk.IntercomSpace +import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -106,7 +110,7 @@ fun SettingsViewContent(loginViewModel: LoginViewModel, settingsViewModel: Setti } RowDivider() SettingRow(text = stringResource(R.string.settings_view_setting_row_feedback)) { - Intercom.client().present(space = IntercomSpace.Messages) + settingsViewModel.presentIntercom() } RowDivider() SettingRow(text = stringResource(R.string.settings_view_setting_row_privacy_policy)) { diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/settings/SettingsViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/settings/SettingsViewModel.kt index 6d071c80c..485c4cbb7 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/settings/SettingsViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/settings/SettingsViewModel.kt @@ -6,7 +6,10 @@ import app.omnivore.omnivore.DatastoreKeys import app.omnivore.omnivore.DatastoreRepository import app.omnivore.omnivore.dataService.DataService import app.omnivore.omnivore.networking.Networker +import app.omnivore.omnivore.networking.viewer import dagger.hilt.android.lifecycle.HiltViewModel +import io.intercom.android.sdk.Intercom +import io.intercom.android.sdk.IntercomSpace import kotlinx.coroutines.launch import javax.inject.Inject @@ -22,4 +25,16 @@ class SettingsViewModel @Inject constructor( dataService.clearDatabase() } } + + fun presentIntercom() { + viewModelScope.launch { + val viewer = networker.viewer() + viewer?.let { viewer -> + viewer?.intercomHash?.let { intercomHash -> + Intercom.client().setUserHash(intercomHash) + } + Intercom.client().present(space = IntercomSpace.Messages) + } + } + } }