diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigModule.kt index cf775d6f57ff8a09b03777b6e72533ba1d70244b..90de99cd1a0d736a69c13f25682a6b4d23d23531 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigModule.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigModule.kt @@ -5,6 +5,7 @@ import dagger.Provides import de.rki.coronawarnapp.appconfig.download.AppConfigApiV2 import de.rki.coronawarnapp.appconfig.mapping.AnalyticsConfigMapper import de.rki.coronawarnapp.appconfig.mapping.CWAConfigMapper +import de.rki.coronawarnapp.appconfig.mapping.CoronaTestConfigMapper import de.rki.coronawarnapp.appconfig.mapping.ExposureDetectionConfigMapper import de.rki.coronawarnapp.appconfig.mapping.ExposureWindowRiskCalculationConfigMapper import de.rki.coronawarnapp.appconfig.mapping.KeyDownloadParametersMapper @@ -83,6 +84,10 @@ class AppConfigModule { fun presenceTracingMapper(mapper: PresenceTracingConfigMapper): PresenceTracingConfig.Mapper = mapper + @Provides + fun coronaTestConfigMapper(mapper: CoronaTestConfigMapper): + CoronaTestConfig.Mapper = mapper + companion object { private val HTTP_TIMEOUT_APPCONFIG = Duration.standardSeconds(10) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt new file mode 100644 index 0000000000000000000000000000000000000000..acba0188803f585aeab3c6de7da3dbc8425b2f81 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt @@ -0,0 +1,22 @@ +package de.rki.coronawarnapp.appconfig + +import de.rki.coronawarnapp.appconfig.mapping.ConfigMapper + +interface CoronaTestConfig { + val coronaRapidAntigenTestParameters: CoronaRapidAntigenTestParametersContainer + + interface Mapper : ConfigMapper<CoronaTestConfig> +} + +data class CoronaRapidAntigenTestParametersContainer( + val hoursToDeemTestOutdated: Int = DEFAULT_HOURS +) { + companion object { + const val DEFAULT_HOURS = 48 + } +} + +data class CoronaTestConfigContainer( + override val coronaRapidAntigenTestParameters: CoronaRapidAntigenTestParametersContainer = + CoronaRapidAntigenTestParametersContainer() +) : CoronaTestConfig diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigMapping.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigMapping.kt index bad36b65aff349d12bf0807b98e10d67dbc28c1f..d0d3790269465d69bc2423d9ea0175395f2275d4 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigMapping.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigMapping.kt @@ -2,6 +2,7 @@ package de.rki.coronawarnapp.appconfig.mapping import de.rki.coronawarnapp.appconfig.AnalyticsConfig import de.rki.coronawarnapp.appconfig.CWAConfig +import de.rki.coronawarnapp.appconfig.CoronaTestConfig import de.rki.coronawarnapp.appconfig.ExposureDetectionConfig import de.rki.coronawarnapp.appconfig.ExposureWindowRiskCalculationConfig import de.rki.coronawarnapp.appconfig.KeyDownloadConfig @@ -22,4 +23,5 @@ interface ConfigMapping : val analytics: AnalyticsConfig val logUpload: LogUploadConfig val presenceTracing: PresenceTracingConfig + val coronaTestParameters: CoronaTestConfig } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParser.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParser.kt index de22141776de9d25d5ef285e0771219b75a6f201..ced74a1e8d5cd4bc74b31b88e94c3a0c30466333 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParser.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParser.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.appconfig.mapping import dagger.Reusable import de.rki.coronawarnapp.appconfig.AnalyticsConfig import de.rki.coronawarnapp.appconfig.CWAConfig +import de.rki.coronawarnapp.appconfig.CoronaTestConfig import de.rki.coronawarnapp.appconfig.ExposureDetectionConfig import de.rki.coronawarnapp.appconfig.ExposureWindowRiskCalculationConfig import de.rki.coronawarnapp.appconfig.KeyDownloadConfig @@ -23,6 +24,7 @@ class ConfigParser @Inject constructor( private val analyticsConfigMapper: AnalyticsConfig.Mapper, private val logUploadConfigMapper: LogUploadConfig.Mapper, private val presenceTracingConfigMapper: PresenceTracingConfig.Mapper, + private val coronaTestConfigMapper: CoronaTestConfig.Mapper, ) { fun parse(configBytes: ByteArray): ConfigMapping = try { @@ -36,7 +38,8 @@ class ConfigParser @Inject constructor( survey = surveyConfigMapper.map(it), analytics = analyticsConfigMapper.map(it), logUpload = logUploadConfigMapper.map(it), - presenceTracing = presenceTracingConfigMapper.map(it) + presenceTracing = presenceTracingConfigMapper.map(it), + coronaTestParameters = coronaTestConfigMapper.map(it) ) } } catch (e: Exception) { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt new file mode 100644 index 0000000000000000000000000000000000000000..09fbb9068256a59f2068c8f27df844df27ea609f --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt @@ -0,0 +1,36 @@ +package de.rki.coronawarnapp.appconfig.mapping + +import dagger.Reusable +import de.rki.coronawarnapp.appconfig.CoronaRapidAntigenTestParametersContainer +import de.rki.coronawarnapp.appconfig.CoronaTestConfig +import de.rki.coronawarnapp.appconfig.CoronaTestConfigContainer +import de.rki.coronawarnapp.server.protocols.internal.v2.AppConfigAndroid.ApplicationConfigurationAndroid +import timber.log.Timber +import javax.inject.Inject + +@Reusable +class CoronaTestConfigMapper @Inject constructor() : CoronaTestConfig.Mapper { + override fun map( + rawConfig: ApplicationConfigurationAndroid + ): CoronaTestConfig { + + if (!rawConfig.hasCoronaTestParameters()) { + Timber.d("coronaTestParameters are missing") + return CoronaTestConfigContainer() + } + + return rawConfig.mapCoronaTestParameters() + } + + private fun ApplicationConfigurationAndroid.mapCoronaTestParameters(): CoronaTestConfig { + val coronaRapidAntigenTestParameters = if (coronaTestParameters.hasCoronaRapidAntigenTestParameters()) { + CoronaRapidAntigenTestParametersContainer( + coronaTestParameters.coronaRapidAntigenTestParameters.hoursToDeemTestOutdated + ) + } else { + Timber.d("coronaRapidAntigenTestParameters is missing") + CoronaRapidAntigenTestParametersContainer() + } + return CoronaTestConfigContainer(coronaRapidAntigenTestParameters) + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/DefaultConfigMapping.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/DefaultConfigMapping.kt index cdebdff80bd25bccf898522c2639952fe87ae917..220c854e09f792a985f353684c937fd5b0f655a1 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/DefaultConfigMapping.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/DefaultConfigMapping.kt @@ -2,6 +2,7 @@ package de.rki.coronawarnapp.appconfig.mapping import de.rki.coronawarnapp.appconfig.AnalyticsConfig import de.rki.coronawarnapp.appconfig.CWAConfig +import de.rki.coronawarnapp.appconfig.CoronaTestConfig import de.rki.coronawarnapp.appconfig.ExposureDetectionConfig import de.rki.coronawarnapp.appconfig.ExposureWindowRiskCalculationConfig import de.rki.coronawarnapp.appconfig.KeyDownloadConfig @@ -20,6 +21,7 @@ data class DefaultConfigMapping( override val analytics: AnalyticsConfig, override val logUpload: LogUploadConfig, override val presenceTracing: PresenceTracingConfig, + override val coronaTestParameters: CoronaTestConfig, ) : ConfigMapping, CWAConfig by cwaConfig, KeyDownloadConfig by keyDownloadConfig, diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParserTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParserTest.kt index 6f605d32f8fb46afbe4fdb9af14876f94f56b905..b3c8c07ba9a3293fb289510cc1e647e61ed55fc9 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParserTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParserTest.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.appconfig.mapping import com.google.protobuf.InvalidProtocolBufferException import de.rki.coronawarnapp.appconfig.AnalyticsConfig import de.rki.coronawarnapp.appconfig.CWAConfig +import de.rki.coronawarnapp.appconfig.CoronaTestConfig import de.rki.coronawarnapp.appconfig.ExposureDetectionConfig import de.rki.coronawarnapp.appconfig.ExposureWindowRiskCalculationConfig import de.rki.coronawarnapp.appconfig.KeyDownloadConfig @@ -32,6 +33,7 @@ class ConfigParserTest : BaseTest() { @MockK lateinit var analyticsConfigMapper: AnalyticsConfig.Mapper @MockK lateinit var logUploadConfigMapper: LogUploadConfig.Mapper @MockK lateinit var presenceTracingConfigMapper: PresenceTracingConfig.Mapper + @MockK lateinit var coronaTestConfigMapper: CoronaTestConfig.Mapper private val appConfig171 = File("src/test/resources/appconfig_1_7_1.bin") private val appConfig180 = File("src/test/resources/appconfig_1_8_0.bin") @@ -48,6 +50,7 @@ class ConfigParserTest : BaseTest() { every { analyticsConfigMapper.map(any()) } returns mockk() every { logUploadConfigMapper.map(any()) } returns mockk() every { presenceTracingConfigMapper.map(any()) } returns mockk() + every { coronaTestConfigMapper.map(any()) } returns mockk() appConfig171.exists() shouldBe true appConfig180.exists() shouldBe true @@ -61,7 +64,8 @@ class ConfigParserTest : BaseTest() { surveyConfigMapper = surveyConfigMapper, analyticsConfigMapper = analyticsConfigMapper, logUploadConfigMapper = logUploadConfigMapper, - presenceTracingConfigMapper = presenceTracingConfigMapper + presenceTracingConfigMapper = presenceTracingConfigMapper, + coronaTestConfigMapper = coronaTestConfigMapper, ) @Test