Skip to content

Commit f1dfbd9

Browse files
committed
RUM-16664: Replace viewTrackingStrategy type checks with ReplayableViewTrackingStrategy
1 parent 5a6267f commit f1dfbd9

3 files changed

Lines changed: 49 additions & 2 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
7+
package com.datadog.android.rum.internal.tracking
8+
9+
import android.app.Activity
10+
11+
/**
12+
* Opt-in interface for [com.datadog.android.rum.tracking.ViewTrackingStrategy] implementations
13+
* that can handle the late-init scenario: the RUM SDK initialised after the first Activity had
14+
* already started (e.g. a cross-platform bridge delay), so the normal lifecycle callbacks were
15+
* never delivered for that Activity.
16+
*
17+
* Implementing this interface lets [com.datadog.android.rum.internal.RumFeature] replay the
18+
* relevant lifecycle event without coupling to concrete strategy types.
19+
*/
20+
internal interface ReplayableViewTrackingStrategy {
21+
/**
22+
* Called when the SDK initialises after [activity] has already started/resumed and no RUM
23+
* view has been opened for it yet. Implementations should start a view as if the normal
24+
* lifecycle callback had fired.
25+
*/
26+
fun onLateActivityReady(activity: Activity)
27+
}

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/tracking/ActivityViewTrackingStrategy.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import com.datadog.android.internal.attributes.ViewScopeInstrumentationType
1616
import com.datadog.android.internal.attributes.enrichWithConstantAttribute
1717
import com.datadog.android.rum.GlobalRumMonitor
1818
import com.datadog.android.rum.RumMonitor
19+
import com.datadog.android.rum.internal.tracking.ReplayableViewTrackingStrategy
1920
import com.datadog.android.rum.internal.utils.resolveViewName
2021
import com.datadog.android.rum.internal.utils.runIfValid
2122
import java.util.concurrent.ScheduledExecutorService
@@ -37,7 +38,8 @@ constructor(
3738
internal val componentPredicate: ComponentPredicate<Activity> = AcceptAllActivities()
3839
) :
3940
ActivityLifecycleTrackingStrategy(),
40-
ViewTrackingStrategy {
41+
ViewTrackingStrategy,
42+
ReplayableViewTrackingStrategy {
4143

4244
private val executor: ScheduledExecutorService by lazy {
4345
sdkCore.createScheduledExecutorService(
@@ -83,6 +85,14 @@ constructor(
8385

8486
// endregion
8587

88+
// region ReplayableViewTrackingStrategy
89+
90+
override fun onLateActivityReady(activity: Activity) {
91+
onActivityResumed(activity)
92+
}
93+
94+
// endregion
95+
8696
// region Object
8797

8898
override fun equals(other: Any?): Boolean {

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/tracking/NavigationViewTrackingStrategy.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import com.datadog.android.rum.GlobalRumMonitor
2323
import com.datadog.android.rum.NoOpRumMonitor
2424
import com.datadog.android.rum.internal.RumFeature
2525
import com.datadog.android.rum.internal.tracking.AndroidXFragmentLifecycleCallbacks
26+
import com.datadog.android.rum.internal.tracking.ReplayableViewTrackingStrategy
2627
import com.datadog.android.rum.internal.utils.resolveViewName
2728
import com.datadog.android.rum.internal.utils.runIfValid
2829
import java.util.WeakHashMap
@@ -42,7 +43,8 @@ class NavigationViewTrackingStrategy(
4243
) :
4344
ActivityLifecycleTrackingStrategy(),
4445
ViewTrackingStrategy,
45-
NavController.OnDestinationChangedListener {
46+
NavController.OnDestinationChangedListener,
47+
ReplayableViewTrackingStrategy {
4648

4749
private var startedActivity: Activity? = null
4850

@@ -87,6 +89,14 @@ class NavigationViewTrackingStrategy(
8789

8890
// endregion
8991

92+
// region ReplayableViewTrackingStrategy
93+
94+
override fun onLateActivityReady(activity: Activity) {
95+
onActivityStarted(activity)
96+
}
97+
98+
// endregion
99+
90100
// region OnDestinationChangedListener
91101

92102
override fun onDestinationChanged(

0 commit comments

Comments
 (0)