diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerformance.java b/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerformance.java index 40468566225..a23bb2621cb 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerformance.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerformance.java @@ -151,7 +151,6 @@ public static FirebasePerformance getInstance() { * @param firebaseRemoteConfigProvider The {@link Provider} for FirebaseRemoteConfig instance. * @param firebaseInstallationsApi The FirebaseInstallationsApi instance. * @param transportFactoryProvider The {@link Provider} for the the {@link TransportFactory}. - * @param remoteConfigManager The RemoteConfigManager instance. * @param configResolver The ConfigResolver instance. * @param sessionManager The SessionManager instance. */ @@ -162,7 +161,6 @@ public static FirebasePerformance getInstance() { Provider firebaseRemoteConfigProvider, FirebaseInstallationsApi firebaseInstallationsApi, Provider transportFactoryProvider, - RemoteConfigManager remoteConfigManager, ConfigResolver configResolver, SessionManager sessionManager) { @@ -185,8 +183,8 @@ public static FirebasePerformance getInstance() { // TODO(b/110178816): Explore moving off of main thread. mMetadataBundle = extractMetadata(appContext); - remoteConfigManager.setFirebaseRemoteConfigProvider(firebaseRemoteConfigProvider); this.configResolver = configResolver; + this.configResolver.getRemoteConfigManager().setFirebaseRemoteConfigProvider(firebaseRemoteConfigProvider); this.configResolver.setMetadataBundle(mMetadataBundle); this.configResolver.setApplicationContext(appContext); sessionManager.setApplicationContext(appContext); diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java b/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java index 5ac3ecfc282..c4c3418d05c 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java @@ -58,7 +58,7 @@ public class ConfigResolver { private static volatile ConfigResolver instance; // Configuration Storage objects. - private final RemoteConfigManager remoteConfigManager; + private RemoteConfigManager remoteConfigManager; private ImmutableBundle metadataBundle; private DeviceCacheManager deviceCacheManager; @@ -75,7 +75,7 @@ public ConfigResolver( @Nullable ImmutableBundle metadataBundle, @Nullable DeviceCacheManager deviceCacheManager) { this.remoteConfigManager = - remoteConfigManager == null ? RemoteConfigManager.getInstance() : remoteConfigManager; + remoteConfigManager != null ? remoteConfigManager : new RemoteConfigManager(); this.metadataBundle = metadataBundle == null ? new ImmutableBundle() : metadataBundle; this.deviceCacheManager = deviceCacheManager == null ? DeviceCacheManager.getInstance() : deviceCacheManager; @@ -98,6 +98,11 @@ public void setDeviceCacheManager(DeviceCacheManager deviceCacheManager) { this.deviceCacheManager = deviceCacheManager; } + @VisibleForTesting + public void setRemoteConfigManager(RemoteConfigManager remoteConfigManager) { + this.remoteConfigManager = remoteConfigManager; + } + public void setContentProviderContext(Context context) { setApplicationContext(context.getApplicationContext()); } @@ -916,4 +921,8 @@ private boolean isGaugeCaptureFrequencyMsValid(long frequencyMilliseconds) { private boolean isSessionsMaxDurationMinutesValid(long maxDurationMin) { return maxDurationMin > 0; } + + public RemoteConfigManager getRemoteConfigManager() { + return remoteConfigManager; + } } diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java b/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java index 66b8ff8f804..db9738f905b 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java @@ -47,7 +47,6 @@ public class RemoteConfigManager { private static final AndroidLogger logger = AndroidLogger.getInstance(); - private static final RemoteConfigManager instance = new RemoteConfigManager(); private static final String FIREPERF_FRC_NAMESPACE_NAME = "fireperf"; private static final long TIME_AFTER_WHICH_A_FETCH_IS_CONSIDERED_STALE_MS = TimeUnit.HOURS.toMillis(12); @@ -67,7 +66,7 @@ public class RemoteConfigManager { // TODO(b/258263016): Migrate to go/firebase-android-executors @SuppressLint("ThreadPoolCreation") - private RemoteConfigManager() { + public RemoteConfigManager() { this( DeviceCacheManager.getInstance(), new ThreadPoolExecutor( @@ -96,11 +95,6 @@ private RemoteConfigManager() { this.remoteConfigFetchDelayInMs = remoteConfigFetchDelayInMs; } - /** Gets the singleton instance. */ - public static RemoteConfigManager getInstance() { - return instance; - } - /** * Sets the {@link Provider} for {@link RemoteConfigComponent} from which we can extract the * {@link FirebaseRemoteConfig} instance whenever it gets available. diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/injection/modules/FirebasePerformanceModule.java b/firebase-perf/src/main/java/com/google/firebase/perf/injection/modules/FirebasePerformanceModule.java index 799a6cdccd9..aad6c067def 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/injection/modules/FirebasePerformanceModule.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/injection/modules/FirebasePerformanceModule.java @@ -66,11 +66,6 @@ Provider providesTransportFactoryProvider() { return transportFactoryProvider; } - @Provides - RemoteConfigManager providesRemoteConfigManager() { - return RemoteConfigManager.getInstance(); - } - @Provides ConfigResolver providesConfigResolver() { return ConfigResolver.getInstance(); diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java index cd41c5a3adf..deda4f79be2 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java @@ -63,7 +63,7 @@ public class FirebasePerformanceTest { "firebase_performance_collection_deactivated"; private static final String FIREPERF_ENABLED_KEY = "firebase_performance_collection_enabled"; - @Nullable private RemoteConfigManager spyRemoteConfigManager = null; + @Nullable private RemoteConfigManager spyRemoteConfigManager = spy(new RemoteConfigManager()); @Nullable private ConfigResolver spyConfigResolver = null; @Nullable private SessionManager spySessionManager = null; @@ -100,9 +100,10 @@ public void setUp() throws NameNotFoundException { sharedPreferences.edit().clear().commit(); DeviceCacheManager.clearInstance(); - spyRemoteConfigManager = spy(RemoteConfigManager.getInstance()); ConfigResolver.clearInstance(); - spyConfigResolver = spy(ConfigResolver.getInstance()); + ConfigResolver configResolver = ConfigResolver.getInstance(); + configResolver.setRemoteConfigManager(spyRemoteConfigManager); + spyConfigResolver = spy(configResolver); spySessionManager = spy(SessionManager.getInstance()); fakeDirectExecutorService = new FakeDirectExecutorService(); @@ -470,6 +471,7 @@ public void firebasePerformanceInitialization_providesRcProvider_remoteConfigMan () -> FirebaseApp.getInstance().get(TransportFactory.class)); verify(spyRemoteConfigManager).setFirebaseRemoteConfigProvider(firebaseRemoteConfigProvider); + assertThat(spyRemoteConfigManager.isFirebaseRemoteConfigAvailable()).isTrue(); } @Test @@ -577,7 +579,6 @@ private FirebasePerformance initializeFirebasePerformancePreferences( firebaseRemoteConfigProvider, mock(FirebaseInstallationsApi.class), transportFactoryProvider, - spyRemoteConfigManager, spyConfigResolver, spySessionManager); } diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/config/RemoteConfigManagerTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/config/RemoteConfigManagerTest.java index 3e1a9623adc..6f413b69c5a 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/config/RemoteConfigManagerTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/config/RemoteConfigManagerTest.java @@ -76,8 +76,8 @@ public void setUp() { @Test public void getInstance_verifiesSingleton() { - RemoteConfigManager instanceOne = RemoteConfigManager.getInstance(); - RemoteConfigManager instanceTwo = RemoteConfigManager.getInstance(); + RemoteConfigManager instanceOne = ConfigResolver.getInstance().getRemoteConfigManager(); + RemoteConfigManager instanceTwo = ConfigResolver.getInstance().getRemoteConfigManager(); assertThat(instanceOne).isSameInstanceAs(instanceTwo); }