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