From 81dd57ff753ba3a7d630581a07907f8c3a7ef840 Mon Sep 17 00:00:00 2001
From: Matthias Urhahn <matthias.urhahn@sap.com>
Date: Mon, 16 Nov 2020 15:00:22 +0100
Subject: [PATCH] Fix passive config requests triggering a refresh
 (EXPOSUREAPP-3774) (#1608)

* Make config sharing behavior `SharingStarted.Lazily`. (start once, never release)
Otherwise classes that are just interested in the current config, if there is no other subscriber active,
would launch the `startValueProvider` and pull a config each time.

The ExposureDetectionTracker is such a candidate that would like to use the latest config every ~3min.

While this already no longer happens since "Track config changes" (4d1ecb54fa8a08b853feb2980f8fff8b33fc49f9),
because there is no a class that is permanently subscribed to `currentConfig`, we should not rely on side-effects,
so let's make the sharing behavior explicit.

* Fix test regression.

Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com>
---
 .../java/de/rki/coronawarnapp/appconfig/AppConfigProvider.kt  | 2 +-
 .../de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt   | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigProvider.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigProvider.kt
index 71906e831..7e17e8406 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigProvider.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigProvider.kt
@@ -22,7 +22,7 @@ class AppConfigProvider @Inject constructor(
         loggingTag = "AppConfigProvider",
         scope = scope,
         coroutineContext = dispatcherProvider.IO,
-        sharingBehavior = SharingStarted.WhileSubscribed(replayExpirationMillis = 0)
+        sharingBehavior = SharingStarted.Lazily
     ) {
         source.retrieveConfig()
     }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt
index 8f5817cf7..105844e8a 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt
@@ -98,7 +98,7 @@ class AppConfigProviderTest : BaseIOTest() {
     }
 
     @Test
-    fun `appConfig uses WHILE_SUBSCRIBED mode`() = runBlockingTest2(ignoreActive = true) {
+    fun `appConfig uses LAZILY mode`() = runBlockingTest2(ignoreActive = true) {
         val instance = createInstance(this)
 
         val testCollector1 = instance.currentConfig.test(startOnScope = this)
@@ -123,7 +123,7 @@ class AppConfigProviderTest : BaseIOTest() {
         advanceUntilIdle()
         testCollector4.cancel()
 
-        coVerify(exactly = 2) { source.retrieveConfig() }
+        coVerify(exactly = 1) { source.retrieveConfig() }
     }
 
     @Test
-- 
GitLab