From e330577bae3ce591477609969ff611bf42e0df6b Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 31 Jul 2023 12:53:59 +0200 Subject: [PATCH] begin analytics refactoring --- .../habitica/HabiticaBaseApplication.kt | 8 +- .../data/implementation/ApiClientImpl.kt | 4 +- .../habitica/helpers/AmplitudeManager.kt | 75 ------------ .../android/habitica/helpers/Analytics.kt | 108 ++++++++++++++++++ .../notifications/PushNotificationManager.kt | 10 +- .../ui/activities/AdventureGuideActivity.kt | 4 +- .../habitica/ui/activities/LoginActivity.kt | 6 +- .../habitica/ui/activities/MainActivity.kt | 10 +- .../habitica/ui/activities/SetupActivity.kt | 8 +- .../ui/fragments/BaseDialogFragment.kt | 6 +- .../purchases/GemsPurchaseFragment.kt | 6 +- .../purchases/SubscriptionFragment.kt | 6 +- .../social/party/PartySeekingFragment.kt | 6 +- .../ui/fragments/tasks/TasksFragment.kt | 12 +- .../ui/viewmodels/MainActivityViewModel.kt | 10 +- .../habitica/ui/viewmodels/TasksViewModel.kt | 10 +- .../views/yesterdailies/YesterdailyDialog.kt | 10 +- .../habitica/widget/BaseWidgetProvider.kt | 8 +- .../habitica/proxy/AnalyticsManagerImpl.kt | 2 - 19 files changed, 179 insertions(+), 130 deletions(-) delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AmplitudeManager.kt create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Analytics.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt index f656342a6..0c7162ac8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt @@ -25,7 +25,7 @@ import com.google.firebase.remoteconfig.FirebaseRemoteConfig import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings import com.habitrpg.android.habitica.data.ApiClient import com.habitrpg.android.habitica.helpers.AdHandler -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager import com.habitrpg.android.habitica.modules.AuthenticationHandler import com.habitrpg.android.habitica.ui.activities.BaseActivity @@ -65,11 +65,11 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife super.onCreate() if (!BuildConfig.DEBUG) { try { - AmplitudeManager.initialize(this) + Analytics.initialize(this) } catch (ignored: Resources.NotFoundException) { } - AmplitudeManager.identify(sharedPrefs) - AmplitudeManager.setUserID(lazyApiHelper.hostConfig.userID) + Analytics.identify(sharedPrefs) + Analytics.setUserID(lazyApiHelper.hostConfig.userID) } registerActivityLifecycleCallbacks(this) setupRealm() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt index fbd4962e6..2949f3546 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt @@ -8,7 +8,7 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.api.ApiService import com.habitrpg.android.habitica.api.GSonFactoryCreator import com.habitrpg.android.habitica.data.ApiClient -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics import com.habitrpg.android.habitica.helpers.NotificationsManager import com.habitrpg.android.habitica.models.Achievement import com.habitrpg.android.habitica.models.ContentResult @@ -333,7 +333,7 @@ class ApiClientImpl( this.hostConfig.userID = userID ?: "" this.hostConfig.apiKey = apiToken ?: "" analyticsManager.setUserIdentifier(this.hostConfig.userID) - AmplitudeManager.setUserID(hostConfig.userID) + Analytics.setUserID(hostConfig.userID) } override suspend fun getStatus(): Status? = process { apiService.getStatus() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AmplitudeManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AmplitudeManager.kt deleted file mode 100644 index a88137aad..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AmplitudeManager.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.habitrpg.android.habitica.helpers - -import android.content.Context -import android.content.SharedPreferences -import com.amplitude.android.Amplitude -import com.amplitude.android.Configuration -import com.amplitude.android.events.Identify -import com.habitrpg.android.habitica.BuildConfig -import com.habitrpg.android.habitica.R - -object AmplitudeManager { - var EVENT_CATEGORY_BEHAVIOUR = "behaviour" - var EVENT_CATEGORY_NAVIGATION = "navigation" - var EVENT_HITTYPE_EVENT = "event" - var EVENT_HITTYPE_PAGEVIEW = "pageview" - var EVENT_HITTYPE_CREATE_WIDGET = "create" - var EVENT_HITTYPE_REMOVE_WIDGET = "remove" - var EVENT_HITTYPE_UPDATE_WIDGET = "update" - - lateinit var amplitude: Amplitude - - @JvmOverloads - fun sendEvent( - eventAction: String?, - eventCategory: String?, - hitType: String?, - additionalData: Map? = null - ) { - if (BuildConfig.DEBUG) { - return - } - val data = mutableMapOf( - "eventAction" to eventAction, - "eventCategory" to eventCategory, - "hitType" to hitType, - "status" to "displayed" - ) - if (additionalData != null) { - for ((key, value) in additionalData) { - data.put(key, value) - } - } - if (eventAction != null) { - amplitude.track(eventAction, data) - } - } - - fun sendNavigationEvent(page: String) { - val additionalData = HashMap() - additionalData["page"] = page - sendEvent("navigated", EVENT_CATEGORY_NAVIGATION, EVENT_HITTYPE_PAGEVIEW, additionalData) - } - - fun initialize(context: Context) { - amplitude = Amplitude( - Configuration( - context.getString(R.string.amplitude_app_id), - context - ) - ) - } - - fun identify(sharedPrefs: SharedPreferences) { - val identify = Identify() - .setOnce("androidStore", BuildConfig.STORE) - sharedPrefs.getString("launch_screen", "")?.let { - identify.set("launch_screen", it) - } - amplitude.identify(identify) - } - - fun setUserID(userID: String) { - amplitude.setUserId(userID) - } -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Analytics.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Analytics.kt new file mode 100644 index 000000000..51a0a3630 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/Analytics.kt @@ -0,0 +1,108 @@ +package com.habitrpg.android.habitica.helpers + +import android.content.Context +import android.content.SharedPreferences +import androidx.core.os.bundleOf +import com.amplitude.android.Amplitude +import com.amplitude.android.Configuration +import com.amplitude.android.events.Identify +import com.google.firebase.analytics.FirebaseAnalytics +import com.google.firebase.crashlytics.FirebaseCrashlytics +import com.habitrpg.android.habitica.R +import com.habitrpg.shared.habitica.BuildConfig + +enum class AnalyticsTarget { + AMPLITUDE, + FIREBASE +} + +enum class EventCategory(val key: String) { + BEHAVIOUR("behaviour"), + NAVIGATION("navigation") +} + +enum class HitType(val key: String) { + EVENT("event"), + PAGEVIEW("pageview"), + CREATE_WIDGET("create"), + REMOVE_WIDGET("remove"), + UPDATE_WIDGET("update") +} + +object Analytics { + private lateinit var firebase : FirebaseAnalytics + private lateinit var amplitude: Amplitude + + @JvmOverloads + fun sendEvent( + eventAction: String?, + category: EventCategory?, + hitType: HitType?, + additionalData: Map? = null, + target: AnalyticsTarget? = null + ) { + if (BuildConfig.DEBUG) { + return + } + val data = mutableMapOf( + "eventAction" to eventAction, + "eventCategory" to category?.key, + "hitType" to hitType?.key, + "status" to "displayed" + ) + if (additionalData != null) { + data.putAll(additionalData) + } + if (eventAction != null) { + if (target == null || target == AnalyticsTarget.AMPLITUDE) { + amplitude.track(eventAction, data) + } + if (target == null || target == AnalyticsTarget.FIREBASE) { + firebase.logEvent(eventAction, bundleOf(*data.toList().toTypedArray())) + } + } + } + + fun sendNavigationEvent(page: String) { + val additionalData = HashMap() + additionalData["page"] = page + sendEvent("navigated", EventCategory.NAVIGATION, HitType.PAGEVIEW, additionalData) + } + + fun initialize(context: Context) { + amplitude = Amplitude( + Configuration( + context.getString(R.string.amplitude_app_id), + context + ) + ) + firebase = FirebaseAnalytics.getInstance(context) + } + + fun identify(sharedPrefs: SharedPreferences) { + val identify = Identify() + .setOnce("androidStore", BuildConfig.STORE) + sharedPrefs.getString("launch_screen", "")?.let { + identify.set("launch_screen", it) + } + amplitude.identify(identify) + } + + fun setUserID(userID: String) { + amplitude.setUserId(userID) + FirebaseCrashlytics.getInstance().setUserId(userID) + firebase.setUserId(userID) + } + + fun setUserProperty(identifier: String, value: String) { + firebase.setUserProperty(identifier, value) + } + + fun logError(msg: String) { + FirebaseCrashlytics.getInstance().log(msg) + } + + fun logException(t: Throwable) { + FirebaseCrashlytics.getInstance().recordException(t) + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt index 9822cf4e9..64a9f7c8d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt @@ -7,7 +7,9 @@ import androidx.core.content.edit import com.google.firebase.messaging.FirebaseMessaging import com.google.firebase.messaging.RemoteMessage import com.habitrpg.android.habitica.data.ApiClient -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics +import com.habitrpg.android.habitica.helpers.EventCategory +import com.habitrpg.android.habitica.helpers.HitType import com.habitrpg.android.habitica.models.user.User import com.habitrpg.common.habitica.helpers.launchCatching import kotlinx.coroutines.MainScope @@ -141,10 +143,10 @@ class PushNotificationManager( if (remoteMessage.data.containsKey("sendAnalytics")) { val additionalData = HashMap() additionalData["identifier"] = remoteMessageIdentifier ?: "" - AmplitudeManager.sendEvent( + Analytics.sendEvent( "receive notification", - AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, - AmplitudeManager.EVENT_HITTYPE_EVENT, + EventCategory.BEHAVIOUR, + HitType.EVENT, additionalData ) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt index c1f90c7fe..8aed88edc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt @@ -12,7 +12,7 @@ import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.ActivityAdventureGuideBinding import com.habitrpg.android.habitica.databinding.AdventureGuideItemBinding -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.common.habitica.extensions.fromHtml @@ -62,7 +62,7 @@ class AdventureGuideActivity : BaseActivity() { val descriptionText = getString(R.string.adventure_guide_description_new) binding.descriptionView.setText(descriptionText.fromHtml(), TextView.BufferType.SPANNABLE) - AmplitudeManager.sendNavigationEvent("adventure guide screen") + Analytics.sendNavigationEvent("adventure guide screen") userViewModel.user.observe(this) { if (it != null) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt index ac50caf13..7b5f93630 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt @@ -37,8 +37,10 @@ import com.habitrpg.android.habitica.databinding.ActivityLoginBinding import com.habitrpg.android.habitica.extensions.addCancelButton import com.habitrpg.android.habitica.extensions.addOkButton import com.habitrpg.android.habitica.extensions.updateStatusBarColor -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics import com.habitrpg.android.habitica.helpers.AppConfigManager +import com.habitrpg.android.habitica.helpers.EventCategory +import com.habitrpg.android.habitica.helpers.HitType import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard import com.habitrpg.android.habitica.ui.viewmodels.AuthenticationViewModel import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog @@ -292,7 +294,7 @@ class LoginActivity : BaseActivity() { startSetupActivity() } else { startMainActivity() - AmplitudeManager.sendEvent("login", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_EVENT) + Analytics.sendEvent("login", EventCategory.BEHAVIOUR, HitType.EVENT) } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt index f6fc0fa00..eb2aa401e 100755 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt @@ -41,8 +41,10 @@ import com.habitrpg.android.habitica.extensions.hideKeyboard import com.habitrpg.android.habitica.extensions.observeOnce import com.habitrpg.android.habitica.extensions.setScaledPadding import com.habitrpg.android.habitica.extensions.updateStatusBarColor -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics import com.habitrpg.android.habitica.helpers.AppConfigManager +import com.habitrpg.android.habitica.helpers.EventCategory +import com.habitrpg.android.habitica.helpers.HitType import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.helpers.NotificationOpenHandler import com.habitrpg.android.habitica.helpers.SoundManager @@ -430,10 +432,10 @@ open class MainActivity : BaseActivity(), SnackbarActivity { if (intent.hasExtra("sendAnalytics")) { val additionalData = HashMap() additionalData["identifier"] = identifier - AmplitudeManager.sendEvent( + Analytics.sendEvent( "open notification", - AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, - AmplitudeManager.EVENT_HITTYPE_EVENT, + EventCategory.BEHAVIOUR, + HitType.EVENT, additionalData ) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt index 6e57e7ce2..4d79089d7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt @@ -22,7 +22,9 @@ import com.habitrpg.android.habitica.data.ApiClient import com.habitrpg.android.habitica.data.InventoryRepository import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.databinding.ActivitySetupBinding -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics +import com.habitrpg.android.habitica.helpers.EventCategory +import com.habitrpg.android.habitica.helpers.HitType import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.ui.fragments.setup.AvatarSetupFragment import com.habitrpg.android.habitica.ui.fragments.setup.TaskSetupFragment @@ -83,7 +85,7 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener { } val additionalData = HashMap() additionalData["status"] = "displayed" - AmplitudeManager.sendEvent("setup", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_EVENT, additionalData) + Analytics.sendEvent("setup", EventCategory.BEHAVIOUR, HitType.EVENT, additionalData) val currentDeviceLanguage = Locale.getDefault().language for (language in resources.getStringArray(R.array.LanguageValues)) { @@ -208,7 +210,7 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener { if (completedSetup && !hasCompleted) { val additionalData = HashMap() additionalData["status"] = "completed" - AmplitudeManager.sendEvent("setup", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_EVENT, additionalData) + Analytics.sendEvent("setup", EventCategory.BEHAVIOUR, HitType.EVENT, additionalData) hasCompleted = true lifecycleScope.launchCatching { userRepository.updateUser("flags.welcomed", true) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseDialogFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseDialogFragment.kt index fc2fb58ff..95f0bc436 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseDialogFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseDialogFragment.kt @@ -8,7 +8,7 @@ import androidx.lifecycle.lifecycleScope import androidx.viewbinding.ViewBinding import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.habitrpg.android.habitica.data.TutorialRepository -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics import com.habitrpg.android.habitica.ui.activities.MainActivity import com.habitrpg.common.habitica.helpers.launchCatching import kotlinx.coroutines.delay @@ -39,9 +39,7 @@ abstract class BaseDialogFragment : BottomSheetDialogFragment( container: ViewGroup?, savedInstanceState: Bundle? ): View? { - val additionalData = HashMap() - additionalData["page"] = this.javaClass.simpleName - AmplitudeManager.sendEvent("navigate", AmplitudeManager.EVENT_CATEGORY_NAVIGATION, AmplitudeManager.EVENT_HITTYPE_PAGEVIEW, additionalData) + Analytics.sendNavigationEvent(this.javaClass.simpleName) binding = createBinding(inflater, container) return binding?.root diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt index 3f2e1976b..36ae3d993 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt @@ -18,7 +18,7 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.UserRepository import com.habitrpg.android.habitica.databinding.FragmentGemPurchaseBinding import com.habitrpg.android.habitica.extensions.addCancelButton -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics import com.habitrpg.android.habitica.helpers.AppConfigManager import com.habitrpg.android.habitica.helpers.PurchaseHandler import com.habitrpg.android.habitica.helpers.PurchaseTypes @@ -34,12 +34,12 @@ import com.habitrpg.android.habitica.ui.views.promo.BirthdayBanner import com.habitrpg.common.habitica.extensions.isUsingNightModeResources import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class GemsPurchaseFragment : BaseFragment() { @@ -111,7 +111,7 @@ class GemsPurchaseFragment : BaseFragment() { binding?.promoComposeView?.isVisible = true } - AmplitudeManager.sendNavigationEvent("gem screen") + Analytics.sendNavigationEvent("gem screen") } override fun onResume() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt index c9df79001..9b1558931 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt @@ -20,7 +20,7 @@ import com.habitrpg.android.habitica.data.InventoryRepository import com.habitrpg.android.habitica.data.UserRepository import com.habitrpg.android.habitica.databinding.FragmentSubscriptionBinding import com.habitrpg.android.habitica.extensions.addCancelButton -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics import com.habitrpg.android.habitica.helpers.AppConfigManager import com.habitrpg.android.habitica.helpers.PurchaseHandler import com.habitrpg.android.habitica.helpers.PurchaseTypes @@ -37,12 +37,12 @@ import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.extensions.loadImage import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.launchCatching +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import javax.inject.Inject -import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class SubscriptionFragment : BaseFragment() { @@ -131,7 +131,7 @@ class SubscriptionFragment : BaseFragment() { } } - AmplitudeManager.sendNavigationEvent("subscription screen") + Analytics.sendNavigationEvent("subscription screen") } override fun onResume() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt index 8c0c3db85..485b875f8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt @@ -55,7 +55,9 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.SocialRepository import com.habitrpg.android.habitica.data.UserRepository import com.habitrpg.android.habitica.databinding.FragmentComposeBinding -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics +import com.habitrpg.android.habitica.helpers.EventCategory +import com.habitrpg.android.habitica.helpers.HitType import com.habitrpg.android.habitica.models.invitations.InviteResponse import com.habitrpg.android.habitica.models.members.Member import com.habitrpg.android.habitica.ui.fragments.BaseFragment @@ -139,7 +141,7 @@ class PartySeekingFragment : BaseFragment() { override fun onStart() { super.onStart() - AmplitudeManager.sendEvent("View Find Members", AmplitudeManager.EVENT_CATEGORY_NAVIGATION, AmplitudeManager.EVENT_HITTYPE_EVENT) + Analytics.sendEvent("View Find Members", EventCategory.NAVIGATION, HitType.EVENT) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt index 64d3a8819..9f276f9f7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt @@ -24,7 +24,9 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.TagRepository import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding import com.habitrpg.android.habitica.extensions.setTintWith -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics +import com.habitrpg.android.habitica.helpers.EventCategory +import com.habitrpg.android.habitica.helpers.HitType import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.ui.activities.TaskFormActivity import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment @@ -325,7 +327,7 @@ class TasksFragment : BaseMainFragment(), SearchView.O 3 -> TaskType.REWARD else -> "" } - AmplitudeManager.sendEvent("open create task form", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_EVENT, additionalData) + Analytics.sendEvent("open create task form", EventCategory.BEHAVIOUR, HitType.EVENT, additionalData) val bundle = Bundle() bundle.putString(TaskFormActivity.TASK_TYPE_KEY, type.value) @@ -363,10 +365,10 @@ class TasksFragment : BaseMainFragment(), SearchView.O } if (!DateUtils.isToday(viewModel.sharedPreferences.getLong("last_creation_reporting", 0))) { - AmplitudeManager.sendEvent( + Analytics.sendEvent( "task created", - AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, - AmplitudeManager.EVENT_HITTYPE_EVENT + EventCategory.BEHAVIOUR, + HitType.EVENT ) viewModel.sharedPreferences.edit { putLong("last_creation_reporting", Date().time) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt index 5a9d67c06..3a23bee2f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt @@ -11,7 +11,9 @@ import com.habitrpg.android.habitica.data.ContentRepository import com.habitrpg.android.habitica.data.InventoryRepository import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.data.UserRepository -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics +import com.habitrpg.android.habitica.helpers.EventCategory +import com.habitrpg.android.habitica.helpers.HitType import com.habitrpg.android.habitica.helpers.TaskAlarmManager import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager import com.habitrpg.android.habitica.models.TutorialStep @@ -146,10 +148,10 @@ class MainActivityViewModel @Inject constructor( additionalData["eventLabel"] = step.identifier + "-android" additionalData["eventValue"] = step.identifier ?: "" additionalData["complete"] = complete - AmplitudeManager.sendEvent( + Analytics.sendEvent( "tutorial", - AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, - AmplitudeManager.EVENT_HITTYPE_EVENT, + EventCategory.BEHAVIOUR, + HitType.EVENT, additionalData ) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt index a60a6e187..75e9f8da2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt @@ -10,9 +10,11 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.TagRepository import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.data.UserRepository -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics import com.habitrpg.android.habitica.helpers.AppConfigManager +import com.habitrpg.android.habitica.helpers.EventCategory import com.habitrpg.android.habitica.helpers.GroupPlanInfoProvider +import com.habitrpg.android.habitica.helpers.HitType import com.habitrpg.android.habitica.models.TeamPlan import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.common.habitica.helpers.ExceptionHandler @@ -116,10 +118,10 @@ class TasksViewModel @Inject constructor( ) { result -> onResult(result, task.value.toInt()) if (!DateUtils.isToday(sharedPreferences.getLong("last_task_reporting", 0))) { - AmplitudeManager.sendEvent( + Analytics.sendEvent( "task scored", - AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, - AmplitudeManager.EVENT_HITTYPE_EVENT + EventCategory.BEHAVIOUR, + HitType.EVENT ) sharedPreferences.edit { putLong("last_task_reporting", Date().time) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt index b8af37288..90e603431 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt @@ -13,7 +13,9 @@ import androidx.lifecycle.lifecycleScope import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.data.UserRepository -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics +import com.habitrpg.android.habitica.helpers.EventCategory +import com.habitrpg.android.habitica.helpers.HitType import com.habitrpg.android.habitica.models.tasks.ChecklistItem import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog @@ -254,10 +256,10 @@ class YesterdailyDialog private constructor( val additionalData = HashMap() additionalData["task count"] = sortedTasks?.size ?: 0 - AmplitudeManager.sendEvent( + Analytics.sendEvent( "show cron", - AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, - AmplitudeManager.EVENT_HITTYPE_EVENT, + EventCategory.BEHAVIOUR, + HitType.EVENT, additionalData ) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt index 635417c09..a10c65907 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt @@ -7,7 +7,9 @@ import android.os.Bundle import android.widget.RemoteViews import android.widget.Toast import com.habitrpg.android.habitica.data.UserRepository -import com.habitrpg.android.habitica.helpers.AmplitudeManager +import com.habitrpg.android.habitica.helpers.Analytics +import com.habitrpg.android.habitica.helpers.EventCategory +import com.habitrpg.android.habitica.helpers.HitType import com.habitrpg.android.habitica.interactors.NotifyUserUseCase import com.habitrpg.shared.habitica.models.responses.TaskScoringResult import javax.inject.Inject @@ -89,13 +91,13 @@ abstract class BaseWidgetProvider : AppWidgetProvider() { super.onEnabled(context) val additionalData = HashMap() additionalData["identifier"] = this.javaClass.simpleName - AmplitudeManager.sendEvent("widgets", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_CREATE_WIDGET, additionalData) + Analytics.sendEvent("widgets", EventCategory.BEHAVIOUR, HitType.CREATE_WIDGET, additionalData) } override fun onDeleted(context: Context, appWidgetIds: IntArray) { val additionalData = HashMap() additionalData["identifier"] = this.javaClass.simpleName - AmplitudeManager.sendEvent("widgets", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_REMOVE_WIDGET, additionalData) + Analytics.sendEvent("widgets", EventCategory.BEHAVIOUR, HitType.REMOVE_WIDGET, additionalData) super.onDeleted(context, appWidgetIds) } } diff --git a/Habitica/src/release/java/com/habitrpg/android/habitica/proxy/AnalyticsManagerImpl.kt b/Habitica/src/release/java/com/habitrpg/android/habitica/proxy/AnalyticsManagerImpl.kt index 6f957f2e3..f110f6187 100644 --- a/Habitica/src/release/java/com/habitrpg/android/habitica/proxy/AnalyticsManagerImpl.kt +++ b/Habitica/src/release/java/com/habitrpg/android/habitica/proxy/AnalyticsManagerImpl.kt @@ -4,7 +4,6 @@ import android.content.Context import android.os.Bundle import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.crashlytics.FirebaseCrashlytics -import com.habitrpg.android.habitica.helpers.AmplitudeManager import com.habitrpg.common.habitica.helpers.AnalyticsManager class AnalyticsManagerImpl(context: Context) : AnalyticsManager { @@ -17,7 +16,6 @@ class AnalyticsManagerImpl(context: Context) : AnalyticsManager { override fun setUserIdentifier(identifier: String) { FirebaseCrashlytics.getInstance().setUserId(identifier) - AmplitudeManager.amplitude.setUserId(identifier) } override fun setUserProperty(identifier: String, value: String) {