Skip to content

Commit c5f87c4

Browse files
authored
Remove runtime dep on androidx fragment navigiation from modules that don't strictly need it (#961)
* Remove runtime dep on androidx fragment navigiation * Make ScreenNameExtractor class agnostic
1 parent 728f004 commit c5f87c4

8 files changed

Lines changed: 71 additions & 71 deletions

File tree

gradle/libs.versions.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ kotlin = "2.1.20"
1313
androidPlugin = "8.9.2"
1414
junitKtx = "1.2.1"
1515
autoService = "1.1.1"
16+
androidx-navigation = "2.7.7"
1617

1718
[libraries]
1819
opentelemetry-platform-alpha = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha", version.ref = "opentelemetry-instrumentation-alpha" }
1920
opentelemetry-platform = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom" }
20-
androidx-navigation-fragment = "androidx.navigation:navigation-fragment:2.7.7"
21+
androidx-navigation-fragment = { group = "androidx.navigation", name = "navigation-fragment", version.ref = "androidx-navigation"}
22+
androidx-navigation-runtime-ktx = { group = "androidx.navigation", name = "navigation-runtime-ktx", version.ref = "androidx-navigation" }
2123
androidx-core = "androidx.core:core:1.16.0"
2224
androidx-annotation = "androidx.annotation:annotation:1.9.1"
2325
androidx-lifecycle-process = "androidx.lifecycle:lifecycle-process:2.8.7"

instrumentation/activity/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ dependencies {
2323
implementation(project(":common"))
2424
implementation(libs.opentelemetry.sdk)
2525
implementation(libs.androidx.core)
26-
implementation(libs.androidx.navigation.fragment)
2726
implementation(libs.opentelemetry.instrumentation.api)
2827
testImplementation(libs.robolectric)
2928
}

instrumentation/common-api/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ dependencies {
1717
implementation(project(":common"))
1818
api(platform(libs.opentelemetry.platform.alpha))
1919
api(libs.opentelemetry.api)
20-
implementation(libs.androidx.navigation.fragment)
2120
implementation(libs.opentelemetry.sdk)
2221
implementation(libs.opentelemetry.instrumentation.api)
2322
}

instrumentation/common-api/src/main/java/io/opentelemetry/android/instrumentation/common/ScreenNameExtractor.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,17 @@
55

66
package io.opentelemetry.android.instrumentation.common;
77

8-
import android.app.Activity;
9-
import androidx.fragment.app.Fragment;
108
import io.opentelemetry.android.instrumentation.annotations.RumScreenName;
119

1210
public interface ScreenNameExtractor {
1311

14-
String extract(Activity activity);
15-
16-
String extract(Fragment fragment);
12+
String extract(Object instance);
1713

1814
ScreenNameExtractor DEFAULT =
1915
new ScreenNameExtractor() {
2016
@Override
21-
public String extract(Activity activity) {
22-
return useAnnotationOrClassName(activity.getClass());
23-
}
24-
25-
@Override
26-
public String extract(Fragment fragment) {
27-
return useAnnotationOrClassName(fragment.getClass());
17+
public String extract(Object instance) {
18+
return useAnnotationOrClassName(instance.getClass());
2819
}
2920

3021
private String useAnnotationOrClassName(Class<?> clazz) {

instrumentation/common-api/src/test/java/io/opentelemetry/android/instrumentation/common/ScreenNameExtractorTest.java

Lines changed: 0 additions & 50 deletions
This file was deleted.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.android.instrumentation.common
7+
8+
import android.app.Activity
9+
import android.app.Fragment
10+
import io.opentelemetry.android.instrumentation.annotations.RumScreenName
11+
import org.junit.jupiter.api.Assertions
12+
import org.junit.jupiter.api.Test
13+
14+
internal class ScreenNameExtractorTest {
15+
@Test
16+
fun testActivity() {
17+
val activity = Activity()
18+
val name = ScreenNameExtractor.DEFAULT.extract(activity)
19+
Assertions.assertEquals("Activity", name)
20+
}
21+
22+
@Test
23+
fun testFragment() {
24+
val fragment = Fragment()
25+
val name = ScreenNameExtractor.DEFAULT.extract(fragment)
26+
Assertions.assertEquals("Fragment", name)
27+
}
28+
29+
@Test
30+
fun testObject() {
31+
val obj = Object()
32+
val name = ScreenNameExtractor.DEFAULT.extract(obj)
33+
Assertions.assertEquals("Object", name)
34+
}
35+
36+
@Test
37+
fun testAnnotatedActivity() {
38+
val activity: Activity = AnnotatedActivity()
39+
val name = ScreenNameExtractor.DEFAULT.extract(activity)
40+
Assertions.assertEquals("squarely", name)
41+
}
42+
43+
@Test
44+
fun testAnnotatedObject() {
45+
val obj = AnnotatedObject()
46+
val name = ScreenNameExtractor.DEFAULT.extract(obj)
47+
Assertions.assertEquals("woohoo", name)
48+
}
49+
50+
@RumScreenName("bumpity")
51+
private class AnnotatedFragment : Fragment()
52+
53+
@RumScreenName("squarely")
54+
private class AnnotatedActivity : Activity()
55+
56+
@RumScreenName("woohoo")
57+
private class AnnotatedObject
58+
}

services/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ dependencies {
1717
implementation(project(":common"))
1818

1919
implementation(libs.androidx.core)
20-
implementation(libs.androidx.navigation.fragment)
20+
implementation(libs.androidx.navigation.runtime.ktx)
2121
implementation(libs.androidx.lifecycle.process)
2222
implementation(libs.androidx.preference.ktx)
2323

2424
testImplementation(libs.androidx.test.core)
2525
testImplementation(libs.robolectric)
26+
testImplementation(libs.androidx.navigation.fragment)
2627
}

services/src/main/java/io/opentelemetry/android/internal/services/visiblescreen/VisibleScreenTracker.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import android.app.Application
1010
import android.os.Build
1111
import androidx.fragment.app.DialogFragment
1212
import androidx.fragment.app.Fragment
13-
import androidx.navigation.fragment.NavHostFragment
13+
import androidx.navigation.NavHost
1414
import io.opentelemetry.android.internal.services.visiblescreen.activities.Pre29VisibleScreenLifecycleBinding
1515
import io.opentelemetry.android.internal.services.visiblescreen.activities.VisibleScreenLifecycleBinding
1616
import io.opentelemetry.android.internal.services.visiblescreen.fragments.RumFragmentActivityRegisterer
@@ -92,8 +92,8 @@ class VisibleScreenTracker internal constructor(
9292
}
9393

9494
fun fragmentResumed(fragment: Fragment) {
95-
// skip the NavHostFragment since it's never really "visible" by itself.
96-
if (fragment is NavHostFragment) {
95+
// skip the Fragment if it's a NavHost since it's never really "visible" by itself.
96+
if (fragment is NavHost) {
9797
return
9898
}
9999

@@ -104,8 +104,8 @@ class VisibleScreenTracker internal constructor(
104104
}
105105

106106
fun fragmentPaused(fragment: Fragment) {
107-
// skip the NavHostFragment since it's never really "visible" by itself.
108-
if (fragment is NavHostFragment) {
107+
// skip the Fragment if it's a NavHost since it's never really "visible" by itself.
108+
if (fragment is NavHost) {
109109
return
110110
}
111111
if (fragment is DialogFragment) {

0 commit comments

Comments
 (0)