From 14f20d8fc7347f36812c9ad22d93b16dd7661d05 Mon Sep 17 00:00:00 2001
From: Kolya Opahle <k.opahle@sap.com>
Date: Thu, 26 Nov 2020 17:07:42 +0100
Subject: [PATCH] Export of Exposure Windows ambiguous (EXPOSUREAPP-4022)
 (#1736)

* Converted ExposureWindows to their json wrapper counterparts before exporting to give the json fields proper names instead of the obfuscated enf ones

Signed-off-by: Kolya Opahle <k.opahle@sap.com>

* Added timestamp to exposure window export

* Switched to a more file name compatible DateTimeFormat

Signed-off-by: Kolya Opahle <k.opahle@sap.com>

* ktlint says these are redundant, i don't like it but the overlords forced me to do it.

Signed-off-by: Kolya Opahle <k.opahle@sap.com>

* changed filename suffix to json

Co-authored-by: BMItter <berndus@gmx.de>
---
 ...tRiskLevelCalculationFragmentCWAViewModel.kt | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt
index 46bd664bd..9dd0b871e 100644
--- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt
+++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt
@@ -25,9 +25,11 @@ import de.rki.coronawarnapp.storage.TestSettings
 import de.rki.coronawarnapp.task.TaskController
 import de.rki.coronawarnapp.task.common.DefaultTaskRequest
 import de.rki.coronawarnapp.task.submitBlocking
+import de.rki.coronawarnapp.test.risklevel.entities.toExposureWindowJson
 import de.rki.coronawarnapp.ui.tracing.card.TracingCardStateProvider
 import de.rki.coronawarnapp.ui.tracing.common.tryLatestResultsWithDefaults
 import de.rki.coronawarnapp.util.NetworkRequestWrapper.Companion.withSuccess
+import de.rki.coronawarnapp.util.TimeStamper
 import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
 import de.rki.coronawarnapp.util.di.AppContext
 import de.rki.coronawarnapp.util.security.SecurityHelper
@@ -41,6 +43,7 @@ import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.flow.sample
 import kotlinx.coroutines.withContext
 import org.joda.time.Instant
+import org.joda.time.format.DateTimeFormat
 import timber.log.Timber
 import java.io.File
 import java.util.Date
@@ -56,7 +59,8 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor(
     private val appConfigProvider: AppConfigProvider,
     tracingCardStateProvider: TracingCardStateProvider,
     private val riskLevelStorage: RiskLevelStorage,
-    private val testSettings: TestSettings
+    private val testSettings: TestSettings,
+    private val timeStamper: TimeStamper
 ) : CWAViewModel(
     dispatcherProvider = dispatcherProvider
 ) {
@@ -225,17 +229,20 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor(
         Timber.d("Creating text file for Exposure Windows")
         launch(dispatcherProvider.IO) {
             val exposureWindows = riskLevelStorage.exposureWindows.firstOrNull()
+            val fileNameCompatibleTimestamp = timeStamper.nowUTC.toString(
+                DateTimeFormat.forPattern("yyyy-MM-DD-HH-mm-ss")
+            )
 
             val path = File(context.cacheDir, "share/")
             path.mkdirs()
 
-            val file = File(path, "exposureWindows.txt")
+            val file = File(path, "exposureWindows-$fileNameCompatibleTimestamp.json")
             file.bufferedWriter()
-                .use {
+                .use { writer ->
                     if (exposureWindows.isNullOrEmpty()) {
-                        it.appendLine("Exposure windows list was empty")
+                        writer.appendLine("Exposure windows list was empty")
                     } else {
-                        it.appendLine(gson.toJson(exposureWindows))
+                        writer.appendLine(gson.toJson(exposureWindows.map { it.toExposureWindowJson() }))
                     }
                 }
             shareFileEvent.postValue(file)
-- 
GitLab