From e95174f897bbc2dbfa0fa91f2b8765a20dc9edc9 Mon Sep 17 00:00:00 2001 From: Abhay Sood Date: Tue, 24 Dec 2024 18:51:18 +0530 Subject: [PATCH] feat(android): remove deprecated navigation event --- android/measure/api/measure.api | 3 -- .../main/java/sh/measure/android/Measure.kt | 37 ------------------- .../sh/measure/android/MeasureInternal.kt | 5 --- .../sh/measure/android/events/EventType.kt | 3 -- .../events/UserTriggeredEventCollector.kt | 19 ---------- .../android/storage/EventExtensions.kt | 5 --- .../android/events/SignalProcessorTest.kt | 4 +- .../UserTriggeredEventCollectorImplTest.kt | 19 +++------- .../java/sh/measure/android/fakes/TestData.kt | 9 ----- .../android/storage/EventExtensionsKtTest.kt | 3 -- docs/android/README.md | 2 +- docs/api/sdk/README.md | 4 ++ 12 files changed, 13 insertions(+), 100 deletions(-) diff --git a/android/measure/api/measure.api b/android/measure/api/measure.api index d251e7899..0f6815af1 100644 --- a/android/measure/api/measure.api +++ b/android/measure/api/measure.api @@ -26,9 +26,6 @@ public final class sh/measure/android/Measure { public final fun trackEvent (Ljava/lang/String;Ljava/util/Map;Ljava/lang/Long;)V public static synthetic fun trackEvent$default (Lsh/measure/android/Measure;Ljava/lang/String;Ljava/util/Map;Ljava/lang/Long;ILjava/lang/Object;)V public static final fun trackHandledException (Ljava/lang/Throwable;)V - public static final fun trackNavigation (Ljava/lang/String;)V - public static final fun trackNavigation (Ljava/lang/String;Ljava/lang/String;)V - public static synthetic fun trackNavigation$default (Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V public static final fun trackScreenView (Ljava/lang/String;)V } diff --git a/android/measure/src/main/java/sh/measure/android/Measure.kt b/android/measure/src/main/java/sh/measure/android/Measure.kt index f2847171d..7bb46aebd 100644 --- a/android/measure/src/main/java/sh/measure/android/Measure.kt +++ b/android/measure/src/main/java/sh/measure/android/Measure.kt @@ -120,43 +120,6 @@ object Measure { } } - /** - * Track a navigation event. - * - * Navigation events are important to understand user journey in the app. Measure SDK - * automatically collects navigation events from - * [Jetpack Navigation library](https://developer.android.com/jetpack/androidx/releases/navigation) - * along with Activity and Fragment lifecycle events. But if your app uses a custom navigation - * system, you can use this method to track navigation events to have more context when - * debugging issues. - * - * For more details on the automatically collected events, check the documentation. - * - * It is recommended to use consistent naming conventions for screen names and namespacing - * them with relevant context to make it easier to understand the user journey on the Measure - * Dashboard. - * - * Example usage: - * - * ```kotlin - * Measure.trackNavigation("Home", "Login") - * ``` - * - * @param to The name of the destination screen or location. - * @param from The name of the source screen or location. Null by default. - */ - @JvmStatic - @JvmOverloads - @Deprecated( - message = "This method will be removed in the next version, use trackScreenView instead", - replaceWith = ReplaceWith("Measure.trackScreenView(screenName)"), - ) - fun trackNavigation(to: String, from: String? = null) { - if (isInitialized.get()) { - measure.trackNavigation(to, from) - } - } - /** * Call when a screen is viewed by the user. * diff --git a/android/measure/src/main/java/sh/measure/android/MeasureInternal.kt b/android/measure/src/main/java/sh/measure/android/MeasureInternal.kt index 55872f6f1..449c38cca 100644 --- a/android/measure/src/main/java/sh/measure/android/MeasureInternal.kt +++ b/android/measure/src/main/java/sh/measure/android/MeasureInternal.kt @@ -167,11 +167,6 @@ internal class MeasureInternal(measureInitializer: MeasureInitializer) : AppLife userAttributeProcessor.clearUserId() } - @Deprecated("Use trackScreenView instead") - fun trackNavigation(to: String, from: String?) { - userTriggeredEventCollector.trackNavigation(to, from) - } - fun trackScreenView(screenName: String) { userTriggeredEventCollector.trackScreenView(screenName) } diff --git a/android/measure/src/main/java/sh/measure/android/events/EventType.kt b/android/measure/src/main/java/sh/measure/android/events/EventType.kt index 89815b1d0..01657a105 100644 --- a/android/measure/src/main/java/sh/measure/android/events/EventType.kt +++ b/android/measure/src/main/java/sh/measure/android/events/EventType.kt @@ -19,9 +19,6 @@ internal object EventType { const val MEMORY_USAGE: String = "memory_usage" const val TRIM_MEMORY: String = "trim_memory" const val CPU_USAGE: String = "cpu_usage" - - @Deprecated("This event type is deprecated and will be removed in the next version. Use SCREEN_VIEW instead.") - const val NAVIGATION: String = "navigation" const val SCREEN_VIEW: String = "screen_view" const val CUSTOM: String = "custom" } diff --git a/android/measure/src/main/java/sh/measure/android/events/UserTriggeredEventCollector.kt b/android/measure/src/main/java/sh/measure/android/events/UserTriggeredEventCollector.kt index 0264b5496..bada9c4fa 100644 --- a/android/measure/src/main/java/sh/measure/android/events/UserTriggeredEventCollector.kt +++ b/android/measure/src/main/java/sh/measure/android/events/UserTriggeredEventCollector.kt @@ -1,15 +1,12 @@ package sh.measure.android.events import sh.measure.android.exceptions.ExceptionFactory -import sh.measure.android.navigation.NavigationData import sh.measure.android.navigation.ScreenViewData import sh.measure.android.utils.ProcessInfoProvider import sh.measure.android.utils.TimeProvider import java.util.concurrent.atomic.AtomicBoolean internal interface UserTriggeredEventCollector { - @Deprecated("Use trackScreenView instead") - fun trackNavigation(to: String, from: String?) fun trackHandledException(throwable: Throwable) fun trackScreenView(screenName: String) fun register() @@ -31,22 +28,6 @@ internal class UserTriggeredEventCollectorImpl( enabled.compareAndSet(true, false) } - @Deprecated("Use trackScreenView instead") - override fun trackNavigation(to: String, from: String?) { - if (!enabled.get()) { - return - } - signalProcessor.trackUserTriggered( - data = NavigationData( - to = to, - from = from, - source = null, - ), - timestamp = timeProvider.now(), - type = EventType.NAVIGATION, - ) - } - override fun trackHandledException(throwable: Throwable) { if (!enabled.get()) { return diff --git a/android/measure/src/main/java/sh/measure/android/storage/EventExtensions.kt b/android/measure/src/main/java/sh/measure/android/storage/EventExtensions.kt index b7a9a5888..dd2f6f2b4 100644 --- a/android/measure/src/main/java/sh/measure/android/storage/EventExtensions.kt +++ b/android/measure/src/main/java/sh/measure/android/storage/EventExtensions.kt @@ -22,7 +22,6 @@ import sh.measure.android.gestures.ScrollData import sh.measure.android.lifecycle.ActivityLifecycleData import sh.measure.android.lifecycle.ApplicationLifecycleData import sh.measure.android.lifecycle.FragmentLifecycleData -import sh.measure.android.navigation.NavigationData import sh.measure.android.navigation.ScreenViewData import sh.measure.android.networkchange.NetworkChangeData import sh.measure.android.okhttp.HttpData @@ -149,10 +148,6 @@ internal fun Event.serializeDataToString(): String { json.encodeToString(CpuUsageData.serializer(), data as CpuUsageData) } - EventType.NAVIGATION -> { - json.encodeToString(NavigationData.serializer(), data as NavigationData) - } - EventType.CUSTOM -> { json.encodeToString(CustomEventData.serializer(), data as CustomEventData) } diff --git a/android/measure/src/test/java/sh/measure/android/events/SignalProcessorTest.kt b/android/measure/src/test/java/sh/measure/android/events/SignalProcessorTest.kt index fbda5be57..db6e4d5b7 100644 --- a/android/measure/src/test/java/sh/measure/android/events/SignalProcessorTest.kt +++ b/android/measure/src/test/java/sh/measure/android/events/SignalProcessorTest.kt @@ -388,9 +388,9 @@ internal class SignalProcessorTest { @Test fun `given a user triggered event, then stores the event`() { - val data = TestData.getNavigationData() + val data = TestData.getScreenViewData() val timestamp = 1710746412L - val eventType = EventType.NAVIGATION + val eventType = EventType.SCREEN_VIEW val expectedEvent = data.toEvent( type = eventType, timestamp = timestamp.iso8601Timestamp(), diff --git a/android/measure/src/test/java/sh/measure/android/events/UserTriggeredEventCollectorImplTest.kt b/android/measure/src/test/java/sh/measure/android/events/UserTriggeredEventCollectorImplTest.kt index f0f7f6b76..c2b932974 100644 --- a/android/measure/src/test/java/sh/measure/android/events/UserTriggeredEventCollectorImplTest.kt +++ b/android/measure/src/test/java/sh/measure/android/events/UserTriggeredEventCollectorImplTest.kt @@ -8,7 +8,7 @@ import org.mockito.kotlin.verify import sh.measure.android.exceptions.ExceptionData import sh.measure.android.fakes.FakeProcessInfoProvider import sh.measure.android.fakes.TestData -import sh.measure.android.navigation.NavigationData +import sh.measure.android.navigation.ScreenViewData import sh.measure.android.utils.AndroidTimeProvider import sh.measure.android.utils.ProcessInfoProvider import sh.measure.android.utils.TestClock @@ -25,18 +25,13 @@ class UserTriggeredEventCollectorImplTest { ) @Test - fun `tracks navigation event`() { - val from = "from" - val to = "to" + fun `tracks screen view event`() { + val screenName = "screen-name" userTriggeredEventCollector.register() - userTriggeredEventCollector.trackNavigation(to, from) + userTriggeredEventCollector.trackScreenView(screenName) verify(signalProcessor).trackUserTriggered( - data = NavigationData( - source = null, - from = from, - to = to, - ), - type = EventType.NAVIGATION, + data = ScreenViewData(name = screenName), + type = EventType.SCREEN_VIEW, timestamp = timeProvider.now(), ) } @@ -58,8 +53,6 @@ class UserTriggeredEventCollectorImplTest { @Test fun `disables collection un unregistered`() { val exception = Exception() - val data = TestData.getExceptionData(handled = true, exception = exception) - userTriggeredEventCollector.unregister() userTriggeredEventCollector.trackHandledException(exception) verify(signalProcessor, never()).trackUserTriggered( diff --git a/android/measure/src/test/java/sh/measure/android/fakes/TestData.kt b/android/measure/src/test/java/sh/measure/android/fakes/TestData.kt index 24530e8ea..675a6a2f6 100644 --- a/android/measure/src/test/java/sh/measure/android/fakes/TestData.kt +++ b/android/measure/src/test/java/sh/measure/android/fakes/TestData.kt @@ -22,7 +22,6 @@ import sh.measure.android.lifecycle.ApplicationLifecycleData import sh.measure.android.lifecycle.FragmentLifecycleData import sh.measure.android.lifecycle.FragmentLifecycleType import sh.measure.android.logger.Logger -import sh.measure.android.navigation.NavigationData import sh.measure.android.navigation.ScreenViewData import sh.measure.android.networkchange.NetworkChangeData import sh.measure.android.networkchange.NetworkGeneration @@ -281,14 +280,6 @@ internal object TestData { return TrimMemoryData(level) } - fun getNavigationData( - source: String? = "source", - to: String = "profile", - from: String = "home", - ): NavigationData { - return NavigationData(source = source, from = from, to = to) - } - fun getCpuUsageData( numCores: Int = 4, clockSpeed: Long = 10, diff --git a/android/measure/src/test/java/sh/measure/android/storage/EventExtensionsKtTest.kt b/android/measure/src/test/java/sh/measure/android/storage/EventExtensionsKtTest.kt index 941e2f283..257845bac 100644 --- a/android/measure/src/test/java/sh/measure/android/storage/EventExtensionsKtTest.kt +++ b/android/measure/src/test/java/sh/measure/android/storage/EventExtensionsKtTest.kt @@ -86,9 +86,6 @@ class EventExtensionsKtTest { val cpuUsageEvent = TestData.getCpuUsageData().toEvent(type = EventType.CPU_USAGE) assert(cpuUsageEvent.serializeDataToString().isNotEmpty()) - val navigationEvent = TestData.getNavigationData().toEvent(type = EventType.NAVIGATION) - assert(navigationEvent.serializeDataToString().isNotEmpty()) - val screenViewEvent = TestData.getScreenViewData().toEvent(type = EventType.SCREEN_VIEW) assert(screenViewEvent.serializeDataToString().isNotEmpty()) } diff --git a/docs/android/README.md b/docs/android/README.md index f247a5397..91ad0868e 100644 --- a/docs/android/README.md +++ b/docs/android/README.md @@ -5,7 +5,7 @@ * [Getting started](#getting-started) * [Custom events](#custom-events) * [Handled exceptions](#handled-exceptions) - * [Navigation](#navigation) + * [Screen view](#screen-view) * [Features](#features) * [Performance Impact](#performance-impact) * [Benchmarks](#benchmarks) diff --git a/docs/api/sdk/README.md b/docs/api/sdk/README.md index f86e4b9c0..8ae17ba64 100644 --- a/docs/api/sdk/README.md +++ b/docs/api/sdk/README.md @@ -785,6 +785,10 @@ Use the `trim_memory` type for a trim memory event raised by Android. Use the `navigation` type for navigation events. +> ![IMPORTANT] +> This event is no longer tracked and will be removed in future versions. +> Android SDK removed support for this event from v0.9.0 onwards. + | Field | Type | Optional | Description | | ------ | ------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | source | string | Yes | Adds context on how the event was collected. Null if not set.
Example: `androidx_navigation` if the event was collected from `androidx.navigation` library. |