Skip to content

Commit

Permalink
Apply review suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
ivan-magda committed Oct 16, 2023
1 parent 2a59e9f commit 971ecb1
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ AppsFlyerManager: successfully logged event = \(name) with result = \(String(des
}
)
}

func setScreenOrientation(screenOrientation: ScreenOrientation) {}

func setAppTrackingTransparencyAuthorizationStatus(isAuthorized: Bool) {}
}

// MARK: - NotificationCenter -
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,55 +6,35 @@ import org.hyperskill.app.analytic.domain.model.Analytic
import org.hyperskill.app.analytic.domain.model.AnalyticEngine
import org.hyperskill.app.analytic.domain.model.AnalyticEvent
import org.hyperskill.app.analytic.domain.model.AnalyticEventMonitor
import org.hyperskill.app.analytic.domain.model.AnalyticSource
import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticEngine
import org.hyperskill.app.core.domain.model.ScreenOrientation

class AnalyticInteractor(
analyticEngines: List<AnalyticEngine>,
private val analyticEngines: List<AnalyticEngine>,
override val eventMonitor: AnalyticEventMonitor?
) : Analytic {
private val hyperskillAnalyticEngine: AnalyticEngine =
analyticEngines.first { it.targetSource == AnalyticSource.HYPERSKILL_API }

private val appsFlyerAnalyticEngine: AnalyticEngine? =
analyticEngines.firstOrNull { it.targetSource == AnalyticSource.APPS_FLYER }

override fun reportEvent(event: AnalyticEvent, forceReportEvent: Boolean) {
MainScope().launch {
logEvent(event, forceReportEvent)
}
}

override suspend fun flushEvents() {
hyperskillAnalyticEngine.flushEvents()
appsFlyerAnalyticEngine?.flushEvents()

analyticEngines.forEach { it.flushEvents() }
eventMonitor?.analyticDidFlushEvents()
}

suspend fun logEvent(event: AnalyticEvent, forceLogEvent: Boolean = false) {
when (event.source) {
AnalyticSource.HYPERSKILL_API -> {
hyperskillAnalyticEngine.reportEvent(event, force = forceLogEvent)
}
AnalyticSource.APPS_FLYER -> {
appsFlyerAnalyticEngine?.reportEvent(event, force = forceLogEvent)
}
}
analyticEngines
.filter { it.targetSource == event.source }
.forEach { it.reportEvent(event, forceLogEvent) }
eventMonitor?.analyticDidReportEvent(event)
}

override fun setScreenOrientation(screenOrientation: ScreenOrientation) {
// TODO: Find a better way for providing ScreenOrientation
if (hyperskillAnalyticEngine is HyperskillAnalyticEngine) {
hyperskillAnalyticEngine.setScreenOrientation(screenOrientation)
}
analyticEngines.forEach { it.setScreenOrientation(screenOrientation) }
}

override fun setAppTrackingTransparencyAuthorizationStatus(isAuthorized: Boolean) {
if (hyperskillAnalyticEngine is HyperskillAnalyticEngine) {
hyperskillAnalyticEngine.setAppTrackingTransparencyAuthorizationStatus(isAuthorized = isAuthorized)
}
analyticEngines.forEach { it.setAppTrackingTransparencyAuthorizationStatus(isAuthorized) }
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package org.hyperskill.app.analytic.domain.model

import org.hyperskill.app.core.domain.model.ScreenOrientation

interface AnalyticEngine {
val targetSource: AnalyticSource

suspend fun reportEvent(event: AnalyticEvent, force: Boolean = false)
suspend fun flushEvents()

fun setScreenOrientation(screenOrientation: ScreenOrientation)
fun setAppTrackingTransparencyAuthorizationStatus(isAuthorized: Boolean)
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,7 @@ import org.hyperskill.app.notification.local.domain.interactor.NotificationInter
import org.hyperskill.app.profile.domain.model.Profile
import org.hyperskill.app.profile.domain.repository.CurrentProfileStateRepository

interface HyperskillAnalyticEngine : AnalyticEngine {
fun setScreenOrientation(screenOrientation: ScreenOrientation)
fun setAppTrackingTransparencyAuthorizationStatus(isAuthorized: Boolean)
}
interface HyperskillAnalyticEngine : AnalyticEngine

internal class HyperskillAnalyticEngineImpl(
private val authInteractor: AuthInteractor,
Expand Down

0 comments on commit 971ecb1

Please sign in to comment.