Skip to content

Commit b35d6a9

Browse files
committed
Migrate up next events to Event Horizon
1 parent 595b477 commit b35d6a9

File tree

12 files changed

+189
-130
lines changed

12 files changed

+189
-130
lines changed

app/src/main/java/au/com/shiftyjelly/pocketcasts/ui/MainActivity.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingActivity
5555
import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingActivityContract
5656
import au.com.shiftyjelly.pocketcasts.account.onboarding.OnboardingActivityContract.OnboardingFinish
5757
import au.com.shiftyjelly.pocketcasts.account.watchsync.WatchSync
58-
import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsEvent
5958
import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsTracker
6059
import au.com.shiftyjelly.pocketcasts.analytics.EpisodeAnalytics
6160
import au.com.shiftyjelly.pocketcasts.analytics.SourceView
@@ -198,6 +197,8 @@ import com.automattic.eventhorizon.EventHorizon
198197
import com.automattic.eventhorizon.FiltersTabOpenedEvent
199198
import com.automattic.eventhorizon.PodcastsTabOpenedEvent
200199
import com.automattic.eventhorizon.ProfileTabOpenedEvent
200+
import com.automattic.eventhorizon.UpNextDismissedEvent
201+
import com.automattic.eventhorizon.UpNextShownEvent
201202
import com.automattic.eventhorizon.UpNextTabOpenedEvent
202203
import com.google.android.material.bottomsheet.BottomSheetBehavior
203204
import com.google.android.material.snackbar.Snackbar
@@ -906,14 +907,18 @@ class MainActivity :
906907
podcastManager = podcastManager,
907908
episodeManager = episodeManager,
908909
fragmentManager = supportFragmentManager,
909-
analyticsTracker = analyticsTracker,
910+
eventHorizon = eventHorizon,
910911
episodeAnalytics = episodeAnalytics,
911912
settings = settings,
912913
).show(this)
913914
}
914915

915916
private fun showUpNextFragment(source: UpNextSource) {
916-
analyticsTracker.track(AnalyticsEvent.UP_NEXT_SHOWN, mapOf(SOURCE_KEY to source.analyticsValue))
917+
eventHorizon.track(
918+
UpNextShownEvent(
919+
source = source.eventHorizonValue,
920+
),
921+
)
917922
showBottomSheet(UpNextFragment.newInstance(source = source))
918923
}
919924

