Skip to content

Commit

Permalink
Merge pull request #958 from StepicOrg/release/1.213
Browse files Browse the repository at this point in the history
Release/1.213
  • Loading branch information
rostikjoystick authored Mar 9, 2022
2 parents d04078e + 3e24713 commit a6a49ec
Show file tree
Hide file tree
Showing 25 changed files with 146 additions and 108 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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.BUNDLEABLE_ANALYTIC_EVENT
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
Expand Down Expand Up @@ -76,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) {
Expand Down Expand Up @@ -176,7 +175,10 @@ class MainFeedActivity : BackToExitActivityWithSmartLockBase(),
if (savedInstanceState == null) {
checkShortcutAction(intent)
checkNotificationClick(intent)
val analyticEvent = intent.getParcelableExtra<ParcelableAnalyticEvent>(EXTRA_PARCELABLE_ANALYTIC_EVENT)
val analyticEvent = intent
.getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT)
?.toAnalyticEvent()

if (analyticEvent != null) {
analytic.report(analyticEvent)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,15 @@ 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.BUNDLEABLE_ANALYTIC_EVENT
import org.stepik.android.domain.base.analytic.toAnalyticEvent
import org.stepik.android.view.routing.deeplink.BranchRoute
import java.util.Arrays
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"
}

Expand All @@ -59,7 +58,10 @@ class SplashActivity : BackToExitActivityBase(), SplashView {
// return
// }
if (savedInstanceState == null) {
val analyticEvent = intent.getParcelableExtra<ParcelableAnalyticEvent>(EXTRA_PARCELABLE_ANALYTIC_EVENT)
val analyticEvent = intent
.getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT)
?.toAnalyticEvent()

if (analyticEvent != null) {
analytics.report(analyticEvent)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
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.toAnalyticEvent(): AnalyticEvent? {
val eventName = getString(BUNDLEABLE_EVENT_NAME)
val eventParams = getBundle(BUNDLEABLE_EVENT_PARAMS)
return if (eventName == null) {
null
} else {
object : AnalyticEvent {
override val name: String =
eventName

override val params: Map<String, Any> =
eventParams?.let { bundle ->
bundle
.keySet()
.mapNotNull { key -> bundle[key]?.let { value -> key to value } }
.toMap()
} ?: emptyMap()
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
data class DeadlinesNotificationClicked(
val course: Long,
val hours: Long
) : ParcelableAnalyticEvent {
class DeadlinesNotificationClicked(
course: Long,
hours: Long
) : AnalyticEvent {
companion object {
private const val PARAM_COURSE = "course"
private const val PARAM_HOURS = "hours"
Expand Down
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
data class DeadlinesNotificationDismissed(
val course: Long,
val hours: Long
) : ParcelableAnalyticEvent {
class DeadlinesNotificationDismissed(
course: Long,
hours: Long
) : AnalyticEvent {
companion object {
private const val PARAM_COURSE = "course"
private const val PARAM_HOURS = "hours"
Expand Down
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
data class PurchaseNotificationClicked(val courseId: Long) : ParcelableAnalyticEvent {
class PurchaseNotificationClicked(courseId: Long) : AnalyticEvent {
companion object {
private const val PARAM_COURSE = "course"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
data class PurchaseNotificationDismissed(val courseId: Long) : ParcelableAnalyticEvent {
class PurchaseNotificationDismissed(courseId: Long) : AnalyticEvent {
companion object {
private const val PARAM_COURSE = "course"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
object RemindAppNotificationClicked : ParcelableAnalyticEvent {
object RemindAppNotificationClicked : AnalyticEvent {
override val name: String =
"Remind app notification clicked"
}
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
object RemindAppNotificationDismissed : ParcelableAnalyticEvent {
object RemindAppNotificationDismissed : AnalyticEvent {
override val name: String =
"Remind app notification dismissed"
}
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
object RemindRegistrationNotificationClicked : ParcelableAnalyticEvent {
object RemindRegistrationNotificationClicked : AnalyticEvent {
override val name: String =
"Remind registration notification clicked"
}
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
object RemindRegistrationNotificationDismissed : ParcelableAnalyticEvent {
object RemindRegistrationNotificationDismissed : AnalyticEvent {
override val name: String =
"Remind registration notification dismissed"
}
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
data class RetentionNotificationClicked(
val day: Int
) : ParcelableAnalyticEvent {
class RetentionNotificationClicked(
day: Int
) : AnalyticEvent {
companion object {
private const val PARAM_DAY = "day"
const val PARAM_DAY = "day"
}

override val name: String =
Expand Down
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
data class RetentionNotificationDismissed(
val day: Int
) : ParcelableAnalyticEvent {
class RetentionNotificationDismissed(
day: Int
) : AnalyticEvent {
companion object {
private const val PARAM_DAY = "day"
const val PARAM_DAY = "day"
}

override val name: String =
Expand Down
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
data class StreakNotificationClicked(
val type: String
) : ParcelableAnalyticEvent {
class StreakNotificationClicked(
type: String
) : AnalyticEvent {
companion object {
private const val PARAM_TYPE = "type"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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.AnalyticEvent

@Parcelize
data class StreakNotificationDismissed(
val type: String
) : ParcelableAnalyticEvent {
class StreakNotificationDismissed(
type: String
) : AnalyticEvent {
companion object {
private const val PARAM_TYPE = "type"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@ 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.BUNDLEABLE_ANALYTIC_EVENT
import org.stepik.android.domain.base.analytic.toAnalyticEvent
import java.util.concurrent.ThreadPoolExecutor
import javax.inject.Inject

Expand All @@ -16,12 +17,17 @@ 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"
private const val STREAK_NOTIFICATION_DISMISSED = "streak_notification_dismissed"

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(BUNDLEABLE_ANALYTIC_EVENT, bundleableAnalyticEvent)

fun createStreakNotificationIntent(context: Context, bundleableAnalyticEvent: Bundle): Intent =
Intent(context, DismissedNotificationReceiver::class.java)
.setAction(STREAK_NOTIFICATION_DISMISSED)
.putExtra(BUNDLEABLE_ANALYTIC_EVENT, bundleableAnalyticEvent)
}

@Inject
Expand All @@ -39,16 +45,25 @@ class DismissedNotificationReceiver : BroadcastReceiver() {

override fun onReceive(context: Context?, intent: Intent?) {
val action = intent?.action ?: return
if (action == NOTIFICATION_DISMISSED) {
val analyticEvent = intent.getParcelableExtra<ParcelableAnalyticEvent>(EXTRA_PARCELABLE_ANALYTIC_EVENT)
if (analyticEvent != null) {
analytic.report(analyticEvent)
}
if (analyticEvent is StreakNotificationDismissed) {
when (action) {
NOTIFICATION_DISMISSED ->
logAnalyticEvent(intent)
STREAK_NOTIFICATION_DISMISSED -> {
logAnalyticEvent(intent)
threadPool.execute {
sharedPreferences.resetNumberOfStreakNotifications()
}
}
}
}

private fun logAnalyticEvent(intent: Intent) {
val analyticEvent = intent
.getBundleExtra(BUNDLEABLE_ANALYTIC_EVENT)
?.toAnalyticEvent()

if (analyticEvent != null) {
analytic.report(analyticEvent)
}
}
}
Loading

0 comments on commit a6a49ec

Please sign in to comment.