From b09ae9b09589f8d21c180c5eedcdf5d15f1d7a64 Mon Sep 17 00:00:00 2001 From: Rostislav Smirnov Date: Fri, 4 Mar 2022 11:38:16 +0300 Subject: [PATCH 1/5] Use bundles to pass events --- .../droid/ui/activities/MainFeedActivity.kt | 8 ++++-- .../droid/ui/activities/SplashActivity.kt | 10 ++++--- .../base/analytic/BundleableAnalyticEvent.kt | 19 +++++++++++++ .../analytic/GenericAnalyticEventExtension.kt | 24 ++++++++++++++++ .../base/analytic/ParcelableAnalyticEvent.kt | 5 ---- .../analytic/DeadlinesNotificationClicked.kt | 6 ++-- .../DeadlinesNotificationDismissed.kt | 6 ++-- .../analytic/PurchaseNotificationClicked.kt | 6 ++-- .../analytic/PurchaseNotificationDismissed.kt | 6 ++-- .../analytic/RemindAppNotificationClicked.kt | 6 ++-- .../RemindAppNotificationDismissed.kt | 6 ++-- .../RemindRegistrationNotificationClicked.kt | 6 ++-- ...RemindRegistrationNotificationDismissed.kt | 6 ++-- .../analytic/RetentionNotificationClicked.kt | 8 ++---- .../RetentionNotificationDismissed.kt | 8 ++---- .../analytic/StreakNotificationClicked.kt | 6 ++-- .../analytic/StreakNotificationDismissed.kt | 6 ++-- .../receiver/DismissedNotificationReceiver.kt | 28 +++++++++++-------- .../view/course/ui/activity/CourseActivity.kt | 10 ++++--- .../RemindAppNotificationDelegate.kt | 6 ++-- .../DeadlinesNotificationDelegate.kt | 5 ++-- .../PurchaseNotificationDelegate.kt | 5 ++-- .../RemindRegistrationNotificationDelegate.kt | 5 ++-- .../RetentionNotificationDelegate.kt | 5 ++-- .../StreakNotificationDelegate.kt | 4 +-- 25 files changed, 121 insertions(+), 89 deletions(-) create mode 100644 app/src/main/java/org/stepik/android/domain/base/analytic/BundleableAnalyticEvent.kt create mode 100644 app/src/main/java/org/stepik/android/domain/base/analytic/GenericAnalyticEventExtension.kt delete mode 100644 app/src/main/java/org/stepik/android/domain/base/analytic/ParcelableAnalyticEvent.kt diff --git a/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt b/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt index 9b5c0119e5..55ca7309eb 100644 --- a/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt +++ b/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt @@ -30,7 +30,8 @@ import org.stepic.droid.ui.fragments.NotificationsFragment import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper import org.stepic.droid.util.commit -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent import org.stepik.android.domain.course.analytic.CourseViewSource import org.stepik.android.domain.streak.interactor.StreakInteractor import org.stepik.android.model.Course @@ -176,7 +177,10 @@ class MainFeedActivity : BackToExitActivityWithSmartLockBase(), if (savedInstanceState == null) { checkShortcutAction(intent) checkNotificationClick(intent) - val analyticEvent = intent.getParcelableExtra(EXTRA_PARCELABLE_ANALYTIC_EVENT) + val analyticEvent = intent + .getBundleExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT) + ?.toGenericAnalyticEvent() + if (analyticEvent != null) { analytic.report(analyticEvent) } diff --git a/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt b/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt index be36cdea37..b2df3da1e8 100644 --- a/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt +++ b/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt @@ -23,7 +23,8 @@ import org.stepic.droid.core.presenters.SplashPresenter import org.stepic.droid.core.presenters.contracts.SplashView import org.stepic.droid.util.AppConstants import org.stepic.droid.util.defaultLocale -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent import org.stepik.android.view.routing.deeplink.BranchRoute import java.util.Arrays import javax.inject.Inject @@ -31,8 +32,6 @@ import javax.inject.Inject class SplashActivity : BackToExitActivityBase(), SplashView { companion object { - const val EXTRA_PARCELABLE_ANALYTIC_EVENT = "parcelable_analytic_event" - private const val RUSSIAN_LANGUAGE_CODE = "ru" } @@ -59,7 +58,10 @@ class SplashActivity : BackToExitActivityBase(), SplashView { // return // } if (savedInstanceState == null) { - val analyticEvent = intent.getParcelableExtra(EXTRA_PARCELABLE_ANALYTIC_EVENT) + val analyticEvent = intent + .getBundleExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT) + ?.toGenericAnalyticEvent() + if (analyticEvent != null) { analytics.report(analyticEvent) } diff --git a/app/src/main/java/org/stepik/android/domain/base/analytic/BundleableAnalyticEvent.kt b/app/src/main/java/org/stepik/android/domain/base/analytic/BundleableAnalyticEvent.kt new file mode 100644 index 0000000000..c2d74381c0 --- /dev/null +++ b/app/src/main/java/org/stepik/android/domain/base/analytic/BundleableAnalyticEvent.kt @@ -0,0 +1,19 @@ +package org.stepik.android.domain.base.analytic + +import android.os.Bundle +import androidx.core.os.bundleOf + +interface BundleableAnalyticEvent : AnalyticEvent { + companion object { + // Main bundle key + const val BUNDLEABLE_ANALYTIC_EVENT = "bundleable_analytic_event" + + const val BUNDLEABLE_EVENT_NAME = "bundleable_event_name" + const val BUNDLEABLE_EVENT_PARAMS = "bundleable_event_params" + } + fun toBundle(): Bundle = + bundleOf( + BUNDLEABLE_EVENT_NAME to name, + BUNDLEABLE_EVENT_PARAMS to bundleOf(*params.map { (a, b) -> a to b }.toTypedArray()) + ) +} \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/base/analytic/GenericAnalyticEventExtension.kt b/app/src/main/java/org/stepik/android/domain/base/analytic/GenericAnalyticEventExtension.kt new file mode 100644 index 0000000000..a068a1684f --- /dev/null +++ b/app/src/main/java/org/stepik/android/domain/base/analytic/GenericAnalyticEventExtension.kt @@ -0,0 +1,24 @@ +package org.stepik.android.domain.base.analytic + +import android.os.Bundle + +fun Bundle.toGenericAnalyticEvent(): AnalyticEvent? { + val eventName = getString(BundleableAnalyticEvent.BUNDLEABLE_EVENT_NAME) + val eventParams = getBundle(BundleableAnalyticEvent.BUNDLEABLE_EVENT_PARAMS) + return if (eventName == null) { + null + } else { + object : AnalyticEvent { + override val name: String = + eventName + + override val params: Map = + eventParams?.let { bundle -> + bundle + .keySet() + .mapNotNull { key -> bundle[key]?.let { value -> key to value } } + .toMap() + } ?: emptyMap() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/base/analytic/ParcelableAnalyticEvent.kt b/app/src/main/java/org/stepik/android/domain/base/analytic/ParcelableAnalyticEvent.kt deleted file mode 100644 index 7454170e1a..0000000000 --- a/app/src/main/java/org/stepik/android/domain/base/analytic/ParcelableAnalyticEvent.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.stepik.android.domain.base.analytic - -import android.os.Parcelable - -interface ParcelableAnalyticEvent : AnalyticEvent, Parcelable \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt index 2e77dc53e1..736c6070d4 100644 --- a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt @@ -1,13 +1,11 @@ package org.stepik.android.domain.personal_deadlines.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize data class DeadlinesNotificationClicked( val course: Long, val hours: Long -) : ParcelableAnalyticEvent { +) : BundleableAnalyticEvent { companion object { private const val PARAM_COURSE = "course" private const val PARAM_HOURS = "hours" diff --git a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt index 22893e00d6..6836a46956 100644 --- a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt @@ -1,13 +1,11 @@ package org.stepik.android.domain.personal_deadlines.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize data class DeadlinesNotificationDismissed( val course: Long, val hours: Long -) : ParcelableAnalyticEvent { +) : BundleableAnalyticEvent { companion object { private const val PARAM_COURSE = "course" private const val PARAM_HOURS = "hours" diff --git a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt index 28f3ebed20..c2c73ac999 100644 --- a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt @@ -1,10 +1,8 @@ package org.stepik.android.domain.purchase_notification.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize -data class PurchaseNotificationClicked(val courseId: Long) : ParcelableAnalyticEvent { +data class PurchaseNotificationClicked(val courseId: Long) : BundleableAnalyticEvent { companion object { private const val PARAM_COURSE = "course" } diff --git a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt index 9e66e4afee..a80785c4d4 100644 --- a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt @@ -1,10 +1,8 @@ package org.stepik.android.domain.purchase_notification.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize -data class PurchaseNotificationDismissed(val courseId: Long) : ParcelableAnalyticEvent { +data class PurchaseNotificationDismissed(val courseId: Long) : BundleableAnalyticEvent { companion object { private const val PARAM_COURSE = "course" } diff --git a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationClicked.kt index 4bf873ddb4..ab93011116 100644 --- a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationClicked.kt @@ -1,10 +1,8 @@ package org.stepik.android.domain.remind.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize -object RemindAppNotificationClicked : ParcelableAnalyticEvent { +object RemindAppNotificationClicked : BundleableAnalyticEvent { override val name: String = "Remind app notification clicked" } \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationDismissed.kt index 62ecc363f1..ada1c7e417 100644 --- a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationDismissed.kt @@ -1,10 +1,8 @@ package org.stepik.android.domain.remind.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize -object RemindAppNotificationDismissed : ParcelableAnalyticEvent { +object RemindAppNotificationDismissed : BundleableAnalyticEvent { override val name: String = "Remind app notification dismissed" } \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationClicked.kt index 0928b4543b..41fbca70cc 100644 --- a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationClicked.kt @@ -1,10 +1,8 @@ package org.stepik.android.domain.remind.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize -object RemindRegistrationNotificationClicked : ParcelableAnalyticEvent { +object RemindRegistrationNotificationClicked : BundleableAnalyticEvent { override val name: String = "Remind registration notification clicked" } \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationDismissed.kt index f6638b6625..13eddd9a94 100644 --- a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationDismissed.kt @@ -1,10 +1,8 @@ package org.stepik.android.domain.remind.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize -object RemindRegistrationNotificationDismissed : ParcelableAnalyticEvent { +object RemindRegistrationNotificationDismissed : BundleableAnalyticEvent { override val name: String = "Remind registration notification dismissed" } \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt index b76fb84338..2c8d5430e4 100644 --- a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt @@ -1,14 +1,12 @@ package org.stepik.android.domain.retention.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize data class RetentionNotificationClicked( val day: Int -) : ParcelableAnalyticEvent { +) : BundleableAnalyticEvent { companion object { - private const val PARAM_DAY = "day" + const val PARAM_DAY = "day" } override val name: String = diff --git a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt index 9b5f946aea..86942e13f1 100644 --- a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt @@ -1,14 +1,12 @@ package org.stepik.android.domain.retention.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize data class RetentionNotificationDismissed( val day: Int -) : ParcelableAnalyticEvent { +) : BundleableAnalyticEvent { companion object { - private const val PARAM_DAY = "day" + const val PARAM_DAY = "day" } override val name: String = diff --git a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt index 0ee57ba520..91eed166cf 100644 --- a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt @@ -1,12 +1,10 @@ package org.stepik.android.domain.streak.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize data class StreakNotificationClicked( val type: String -) : ParcelableAnalyticEvent { +) : BundleableAnalyticEvent { companion object { private const val PARAM_TYPE = "type" } diff --git a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt index b47c19424f..126aab872e 100644 --- a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt @@ -1,12 +1,10 @@ package org.stepik.android.domain.streak.analytic -import kotlinx.android.parcel.Parcelize -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent -@Parcelize data class StreakNotificationDismissed( val type: String -) : ParcelableAnalyticEvent { +) : BundleableAnalyticEvent { companion object { private const val PARAM_TYPE = "type" } diff --git a/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt b/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt index 9ddb7b2b33..75e5d302bb 100644 --- a/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt +++ b/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt @@ -3,11 +3,13 @@ package org.stepik.android.view.base.receiver import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import android.os.Bundle import org.stepic.droid.analytic.Analytic import org.stepic.droid.base.App import org.stepic.droid.preferences.SharedPreferenceHelper -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent -import org.stepik.android.domain.streak.analytic.StreakNotificationDismissed +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent +import timber.log.Timber import java.util.concurrent.ThreadPoolExecutor import javax.inject.Inject @@ -16,12 +18,11 @@ class DismissedNotificationReceiver : BroadcastReceiver() { const val REQUEST_CODE = 13202 private const val NOTIFICATION_DISMISSED = "notification_dismissed" - private const val EXTRA_PARCELABLE_ANALYTIC_EVENT = "parcelable_analytic_event" - fun createIntent(context: Context, analyticEvent: ParcelableAnalyticEvent): Intent = + fun createIntent(context: Context, bundleableAnalyticEvent: Bundle): Intent = Intent(context, DismissedNotificationReceiver::class.java) .setAction(NOTIFICATION_DISMISSED) - .putExtra(EXTRA_PARCELABLE_ANALYTIC_EVENT, analyticEvent) + .putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, bundleableAnalyticEvent) } @Inject @@ -40,15 +41,20 @@ class DismissedNotificationReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { val action = intent?.action ?: return if (action == NOTIFICATION_DISMISSED) { - val analyticEvent = intent.getParcelableExtra(EXTRA_PARCELABLE_ANALYTIC_EVENT) + val analyticEvent = intent + .getBundleExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT) + ?.toGenericAnalyticEvent() + if (analyticEvent != null) { + Timber.tag("APPS!").d("Dismissed - Event name: ${analyticEvent.name} Event params: ${analyticEvent.params}") analytic.report(analyticEvent) } - if (analyticEvent is StreakNotificationDismissed) { - threadPool.execute { - sharedPreferences.resetNumberOfStreakNotifications() - } - } + // TODO Handle this case +// if (analyticEvent?.name == StreakNotificationDismissed) { +// threadPool.execute { +// sharedPreferences.resetNumberOfStreakNotifications() +// } +// } } } } \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt b/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt index 21aefd1466..77bd196d1c 100644 --- a/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt +++ b/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt @@ -33,7 +33,8 @@ import org.stepic.droid.ui.dialogs.UnauthorizedDialogFragment import org.stepic.droid.ui.util.snackbar import org.stepic.droid.util.ProgressHelper import org.stepic.droid.util.resolveColorAttribute -import org.stepik.android.domain.base.analytic.ParcelableAnalyticEvent +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent import org.stepik.android.domain.course.analytic.CourseJoinedEvent import org.stepik.android.domain.course.analytic.CourseViewSource import org.stepik.android.domain.course_news.analytic.CourseNewsScreenOpenedAnalyticEvent @@ -83,8 +84,6 @@ class CourseActivity : private const val EXTRA_DEEPLINK_PROMO_CODE = "deeplink_promo_code" private const val EXTRA_CONTINUE_LEARNING = "continue_learning" - const val EXTRA_PARCELABLE_ANALYTIC_EVENT = "parcelable_analytic_event" - private const val NO_ID = -1L private const val NO_TITLE = "" @@ -213,7 +212,10 @@ class CourseActivity : injectComponent(courseId) if (savedInstanceState == null) { - val analyticEvent = intent.getParcelableExtra(EXTRA_PARCELABLE_ANALYTIC_EVENT) + val analyticEvent = intent + .getBundleExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT) + ?.toGenericAnalyticEvent() + if (analyticEvent != null) { analytic.report(analyticEvent) } diff --git a/app/src/main/java/org/stepik/android/view/course_list/notification/RemindAppNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/course_list/notification/RemindAppNotificationDelegate.kt index 6ed267dfbe..ce23e64fb6 100644 --- a/app/src/main/java/org/stepik/android/view/course_list/notification/RemindAppNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/course_list/notification/RemindAppNotificationDelegate.kt @@ -7,9 +7,9 @@ import org.stepic.droid.R import org.stepic.droid.analytic.Analytic import org.stepic.droid.core.ScreenManager import org.stepic.droid.preferences.SharedPreferenceHelper -import org.stepic.droid.ui.activities.MainFeedActivity import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent import org.stepik.android.domain.course_list.interactor.RemindAppNotificationInteractor import org.stepik.android.domain.remind.analytic.RemindAppNotificationClicked import org.stepik.android.domain.remind.analytic.RemindAppNotificationDismissed @@ -43,13 +43,13 @@ constructor( return } - val deleteIntent = DismissedNotificationReceiver.createIntent(context, RemindAppNotificationDismissed) + val deleteIntent = DismissedNotificationReceiver.createIntent(context, RemindAppNotificationDismissed.toBundle()) val deletePendingIntent = PendingIntent.getBroadcast(context, 0, deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT) // now we can show notification val intent = screenManager.getCatalogIntent(context) intent.action = REMIND_APP_NOTIFICATION_CLICKED - intent.putExtra(MainFeedActivity.EXTRA_PARCELABLE_ANALYTIC_EVENT, RemindAppNotificationClicked) + intent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, RemindAppNotificationClicked.toBundle()) val taskBuilder: TaskStackBuilder = TaskStackBuilder .create(context) diff --git a/app/src/main/java/org/stepik/android/view/personal_deadlines/notification/DeadlinesNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/personal_deadlines/notification/DeadlinesNotificationDelegate.kt index 5cda3e862e..a810f2e3c2 100644 --- a/app/src/main/java/org/stepik/android/view/personal_deadlines/notification/DeadlinesNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/personal_deadlines/notification/DeadlinesNotificationDelegate.kt @@ -12,6 +12,7 @@ import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper import org.stepic.droid.util.resolveColorAttribute import org.stepik.android.cache.personal_deadlines.model.DeadlineEntity +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent import org.stepik.android.domain.course.analytic.CourseViewSource import org.stepik.android.domain.personal_deadlines.analytic.DeadlinesNotificationClicked import org.stepik.android.domain.personal_deadlines.analytic.DeadlinesNotificationDismissed @@ -86,7 +87,7 @@ constructor( val hoursDiff = (deadline.deadline.time - DateTimeHelper.nowUtc()) / AppConstants.MILLIS_IN_1HOUR + 1 val intent = CourseActivity.createIntent(context, course, source = CourseViewSource.Notification) - intent.putExtra(CourseActivity.EXTRA_PARCELABLE_ANALYTIC_EVENT, DeadlinesNotificationClicked(course.id, hoursDiff)) + intent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, DeadlinesNotificationClicked(course.id, hoursDiff).toBundle()) intent.putExtra(Analytic.Deadlines.Params.BEFORE_DEADLINE, hoursDiff) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) @@ -94,7 +95,7 @@ constructor( taskBuilder.addParentStack(CourseActivity::class.java) taskBuilder.addNextIntent(intent) - val deleteIntent = DismissedNotificationReceiver.createIntent(context, DeadlinesNotificationDismissed(course.id, hoursDiff)) + val deleteIntent = DismissedNotificationReceiver.createIntent(context, DeadlinesNotificationDismissed(course.id, hoursDiff).toBundle()) val deletePendingIntent = PendingIntent.getBroadcast(context, deadline.sectionId.toInt(), deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT) val title = context.getString(R.string.app_name) diff --git a/app/src/main/java/org/stepik/android/view/purchase_notification/notification/PurchaseNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/purchase_notification/notification/PurchaseNotificationDelegate.kt index 09eabc8b2e..35cb53cc73 100644 --- a/app/src/main/java/org/stepik/android/view/purchase_notification/notification/PurchaseNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/purchase_notification/notification/PurchaseNotificationDelegate.kt @@ -10,6 +10,7 @@ import org.stepic.droid.analytic.Analytic import org.stepic.droid.notifications.model.StepikNotificationChannel import org.stepic.droid.util.resolveColorAttribute import org.stepik.android.data.purchase_notification.model.PurchaseNotificationScheduled +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent import org.stepik.android.domain.course.analytic.CourseViewSource import org.stepik.android.domain.purchase_notification.analytic.PurchaseNotificationClicked import org.stepik.android.domain.purchase_notification.analytic.PurchaseNotificationDismissed @@ -62,14 +63,14 @@ constructor( course, CourseViewSource.PurchaseReminderNotification ) - intent.putExtra(CourseActivity.EXTRA_PARCELABLE_ANALYTIC_EVENT, PurchaseNotificationClicked(course.id)) + intent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, PurchaseNotificationClicked(course.id).toBundle()) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) val taskBuilder: TaskStackBuilder = TaskStackBuilder.create(context) taskBuilder.addParentStack(CourseActivity::class.java) taskBuilder.addNextIntent(intent) - val deleteIntent = DismissedNotificationReceiver.createIntent(context, PurchaseNotificationDismissed(course.id)) + val deleteIntent = DismissedNotificationReceiver.createIntent(context, PurchaseNotificationDismissed(course.id).toBundle()) val deletePendingIntent = PendingIntent.getBroadcast(context, DismissedNotificationReceiver.REQUEST_CODE, deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT) val largeIcon = notificationHelper.getPictureByCourse(course) diff --git a/app/src/main/java/org/stepik/android/view/splash/notification/RemindRegistrationNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/splash/notification/RemindRegistrationNotificationDelegate.kt index 4f89dd37b1..500c4d1072 100644 --- a/app/src/main/java/org/stepik/android/view/splash/notification/RemindRegistrationNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/splash/notification/RemindRegistrationNotificationDelegate.kt @@ -10,6 +10,7 @@ import org.stepic.droid.preferences.SharedPreferenceHelper import org.stepic.droid.ui.activities.SplashActivity import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent import org.stepik.android.domain.remind.analytic.RemindRegistrationNotificationClicked import org.stepik.android.domain.remind.analytic.RemindRegistrationNotificationDismissed import org.stepik.android.domain.remind.analytic.RemindRegistrationNotificationShown @@ -37,12 +38,12 @@ constructor( if (sharedPreferenceHelper.isEverLogged) return val intent = Intent(context, SplashActivity::class.java) - intent.putExtra(SplashActivity.EXTRA_PARCELABLE_ANALYTIC_EVENT, RemindRegistrationNotificationClicked) + intent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, RemindRegistrationNotificationClicked.toBundle()) val taskBuilder = TaskStackBuilder .create(context) .addNextIntent(intent) - val deleteIntent = DismissedNotificationReceiver.createIntent(context, RemindRegistrationNotificationDismissed) + val deleteIntent = DismissedNotificationReceiver.createIntent(context, RemindRegistrationNotificationDismissed.toBundle()) val deletePendingIntent = PendingIntent.getBroadcast(context, DismissedNotificationReceiver.REQUEST_CODE, deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT) val title = context.getString(R.string.stepik_free_courses_title) diff --git a/app/src/main/java/org/stepik/android/view/splash/notification/RetentionNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/splash/notification/RetentionNotificationDelegate.kt index b411a3ae1d..cfed245b28 100644 --- a/app/src/main/java/org/stepik/android/view/splash/notification/RetentionNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/splash/notification/RetentionNotificationDelegate.kt @@ -11,6 +11,7 @@ import org.stepic.droid.ui.activities.SplashActivity import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper import org.stepik.android.domain.base.DataSourceType +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent import org.stepik.android.domain.retention.analytic.RetentionNotificationClicked import org.stepik.android.domain.retention.analytic.RetentionNotificationDismissed import org.stepik.android.domain.retention.analytic.RetentionNotificationShown @@ -56,14 +57,14 @@ constructor( RetentionNotificationType.DAY1 } - val deleteIntent = DismissedNotificationReceiver.createIntent(context, RetentionNotificationDismissed(notificationType.dayValue)) + val deleteIntent = DismissedNotificationReceiver.createIntent(context, RetentionNotificationDismissed(notificationType.dayValue).toBundle()) val deletePendingIntent = PendingIntent.getBroadcast(context, 0, deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT) val title = context.getString(notificationType.titleRes) val message = context.getString(notificationType.messageRes) val intent = Intent(context, SplashActivity::class.java) - intent.putExtra(SplashActivity.EXTRA_PARCELABLE_ANALYTIC_EVENT, RetentionNotificationClicked(notificationType.dayValue)) + intent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, RetentionNotificationClicked(notificationType.dayValue).toBundle()) val taskBuilder = TaskStackBuilder .create(context) .addNextIntent(intent) diff --git a/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt index af3d5d0cd3..ce07151717 100644 --- a/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt @@ -130,7 +130,7 @@ constructor( val taskBuilder: TaskStackBuilder = TaskStackBuilder.create(context) val myCoursesIntent = screenManager.getMyCoursesIntent(context) // This opens MainFeedActivity myCoursesIntent.action = STREAK_NOTIFICATION_CLICKED - myCoursesIntent.putExtra(MainFeedActivity.EXTRA_PARCELABLE_ANALYTIC_EVENT, StreakNotificationClicked(notificationType.type)) + myCoursesIntent.putExtra(MainFeedActivity.EXTRA_PARCELABLE_ANALYTIC_EVENT, StreakNotificationClicked(notificationType.type).toBundle()) taskBuilder.addNextIntent(myCoursesIntent) return taskBuilder } @@ -151,7 +151,7 @@ constructor( } private fun getDeleteIntentForStreaks(notificationType: StreakNotificationType): PendingIntent { - val deleteIntent = DismissedNotificationReceiver.createIntent(context, StreakNotificationDismissed(notificationType.type)) + val deleteIntent = DismissedNotificationReceiver.createIntent(context, StreakNotificationDismissed(notificationType.type).toBundle()) return PendingIntent.getBroadcast(context, 0, deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT) } } \ No newline at end of file From 1f2459959884e8368d526638d3669474da2fbc16 Mon Sep 17 00:00:00 2001 From: Rostislav Smirnov Date: Fri, 4 Mar 2022 12:24:21 +0300 Subject: [PATCH 2/5] Handle streak dismiss action separately --- .../droid/ui/activities/MainFeedActivity.kt | 2 - .../receiver/DismissedNotificationReceiver.kt | 39 ++++++++++++------- .../StreakNotificationDelegate.kt | 6 +-- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt b/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt index 55ca7309eb..9a63e3d0b6 100644 --- a/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt +++ b/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt @@ -77,8 +77,6 @@ class MainFeedActivity : BackToExitActivityWithSmartLockBase(), const val NOTIFICATIONS_INDEX: Int = 4 const val DEBUG_INDEX: Int = 5 - const val EXTRA_PARCELABLE_ANALYTIC_EVENT = "parcelable_analytic_event" - fun launchAfterLogin(sourceActivity: Activity, course: Course?) { val intent = Intent(sourceActivity, MainFeedActivity::class.java) if (course != null) { diff --git a/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt b/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt index 75e5d302bb..a1382fd57a 100644 --- a/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt +++ b/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt @@ -9,7 +9,6 @@ import org.stepic.droid.base.App import org.stepic.droid.preferences.SharedPreferenceHelper import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent -import timber.log.Timber import java.util.concurrent.ThreadPoolExecutor import javax.inject.Inject @@ -18,11 +17,17 @@ class DismissedNotificationReceiver : BroadcastReceiver() { const val REQUEST_CODE = 13202 private const val NOTIFICATION_DISMISSED = "notification_dismissed" + private const val STREAK_NOTIFICATION_DISMISSED = "streak_notification_dismissed" fun createIntent(context: Context, bundleableAnalyticEvent: Bundle): Intent = Intent(context, DismissedNotificationReceiver::class.java) .setAction(NOTIFICATION_DISMISSED) .putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, bundleableAnalyticEvent) + + fun createStreakNotificationIntent(context: Context, bundleableAnalyticEvent: Bundle): Intent = + Intent(context, DismissedNotificationReceiver::class.java) + .setAction(STREAK_NOTIFICATION_DISMISSED) + .putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, bundleableAnalyticEvent) } @Inject @@ -40,21 +45,25 @@ class DismissedNotificationReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { val action = intent?.action ?: return - if (action == NOTIFICATION_DISMISSED) { - val analyticEvent = intent - .getBundleExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT) - ?.toGenericAnalyticEvent() - - if (analyticEvent != null) { - Timber.tag("APPS!").d("Dismissed - Event name: ${analyticEvent.name} Event params: ${analyticEvent.params}") - analytic.report(analyticEvent) + when (action) { + NOTIFICATION_DISMISSED -> + logAnalyticEvent(intent) + STREAK_NOTIFICATION_DISMISSED -> { + logAnalyticEvent(intent) + threadPool.execute { + sharedPreferences.resetNumberOfStreakNotifications() + } } - // TODO Handle this case -// if (analyticEvent?.name == StreakNotificationDismissed) { -// threadPool.execute { -// sharedPreferences.resetNumberOfStreakNotifications() -// } -// } + } + } + + private fun logAnalyticEvent(intent: Intent) { + val analyticEvent = intent + .getBundleExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT) + ?.toGenericAnalyticEvent() + + if (analyticEvent != null) { + analytic.report(analyticEvent) } } } \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt index ce07151717..47bc028d50 100644 --- a/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt @@ -7,10 +7,10 @@ import org.stepic.droid.R import org.stepic.droid.analytic.Analytic import org.stepic.droid.core.ScreenManager import org.stepic.droid.preferences.SharedPreferenceHelper -import org.stepic.droid.ui.activities.MainFeedActivity import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper import org.stepic.droid.util.StepikUtil +import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent import org.stepik.android.domain.streak.analytic.StreakNotificationClicked import org.stepik.android.domain.streak.analytic.StreakNotificationDismissed import org.stepik.android.domain.streak.analytic.StreakNotificationShown @@ -130,7 +130,7 @@ constructor( val taskBuilder: TaskStackBuilder = TaskStackBuilder.create(context) val myCoursesIntent = screenManager.getMyCoursesIntent(context) // This opens MainFeedActivity myCoursesIntent.action = STREAK_NOTIFICATION_CLICKED - myCoursesIntent.putExtra(MainFeedActivity.EXTRA_PARCELABLE_ANALYTIC_EVENT, StreakNotificationClicked(notificationType.type).toBundle()) + myCoursesIntent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, StreakNotificationClicked(notificationType.type).toBundle()) taskBuilder.addNextIntent(myCoursesIntent) return taskBuilder } @@ -151,7 +151,7 @@ constructor( } private fun getDeleteIntentForStreaks(notificationType: StreakNotificationType): PendingIntent { - val deleteIntent = DismissedNotificationReceiver.createIntent(context, StreakNotificationDismissed(notificationType.type).toBundle()) + val deleteIntent = DismissedNotificationReceiver.createStreakNotificationIntent(context, StreakNotificationDismissed(notificationType.type).toBundle()) return PendingIntent.getBroadcast(context, 0, deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT) } } \ No newline at end of file From f20a13cc8b9a85f74d5501dc62f3d95681650db1 Mon Sep 17 00:00:00 2001 From: Rostislav Smirnov Date: Fri, 4 Mar 2022 12:46:06 +0300 Subject: [PATCH 3/5] Remove redundant interface --- .../droid/ui/activities/MainFeedActivity.kt | 4 ++-- .../droid/ui/activities/SplashActivity.kt | 4 ++-- ...xtension.kt => AnalyticEventExtensions.kt} | 16 ++++++++++++++-- .../base/analytic/BundleableAnalyticEvent.kt | 19 ------------------- .../analytic/DeadlinesNotificationClicked.kt | 4 ++-- .../DeadlinesNotificationDismissed.kt | 4 ++-- .../analytic/PurchaseNotificationClicked.kt | 4 ++-- .../analytic/PurchaseNotificationDismissed.kt | 4 ++-- .../analytic/RemindAppNotificationClicked.kt | 4 ++-- .../RemindAppNotificationDismissed.kt | 4 ++-- .../RemindRegistrationNotificationClicked.kt | 4 ++-- ...RemindRegistrationNotificationDismissed.kt | 4 ++-- .../analytic/RetentionNotificationClicked.kt | 4 ++-- .../RetentionNotificationDismissed.kt | 4 ++-- .../analytic/StreakNotificationClicked.kt | 4 ++-- .../analytic/StreakNotificationDismissed.kt | 4 ++-- .../receiver/DismissedNotificationReceiver.kt | 8 ++++---- .../view/course/ui/activity/CourseActivity.kt | 4 ++-- .../RemindAppNotificationDelegate.kt | 5 +++-- .../DeadlinesNotificationDelegate.kt | 5 +++-- .../PurchaseNotificationDelegate.kt | 5 +++-- .../RemindRegistrationNotificationDelegate.kt | 5 +++-- .../RetentionNotificationDelegate.kt | 5 +++-- .../StreakNotificationDelegate.kt | 5 +++-- 24 files changed, 66 insertions(+), 67 deletions(-) rename app/src/main/java/org/stepik/android/domain/base/analytic/{GenericAnalyticEventExtension.kt => AnalyticEventExtensions.kt} (53%) delete mode 100644 app/src/main/java/org/stepik/android/domain/base/analytic/BundleableAnalyticEvent.kt diff --git a/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt b/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt index 9a63e3d0b6..ed5a688efc 100644 --- a/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt +++ b/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt @@ -30,7 +30,7 @@ import org.stepic.droid.ui.fragments.NotificationsFragment import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper import org.stepic.droid.util.commit -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent import org.stepik.android.domain.course.analytic.CourseViewSource import org.stepik.android.domain.streak.interactor.StreakInteractor @@ -176,7 +176,7 @@ class MainFeedActivity : BackToExitActivityWithSmartLockBase(), checkShortcutAction(intent) checkNotificationClick(intent) val analyticEvent = intent - .getBundleExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT) + .getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT) ?.toGenericAnalyticEvent() if (analyticEvent != null) { diff --git a/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt b/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt index b2df3da1e8..e4b2c310af 100644 --- a/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt +++ b/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt @@ -23,7 +23,7 @@ import org.stepic.droid.core.presenters.SplashPresenter import org.stepic.droid.core.presenters.contracts.SplashView import org.stepic.droid.util.AppConstants import org.stepic.droid.util.defaultLocale -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent import org.stepik.android.view.routing.deeplink.BranchRoute import java.util.Arrays @@ -59,7 +59,7 @@ class SplashActivity : BackToExitActivityBase(), SplashView { // } if (savedInstanceState == null) { val analyticEvent = intent - .getBundleExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT) + .getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT) ?.toGenericAnalyticEvent() if (analyticEvent != null) { diff --git a/app/src/main/java/org/stepik/android/domain/base/analytic/GenericAnalyticEventExtension.kt b/app/src/main/java/org/stepik/android/domain/base/analytic/AnalyticEventExtensions.kt similarity index 53% rename from app/src/main/java/org/stepik/android/domain/base/analytic/GenericAnalyticEventExtension.kt rename to app/src/main/java/org/stepik/android/domain/base/analytic/AnalyticEventExtensions.kt index a068a1684f..ecba44f618 100644 --- a/app/src/main/java/org/stepik/android/domain/base/analytic/GenericAnalyticEventExtension.kt +++ b/app/src/main/java/org/stepik/android/domain/base/analytic/AnalyticEventExtensions.kt @@ -1,10 +1,22 @@ package org.stepik.android.domain.base.analytic import android.os.Bundle +import androidx.core.os.bundleOf + +const val BUNDLEABLE_ANALYTIC_EVENT = "bundleable_analytic_event" + +private const val BUNDLEABLE_EVENT_NAME = "bundleable_event_name" +private const val BUNDLEABLE_EVENT_PARAMS = "bundleable_event_params" + +fun AnalyticEvent.toBundle(): Bundle = + bundleOf( + BUNDLEABLE_EVENT_NAME to name, + BUNDLEABLE_EVENT_PARAMS to bundleOf(*params.map { (a, b) -> a to b }.toTypedArray()) + ) fun Bundle.toGenericAnalyticEvent(): AnalyticEvent? { - val eventName = getString(BundleableAnalyticEvent.BUNDLEABLE_EVENT_NAME) - val eventParams = getBundle(BundleableAnalyticEvent.BUNDLEABLE_EVENT_PARAMS) + val eventName = getString(BUNDLEABLE_EVENT_NAME) + val eventParams = getBundle(BUNDLEABLE_EVENT_PARAMS) return if (eventName == null) { null } else { diff --git a/app/src/main/java/org/stepik/android/domain/base/analytic/BundleableAnalyticEvent.kt b/app/src/main/java/org/stepik/android/domain/base/analytic/BundleableAnalyticEvent.kt deleted file mode 100644 index c2d74381c0..0000000000 --- a/app/src/main/java/org/stepik/android/domain/base/analytic/BundleableAnalyticEvent.kt +++ /dev/null @@ -1,19 +0,0 @@ -package org.stepik.android.domain.base.analytic - -import android.os.Bundle -import androidx.core.os.bundleOf - -interface BundleableAnalyticEvent : AnalyticEvent { - companion object { - // Main bundle key - const val BUNDLEABLE_ANALYTIC_EVENT = "bundleable_analytic_event" - - const val BUNDLEABLE_EVENT_NAME = "bundleable_event_name" - const val BUNDLEABLE_EVENT_PARAMS = "bundleable_event_params" - } - fun toBundle(): Bundle = - bundleOf( - BUNDLEABLE_EVENT_NAME to name, - BUNDLEABLE_EVENT_PARAMS to bundleOf(*params.map { (a, b) -> a to b }.toTypedArray()) - ) -} \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt index 736c6070d4..143f7e91bc 100644 --- a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt @@ -1,11 +1,11 @@ package org.stepik.android.domain.personal_deadlines.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent data class DeadlinesNotificationClicked( val course: Long, val hours: Long -) : BundleableAnalyticEvent { +) : AnalyticEvent { companion object { private const val PARAM_COURSE = "course" private const val PARAM_HOURS = "hours" diff --git a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt index 6836a46956..b5bb8670c3 100644 --- a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt @@ -1,11 +1,11 @@ package org.stepik.android.domain.personal_deadlines.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent data class DeadlinesNotificationDismissed( val course: Long, val hours: Long -) : BundleableAnalyticEvent { +) : AnalyticEvent { companion object { private const val PARAM_COURSE = "course" private const val PARAM_HOURS = "hours" diff --git a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt index c2c73ac999..a9ad3fd16e 100644 --- a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt @@ -1,8 +1,8 @@ package org.stepik.android.domain.purchase_notification.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent -data class PurchaseNotificationClicked(val courseId: Long) : BundleableAnalyticEvent { +data class PurchaseNotificationClicked(val courseId: Long) : AnalyticEvent { companion object { private const val PARAM_COURSE = "course" } diff --git a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt index a80785c4d4..b37303a570 100644 --- a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt @@ -1,8 +1,8 @@ package org.stepik.android.domain.purchase_notification.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent -data class PurchaseNotificationDismissed(val courseId: Long) : BundleableAnalyticEvent { +data class PurchaseNotificationDismissed(val courseId: Long) : AnalyticEvent { companion object { private const val PARAM_COURSE = "course" } diff --git a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationClicked.kt index ab93011116..aaa2966d69 100644 --- a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationClicked.kt @@ -1,8 +1,8 @@ package org.stepik.android.domain.remind.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent -object RemindAppNotificationClicked : BundleableAnalyticEvent { +object RemindAppNotificationClicked : AnalyticEvent { override val name: String = "Remind app notification clicked" } \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationDismissed.kt index ada1c7e417..61c1840755 100644 --- a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindAppNotificationDismissed.kt @@ -1,8 +1,8 @@ package org.stepik.android.domain.remind.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent -object RemindAppNotificationDismissed : BundleableAnalyticEvent { +object RemindAppNotificationDismissed : AnalyticEvent { override val name: String = "Remind app notification dismissed" } \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationClicked.kt index 41fbca70cc..1529712d58 100644 --- a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationClicked.kt @@ -1,8 +1,8 @@ package org.stepik.android.domain.remind.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent -object RemindRegistrationNotificationClicked : BundleableAnalyticEvent { +object RemindRegistrationNotificationClicked : AnalyticEvent { override val name: String = "Remind registration notification clicked" } \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationDismissed.kt index 13eddd9a94..d635ac23e0 100644 --- a/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/remind/analytic/RemindRegistrationNotificationDismissed.kt @@ -1,8 +1,8 @@ package org.stepik.android.domain.remind.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent -object RemindRegistrationNotificationDismissed : BundleableAnalyticEvent { +object RemindRegistrationNotificationDismissed : AnalyticEvent { override val name: String = "Remind registration notification dismissed" } \ No newline at end of file diff --git a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt index 2c8d5430e4..6c5a56e095 100644 --- a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt @@ -1,10 +1,10 @@ package org.stepik.android.domain.retention.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent data class RetentionNotificationClicked( val day: Int -) : BundleableAnalyticEvent { +) : AnalyticEvent { companion object { const val PARAM_DAY = "day" } diff --git a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt index 86942e13f1..57a81a9535 100644 --- a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt @@ -1,10 +1,10 @@ package org.stepik.android.domain.retention.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent data class RetentionNotificationDismissed( val day: Int -) : BundleableAnalyticEvent { +) : AnalyticEvent { companion object { const val PARAM_DAY = "day" } diff --git a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt index 91eed166cf..b48b763958 100644 --- a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt @@ -1,10 +1,10 @@ package org.stepik.android.domain.streak.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent data class StreakNotificationClicked( val type: String -) : BundleableAnalyticEvent { +) : AnalyticEvent { companion object { private const val PARAM_TYPE = "type" } diff --git a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt index 126aab872e..ac49d1eb0a 100644 --- a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt @@ -1,10 +1,10 @@ package org.stepik.android.domain.streak.analytic -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.AnalyticEvent data class StreakNotificationDismissed( val type: String -) : BundleableAnalyticEvent { +) : AnalyticEvent { companion object { private const val PARAM_TYPE = "type" } diff --git a/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt b/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt index a1382fd57a..812f67b3fc 100644 --- a/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt +++ b/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt @@ -7,7 +7,7 @@ import android.os.Bundle import org.stepic.droid.analytic.Analytic import org.stepic.droid.base.App import org.stepic.droid.preferences.SharedPreferenceHelper -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent import java.util.concurrent.ThreadPoolExecutor import javax.inject.Inject @@ -22,12 +22,12 @@ class DismissedNotificationReceiver : BroadcastReceiver() { fun createIntent(context: Context, bundleableAnalyticEvent: Bundle): Intent = Intent(context, DismissedNotificationReceiver::class.java) .setAction(NOTIFICATION_DISMISSED) - .putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, bundleableAnalyticEvent) + .putExtra(BUNDLEABLE_ANALYTIC_EVENT, bundleableAnalyticEvent) fun createStreakNotificationIntent(context: Context, bundleableAnalyticEvent: Bundle): Intent = Intent(context, DismissedNotificationReceiver::class.java) .setAction(STREAK_NOTIFICATION_DISMISSED) - .putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, bundleableAnalyticEvent) + .putExtra(BUNDLEABLE_ANALYTIC_EVENT, bundleableAnalyticEvent) } @Inject @@ -59,7 +59,7 @@ class DismissedNotificationReceiver : BroadcastReceiver() { private fun logAnalyticEvent(intent: Intent) { val analyticEvent = intent - .getBundleExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT) + .getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT) ?.toGenericAnalyticEvent() if (analyticEvent != null) { diff --git a/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt b/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt index 77bd196d1c..f8cb656bf8 100644 --- a/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt +++ b/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt @@ -33,7 +33,7 @@ import org.stepic.droid.ui.dialogs.UnauthorizedDialogFragment import org.stepic.droid.ui.util.snackbar import org.stepic.droid.util.ProgressHelper import org.stepic.droid.util.resolveColorAttribute -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent import org.stepik.android.domain.course.analytic.CourseJoinedEvent import org.stepik.android.domain.course.analytic.CourseViewSource @@ -213,7 +213,7 @@ class CourseActivity : if (savedInstanceState == null) { val analyticEvent = intent - .getBundleExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT) + .getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT) ?.toGenericAnalyticEvent() if (analyticEvent != null) { diff --git a/app/src/main/java/org/stepik/android/view/course_list/notification/RemindAppNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/course_list/notification/RemindAppNotificationDelegate.kt index ce23e64fb6..61cf68066a 100644 --- a/app/src/main/java/org/stepik/android/view/course_list/notification/RemindAppNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/course_list/notification/RemindAppNotificationDelegate.kt @@ -9,7 +9,8 @@ import org.stepic.droid.core.ScreenManager import org.stepic.droid.preferences.SharedPreferenceHelper import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT +import org.stepik.android.domain.base.analytic.toBundle import org.stepik.android.domain.course_list.interactor.RemindAppNotificationInteractor import org.stepik.android.domain.remind.analytic.RemindAppNotificationClicked import org.stepik.android.domain.remind.analytic.RemindAppNotificationDismissed @@ -49,7 +50,7 @@ constructor( // now we can show notification val intent = screenManager.getCatalogIntent(context) intent.action = REMIND_APP_NOTIFICATION_CLICKED - intent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, RemindAppNotificationClicked.toBundle()) + intent.putExtra(BUNDLEABLE_ANALYTIC_EVENT, RemindAppNotificationClicked.toBundle()) val taskBuilder: TaskStackBuilder = TaskStackBuilder .create(context) diff --git a/app/src/main/java/org/stepik/android/view/personal_deadlines/notification/DeadlinesNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/personal_deadlines/notification/DeadlinesNotificationDelegate.kt index a810f2e3c2..b3c957b6e6 100644 --- a/app/src/main/java/org/stepik/android/view/personal_deadlines/notification/DeadlinesNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/personal_deadlines/notification/DeadlinesNotificationDelegate.kt @@ -12,7 +12,8 @@ import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper import org.stepic.droid.util.resolveColorAttribute import org.stepik.android.cache.personal_deadlines.model.DeadlineEntity -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT +import org.stepik.android.domain.base.analytic.toBundle import org.stepik.android.domain.course.analytic.CourseViewSource import org.stepik.android.domain.personal_deadlines.analytic.DeadlinesNotificationClicked import org.stepik.android.domain.personal_deadlines.analytic.DeadlinesNotificationDismissed @@ -87,7 +88,7 @@ constructor( val hoursDiff = (deadline.deadline.time - DateTimeHelper.nowUtc()) / AppConstants.MILLIS_IN_1HOUR + 1 val intent = CourseActivity.createIntent(context, course, source = CourseViewSource.Notification) - intent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, DeadlinesNotificationClicked(course.id, hoursDiff).toBundle()) + intent.putExtra(BUNDLEABLE_ANALYTIC_EVENT, DeadlinesNotificationClicked(course.id, hoursDiff).toBundle()) intent.putExtra(Analytic.Deadlines.Params.BEFORE_DEADLINE, hoursDiff) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) diff --git a/app/src/main/java/org/stepik/android/view/purchase_notification/notification/PurchaseNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/purchase_notification/notification/PurchaseNotificationDelegate.kt index 35cb53cc73..53b90475d6 100644 --- a/app/src/main/java/org/stepik/android/view/purchase_notification/notification/PurchaseNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/purchase_notification/notification/PurchaseNotificationDelegate.kt @@ -10,7 +10,8 @@ import org.stepic.droid.analytic.Analytic import org.stepic.droid.notifications.model.StepikNotificationChannel import org.stepic.droid.util.resolveColorAttribute import org.stepik.android.data.purchase_notification.model.PurchaseNotificationScheduled -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT +import org.stepik.android.domain.base.analytic.toBundle import org.stepik.android.domain.course.analytic.CourseViewSource import org.stepik.android.domain.purchase_notification.analytic.PurchaseNotificationClicked import org.stepik.android.domain.purchase_notification.analytic.PurchaseNotificationDismissed @@ -63,7 +64,7 @@ constructor( course, CourseViewSource.PurchaseReminderNotification ) - intent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, PurchaseNotificationClicked(course.id).toBundle()) + intent.putExtra(BUNDLEABLE_ANALYTIC_EVENT, PurchaseNotificationClicked(course.id).toBundle()) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) val taskBuilder: TaskStackBuilder = TaskStackBuilder.create(context) diff --git a/app/src/main/java/org/stepik/android/view/splash/notification/RemindRegistrationNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/splash/notification/RemindRegistrationNotificationDelegate.kt index 500c4d1072..99d72c9df4 100644 --- a/app/src/main/java/org/stepik/android/view/splash/notification/RemindRegistrationNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/splash/notification/RemindRegistrationNotificationDelegate.kt @@ -10,7 +10,8 @@ import org.stepic.droid.preferences.SharedPreferenceHelper import org.stepic.droid.ui.activities.SplashActivity import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT +import org.stepik.android.domain.base.analytic.toBundle import org.stepik.android.domain.remind.analytic.RemindRegistrationNotificationClicked import org.stepik.android.domain.remind.analytic.RemindRegistrationNotificationDismissed import org.stepik.android.domain.remind.analytic.RemindRegistrationNotificationShown @@ -38,7 +39,7 @@ constructor( if (sharedPreferenceHelper.isEverLogged) return val intent = Intent(context, SplashActivity::class.java) - intent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, RemindRegistrationNotificationClicked.toBundle()) + intent.putExtra(BUNDLEABLE_ANALYTIC_EVENT, RemindRegistrationNotificationClicked.toBundle()) val taskBuilder = TaskStackBuilder .create(context) .addNextIntent(intent) diff --git a/app/src/main/java/org/stepik/android/view/splash/notification/RetentionNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/splash/notification/RetentionNotificationDelegate.kt index cfed245b28..8787638f98 100644 --- a/app/src/main/java/org/stepik/android/view/splash/notification/RetentionNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/splash/notification/RetentionNotificationDelegate.kt @@ -11,7 +11,8 @@ import org.stepic.droid.ui.activities.SplashActivity import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper import org.stepik.android.domain.base.DataSourceType -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT +import org.stepik.android.domain.base.analytic.toBundle import org.stepik.android.domain.retention.analytic.RetentionNotificationClicked import org.stepik.android.domain.retention.analytic.RetentionNotificationDismissed import org.stepik.android.domain.retention.analytic.RetentionNotificationShown @@ -64,7 +65,7 @@ constructor( val message = context.getString(notificationType.messageRes) val intent = Intent(context, SplashActivity::class.java) - intent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, RetentionNotificationClicked(notificationType.dayValue).toBundle()) + intent.putExtra(BUNDLEABLE_ANALYTIC_EVENT, RetentionNotificationClicked(notificationType.dayValue).toBundle()) val taskBuilder = TaskStackBuilder .create(context) .addNextIntent(intent) diff --git a/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt b/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt index 47bc028d50..14a8b140b5 100644 --- a/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt +++ b/app/src/main/java/org/stepik/android/view/streak/notification/StreakNotificationDelegate.kt @@ -10,7 +10,8 @@ import org.stepic.droid.preferences.SharedPreferenceHelper import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper import org.stepic.droid.util.StepikUtil -import org.stepik.android.domain.base.analytic.BundleableAnalyticEvent +import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT +import org.stepik.android.domain.base.analytic.toBundle import org.stepik.android.domain.streak.analytic.StreakNotificationClicked import org.stepik.android.domain.streak.analytic.StreakNotificationDismissed import org.stepik.android.domain.streak.analytic.StreakNotificationShown @@ -130,7 +131,7 @@ constructor( val taskBuilder: TaskStackBuilder = TaskStackBuilder.create(context) val myCoursesIntent = screenManager.getMyCoursesIntent(context) // This opens MainFeedActivity myCoursesIntent.action = STREAK_NOTIFICATION_CLICKED - myCoursesIntent.putExtra(BundleableAnalyticEvent.BUNDLEABLE_ANALYTIC_EVENT, StreakNotificationClicked(notificationType.type).toBundle()) + myCoursesIntent.putExtra(BUNDLEABLE_ANALYTIC_EVENT, StreakNotificationClicked(notificationType.type).toBundle()) taskBuilder.addNextIntent(myCoursesIntent) return taskBuilder } From 0f7d72bfca54efffc5eaa903391a10ad55e94504 Mon Sep 17 00:00:00 2001 From: Rostislav Smirnov Date: Fri, 4 Mar 2022 13:00:54 +0300 Subject: [PATCH 4/5] Remove redundant data class modifier --- .../analytic/DeadlinesNotificationClicked.kt | 6 +++--- .../analytic/DeadlinesNotificationDismissed.kt | 6 +++--- .../analytic/PurchaseNotificationClicked.kt | 2 +- .../analytic/PurchaseNotificationDismissed.kt | 2 +- .../retention/analytic/RetentionNotificationClicked.kt | 4 ++-- .../retention/analytic/RetentionNotificationDismissed.kt | 4 ++-- .../domain/streak/analytic/StreakNotificationClicked.kt | 4 ++-- .../domain/streak/analytic/StreakNotificationDismissed.kt | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt index 143f7e91bc..b58bc1f181 100644 --- a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationClicked.kt @@ -2,9 +2,9 @@ package org.stepik.android.domain.personal_deadlines.analytic import org.stepik.android.domain.base.analytic.AnalyticEvent -data class DeadlinesNotificationClicked( - val course: Long, - val hours: Long +class DeadlinesNotificationClicked( + course: Long, + hours: Long ) : AnalyticEvent { companion object { private const val PARAM_COURSE = "course" diff --git a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt index b5bb8670c3..93afc5adb6 100644 --- a/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/personal_deadlines/analytic/DeadlinesNotificationDismissed.kt @@ -2,9 +2,9 @@ package org.stepik.android.domain.personal_deadlines.analytic import org.stepik.android.domain.base.analytic.AnalyticEvent -data class DeadlinesNotificationDismissed( - val course: Long, - val hours: Long +class DeadlinesNotificationDismissed( + course: Long, + hours: Long ) : AnalyticEvent { companion object { private const val PARAM_COURSE = "course" diff --git a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt index a9ad3fd16e..1b8975909f 100644 --- a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationClicked.kt @@ -2,7 +2,7 @@ package org.stepik.android.domain.purchase_notification.analytic import org.stepik.android.domain.base.analytic.AnalyticEvent -data class PurchaseNotificationClicked(val courseId: Long) : AnalyticEvent { +class PurchaseNotificationClicked(courseId: Long) : AnalyticEvent { companion object { private const val PARAM_COURSE = "course" } diff --git a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt index b37303a570..61072ebd6e 100644 --- a/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/purchase_notification/analytic/PurchaseNotificationDismissed.kt @@ -2,7 +2,7 @@ package org.stepik.android.domain.purchase_notification.analytic import org.stepik.android.domain.base.analytic.AnalyticEvent -data class PurchaseNotificationDismissed(val courseId: Long) : AnalyticEvent { +class PurchaseNotificationDismissed(courseId: Long) : AnalyticEvent { companion object { private const val PARAM_COURSE = "course" } diff --git a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt index 6c5a56e095..bbe022be21 100644 --- a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationClicked.kt @@ -2,8 +2,8 @@ package org.stepik.android.domain.retention.analytic import org.stepik.android.domain.base.analytic.AnalyticEvent -data class RetentionNotificationClicked( - val day: Int +class RetentionNotificationClicked( + day: Int ) : AnalyticEvent { companion object { const val PARAM_DAY = "day" diff --git a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt index 57a81a9535..d43b638de2 100644 --- a/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/retention/analytic/RetentionNotificationDismissed.kt @@ -2,8 +2,8 @@ package org.stepik.android.domain.retention.analytic import org.stepik.android.domain.base.analytic.AnalyticEvent -data class RetentionNotificationDismissed( - val day: Int +class RetentionNotificationDismissed( + day: Int ) : AnalyticEvent { companion object { const val PARAM_DAY = "day" diff --git a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt index b48b763958..2659cc30f1 100644 --- a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt +++ b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationClicked.kt @@ -2,8 +2,8 @@ package org.stepik.android.domain.streak.analytic import org.stepik.android.domain.base.analytic.AnalyticEvent -data class StreakNotificationClicked( - val type: String +class StreakNotificationClicked( + type: String ) : AnalyticEvent { companion object { private const val PARAM_TYPE = "type" diff --git a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt index ac49d1eb0a..2e07efb25a 100644 --- a/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt +++ b/app/src/main/java/org/stepik/android/domain/streak/analytic/StreakNotificationDismissed.kt @@ -2,8 +2,8 @@ package org.stepik.android.domain.streak.analytic import org.stepik.android.domain.base.analytic.AnalyticEvent -data class StreakNotificationDismissed( - val type: String +class StreakNotificationDismissed( + type: String ) : AnalyticEvent { companion object { private const val PARAM_TYPE = "type" From 3ff908ec5986f09d6091cc753be1beb80905b2aa Mon Sep 17 00:00:00 2001 From: Rostislav Smirnov Date: Fri, 4 Mar 2022 13:12:21 +0300 Subject: [PATCH 5/5] Rename extension function --- .../java/org/stepic/droid/ui/activities/MainFeedActivity.kt | 4 ++-- .../java/org/stepic/droid/ui/activities/SplashActivity.kt | 4 ++-- .../android/domain/base/analytic/AnalyticEventExtensions.kt | 2 +- .../view/base/receiver/DismissedNotificationReceiver.kt | 4 ++-- .../stepik/android/view/course/ui/activity/CourseActivity.kt | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt b/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt index ed5a688efc..4d5ae8df49 100644 --- a/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt +++ b/app/src/main/java/org/stepic/droid/ui/activities/MainFeedActivity.kt @@ -31,7 +31,7 @@ import org.stepic.droid.util.AppConstants import org.stepic.droid.util.DateTimeHelper import org.stepic.droid.util.commit import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT -import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent +import org.stepik.android.domain.base.analytic.toAnalyticEvent import org.stepik.android.domain.course.analytic.CourseViewSource import org.stepik.android.domain.streak.interactor.StreakInteractor import org.stepik.android.model.Course @@ -177,7 +177,7 @@ class MainFeedActivity : BackToExitActivityWithSmartLockBase(), checkNotificationClick(intent) val analyticEvent = intent .getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT) - ?.toGenericAnalyticEvent() + ?.toAnalyticEvent() if (analyticEvent != null) { analytic.report(analyticEvent) diff --git a/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt b/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt index e4b2c310af..d34fa12a96 100644 --- a/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt +++ b/app/src/main/java/org/stepic/droid/ui/activities/SplashActivity.kt @@ -24,7 +24,7 @@ import org.stepic.droid.core.presenters.contracts.SplashView import org.stepic.droid.util.AppConstants import org.stepic.droid.util.defaultLocale import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT -import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent +import org.stepik.android.domain.base.analytic.toAnalyticEvent import org.stepik.android.view.routing.deeplink.BranchRoute import java.util.Arrays import javax.inject.Inject @@ -60,7 +60,7 @@ class SplashActivity : BackToExitActivityBase(), SplashView { if (savedInstanceState == null) { val analyticEvent = intent .getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT) - ?.toGenericAnalyticEvent() + ?.toAnalyticEvent() if (analyticEvent != null) { analytics.report(analyticEvent) diff --git a/app/src/main/java/org/stepik/android/domain/base/analytic/AnalyticEventExtensions.kt b/app/src/main/java/org/stepik/android/domain/base/analytic/AnalyticEventExtensions.kt index ecba44f618..2b8fc942cb 100644 --- a/app/src/main/java/org/stepik/android/domain/base/analytic/AnalyticEventExtensions.kt +++ b/app/src/main/java/org/stepik/android/domain/base/analytic/AnalyticEventExtensions.kt @@ -14,7 +14,7 @@ fun AnalyticEvent.toBundle(): Bundle = BUNDLEABLE_EVENT_PARAMS to bundleOf(*params.map { (a, b) -> a to b }.toTypedArray()) ) -fun Bundle.toGenericAnalyticEvent(): AnalyticEvent? { +fun Bundle.toAnalyticEvent(): AnalyticEvent? { val eventName = getString(BUNDLEABLE_EVENT_NAME) val eventParams = getBundle(BUNDLEABLE_EVENT_PARAMS) return if (eventName == null) { diff --git a/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt b/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt index 812f67b3fc..9271caec49 100644 --- a/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt +++ b/app/src/main/java/org/stepik/android/view/base/receiver/DismissedNotificationReceiver.kt @@ -8,7 +8,7 @@ import org.stepic.droid.analytic.Analytic import org.stepic.droid.base.App import org.stepic.droid.preferences.SharedPreferenceHelper import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT -import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent +import org.stepik.android.domain.base.analytic.toAnalyticEvent import java.util.concurrent.ThreadPoolExecutor import javax.inject.Inject @@ -60,7 +60,7 @@ class DismissedNotificationReceiver : BroadcastReceiver() { private fun logAnalyticEvent(intent: Intent) { val analyticEvent = intent .getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT) - ?.toGenericAnalyticEvent() + ?.toAnalyticEvent() if (analyticEvent != null) { analytic.report(analyticEvent) diff --git a/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt b/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt index f8cb656bf8..499e7c5083 100644 --- a/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt +++ b/app/src/main/java/org/stepik/android/view/course/ui/activity/CourseActivity.kt @@ -34,7 +34,7 @@ import org.stepic.droid.ui.util.snackbar import org.stepic.droid.util.ProgressHelper import org.stepic.droid.util.resolveColorAttribute import org.stepik.android.domain.base.analytic.BUNDLEABLE_ANALYTIC_EVENT -import org.stepik.android.domain.base.analytic.toGenericAnalyticEvent +import org.stepik.android.domain.base.analytic.toAnalyticEvent import org.stepik.android.domain.course.analytic.CourseJoinedEvent import org.stepik.android.domain.course.analytic.CourseViewSource import org.stepik.android.domain.course_news.analytic.CourseNewsScreenOpenedAnalyticEvent @@ -214,7 +214,7 @@ class CourseActivity : if (savedInstanceState == null) { val analyticEvent = intent .getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT) - ?.toGenericAnalyticEvent() + ?.toAnalyticEvent() if (analyticEvent != null) { analytic.report(analyticEvent)