@@ -1128,7 +1133,7 @@ class MainActivity :
11281133
settings.updatePlayerOrUpNextBottomSheetState(newState)
11291134
if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
11301135
if (bottomSheetTag == UpNextFragment::class.java.name) {
1131-
analyticsTracker.track(AnalyticsEvent.UP_NEXT_DISMISSED)
1136+
eventHorizon.track(UpNextDismissedEvent)
11321137
}
11331138
supportFragmentManager.findFragmentByTag(bottomSheetTag)?.let {
11341139
removeBottomSheetFragment(it)

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ compose-webview = "io.github.kevinnzou:compose-webview:0.33.6"
281281
desugar-jdk = "com.android.tools:desugar_jdk_libs:2.1.5"
282282
device-names = "com.jaredrummler:android-device-names:2.1.1"
283283
encryptedlogging = "com.automattic:encryptedlogging:1.1.1"
284-
eventhorizon = "com.automattic:eventhorizon:pocket-casts-1ad1c1e10ce653841ecae96e6df1f9af7f7ea593"
284+
eventhorizon = "com.automattic:eventhorizon:pocket-casts-307016d85d064ca163542173f03157c6a947a081"
285285
engage = "com.google.android.engage:engage-core:1.5.11"
286286
flexbox = "com.google.android.flexbox:flexbox:3.0.0"
287287
guava = "com.google.guava:guava:33.5.0-android" # Required to fix conflict between versions in exoplayer and workmanager

modules/features/player/src/main/java/au/com/shiftyjelly/pocketcasts/player/view/PlayerContainerFragment.kt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import androidx.lifecycle.lifecycleScope
2020
import androidx.lifecycle.repeatOnLifecycle
2121
import androidx.viewpager2.adapter.FragmentStateAdapter
2222
import androidx.viewpager2.widget.ViewPager2
23-
import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsEvent
2423
import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsTracker
2524
import au.com.shiftyjelly.pocketcasts.analytics.SourceView
2625
import au.com.shiftyjelly.pocketcasts.compose.PlayerColors
@@ -46,6 +45,8 @@ import au.com.shiftyjelly.pocketcasts.views.helper.OffsettingBottomSheetCallback
4645
import com.automattic.eventhorizon.EventHorizon
4746
import com.automattic.eventhorizon.PlayerTabSelectedEvent
4847
import com.automattic.eventhorizon.PlayerTabType
48+
import com.automattic.eventhorizon.UpNextDismissedEvent
49+
import com.automattic.eventhorizon.UpNextShownEvent
4950
import com.google.android.material.bottomsheet.BottomSheetBehavior
5051
import com.google.android.material.tabs.TabLayoutMediator
5152
import dagger.hilt.android.AndroidEntryPoint
@@ -149,7 +150,11 @@ class PlayerContainerFragment :
149150
notifyBackstackChangedToHost()
150151

151152
if (newState == BottomSheetBehavior.STATE_EXPANDED) {
152-
analyticsTracker.track(AnalyticsEvent.UP_NEXT_SHOWN, mapOf(SOURCE_KEY to UpNextSource.NOW_PLAYING.analyticsValue))
153+
eventHorizon.track(
154+
UpNextShownEvent(
155+
source = UpNextSource.NOW_PLAYING.eventHorizonValue,
156+
),
157+
)
153158

154159
activity?.let {
155160
theme.updateWindowNavigationBarColor(window = it.window, navigationBarColor = NavigationBarColor.UpNext(isFullScreen = true))
@@ -158,7 +163,7 @@ class PlayerContainerFragment :
158163

159164
upNextFragment.onExpanded()
160165
} else if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
161-
analyticsTracker.track(AnalyticsEvent.UP_NEXT_DISMISSED)
166+
eventHorizon.track(UpNextDismissedEvent)
162167

163168
(activity as? FragmentHostListener)?.updateSystemColors()
164169
upNextFragment.onCollapsed()
@@ -234,7 +239,11 @@ class PlayerContainerFragment :
234239
binding.countText.text = if (upNextCount == 0) "" else upNextCount.coerceAtMost(Settings.UP_NEXT_BADGE_MAX_COUNT).toString()
235240

236241
binding.upNextButton.setOnClickListener {
237-
analyticsTracker.track(AnalyticsEvent.UP_NEXT_SHOWN, mapOf(SOURCE_KEY to UpNextSource.PLAYER.analyticsValue))
242+
eventHorizon.track(
243+
UpNextShownEvent(
244+
source = UpNextSource.PLAYER.eventHorizonValue,
245+
),
246+
)
238247
openUpNext()
239248
}
240249
}

modules/features/player/src/main/java/au/com/shiftyjelly/pocketcasts/player/view/UpNextAdapter.kt

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ import androidx.fragment.app.FragmentManager
1717
import androidx.recyclerview.widget.DiffUtil
1818
import androidx.recyclerview.widget.ListAdapter
1919
import androidx.recyclerview.widget.RecyclerView
20-
import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsEvent
21-
import au.com.shiftyjelly.pocketcasts.analytics.AnalyticsTracker
2220
import au.com.shiftyjelly.pocketcasts.compose.AppTheme
2321
import au.com.shiftyjelly.pocketcasts.compose.extensions.setContentWithViewCompositionStrategy
2422
import au.com.shiftyjelly.pocketcasts.localization.helper.RelativeDateFormatter
@@ -57,6 +55,11 @@ import com.airbnb.lottie.LottieProperty
5755
import com.airbnb.lottie.SimpleColorFilter
5856
import com.airbnb.lottie.model.KeyPath
5957
import com.airbnb.lottie.value.LottieValueCallback
58+
import com.automattic.eventhorizon.EventHorizon
59+
import com.automattic.eventhorizon.UpNextNowPlayingTappedEvent
60+
import com.automattic.eventhorizon.UpNextQueueEpisodeLongPressedEvent
61+
import com.automattic.eventhorizon.UpNextQueueEpisodeTappedEvent
62+
import com.automattic.eventhorizon.UpNextShuffleEnabledEvent
6063
import com.google.android.material.snackbar.Snackbar
6164
import timber.log.Timber
6265
import au.com.shiftyjelly.pocketcasts.images.R as IR
@@ -68,7 +71,7 @@ class UpNextAdapter(
6871
val listener: UpNextListener,
6972
val multiSelectHelper: MultiSelectEpisodesHelper,
7073
val fragmentManager: FragmentManager,
71-
private val analyticsTracker: AnalyticsTracker,
74+
private val eventHorizon: EventHorizon,
7275
private val upNextSource: UpNextSource,
7376
private val settings: Settings,
7477
private val playbackManager: PlaybackManager,
@@ -115,7 +118,12 @@ class UpNextAdapter(
115118
} else {
116119
val podcastUuid = (episode as? PodcastEpisode)?.podcastUuid
117120
val playOnTap = settings.tapOnUpNextShouldPlay.value
118-
trackUpNextEvent(AnalyticsEvent.UP_NEXT_QUEUE_EPISODE_TAPPED, mapOf(WILL_PLAY_KEY to playOnTap))
121+
eventHorizon.track(
122+
UpNextQueueEpisodeTappedEvent(
123+
willPlay = playOnTap,
124+
source = upNextSource.eventHorizonValue,
125+
),
126+
)
119127
listener.onEpisodeActionsClick(episodeUuid = episode.uuid, podcastUuid = podcastUuid)
120128
}
121129
},
@@ -125,7 +133,12 @@ class UpNextAdapter(
125133
} else {
126134
val podcastUuid = (episode as? PodcastEpisode)?.podcastUuid
127135
val playOnLongPress = !settings.tapOnUpNextShouldPlay.value
128-
trackUpNextEvent(AnalyticsEvent.UP_NEXT_QUEUE_EPISODE_LONG_PRESSED, mapOf(WILL_PLAY_KEY to playOnLongPress))
136+
eventHorizon.track(
137+
UpNextQueueEpisodeLongPressedEvent(
138+
willPlay = playOnLongPress,
139+
source = upNextSource.eventHorizonValue,
140+
),
141+
)
129142
listener.onEpisodeActionsLongPress(episodeUuid = episode.uuid, podcastUuid = podcastUuid)
130143
}
131144
},
@@ -238,7 +251,12 @@ class UpNextAdapter(
238251
shuffle.setOnClickListener {
239252
if (isSignedInAsPaidUser) {
240253
val newValue = !settings.upNextShuffle.value
241-
analyticsTracker.track(AnalyticsEvent.UP_NEXT_SHUFFLE_ENABLED, mapOf("value" to newValue, SOURCE_KEY to upNextSource.analyticsValue))
254+
eventHorizon.track(
255+
UpNextShuffleEnabledEvent(
256+
value = newValue,
257+
source = upNextSource.eventHorizonValue,
258+
),
259+
)
242260

243261
if (newValue) {
244262
(root.context.getActivity() as? FragmentHostListener)?.snackBarView()?.let { snackBarView ->
@@ -302,7 +320,11 @@ class UpNextAdapter(
302320

303321
init {
304322
binding.root.setOnClickListener {
305-
trackUpNextEvent(AnalyticsEvent.UP_NEXT_NOW_PLAYING_TAPPED)
323+
eventHorizon.track(
324+
UpNextNowPlayingTappedEvent(
325+
source = upNextSource.eventHorizonValue,
326+
),
327+
)
306328
listener.onNowPlayingClick()
307329
}
308330
}
@@ -343,18 +365,6 @@ class UpNextAdapter(
343365
val callback = LottieValueCallback<ColorFilter>(filter)
344366
addValueCallback(keyPath, LottieProperty.COLOR_FILTER, callback)
345367
}
346-
347-
private fun trackUpNextEvent(event: AnalyticsEvent, props: Map<String, Any> = emptyMap()) {
348-
val properties = HashMap<String, Any>()
349-
properties[SOURCE_KEY] = upNextSource.analyticsValue
350-
properties.putAll(props)
351-
analyticsTracker.track(event, properties)
352-
}
353-
354-
companion object {
355-
private const val SOURCE_KEY = "source"
356-
private const val WILL_PLAY_KEY = "will_play"
357-
}
358368
}
359369

360370
data class UpNextPlaying(

0 commit comments

Comments
 (0)