Skip to content
Snippets Groups Projects
Unverified Commit 79714595 authored by Oliver Zimmerman's avatar Oliver Zimmerman Committed by GitHub
Browse files

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: default avatarharambasicluka <64483219+harambasicluka@users.noreply.github.com>
parent d4f9b4e2
No related branches found
No related tags found
No related merge requests found
...@@ -41,13 +41,19 @@ data class TracingCardState( ...@@ -41,13 +41,19 @@ data class TracingCardState(
* for general information when no definite risk level * for general information when no definite risk level
* can be calculated * can be calculated
*/ */
fun getRiskBody(c: Context): String = when (riskLevelScore) { fun getRiskBody(c: Context): String {
RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.string.risk_card_outdated_risk_body return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) {
RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.string.risk_card_body_tracing_off when (riskLevelScore) {
RiskLevelConstants.UNKNOWN_RISK_INITIAL -> R.string.risk_card_unknown_risk_body RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.string.risk_card_outdated_risk_body
RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS_MANUAL -> R.string.risk_card_outdated_manual_risk_body RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.string.risk_card_body_tracing_off
else -> null RiskLevelConstants.UNKNOWN_RISK_INITIAL -> R.string.risk_card_unknown_risk_body
}?.let { c.getString(it) } ?: "" 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 * Formats the risk card text display of last persisted risk level
...@@ -55,23 +61,29 @@ data class TracingCardState( ...@@ -55,23 +61,29 @@ data class TracingCardState(
* the persisted risk level is of importance * the persisted risk level is of importance
*/ */
fun getSavedRiskBody(c: Context): String { fun getSavedRiskBody(c: Context): String {
return if ( return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) {
riskLevelScore == RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF || return if (
riskLevelScore == RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS || riskLevelScore == RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF ||
riskLevelScore == RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS_MANUAL riskLevelScore == RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS ||
) { riskLevelScore == RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS_MANUAL
when (lastRiskLevelScoreCalculated) { ) {
RiskLevelConstants.LOW_LEVEL_RISK, when (lastRiskLevelScoreCalculated) {
RiskLevelConstants.INCREASED_RISK, RiskLevelConstants.LOW_LEVEL_RISK,
RiskLevelConstants.UNKNOWN_RISK_INITIAL -> { RiskLevelConstants.INCREASED_RISK,
val arg = formatRiskLevelHeadline(c, lastRiskLevelScoreCalculated) RiskLevelConstants.UNKNOWN_RISK_INITIAL -> {
c.getString(R.string.risk_card_no_calculation_possible_body_saved_risk) val arg = formatRiskLevelHeadline(c, lastRiskLevelScoreCalculated)
.format(arg) c.getString(R.string.risk_card_no_calculation_possible_body_saved_risk)
.format(arg)
}
else -> ""
} }
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( ...@@ -189,7 +201,17 @@ data class TracingCardState(
*/ */
*/ */
fun getTimeFetched(c: Context): String { 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.LOW_LEVEL_RISK,
RiskLevelConstants.INCREASED_RISK -> { RiskLevelConstants.INCREASED_RISK -> {
if (lastTimeDiagnosisKeysFetched != null) { if (lastTimeDiagnosisKeysFetched != null) {
...@@ -247,15 +269,22 @@ data class TracingCardState( ...@@ -247,15 +269,22 @@ data class TracingCardState(
fun getRiskLevelHeadline(c: Context) = formatRiskLevelHeadline(c, riskLevelScore) fun getRiskLevelHeadline(c: Context) = formatRiskLevelHeadline(c, riskLevelScore)
fun formatRiskLevelHeadline(c: Context, riskLevelScore: Int) = when (riskLevelScore) { fun formatRiskLevelHeadline(c: Context, riskLevelScore: Int): String {
RiskLevelConstants.INCREASED_RISK -> R.string.risk_card_increased_risk_headline return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) {
RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.string.risk_card_outdated_risk_headline when (riskLevelScore) {
RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.string.risk_card_no_calculation_possible_headline RiskLevelConstants.INCREASED_RISK -> R.string.risk_card_increased_risk_headline
RiskLevelConstants.LOW_LEVEL_RISK -> R.string.risk_card_low_risk_headline RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.string.risk_card_outdated_risk_headline
RiskLevelConstants.UNKNOWN_RISK_INITIAL -> R.string.risk_card_unknown_risk_headline RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF ->
RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS_MANUAL -> R.string.risk_card_unknown_risk_headline R.string.risk_card_no_calculation_possible_headline
else -> null RiskLevelConstants.LOW_LEVEL_RISK -> R.string.risk_card_low_risk_headline
}?.let { c.getString(it) } ?: "" 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) { fun getProgressCardHeadline(c: Context): String = when (tracingProgress) {
TracingProgress.Downloading -> R.string.risk_card_progress_download_headline TracingProgress.Downloading -> R.string.risk_card_progress_download_headline
...@@ -271,11 +300,17 @@ data class TracingCardState( ...@@ -271,11 +300,17 @@ data class TracingCardState(
fun isTracingInProgress(): Boolean = tracingProgress != TracingProgress.Idle fun isTracingInProgress(): Boolean = tracingProgress != TracingProgress.Idle
fun getRiskInfoContainerBackgroundTint(c: Context): ColorStateList = when (riskLevelScore) { fun getRiskInfoContainerBackgroundTint(c: Context): ColorStateList {
RiskLevelConstants.INCREASED_RISK -> R.color.card_increased return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) {
RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.color.card_outdated when (riskLevelScore) {
RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.color.card_no_calculation RiskLevelConstants.INCREASED_RISK -> R.color.card_increased
RiskLevelConstants.LOW_LEVEL_RISK -> R.color.card_low RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> R.color.card_outdated
else -> R.color.card_unknown RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.color.card_no_calculation
}.let { c.getColorStateList(it) } 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)
}
}
} }
...@@ -25,18 +25,30 @@ abstract class BaseTracingState { ...@@ -25,18 +25,30 @@ abstract class BaseTracingState {
/** /**
* Formats the risk card colors for default and pressed states depending on risk level * Formats the risk card colors for default and pressed states depending on risk level
*/ */
fun getRiskColor(c: Context): Int = when (riskLevelScore) { fun getRiskColor(c: Context): Int {
RiskLevelConstants.INCREASED_RISK -> R.color.colorSemanticHighRisk return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) {
RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, when (riskLevelScore) {
RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.color.colorSemanticUnknownRisk RiskLevelConstants.INCREASED_RISK -> R.color.colorSemanticHighRisk
RiskLevelConstants.LOW_LEVEL_RISK -> R.color.colorSemanticLowRisk RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS,
else -> R.color.colorSemanticNeutralRisk RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> R.color.colorSemanticUnknownRisk
}.let { c.getColor(it) } 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) { fun isTracingOffRiskLevel(): Boolean {
RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, return if (tracingStatus != GeneralTracingStatus.Status.TRACING_INACTIVE) {
RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> true when (riskLevelScore) {
else -> false RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF,
RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> true
else -> false
}
} else {
return true
}
} }
fun getStableTextColor(c: Context): Int = c.getColor( fun getStableTextColor(c: Context): Int = c.getColor(
......
...@@ -146,6 +146,49 @@ class TracingCardStateTest : BaseTest() { ...@@ -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 @Test
fun `saved risk body is affected by risklevel`() { fun `saved risk body is affected by risklevel`() {
createInstance( createInstance(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment