File tree Expand file tree Collapse file tree
features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change @@ -16,6 +16,7 @@ import com.datadog.android.internal.attributes.ViewScopeInstrumentationType
1616import com.datadog.android.internal.attributes.enrichWithConstantAttribute
1717import com.datadog.android.rum.GlobalRumMonitor
1818import com.datadog.android.rum.RumMonitor
19+ import com.datadog.android.rum.internal.tracking.ReplayableViewTrackingStrategy
1920import com.datadog.android.rum.internal.utils.resolveViewName
2021import com.datadog.android.rum.internal.utils.runIfValid
2122import 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 {
Original file line number Diff line number Diff line change @@ -23,6 +23,7 @@ import com.datadog.android.rum.GlobalRumMonitor
2323import com.datadog.android.rum.NoOpRumMonitor
2424import com.datadog.android.rum.internal.RumFeature
2525import com.datadog.android.rum.internal.tracking.AndroidXFragmentLifecycleCallbacks
26+ import com.datadog.android.rum.internal.tracking.ReplayableViewTrackingStrategy
2627import com.datadog.android.rum.internal.utils.resolveViewName
2728import com.datadog.android.rum.internal.utils.runIfValid
2829import 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 (
You can’t perform that action at this time.
0 commit comments