Skip to content
This repository was archived by the owner on Jun 20, 2023. It is now read-only.

Commit 41acc60

Browse files
authored
EOL- Test Menu - allow logger to work after EOL (EXPOSUREAPP-14849) (#5861)
* EOL- allow logger to work after EOL * Fix test
1 parent 7c70a4d commit 41acc60

File tree

7 files changed

+46
-4
lines changed

7 files changed

+46
-4
lines changed

Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragment.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ class DebugOptionsFragment : Fragment(R.layout.fragment_test_debugoptions), Auto
102102
vm.environmentStateChange.observe(viewLifecycleOwner) {
103103
showSnackBar("Environment changed to: $it\nForce stop & restart the app!")
104104
}
105+
106+
vm.isLoggerAllowed.observe(viewLifecycleOwner) { binding.allowLoggerEol.isChecked = it == true }
107+
binding.allowLoggerEol.setOnCheckedChangeListener { _, checked -> vm.setAllowedFlag(checked) }
105108
}
106109

107110
private infix fun String.styleTo(value: String) = buildSpannedString {

Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModel.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import dagger.assisted.AssistedFactory
55
import dagger.assisted.AssistedInject
66
import de.rki.coronawarnapp.environment.EnvironmentSetup
77
import de.rki.coronawarnapp.environment.EnvironmentSetup.Type.Companion.toEnvironmentType
8+
import de.rki.coronawarnapp.eol.EolSetting
89
import de.rki.coronawarnapp.test.debugoptions.ui.EnvironmentState.Companion.toEnvironmentState
910
import de.rki.coronawarnapp.util.coroutine.AppScope
1011
import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
@@ -17,6 +18,7 @@ import kotlinx.coroutines.launch
1718

1819
class DebugOptionsFragmentViewModel @AssistedInject constructor(
1920
private val envSetup: EnvironmentSetup,
21+
private val eolSetting: EolSetting,
2022
dispatcherProvider: DispatcherProvider,
2123
private val environmentSunset: EnvironmentSunset,
2224
@AppScope private val appScope: CoroutineScope,
@@ -25,6 +27,7 @@ class DebugOptionsFragmentViewModel @AssistedInject constructor(
2527
private val environmentStateFlow = MutableStateFlow(envSetup.toEnvironmentState())
2628
val environmentState = environmentStateFlow.asLiveData(context = dispatcherProvider.Default)
2729
val environmentStateChange = SingleLiveEvent<EnvironmentState>()
30+
val isLoggerAllowed = eolSetting.isLoggerAllowed.asLiveData2()
2831

2932
fun clearLaunchEnvironment() {
3033
envSetup.launchEnvironment = null
@@ -44,6 +47,10 @@ class DebugOptionsFragmentViewModel @AssistedInject constructor(
4447
cleanCachedData()
4548
}
4649

50+
fun setAllowedFlag(flag: Boolean) = launch {
51+
eolSetting.setLoggerAllowed(flag)
52+
}
53+
4754
private fun cleanCachedData() = appScope.launch {
4855
environmentSunset.reset()
4956
}

Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_debugoptions.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@
5151
android:text="Open new debug log screen"
5252
app:layout_constraintEnd_toEndOf="parent"
5353
app:layout_constraintTop_toBottomOf="@id/new_debuglog_screen_explanation" />
54+
55+
<com.google.android.material.materialswitch.MaterialSwitch
56+
android:id="@+id/allow_logger_eol"
57+
android:layout_width="match_parent"
58+
android:layout_height="wrap_content"
59+
android:layout_marginTop="10dp"
60+
android:text="Allow logger after EOL"
61+
app:layout_constraintEnd_toEndOf="parent"
62+
app:layout_constraintTop_toBottomOf="@id/show_debug_log_screen" />
5463
</androidx.constraintlayout.widget.ConstraintLayout>
5564

5665
<LinearLayout

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eol/AppEol.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import kotlinx.coroutines.CoroutineScope
2020
import kotlinx.coroutines.flow.catch
2121
import kotlinx.coroutines.flow.combine
2222
import kotlinx.coroutines.flow.distinctUntilChanged
23+
import kotlinx.coroutines.flow.first
2324
import kotlinx.coroutines.flow.onEach
2425
import timber.log.Timber
2526
import javax.inject.Inject
@@ -32,7 +33,7 @@ import javax.inject.Singleton
3233
@Singleton
3334
@Suppress("LongParameterList")
3435
class AppEol @Inject constructor(
35-
eolSetting: EolSetting,
36+
private val eolSetting: EolSetting,
3637
private val enfClient: ENFClient,
3738
private val workManager: WorkManager,
3839
private val timeStamper: TimeStamper,
@@ -67,8 +68,12 @@ class AppEol @Inject constructor(
6768
)
6869
alarmManager.cancel(intentFactory.createIntent())
6970

70-
Timber.tag(TAG).d("Stop logger")
71-
debugLogger.stop()
71+
if (!eolSetting.isLoggerAllowed.first()) {
72+
Timber.tag(TAG).d("Stop logger")
73+
debugLogger.stop()
74+
} else {
75+
Timber.tag(TAG).d("Logger is allowed after EOL")
76+
}
7277

7378
runCatching {
7479
Timber.tag(TAG).d("Disable ENF")

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eol/EolSetting.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package de.rki.coronawarnapp.eol
22

33
import androidx.datastore.core.DataStore
44
import androidx.datastore.preferences.core.Preferences
5+
import androidx.datastore.preferences.core.booleanPreferencesKey
56
import androidx.datastore.preferences.core.edit
67
import androidx.datastore.preferences.core.stringPreferencesKey
78
import kotlinx.coroutines.flow.map
@@ -27,7 +28,18 @@ class EolSetting @Inject constructor(
2728
}
2829
}
2930

31+
val isLoggerAllowed = dataStore.data.map { prefs ->
32+
runCatching { prefs[EOL_LOGGER_FLAG] ?: false }.getOrElse { false }
33+
}
34+
35+
suspend fun setLoggerAllowed(flag: Boolean) {
36+
dataStore.edit { prefs ->
37+
prefs[EOL_LOGGER_FLAG] = flag
38+
}
39+
}
40+
3041
companion object {
3142
private val EOL_DATE_TIME = stringPreferencesKey("EolSetting.eolDateTime")
43+
private val EOL_LOGGER_FLAG = booleanPreferencesKey("EolSetting.eolLoggerAllowed")
3244
}
3345
}

Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eol/AppEolTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class AppEolTest : BaseTest() {
5353
coEvery { debugLogger.stop() } just Runs
5454

5555
every { eolSetting.eolDateTime } returns flowOf(ZonedDateTime.parse("2023-06-01T00:00:00+02:00"))
56+
every { eolSetting.isLoggerAllowed } returns flowOf(false)
5657
every { alarmManager.cancel(any<PendingIntent>()) } just Runs
5758
every { workManager.cancelAllWork() } returns mockk()
5859
every { appShortcutsHelper.initShortcuts(any()) } returns mockk()

Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package de.rki.coronawarnapp.test.debugoptions.ui
22

33
import de.rki.coronawarnapp.environment.EnvironmentSetup
4+
import de.rki.coronawarnapp.eol.EolSetting
45
import io.kotest.matchers.shouldBe
56
import io.mockk.MockKAnnotations
67
import io.mockk.every
78
import io.mockk.impl.annotations.MockK
9+
import kotlinx.coroutines.flow.flowOf
810
import kotlinx.coroutines.test.TestScope
911
import org.junit.jupiter.api.BeforeEach
1012
import org.junit.jupiter.api.Test
@@ -18,6 +20,7 @@ class DebugOptionsFragmentViewModelTest : testhelpers.BaseTest() {
1820

1921
@MockK private lateinit var environmentSetup: EnvironmentSetup
2022
@MockK private lateinit var environmentSunset: EnvironmentSunset
23+
@MockK private lateinit var eolSetting: EolSetting
2124

2225
private var currentEnvironment = EnvironmentSetup.Type.DEV
2326

@@ -40,13 +43,15 @@ class DebugOptionsFragmentViewModelTest : testhelpers.BaseTest() {
4043
every { environmentSetup.currentEnvironment = any() } answers { currentEnvironment = arg(0) }
4144
every { environmentSetup.currentEnvironment } answers { currentEnvironment }
4245
every { environmentSetup.launchEnvironment } returns null
46+
every { eolSetting.isLoggerAllowed } returns flowOf(false)
4347
}
4448

4549
private fun createViewModel(): DebugOptionsFragmentViewModel = DebugOptionsFragmentViewModel(
4650
envSetup = environmentSetup,
4751
dispatcherProvider = TestDispatcherProvider(),
4852
environmentSunset = environmentSunset,
49-
appScope = TestScope()
53+
appScope = TestScope(),
54+
eolSetting = eolSetting,
5055
)
5156

5257
@Test

0 commit comments

Comments
 (0)