From b4ebc42baf70263524a62b726652abcdc910028f Mon Sep 17 00:00:00 2001
From: Alex Paulescu <alex.paulescu@gmail.com>
Date: Tue, 29 Sep 2020 14:51:52 +0300
Subject: [PATCH] Embed country list for submission of keys screen
 (EXPOSUREAPP-2738) (#1234)

* Added country list to submission of keys screen

* Ktlint changes

* Added missing  s

* Added text changes

* Removed file from wrong location

* Reverted back to old way of instantiating countryList in SubmissionViewModel

* Removed hardcoded spacing

* Changed country list text style from bold to paragraph size

* Added dimen everywhere and added back en string

Co-authored-by: Alexandru.Paulescu <alexandru.paulescu@sap.com>
---
 .../ui/viewmodel/SubmissionViewModel.kt       |  3 ++
 ...ment_submission_positive_other_warning.xml |  1 +
 ...lude_submission_positive_other_warning.xml | 30 +++++++++++++++++--
 .../res/layout/view_country_list_entry.xml    |  2 +-
 .../src/main/res/values-de/strings.xml        |  4 ++-
 .../src/main/res/values/strings.xml           |  2 ++
 .../diagnosiskeys/download/CountryDataTest.kt |  1 -
 .../download/KeyFileDownloaderTest.kt         |  3 +-
 .../server/DiagnosisKeyApiTest.kt             |  1 -
 .../server/DiagnosisKeyServerTest.kt          |  1 -
 .../storage/KeyCacheRepositoryTest.kt         |  1 -
 .../ApplicationConfigurationServiceTest.kt    |  1 -
 .../RetrieveDiagnosisKeysTransactionTest.kt   |  1 -
 .../coronawarnapp/util/HashExtensionsTest.kt  |  4 +--
 .../util/database/CommonConvertersTest.kt     |  1 -
 .../extensions/InstantExecutorExtension.kt    |  1 -
 16 files changed, 42 insertions(+), 15 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt
index c40ebc853..bbdc09f3f 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt
@@ -13,6 +13,7 @@ import de.rki.coronawarnapp.service.submission.QRScanResult
 import de.rki.coronawarnapp.service.submission.SubmissionService
 import de.rki.coronawarnapp.storage.LocalData
 import de.rki.coronawarnapp.storage.SubmissionRepository
+import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository
 import de.rki.coronawarnapp.submission.Symptoms
 import de.rki.coronawarnapp.ui.SingleLiveEvent
 import de.rki.coronawarnapp.ui.submission.ApiRequestState
@@ -37,6 +38,7 @@ class SubmissionViewModel : ViewModel() {
 
     private val _submissionState = MutableLiveData(ApiRequestState.IDLE)
     private val _submissionError = MutableLiveData<Event<CwaWebException>>(null)
+    private val interoperabilityRepository = InteroperabilityRepository()
 
     val scanStatus: LiveData<Event<ScanStatus>> = _scanStatus
 
@@ -61,6 +63,7 @@ class SubmissionViewModel : ViewModel() {
 
     val symptomIndication = MutableLiveData<Symptoms.Indication?>()
     val symptomStart = MutableLiveData<Symptoms.StartOf?>()
+    val countryList = MutableLiveData(interoperabilityRepository.countryList)
 
     fun initSymptoms() {
         symptomIndication.postValue(null)
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml
index 527854758..555709a0a 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml
@@ -37,6 +37,7 @@
             layout="@layout/include_submission_positive_other_warning"
             android:layout_width="@dimen/match_constraint"
             android:layout_height="@dimen/match_constraint"
+            app:countryData="@{submissionViewModel.countryList}"
             app:layout_constraintBottom_toTopOf="@+id/guideline_action"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0.0"
diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_positive_other_warning.xml b/Corona-Warn-App/src/main/res/layout/include_submission_positive_other_warning.xml
index 84361b9aa..919bdf8f0 100644
--- a/Corona-Warn-App/src/main/res/layout/include_submission_positive_other_warning.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_submission_positive_other_warning.xml
@@ -1,11 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
-<layout xmlns:android="http://schemas.android.com/apk/res/android"
+<layout xmlns:tools="http://schemas.android.com/tools"
+    xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <data>
 
         <import type="de.rki.coronawarnapp.util.formatter.FormatterAccessibilityHelper" />
 
+        <variable
+            name="countryData"
+            type="java.util.List&lt;String&gt;" />
+
     </data>
 
     <ScrollView
@@ -51,6 +56,27 @@
                 app:layout_constraintStart_toStartOf="@id/guideline_start"
                 app:layout_constraintTop_toBottomOf="@+id/submission_positive_other_warning_headline" />
 
+            <TextView
+                android:id="@+id/submission_country_header_description"
+                style="@style/headline6"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                android:text="@{@string/submission_interoperability_list_title}"
+                app:layout_constraintEnd_toEndOf="@id/guideline_end"
+                app:layout_constraintStart_toStartOf="@id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/submission_positive_other_warning_text" />
+
+            <de.rki.coronawarnapp.ui.view.CountryList
+                android:id="@+id/countryList"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                app:layout_constraintEnd_toEndOf="@+id/submission_country_header_description"
+                app:layout_constraintStart_toStartOf="@+id/submission_country_header_description"
+                app:layout_constraintTop_toBottomOf="@+id/submission_country_header_description"
+                app:list="@{countryData}" />
+
             <include
                 android:id="@+id/submission_positive_location_card_16_years"
                 layout="@layout/include_16_years"
@@ -62,7 +88,7 @@
                 app:headline="@{@string/sixteen_title_text}"
                 app:layout_constraintEnd_toStartOf="@+id/guideline_card_end"
                 app:layout_constraintStart_toStartOf="@+id/guideline_card_start"
-                app:layout_constraintTop_toBottomOf="@+id/submission_positive_other_warning_text" />
+                app:layout_constraintTop_toBottomOf="@+id/countryList" />
 
             <include
                 android:id="@+id/submission_positive_other_privacy"
diff --git a/Corona-Warn-App/src/main/res/layout/view_country_list_entry.xml b/Corona-Warn-App/src/main/res/layout/view_country_list_entry.xml
index 7c4f38049..06461bae2 100644
--- a/Corona-Warn-App/src/main/res/layout/view_country_list_entry.xml
+++ b/Corona-Warn-App/src/main/res/layout/view_country_list_entry.xml
@@ -17,7 +17,7 @@
 
     <TextView
         android:id="@+id/country_list_entry_label"
-        style="@style/headline6"
+        style="@style/subtitle"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_marginStart="48dp"
diff --git a/Corona-Warn-App/src/main/res/values-de/strings.xml b/Corona-Warn-App/src/main/res/values-de/strings.xml
index 75849d04d..6ebc03a55 100644
--- a/Corona-Warn-App/src/main/res/values-de/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-de/strings.xml
@@ -950,7 +950,7 @@
     <!-- XHED: Page headline for the positive result additional warning page-->
     <string name="submission_positive_other_warning_headline">"Helfen Sie mit!"</string>
     <!-- YTXT: Body text for the positive result additional warning page-->
-    <string name="submission_positive_other_warning_body">"Als Nächstes können Sie dafür sorgen, dass das Corona-Warn-System Ihre lokal gespeicherten Zufallscodes der letzten 14 Tage an andere verteilt. So können Sie Ihre Mitmenschen warnen und helfen, die Infektionskette zu unterbrechen.\n\nDa ein Ansteckungsrisiko schon vor dem Erkrankungsbeginn bestehen und im Zeitverlauf variieren kann, bitten wir Sie auch anzugeben, wann eventuelle Corona-Symptome (z. B. Fieber oder Husten) zum ersten Mal bei Ihnen aufgetreten sind. Dadurch kann das Infektionsrisiko von anderen App-Nutzern, die Ihnen begegnet sind, genauer berechnet werden. Die Angabe des Symptombeginns ist optional. Wenn Sie keine Symptome haben oder keine Angaben machen möchten, können Sie „keine Angabe“ auswählen."</string>
+    <string name="submission_positive_other_warning_body">"Als Nächstes können Sie dafür sorgen, dass Ihre Mitmenschen über mögliche Risiko-Begegnungen gewarnt werden. Hierfür können Sie Ihre bislang nur auf Ihrem Smartphone gespeicherten Zufalls-IDs an das von den teilnehmenden Ländern gemeinsam betriebene europäische Serversystem zur Verfügung stellen. Von dort werden die Zufalls-IDs durch die teilnehmenden Länder an die Nutzer der jeweiligen offiziellen Corona-Apps verteilt. Nach dem täglichen Download der Zufalls-IDs werden die Nutzerinnen und Nutzer, mit denen Sie Kontakt hatten, dann gewarnt, sofern eine Risiko-Begegnung stattfand. Es werden nur Zufalls-IDs übertragen. Es werden keine persönlichen Daten wie Ihr Name, Ihre Adresse oder Ihr Aufenthaltsort mitgeteilt."</string>
     <!-- XHED: Title for the privacy card-->
     <string name="submission_positive_other_warning_privacy_title">"Datenschutz"</string>
     <!-- YTXT: Body text for the privacy card-->
@@ -959,6 +959,8 @@
     <string name="submission_positive_other_warning_button">"Einverstanden"</string>
     <!-- XACT: other warning - illustration description, explanation image -->
     <string name="submission_positive_other_illustration_description">"Ein Smartphone übermittelt einen positiven Testbefund verschlüsselt ins System."</string>
+    <!-- XHED: Title for the interop country list-->
+    <string name="submission_interoperability_list_title">"Derzeit nehmen die folgenden Länder an der länderübergreifenden Risiko-Ermittlung teil:"</string>
 
     <!-- Submission Country Selector -->
     <!-- XHED: Page title for the submission country selection page -->
diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml
index 9d41b7e11..305ed2efe 100644
--- a/Corona-Warn-App/src/main/res/values/strings.xml
+++ b/Corona-Warn-App/src/main/res/values/strings.xml
@@ -965,6 +965,8 @@
     <string name="submission_positive_other_warning_button">"Accept"</string>
     <!-- XACT: other warning - illustration description, explanation image -->
     <string name="submission_positive_other_illustration_description">"A device transmits an encrypted positive test diagnosis to the system."</string>
+    <!-- XHED: Title for the interop country list-->
+    <string name="submission_interoperability_list_title" />
 
     <!-- Submission Country Selector -->
     <!-- XHED: Page title for the submission country selection page -->
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/CountryDataTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/CountryDataTest.kt
index b936f5330..52f54f51b 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/CountryDataTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/CountryDataTest.kt
@@ -233,7 +233,6 @@ class CountryDataTest : BaseTest() {
             createCachedKey("2222-12-31", "23:00")
         )
 
-
         cd.getMissingHours(cachedHours) shouldBe emptyMap()
         cd.toMissingHours(cachedHours) shouldBe null
     }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/KeyFileDownloaderTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/KeyFileDownloaderTest.kt
index cd7e9536e..25746dcf2 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/KeyFileDownloaderTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/KeyFileDownloaderTest.kt
@@ -170,7 +170,8 @@ class KeyFileDownloaderTest : BaseIOTest() {
     }
 
     private fun mockKeyCacheUpdateComplete(
-        keyInfo: CachedKeyInfo, checksum: String
+        keyInfo: CachedKeyInfo,
+        checksum: String
     ) {
         keyRepoData[keyInfo.id] = keyInfo.copy(
             isDownloadComplete = checksum != null, checksumMD5 = checksum
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/server/DiagnosisKeyApiTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/server/DiagnosisKeyApiTest.kt
index 61255ae4d..a8ed796f6 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/server/DiagnosisKeyApiTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/server/DiagnosisKeyApiTest.kt
@@ -124,5 +124,4 @@ class DiagnosisKeyApiTest : BaseIOTest() {
         request.method shouldBe "GET"
         request.path shouldBe "/version/v1/diagnosis-keys/country/DE/date/2020-09-09/hour/23"
     }
-
 }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/server/DiagnosisKeyServerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/server/DiagnosisKeyServerTest.kt
index 16edc6a93..bce772243 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/server/DiagnosisKeyServerTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/server/DiagnosisKeyServerTest.kt
@@ -96,7 +96,6 @@ class DiagnosisKeyServerTest : BaseIOTest() {
         coVerify { api.getHourIndex("DE", "2000-01-01") }
     }
 
-
     @Test
     fun `download key files for day`() {
         val downloadServer = createDownloadServer()
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/storage/KeyCacheRepositoryTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/storage/KeyCacheRepositoryTest.kt
index a45a79487..95fe51504 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/storage/KeyCacheRepositoryTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/storage/KeyCacheRepositoryTest.kt
@@ -203,5 +203,4 @@ class KeyCacheRepositoryTest : BaseIOTest() {
             keyFilePath.exists() shouldBe false
         }
     }
-
 }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/applicationconfiguration/ApplicationConfigurationServiceTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/applicationconfiguration/ApplicationConfigurationServiceTest.kt
index eca0ea6cb..a7fe73eef 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/applicationconfiguration/ApplicationConfigurationServiceTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/applicationconfiguration/ApplicationConfigurationServiceTest.kt
@@ -47,7 +47,6 @@ class ApplicationConfigurationServiceTest : BaseTest() {
             every { AppInjector.component } returns this@apply
         }
 
-
         runBlocking {
             ApplicationConfigurationService.asyncRetrieveApplicationConfiguration()
             verify(exactly = 1) { appConfigBuilder.addAllSupportedCountries(any()) }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransactionTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransactionTest.kt
index 930461f6e..3140d9c86 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransactionTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransactionTest.kt
@@ -23,7 +23,6 @@ import kotlinx.coroutines.runBlocking
 import org.junit.jupiter.api.AfterEach
 import org.junit.jupiter.api.BeforeEach
 import org.junit.jupiter.api.Test
-import org.joda.time.Instant
 import org.joda.time.LocalDate
 import java.io.File
 import java.nio.file.Paths
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/HashExtensionsTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/HashExtensionsTest.kt
index 186d2973e..ad8d1c58d 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/HashExtensionsTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/HashExtensionsTest.kt
@@ -50,9 +50,9 @@ class HashExtensionsTest : BaseIOTest() {
         val testFile = File(testDir, fileName)
         try {
             testFile.printWriter().use { out ->
-                out.println("This is a test")
+                out.print("This is a test")
             }
-            testFile.hashToMD5() shouldBe "ff22941336956098ae9a564289d1bf1b"
+            testFile.hashToMD5() shouldBe "ce114e4501d2f4e2dcea3e17b546f339"
         } finally {
             testFile.delete()
         }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/database/CommonConvertersTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/database/CommonConvertersTest.kt
index baddf45d7..16c04ae99 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/database/CommonConvertersTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/database/CommonConvertersTest.kt
@@ -52,7 +52,6 @@ class CommonConvertersTest : BaseTest() {
         }
     }
 
-
     @Test
     fun `path conversion`() {
         converters.apply {
diff --git a/Corona-Warn-App/src/test/java/testhelpers/extensions/InstantExecutorExtension.kt b/Corona-Warn-App/src/test/java/testhelpers/extensions/InstantExecutorExtension.kt
index 5f9ab6410..60264bc21 100644
--- a/Corona-Warn-App/src/test/java/testhelpers/extensions/InstantExecutorExtension.kt
+++ b/Corona-Warn-App/src/test/java/testhelpers/extensions/InstantExecutorExtension.kt
@@ -21,5 +21,4 @@ class InstantExecutorExtension : BeforeEachCallback, AfterEachCallback {
     override fun afterEach(context: ExtensionContext?) {
         ArchTaskExecutor.getInstance().setDelegate(null)
     }
-
 }
-- 
GitLab