From b0249ed54d09851cb30ef87b009fa44d532be4a9 Mon Sep 17 00:00:00 2001 From: Moez Bhatti Date: Sat, 7 Apr 2018 02:38:10 -0400 Subject: [PATCH] Set user property for upgraded status --- .../src/main/java/manager/AnalyticsManager.kt | 2 ++ .../main/java/common/util/BillingManager.kt | 7 ++++- .../java/common/util/AnalyticsManagerImpl.kt | 4 +++ .../java/common/util/AnalyticsManagerImpl.kt | 30 +++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/domain/src/main/java/manager/AnalyticsManager.kt b/domain/src/main/java/manager/AnalyticsManager.kt index 5d0930d1..9fd2beb7 100644 --- a/domain/src/main/java/manager/AnalyticsManager.kt +++ b/domain/src/main/java/manager/AnalyticsManager.kt @@ -22,4 +22,6 @@ interface AnalyticsManager { fun track(event: String) + fun setUserProperty(key: String, value: Any) + } \ No newline at end of file diff --git a/presentation/src/main/java/common/util/BillingManager.kt b/presentation/src/main/java/common/util/BillingManager.kt index 2961f5b1..ccee295a 100644 --- a/presentation/src/main/java/common/util/BillingManager.kt +++ b/presentation/src/main/java/common/util/BillingManager.kt @@ -32,9 +32,13 @@ import com.android.billingclient.api.SkuDetailsParams import io.reactivex.Observable import io.reactivex.subjects.BehaviorSubject import io.reactivex.subjects.Subject +import manager.AnalyticsManager import javax.inject.Inject -class BillingManager @Inject constructor(context: Context) : PurchasesUpdatedListener { +class BillingManager @Inject constructor( + context: Context, + private val analyticsManager: AnalyticsManager +) : PurchasesUpdatedListener { enum class UpgradeStatus { REGULAR, UPGRADED } @@ -67,6 +71,7 @@ class BillingManager @Inject constructor(context: Context) : PurchasesUpdatedLis else -> UpgradeStatus.REGULAR } } + .doOnNext { upgraded -> analyticsManager.setUserProperty("Upgraded", upgraded) } } private fun queryPurchases() { diff --git a/presentation/src/noAnalytics/java/common/util/AnalyticsManagerImpl.kt b/presentation/src/noAnalytics/java/common/util/AnalyticsManagerImpl.kt index 017570f3..66ab3a6a 100644 --- a/presentation/src/noAnalytics/java/common/util/AnalyticsManagerImpl.kt +++ b/presentation/src/noAnalytics/java/common/util/AnalyticsManagerImpl.kt @@ -29,4 +29,8 @@ class AnalyticsManagerImpl @Inject constructor() : AnalyticsManager { // Do nothing } + override fun setUserProperty(key: String, value: Any) { + // Do nothing + } + } diff --git a/presentation/src/withAnalytics/java/common/util/AnalyticsManagerImpl.kt b/presentation/src/withAnalytics/java/common/util/AnalyticsManagerImpl.kt index d0b98f34..9b3dd882 100644 --- a/presentation/src/withAnalytics/java/common/util/AnalyticsManagerImpl.kt +++ b/presentation/src/withAnalytics/java/common/util/AnalyticsManagerImpl.kt @@ -21,9 +21,13 @@ package common.util import android.content.Context import com.amplitude.api.Amplitude import com.amplitude.api.AmplitudeClient +import com.amplitude.api.Identify import com.mixpanel.android.mpmetrics.MixpanelAPI import com.moez.QKSMS.BuildConfig import manager.AnalyticsManager +import org.json.JSONArray +import org.json.JSONObject +import timber.log.Timber import javax.inject.Inject import javax.inject.Singleton @@ -41,4 +45,30 @@ class AnalyticsManagerImpl @Inject constructor(context: Context): AnalyticsManag }) } + override fun setUserProperty(key: String, value: Any) { + + // Set the value in Mixpanel + val properties = JSONObject() + properties.put(key, value) + mixpanel.registerSuperProperties(properties) + + // Set the value in Amplitude + when (value) { + is Boolean -> Identify().set(key, value) + is BooleanArray -> Identify().set(key, value) + is Double -> Identify().set(key, value) + is DoubleArray -> Identify().set(key, value) + is Float -> Identify().set(key, value) + is FloatArray -> Identify().set(key, value) + is Int -> Identify().set(key, value) + is IntArray -> Identify().set(key, value) + is Long -> Identify().set(key, value) + is LongArray -> Identify().set(key, value) + is String -> Identify().set(key, value) + is JSONArray -> Identify().set(key, value) + is JSONObject -> Identify().set(key, value) + else -> Timber.e("Value of type ${value::class.java} not supported") + } + } + }