From 797145951c389268da7c4711ba7654954a412b5f Mon Sep 17 00:00:00 2001 From: Oliver Zimmerman <oezimmerman@gmail.com> Date: Wed, 11 Nov 2020 16:06:28 +0000 Subject: [PATCH] Verify right risk state: Exposure Logging stopped vs. Unknown Risk (EXPOSUREAPP-3594) (#1567) * add TracingStatus check that forces No_Calculation option if exposure logging stopped * detekt adjustments * Added test with Rituraj for tracing status when tracing status is inactive Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> --- .../ui/tracing/card/TracingCardState.kt | 111 ++++++++++++------ .../ui/tracing/common/BaseTracingState.kt | 34 ++++-- .../ui/tracing/card/TracingCardStateTest.kt | 43 +++++++ 3 files changed, 139 insertions(+), 49 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardState.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardState.kt index 4a4fbf237..ceb286194 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardState.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardState.kt @@ -41,13 +41,19 @@ data class TracingCardState( * for general information when no definite risk level * can be calculated */ - fun getRiskBody(c: Context): String = when (riskLevelScore) { - RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.string.risk_card_outdated_risk_body - RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.string.risk_card_body_tracing_off - RiskLevelConstants.UNKNOWN_RISK_INITIAL -> R.string.risk_card_unknown_risk_body - RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS_MANUAL -> R.string.risk_card_outdated_manual_risk_body - else -> null - }?.let { c.getString(it) } ?: "" + fun getRiskBody(c: Context): String { + return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) { + when (riskLevelScore) { + RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.string.risk_card_outdated_risk_body + RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.string.risk_card_body_tracing_off + RiskLevelConstants.UNKNOWN_RISK_INITIAL -> R.string.risk_card_unknown_risk_body + RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS_MANUAL -> R.string.risk_card_outdated_manual_risk_body + else -> null + }?.let { c.getString(it) } ?: "" + } else { + return c.getString(R.string.risk_card_body_tracing_off) + } + } /** * Formats the risk card text display of last persisted risk level @@ -55,23 +61,29 @@ data class TracingCardState( * the persisted risk level is of importance */ fun getSavedRiskBody(c: Context): String { - return if ( - riskLevelScore == RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF || - riskLevelScore == RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS || - riskLevelScore == RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS_MANUAL - ) { - when (lastRiskLevelScoreCalculated) { - RiskLevelConstants.LOW_LEVEL_RISK, - RiskLevelConstants.INCREASED_RISK, - RiskLevelConstants.UNKNOWN_RISK_INITIAL -> { - val arg = formatRiskLevelHeadline(c, lastRiskLevelScoreCalculated) - c.getString(R.string.risk_card_no_calculation_possible_body_saved_risk) - .format(arg) + return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) { + return if ( + riskLevelScore == RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF || + riskLevelScore == RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS || + riskLevelScore == RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS_MANUAL + ) { + when (lastRiskLevelScoreCalculated) { + RiskLevelConstants.LOW_LEVEL_RISK, + RiskLevelConstants.INCREASED_RISK, + RiskLevelConstants.UNKNOWN_RISK_INITIAL -> { + val arg = formatRiskLevelHeadline(c, lastRiskLevelScoreCalculated) + c.getString(R.string.risk_card_no_calculation_possible_body_saved_risk) + .format(arg) + } + else -> "" } - else -> "" + } else { + "" } } else { - "" + val arg = formatRiskLevelHeadline(c, lastRiskLevelScoreCalculated) + c.getString(R.string.risk_card_no_calculation_possible_body_saved_risk) + .format(arg) } } @@ -189,7 +201,17 @@ data class TracingCardState( */ */ fun getTimeFetched(c: Context): String { - return when (riskLevelScore) { + if (tracingStatus == GeneralTracingStatus.Status.TRACING_INACTIVE) { + return if (lastTimeDiagnosisKeysFetched != null) { + c.getString( + R.string.risk_card_body_time_fetched, + formatRelativeDateTimeString(c, lastTimeDiagnosisKeysFetched) + ) + } else { + c.getString(R.string.risk_card_body_not_yet_fetched) + } + } + return when (riskLevelScore) { RiskLevelConstants.LOW_LEVEL_RISK, RiskLevelConstants.INCREASED_RISK -> { if (lastTimeDiagnosisKeysFetched != null) { @@ -247,15 +269,22 @@ data class TracingCardState( fun getRiskLevelHeadline(c: Context) = formatRiskLevelHeadline(c, riskLevelScore) - fun formatRiskLevelHeadline(c: Context, riskLevelScore: Int) = when (riskLevelScore) { - RiskLevelConstants.INCREASED_RISK -> R.string.risk_card_increased_risk_headline - RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.string.risk_card_outdated_risk_headline - RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.string.risk_card_no_calculation_possible_headline - RiskLevelConstants.LOW_LEVEL_RISK -> R.string.risk_card_low_risk_headline - RiskLevelConstants.UNKNOWN_RISK_INITIAL -> R.string.risk_card_unknown_risk_headline - RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS_MANUAL -> R.string.risk_card_unknown_risk_headline - else -> null - }?.let { c.getString(it) } ?: "" + fun formatRiskLevelHeadline(c: Context, riskLevelScore: Int): String { + return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) { + when (riskLevelScore) { + RiskLevelConstants.INCREASED_RISK -> R.string.risk_card_increased_risk_headline + RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.string.risk_card_outdated_risk_headline + RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> + R.string.risk_card_no_calculation_possible_headline + RiskLevelConstants.LOW_LEVEL_RISK -> R.string.risk_card_low_risk_headline + RiskLevelConstants.UNKNOWN_RISK_INITIAL -> R.string.risk_card_unknown_risk_headline + RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS_MANUAL -> R.string.risk_card_unknown_risk_headline + else -> null + }?.let { c.getString(it) } ?: "" + } else { + return c.getString(R.string.risk_card_no_calculation_possible_headline) + } + } fun getProgressCardHeadline(c: Context): String = when (tracingProgress) { TracingProgress.Downloading -> R.string.risk_card_progress_download_headline @@ -271,11 +300,17 @@ data class TracingCardState( fun isTracingInProgress(): Boolean = tracingProgress != TracingProgress.Idle - fun getRiskInfoContainerBackgroundTint(c: Context): ColorStateList = when (riskLevelScore) { - RiskLevelConstants.INCREASED_RISK -> R.color.card_increased - RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.color.card_outdated - RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.color.card_no_calculation - RiskLevelConstants.LOW_LEVEL_RISK -> R.color.card_low - else -> R.color.card_unknown - }.let { c.getColorStateList(it) } + fun getRiskInfoContainerBackgroundTint(c: Context): ColorStateList { + return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) { + when (riskLevelScore) { + RiskLevelConstants.INCREASED_RISK -> R.color.card_increased + RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.color.card_outdated + RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.color.card_no_calculation + RiskLevelConstants.LOW_LEVEL_RISK -> R.color.card_low + else -> R.color.card_unknown + }.let { c.getColorStateList(it) } + } else { + return c.getColorStateList(R.color.card_no_calculation) + } + } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/common/BaseTracingState.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/common/BaseTracingState.kt index 0961bf1c4..a132f0cd0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/common/BaseTracingState.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/common/BaseTracingState.kt @@ -25,18 +25,30 @@ abstract class BaseTracingState { /** * Formats the risk card colors for default and pressed states depending on risk level */ - fun getRiskColor(c: Context): Int = when (riskLevelScore) { - RiskLevelConstants.INCREASED_RISK -> R.color.colorSemanticHighRisk - RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, - RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.color.colorSemanticUnknownRisk - RiskLevelConstants.LOW_LEVEL_RISK -> R.color.colorSemanticLowRisk - else -> R.color.colorSemanticNeutralRisk - }.let { c.getColor(it) } + fun getRiskColor(c: Context): Int { + return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) { + when (riskLevelScore) { + RiskLevelConstants.INCREASED_RISK -> R.color.colorSemanticHighRisk + RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, + RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.color.colorSemanticUnknownRisk + RiskLevelConstants.LOW_LEVEL_RISK -> R.color.colorSemanticLowRisk + else -> R.color.colorSemanticNeutralRisk + }.let { c.getColor(it) } + } else { + return c.getColor(R.color.colorSemanticUnknownRisk) + } + } - fun isTracingOffRiskLevel(): Boolean = when (riskLevelScore) { - RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, - RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> true - else -> false + fun isTracingOffRiskLevel(): Boolean { + return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) { + when (riskLevelScore) { + RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, + RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> true + else -> false + } + } else { + return true + } } fun getStableTextColor(c: Context): Int = c.getColor( diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardStateTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardStateTest.kt index be649ea37..ba00e3484 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardStateTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardStateTest.kt @@ -146,6 +146,49 @@ class TracingCardStateTest : BaseTest() { } } + @Test + fun `risklevel affected by tracing status`() { + createInstance( + riskLevel = UNKNOWN_RISK_OUTDATED_RESULTS, + tracingStatus = GeneralTracingStatus.Status.TRACING_INACTIVE + ).apply { + getRiskBody(context) + verify { context.getString(R.string.risk_card_body_tracing_off) } + } + + createInstance( + riskLevel = NO_CALCULATION_POSSIBLE_TRACING_OFF, + tracingStatus = GeneralTracingStatus.Status.TRACING_INACTIVE + ).apply { + getRiskBody(context) + verify { context.getString(R.string.risk_card_body_tracing_off) } + } + + createInstance( + riskLevel = UNKNOWN_RISK_INITIAL, + tracingStatus = GeneralTracingStatus.Status.TRACING_INACTIVE + ).apply { + getRiskBody(context) + verify { context.getString(R.string.risk_card_body_tracing_off) } + } + + createInstance( + riskLevel = LOW_LEVEL_RISK, + tracingStatus = GeneralTracingStatus.Status.TRACING_INACTIVE + ).apply { + getRiskBody(context) + verify { context.getString(R.string.risk_card_body_tracing_off) } + } + + createInstance( + riskLevel = INCREASED_RISK, + tracingStatus = GeneralTracingStatus.Status.TRACING_INACTIVE + ).apply { + getRiskBody(context) + verify { context.getString(R.string.risk_card_body_tracing_off) } + } + } + @Test fun `saved risk body is affected by risklevel`() { createInstance( -- GitLab