diff --git a/app/src/main/java/dev/itsvic/parceltracker/MainActivity.kt b/app/src/main/java/dev/itsvic/parceltracker/MainActivity.kt
index 281adf4..ca76265 100644
--- a/app/src/main/java/dev/itsvic/parceltracker/MainActivity.kt
+++ b/app/src/main/java/dev/itsvic/parceltracker/MainActivity.kt
@@ -43,6 +43,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.toRoute
+import com.squareup.moshi.JsonDataException
import dev.itsvic.parceltracker.api.APIKeyMissingException
import dev.itsvic.parceltracker.api.Parcel as APIParcel
import dev.itsvic.parceltracker.api.ParcelHistoryItem
@@ -196,6 +197,13 @@ fun ParcelAppNavigation(parcelToOpen: Int) {
LaunchedEffect(parcelWithStatus) {
if (dbParcel != null && !dbParcel.isArchived) {
+ fun apiParcelError(description: String, status: Status): APIParcel {
+ return APIParcel(
+ dbParcel.parcelId,
+ listOf(ParcelHistoryItem(description, LocalDateTime.now(), "")),
+ status)
+ }
+
launch(Dispatchers.IO) {
try {
apiParcel =
@@ -220,33 +228,30 @@ fun ParcelAppNavigation(parcelToOpen: Int) {
} catch (e: IOException) {
Log.w("MainActivity", "Failed fetch: $e")
apiParcel =
- APIParcel(
- dbParcel.parcelId,
- listOf(
- ParcelHistoryItem(
- context.getString(R.string.network_failure_detail),
- LocalDateTime.now(),
- "")),
- Status.NetworkFailure)
+ apiParcelError(
+ context.getString(R.string.network_failure_detail), Status.NetworkFailure)
} catch (_: ParcelNonExistentException) {
apiParcel =
- APIParcel(
- dbParcel.parcelId,
- listOf(
- ParcelHistoryItem(
- context.getString(R.string.parcel_doesnt_exist_detail),
- LocalDateTime.now(),
- "")),
- Status.NoData)
+ apiParcelError(
+ context.getString(R.string.parcel_doesnt_exist_detail), Status.NoData)
} catch (_: APIKeyMissingException) {
apiParcel =
- APIParcel(
- dbParcel.parcelId,
- listOf(
- ParcelHistoryItem(
- context.getString(R.string.error_no_api_key_provided),
- LocalDateTime.now(),
- "")),
+ apiParcelError(
+ context.getString(R.string.error_no_api_key_provided), Status.NetworkFailure)
+ } catch (e: JsonDataException) {
+ Log.w(
+ "MainActivity",
+ "Unexpected JSON response that could not be converted: ${e.message}")
+ apiParcel =
+ apiParcelError(
+ context.getString(R.string.error_json_conversion).format(e.message),
+ Status.NetworkFailure)
+ } catch (e: Exception) {
+ // catchall to avoid crashes
+ Log.e("MainActivity", "Unexpected error", e)
+ apiParcel =
+ apiParcelError(
+ context.getString(R.string.error_unexpected_detail).format(e.message),
Status.NetworkFailure)
}
}
diff --git a/app/src/main/java/dev/itsvic/parceltracker/api/UPSDeliveryService.kt b/app/src/main/java/dev/itsvic/parceltracker/api/UPSDeliveryService.kt
index db13801..9acf4bc 100644
--- a/app/src/main/java/dev/itsvic/parceltracker/api/UPSDeliveryService.kt
+++ b/app/src/main/java/dev/itsvic/parceltracker/api/UPSDeliveryService.kt
@@ -32,9 +32,7 @@ object UPSDeliveryService : DeliveryService {
val tokens = getCsrfTokens(trackingId)
val language = LocaleList.getDefault().get(0)
- val country =
- if (language.country.isEmpty()) defaultRegionsForLanguageCode[language.language]
- else language.country
+ val country = language.country.ifEmpty { defaultRegionsForLanguageCode[language.language] }
val locale = "${language.language}_$country"
val resp =
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 135f41d..51acf0d 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -18,7 +18,9 @@
Protokolle in Datei exportieren
Bearbeiten
Paket bearbeiten
+ Beim Parsen der Serverantwort ist ein Fehler aufgetreten, möglicherweise aufgrund einer Änderung der API.\n\nFehlermeldung der JSON Konvertierung:\n%1$s
Dieser Zustelldienst erfordert einen API-Schlüssel, aber es wurde keiner angegeben. Weitere Informationen finden Sie in den App-Einstellungen.
+ Ein unbekannter Fehler ist aufgetreten mit der Nachricht:\n%1$s.
Zurück
Name darf nicht leer sein.
Ignorieren
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b2fdd3f..d13f1dc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -19,7 +19,9 @@
Dump logs to file
Edit
Edit parcel
+ There was an error parsing the response, possibly because the API changed.\n\nJSON conversion error message:\n%1$s
This delivery service requires an API key, but none was provided. Check the app\'s settings for more information.
+ An unexpected error was encountered with the message:\n%1$s.
Go back
Name must not be blank.
Ignore