From 19da2aac56f51b9519d58a794187e283f85b0bc3 Mon Sep 17 00:00:00 2001
From: Philipp Woessner <64482866+pwoessner@users.noreply.github.com>
Date: Fri, 12 Jun 2020 16:46:29 +0200
Subject: [PATCH] Feature/generic api exception (#425)

* added generic api exception message

* using already translated string

Co-authored-by: Hee Tatt Ooi <hee.tatt.ooi@sap.com>
---
 .../coronawarnapp/exception/reporting/ErrorCodes.kt  |  1 +
 .../exception/reporting/ErrorReportReceiver.kt       |  8 ++++++++
 .../exception/reporting/ExceptionReporter.kt         | 12 ++++++++++++
 .../exception/reporting/ReportingConstants.kt        |  1 +
 4 files changed, 22 insertions(+)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorCodes.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorCodes.kt
index 5b89a01d3..de691a2a9 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorCodes.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorCodes.kt
@@ -21,5 +21,6 @@ enum class ErrorCodes(val code: Int) {
     // NONTECHNICAL
     NO_NETWORK_CONNECTIVITY(1),
     NOT_ENOUGH_AVAILABLE_SPACE_ON_DISK(2),
+    API_EXCEPTION(3),
     EXTERNAL_NAVIGATION(10),
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorReportReceiver.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorReportReceiver.kt
index d9e4be92b..ff37fe4dd 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorReportReceiver.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorReportReceiver.kt
@@ -36,6 +36,14 @@ class ErrorReportReceiver(private val activity: Activity) : BroadcastReceiver()
             message = context.resources.getString(resId)
         }
 
+        if (intent.hasExtra(ReportingConstants.ERROR_REPORT_API_EXCEPTION_CODE)) {
+            val apiStatusCode = intent.getIntExtra(
+                ReportingConstants.ERROR_REPORT_API_EXCEPTION_CODE,
+                ErrorCodes.REPORTED_EXCEPTION_UNKNOWN_PROBLEM.code
+            )
+            message += "($apiStatusCode)"
+        }
+
         val stack = intent.getStringExtra(ReportingConstants.ERROR_REPORT_STACK_EXTRA)
         val title = context.resources.getString(R.string.errors_generic_headline)
         val confirm = context.resources.getString(R.string.errors_generic_button_positive)
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ExceptionReporter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ExceptionReporter.kt
index 2031a5936..3ad303932 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ExceptionReporter.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ExceptionReporter.kt
@@ -2,7 +2,9 @@ package de.rki.coronawarnapp.exception.reporting
 
 import android.content.Intent
 import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import com.google.android.gms.common.api.ApiException
 import de.rki.coronawarnapp.CoronaWarnApplication
+import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.exception.ExceptionCategory
 import java.io.PrintWriter
 import java.io.StringWriter
@@ -26,6 +28,16 @@ fun Throwable.report(
         this.resId?.let { intent.putExtra(ReportingConstants.ERROR_REPORT_RES_ID, it) }
     }
 
+    // override the message with a generic one if it is an ApiException
+    if (this is ApiException) {
+        intent.putExtra(
+            ReportingConstants.ERROR_REPORT_RES_ID,
+            R.string.errors_communication_with_api
+        )
+        intent.putExtra(ReportingConstants.ERROR_REPORT_CODE_EXTRA, ErrorCodes.API_EXCEPTION.code)
+        intent.putExtra(ReportingConstants.ERROR_REPORT_API_EXCEPTION_CODE, this.statusCode)
+    }
+
     val sw = StringWriter()
     this.printStackTrace()
     this.printStackTrace(PrintWriter(sw))
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ReportingConstants.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ReportingConstants.kt
index bf3bba615..be711c013 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ReportingConstants.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ReportingConstants.kt
@@ -8,6 +8,7 @@ object ReportingConstants {
     const val ERROR_REPORT_MESSAGE_EXTRA = "message"
     const val ERROR_REPORT_STACK_EXTRA = "stack"
     const val ERROR_REPORT_CODE_EXTRA = "code"
+    const val ERROR_REPORT_API_EXCEPTION_CODE = "api-exception-code"
     const val ERROR_REPORT_RES_ID = "res-id"
     val ERROR_REPORT_UNKNOWN_ERROR = ErrorCodes.REPORTED_EXCEPTION_UNKNOWN_PROBLEM.code
 }
-- 
GitLab