From cff0970447195bbdddf68e3044a8f312ec35c2d8 Mon Sep 17 00:00:00 2001
From: Matthias Urhahn <darken@darken.eu>
Date: Tue, 22 Sep 2020 14:33:04 +0200
Subject: [PATCH] Improve low storage error message (EXPOSUREAPP-2745) (#1190)

* Improve error message and add logic for future display of formatted error messages.

* Address PR review comments.
---
 .../storage/InsufficientStorageException.kt       | 15 ++++++++++++++-
 .../de/rki/coronawarnapp/util/FormattedError.kt   | 12 ++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)
 create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/FormattedError.kt

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/InsufficientStorageException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/InsufficientStorageException.kt
index 32d18cb7c..bb38a5844 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/InsufficientStorageException.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/InsufficientStorageException.kt
@@ -1,7 +1,20 @@
 package de.rki.coronawarnapp.storage
 
+import android.content.Context
+import android.text.format.Formatter
+import de.rki.coronawarnapp.util.FormattedError
 import java.io.IOException
 
 class InsufficientStorageException(
     val result: DeviceStorage.CheckResult
-) : IOException("Not enough free space (Want:${result.requiredBytes}; Have:${result.freeBytes}")
+) : IOException(
+    "Not enough free space: ${result.requiredBytes}B are required and only ${result.freeBytes}B are available."
+), FormattedError {
+
+    override fun getFormattedError(context: Context): String {
+        val formattedRequired = Formatter.formatShortFileSize(context, result.requiredBytes)
+        val formattedFree = Formatter.formatShortFileSize(context, result.freeBytes)
+        // TODO Replace with localized message when the exception is logged via new error tracking.
+        return "Not enough free space: $formattedRequired are required and only $formattedFree are available."
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/FormattedError.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/FormattedError.kt
new file mode 100644
index 000000000..cd100ebbc
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/FormattedError.kt
@@ -0,0 +1,12 @@
+package de.rki.coronawarnapp.util
+
+import android.content.Context
+
+interface FormattedError {
+    fun getFormattedError(context: Context): String
+}
+
+fun Throwable.tryFormattedError(context: Context): String = when (this) {
+    is FormattedError -> this.getFormattedError(context)
+    else -> localizedMessage ?: this.toString()
+}
-- 
GitLab