Skip to content

Commit c5c9399

Browse files
refactor: create interface for services (#1201)
1 parent 9958120 commit c5c9399

File tree

24 files changed

+462
-375
lines changed

24 files changed

+462
-375
lines changed

core/src/main/java/io/opentelemetry/android/OpenTelemetryRumBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
import io.opentelemetry.android.internal.processors.GlobalAttributesLogRecordAppender;
3030
import io.opentelemetry.android.internal.processors.ScreenAttributesLogRecordProcessor;
3131
import io.opentelemetry.android.internal.processors.SessionIdLogRecordAppender;
32-
import io.opentelemetry.android.internal.services.CacheStorage;
3332
import io.opentelemetry.android.internal.services.Services;
3433
import io.opentelemetry.android.internal.services.network.CurrentNetworkProvider;
3534
import io.opentelemetry.android.internal.services.periodicwork.PeriodicWork;
35+
import io.opentelemetry.android.internal.services.storage.CacheStorage;
3636
import io.opentelemetry.android.session.SessionProvider;
3737
import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
3838
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;

core/src/main/java/io/opentelemetry/android/internal/features/persistence/DiskManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ package io.opentelemetry.android.internal.features.persistence
88
import android.util.Log
99
import io.opentelemetry.android.common.RumConstants
1010
import io.opentelemetry.android.features.diskbuffering.DiskBufferingConfig
11-
import io.opentelemetry.android.internal.services.CacheStorage
11+
import io.opentelemetry.android.internal.services.storage.CacheStorage
1212
import java.io.File
1313
import java.io.IOException
1414

core/src/test/java/io/opentelemetry/android/OpenTelemetryRumBuilderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@
3535
import io.opentelemetry.android.instrumentation.InstallationContext;
3636
import io.opentelemetry.android.instrumentation.internal.AndroidInstrumentationLoaderImpl;
3737
import io.opentelemetry.android.internal.initialization.InitializationEvents;
38-
import io.opentelemetry.android.internal.services.CacheStorage;
3938
import io.opentelemetry.android.internal.services.Services;
4039
import io.opentelemetry.android.internal.services.applifecycle.AppLifecycle;
40+
import io.opentelemetry.android.internal.services.storage.CacheStorage;
4141
import io.opentelemetry.android.internal.services.visiblescreen.VisibleScreenTracker;
4242
import io.opentelemetry.android.session.SessionProvider;
4343
import io.opentelemetry.api.common.Attributes;

core/src/test/java/io/opentelemetry/android/internal/features/persistence/DiskManagerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import io.mockk.every
1111
import io.mockk.impl.annotations.MockK
1212
import io.mockk.verify
1313
import io.opentelemetry.android.features.diskbuffering.DiskBufferingConfig
14-
import io.opentelemetry.android.internal.services.CacheStorage
14+
import io.opentelemetry.android.internal.services.storage.CacheStorage
1515
import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat
1616
import org.junit.jupiter.api.Assertions.assertTrue
1717
import org.junit.jupiter.api.BeforeEach

services/api/services.api

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
1-
public final class io/opentelemetry/android/internal/services/CacheStorage : io/opentelemetry/android/internal/services/Service {
2-
public fun <init> (Landroid/content/Context;)V
3-
public final fun getCacheDir ()Ljava/io/File;
4-
}
5-
61
public abstract interface class io/opentelemetry/android/internal/services/Service : java/io/Closeable {
72
public fun close ()V
83
}
94

10-
public final class io/opentelemetry/android/internal/services/Services : java/io/Closeable {
5+
public final class io/opentelemetry/android/internal/services/Services : io/opentelemetry/android/internal/services/ServicesFactory {
116
public static final field Companion Lio/opentelemetry/android/internal/services/Services$Companion;
127
public fun close ()V
138
public static final fun get (Landroid/app/Application;)Lio/opentelemetry/android/internal/services/Services;
14-
public final fun getAppLifecycle ()Lio/opentelemetry/android/internal/services/applifecycle/AppLifecycle;
15-
public final fun getCacheStorage ()Lio/opentelemetry/android/internal/services/CacheStorage;
16-
public final fun getCurrentNetworkProvider ()Lio/opentelemetry/android/internal/services/network/CurrentNetworkProvider;
17-
public final fun getPeriodicWork ()Lio/opentelemetry/android/internal/services/periodicwork/PeriodicWork;
18-
public final fun getVisibleScreenTracker ()Lio/opentelemetry/android/internal/services/visiblescreen/VisibleScreenTracker;
9+
public fun getAppLifecycle ()Lio/opentelemetry/android/internal/services/applifecycle/AppLifecycle;
10+
public fun getCacheStorage ()Lio/opentelemetry/android/internal/services/storage/CacheStorage;
11+
public fun getCurrentNetworkProvider ()Lio/opentelemetry/android/internal/services/network/CurrentNetworkProvider;
12+
public fun getPeriodicWork ()Lio/opentelemetry/android/internal/services/periodicwork/PeriodicWork;
13+
public fun getVisibleScreenTracker ()Lio/opentelemetry/android/internal/services/visiblescreen/VisibleScreenTracker;
1914
public static final fun set (Lio/opentelemetry/android/internal/services/Services;)V
2015
}
2116

@@ -24,9 +19,16 @@ public final class io/opentelemetry/android/internal/services/Services$Companion
2419
public final fun set (Lio/opentelemetry/android/internal/services/Services;)V
2520
}
2621

27-
public final class io/opentelemetry/android/internal/services/applifecycle/AppLifecycle : io/opentelemetry/android/internal/services/Service {
28-
public fun close ()V
29-
public final fun registerListener (Lio/opentelemetry/android/internal/services/applifecycle/ApplicationStateListener;)V
22+
public abstract interface class io/opentelemetry/android/internal/services/ServicesFactory : java/io/Closeable {
23+
public abstract fun getAppLifecycle ()Lio/opentelemetry/android/internal/services/applifecycle/AppLifecycle;
24+
public abstract fun getCacheStorage ()Lio/opentelemetry/android/internal/services/storage/CacheStorage;
25+
public abstract fun getCurrentNetworkProvider ()Lio/opentelemetry/android/internal/services/network/CurrentNetworkProvider;
26+
public abstract fun getPeriodicWork ()Lio/opentelemetry/android/internal/services/periodicwork/PeriodicWork;
27+
public abstract fun getVisibleScreenTracker ()Lio/opentelemetry/android/internal/services/visiblescreen/VisibleScreenTracker;
28+
}
29+
30+
public abstract interface class io/opentelemetry/android/internal/services/applifecycle/AppLifecycle : io/opentelemetry/android/internal/services/Service {
31+
public abstract fun registerListener (Lio/opentelemetry/android/internal/services/applifecycle/ApplicationStateListener;)V
3032
}
3133

3234
public abstract interface class io/opentelemetry/android/internal/services/applifecycle/ApplicationStateListener {
@@ -39,9 +41,19 @@ public class io/opentelemetry/android/internal/services/network/CarrierFinder {
3941
public fun get ()Lio/opentelemetry/android/common/internal/features/networkattributes/data/Carrier;
4042
}
4143

42-
public final class io/opentelemetry/android/internal/services/network/CurrentNetworkProvider : io/opentelemetry/android/internal/services/Service {
44+
public abstract interface class io/opentelemetry/android/internal/services/network/CurrentNetworkProvider : io/opentelemetry/android/internal/services/Service {
45+
public static final field Companion Lio/opentelemetry/android/internal/services/network/CurrentNetworkProvider$Companion;
4346
public static final field NO_NETWORK Lio/opentelemetry/android/common/internal/features/networkattributes/data/CurrentNetwork;
4447
public static final field UNKNOWN_NETWORK Lio/opentelemetry/android/common/internal/features/networkattributes/data/CurrentNetwork;
48+
public abstract fun addNetworkChangeListener (Lio/opentelemetry/android/internal/services/network/NetworkChangeListener;)V
49+
public abstract fun getCurrentNetwork ()Lio/opentelemetry/android/common/internal/features/networkattributes/data/CurrentNetwork;
50+
public abstract fun refreshNetworkStatus ()Lio/opentelemetry/android/common/internal/features/networkattributes/data/CurrentNetwork;
51+
}
52+
53+
public final class io/opentelemetry/android/internal/services/network/CurrentNetworkProvider$Companion {
54+
}
55+
56+
public final class io/opentelemetry/android/internal/services/network/CurrentNetworkProviderImpl : io/opentelemetry/android/internal/services/network/CurrentNetworkProvider {
4557
public fun <init> (Lio/opentelemetry/android/internal/services/network/detector/NetworkDetector;Landroid/net/ConnectivityManager;)V
4658
public fun addNetworkChangeListener (Lio/opentelemetry/android/internal/services/network/NetworkChangeListener;)V
4759
public fun close ()V
@@ -71,19 +83,21 @@ public abstract class io/opentelemetry/android/internal/services/periodicwork/Pe
7183
public abstract fun shouldStopRunning ()Z
7284
}
7385

74-
public final class io/opentelemetry/android/internal/services/periodicwork/PeriodicWork : io/opentelemetry/android/internal/services/Service {
75-
public fun close ()V
76-
public final fun enqueue (Ljava/lang/Runnable;)V
86+
public abstract interface class io/opentelemetry/android/internal/services/periodicwork/PeriodicWork : io/opentelemetry/android/internal/services/Service {
87+
public abstract fun enqueue (Ljava/lang/Runnable;)V
7788
}
7889

79-
public final class io/opentelemetry/android/internal/services/visiblescreen/VisibleScreenTracker : io/opentelemetry/android/internal/services/Service {
80-
public final fun activityPaused (Landroid/app/Activity;)V
81-
public final fun activityResumed (Landroid/app/Activity;)V
82-
public fun close ()V
83-
public final fun fragmentPaused (Landroidx/fragment/app/Fragment;)V
84-
public final fun fragmentResumed (Landroidx/fragment/app/Fragment;)V
85-
public final fun getCurrentlyVisibleScreen ()Ljava/lang/String;
86-
public final fun getPreviouslyVisibleScreen ()Ljava/lang/String;
90+
public abstract interface class io/opentelemetry/android/internal/services/storage/CacheStorage : io/opentelemetry/android/internal/services/Service {
91+
public abstract fun getCacheDir ()Ljava/io/File;
92+
}
93+
94+
public abstract interface class io/opentelemetry/android/internal/services/visiblescreen/VisibleScreenTracker : io/opentelemetry/android/internal/services/Service {
95+
public abstract fun activityPaused (Landroid/app/Activity;)V
96+
public abstract fun activityResumed (Landroid/app/Activity;)V
97+
public abstract fun fragmentPaused (Landroidx/fragment/app/Fragment;)V
98+
public abstract fun fragmentResumed (Landroidx/fragment/app/Fragment;)V
99+
public abstract fun getCurrentlyVisibleScreen ()Ljava/lang/String;
100+
public abstract fun getPreviouslyVisibleScreen ()Ljava/lang/String;
87101
}
88102

89103
public abstract interface class io/opentelemetry/android/internal/services/visiblescreen/activities/DefaultingActivityLifecycleCallbacks : android/app/Application$ActivityLifecycleCallbacks {

services/src/main/java/io/opentelemetry/android/internal/services/Services.kt

Lines changed: 29 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,53 @@
66
package io.opentelemetry.android.internal.services
77

88
import android.app.Application
9-
import android.content.Context
9+
import android.content.Context.CONNECTIVITY_SERVICE
1010
import android.net.ConnectivityManager
11+
import androidx.annotation.VisibleForTesting
1112
import androidx.lifecycle.ProcessLifecycleOwner
1213
import io.opentelemetry.android.internal.services.applifecycle.AppLifecycle
14+
import io.opentelemetry.android.internal.services.applifecycle.AppLifecycleImpl
1315
import io.opentelemetry.android.internal.services.applifecycle.ApplicationStateWatcher
1416
import io.opentelemetry.android.internal.services.network.CurrentNetworkProvider
17+
import io.opentelemetry.android.internal.services.network.CurrentNetworkProviderImpl
1518
import io.opentelemetry.android.internal.services.network.detector.NetworkDetector
1619
import io.opentelemetry.android.internal.services.periodicwork.PeriodicWork
20+
import io.opentelemetry.android.internal.services.periodicwork.PeriodicWorkImpl
21+
import io.opentelemetry.android.internal.services.storage.CacheStorage
22+
import io.opentelemetry.android.internal.services.storage.CacheStorageImpl
1723
import io.opentelemetry.android.internal.services.visiblescreen.VisibleScreenTracker
18-
import java.io.Closeable
24+
import io.opentelemetry.android.internal.services.visiblescreen.VisibleScreenTrackerImpl
1925

2026
/**
2127
* This class is internal and not for public use. Its APIs are unstable and can change at any time.
2228
*/
2329
class Services internal constructor(
24-
private val factory: ServicesFactory,
25-
) : Closeable {
26-
val cacheStorage: CacheStorage by lazy {
27-
factory.createCacheStorage()
30+
private val application: Application,
31+
) : ServicesFactory {
32+
override val cacheStorage: CacheStorage by lazy {
33+
CacheStorageImpl(application)
2834
}
2935

30-
val periodicWork: PeriodicWork by lazy {
31-
factory.createPeriodicWork()
36+
override val periodicWork: PeriodicWork by lazy {
37+
PeriodicWorkImpl()
3238
}
3339

34-
val currentNetworkProvider: CurrentNetworkProvider by lazy {
35-
factory.createCurrentNetworkProvider()
40+
override val currentNetworkProvider: CurrentNetworkProvider by lazy {
41+
CurrentNetworkProviderImpl(
42+
NetworkDetector.Companion.create(application),
43+
application.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager,
44+
)
3645
}
3746

38-
val appLifecycle: AppLifecycle by lazy {
39-
factory.createAppLifecycle()
47+
override val appLifecycle: AppLifecycle by lazy {
48+
AppLifecycleImpl(
49+
ApplicationStateWatcher(),
50+
ProcessLifecycleOwner.Companion.get().lifecycle,
51+
)
4052
}
4153

42-
val visibleScreenTracker: VisibleScreenTracker by lazy {
43-
factory.createVisibleScreenTracker()
54+
override val visibleScreenTracker: VisibleScreenTracker by lazy {
55+
VisibleScreenTrackerImpl(application)
4456
}
4557

4658
override fun close() {
@@ -58,37 +70,15 @@ class Services internal constructor(
5870
fun get(application: Application): Services =
5971
synchronized(this) {
6072
if (instance == null) {
61-
set(Services(ServicesFactory(application)))
73+
set(Services(application))
6274
}
63-
return instance!!
75+
return checkNotNull(instance)
6476
}
6577

66-
// Visible for tests
6778
@JvmStatic
79+
@VisibleForTesting
6880
fun set(services: Services?) {
6981
instance = services
7082
}
7183
}
72-
73-
internal class ServicesFactory(
74-
private val application: Application,
75-
) {
76-
fun createCacheStorage(): CacheStorage = CacheStorage(application)
77-
78-
fun createPeriodicWork(): PeriodicWork = PeriodicWork()
79-
80-
fun createCurrentNetworkProvider(): CurrentNetworkProvider =
81-
CurrentNetworkProvider(
82-
NetworkDetector.create(application),
83-
application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager,
84-
)
85-
86-
fun createAppLifecycle(): AppLifecycle =
87-
AppLifecycle(
88-
ApplicationStateWatcher(),
89-
ProcessLifecycleOwner.get().lifecycle,
90-
)
91-
92-
fun createVisibleScreenTracker(): VisibleScreenTracker = VisibleScreenTracker(application)
93-
}
9484
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.android.internal.services
7+
8+
import io.opentelemetry.android.internal.services.applifecycle.AppLifecycle
9+
import io.opentelemetry.android.internal.services.network.CurrentNetworkProvider
10+
import io.opentelemetry.android.internal.services.periodicwork.PeriodicWork
11+
import io.opentelemetry.android.internal.services.storage.CacheStorage
12+
import io.opentelemetry.android.internal.services.visiblescreen.VisibleScreenTracker
13+
import java.io.Closeable
14+
15+
interface ServicesFactory : Closeable {
16+
val cacheStorage: CacheStorage
17+
val periodicWork: PeriodicWork
18+
val currentNetworkProvider: CurrentNetworkProvider
19+
val appLifecycle: AppLifecycle
20+
val visibleScreenTracker: VisibleScreenTracker
21+
}

services/src/main/java/io/opentelemetry/android/internal/services/applifecycle/AppLifecycle.kt

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

66
package io.opentelemetry.android.internal.services.applifecycle
77

8-
import androidx.lifecycle.Lifecycle
98
import io.opentelemetry.android.internal.services.Service
109

1110
/**
1211
* This class is internal and not for public use. Its APIs are unstable and can change at any time.
1312
*/
14-
class AppLifecycle internal constructor(
15-
private val applicationStateWatcher: ApplicationStateWatcher,
16-
private val appLifecycle: Lifecycle,
17-
) : Service {
18-
init {
19-
appLifecycle.addObserver(applicationStateWatcher)
20-
}
21-
22-
fun registerListener(listener: ApplicationStateListener) {
23-
applicationStateWatcher.registerListener(listener)
24-
}
25-
26-
override fun close() {
27-
appLifecycle.removeObserver(applicationStateWatcher)
28-
applicationStateWatcher.close()
29-
}
13+
interface AppLifecycle : Service {
14+
fun registerListener(listener: ApplicationStateListener)
3015
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.android.internal.services.applifecycle
7+
8+
import androidx.lifecycle.Lifecycle
9+
10+
/**
11+
* This class is internal and not for public use. Its APIs are unstable and can change at any time.
12+
*/
13+
internal class AppLifecycleImpl internal constructor(
14+
private val applicationStateWatcher: ApplicationStateWatcher,
15+
private val appLifecycle: Lifecycle,
16+
) : AppLifecycle {
17+
init {
18+
appLifecycle.addObserver(applicationStateWatcher)
19+
}
20+
21+
override fun registerListener(listener: ApplicationStateListener) {
22+
applicationStateWatcher.registerListener(listener)
23+
}
24+
25+
override fun close() {
26+
appLifecycle.removeObserver(applicationStateWatcher)
27+
applicationStateWatcher.close()
28+
}
29+
}

services/src/main/java/io/opentelemetry/android/internal/services/applifecycle/ApplicationStateListener.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)