From 032afab99f2a3cdcf24e8ee547c48936dad52721 Mon Sep 17 00:00:00 2001 From: dominikgold Date: Wed, 9 Dec 2020 11:37:13 +0100 Subject: [PATCH] introduce HomeConnectError.StartProgramIssue for differentiating between different error cases when starting a program --- .../sdk/DefaultHomeConnectInteractor.kt | 9 ++++++--- .../sdk/HomeConnectAuthorization.kt | 2 -- .../homeconnect/util/HomeConnectError.kt | 18 ++++++++++-------- .../DefaultHomeConnectInteractorTest.kt | 2 +- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/sdk/DefaultHomeConnectInteractor.kt b/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/sdk/DefaultHomeConnectInteractor.kt index d365975..aca1bc3 100644 --- a/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/sdk/DefaultHomeConnectInteractor.kt +++ b/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/sdk/DefaultHomeConnectInteractor.kt @@ -63,11 +63,14 @@ internal class DefaultHomeConnectInteractor( try { val response = homeConnectApi.startProgram(forApplianceId, HomeConnectApiRequest(program)) if (!response.isSuccessful) { - val errorDescription = response.errorBody()?.tryParsingApiError()?.description - throw HomeConnectError.Unspecified(message = errorDescription ?: "", cause = HttpException(response)) + val error = response.errorBody()?.tryParsingApiError() + throw HomeConnectError.StartProgramIssue( + errorKey = error?.key ?: "", + message = error?.description ?: "", + cause = HttpException(response), + ) } } catch (e: Throwable) { - Log.e("HomeConnectApi", "starting a program failed", e) errorHandler.handle(e) } } diff --git a/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/sdk/HomeConnectAuthorization.kt b/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/sdk/HomeConnectAuthorization.kt index e7f37d6..8668162 100644 --- a/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/sdk/HomeConnectAuthorization.kt +++ b/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/sdk/HomeConnectAuthorization.kt @@ -3,8 +3,6 @@ package com.ajnsnewmedia.kitchenstories.homeconnect.sdk import android.annotation.SuppressLint import android.net.Uri import android.os.Bundle -import android.os.Parcel -import android.os.Parcelable import android.util.Log import android.webkit.WebChromeClient import android.webkit.WebResourceRequest diff --git a/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/util/HomeConnectError.kt b/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/util/HomeConnectError.kt index 8a5d300..ab0975f 100644 --- a/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/util/HomeConnectError.kt +++ b/home-connect/src/main/java/com/ajnsnewmedia/kitchenstories/homeconnect/util/HomeConnectError.kt @@ -8,29 +8,31 @@ sealed class HomeConnectError(message: String? = null, cause: Throwable? = null) object StaleAuthorization : HomeConnectError("The user session needs to be restored") + class StartProgramIssue(val errorKey: String, message: String?, cause: Throwable?) : HomeConnectError(message, cause) + class Unspecified(message: String?, cause: Throwable?) : HomeConnectError(message, cause) - abstract class UserAbortedAuthorization(errorDescription: String?): HomeConnectError("User aborted the login: '${errorDescription}'") + abstract class UserAbortedAuthorization(errorDescription: String?) : HomeConnectError("User aborted the login: '${errorDescription}'") /** * the user pressed cancel after logging in when reviewing the app permissions */ - class UserAbortedAuthorizationWhileGrantingPermissision(errorDescription: String?): UserAbortedAuthorization(errorDescription) + class UserAbortedAuthorizationWhileGrantingPermission(errorDescription: String?) : UserAbortedAuthorization(errorDescription) /** * The user pressed cancel on the username and password entry page */ - class UserAbortedAuthorizationOnLogin(errorDescription: String?): UserAbortedAuthorization(errorDescription) + class UserAbortedAuthorizationOnLogin(errorDescription: String?) : UserAbortedAuthorization(errorDescription) - companion object{ + companion object { fun getExceptionFromError(errorString: String?, errorDescription: String?, cause: Throwable?): HomeConnectError { //documentation from https://developer.home-connect.com/docs/authorization/authorizationerrors - return if (errorString == "access_denied"){ - if (errorDescription == "login aborted by the user"){ + return if (errorString == "access_denied") { + if (errorDescription == "login aborted by the user") { UserAbortedAuthorizationOnLogin(errorDescription) } else if (errorDescription == "grant operation aborted by the user") { - UserAbortedAuthorizationWhileGrantingPermissision(errorDescription) - }else { + UserAbortedAuthorizationWhileGrantingPermission(errorDescription) + } else { Unspecified(errorDescription, cause = cause) } } else { diff --git a/home-connect/src/test/java/com/ajnsnewmedia/kitchenstories/homeconnect/DefaultHomeConnectInteractorTest.kt b/home-connect/src/test/java/com/ajnsnewmedia/kitchenstories/homeconnect/DefaultHomeConnectInteractorTest.kt index 3745c33..083c733 100644 --- a/home-connect/src/test/java/com/ajnsnewmedia/kitchenstories/homeconnect/DefaultHomeConnectInteractorTest.kt +++ b/home-connect/src/test/java/com/ajnsnewmedia/kitchenstories/homeconnect/DefaultHomeConnectInteractorTest.kt @@ -146,7 +146,7 @@ class DefaultHomeConnectInteractorTest { whenever(homeConnectApi.startProgram(any(), any())).thenReturn(Response.error(400, "".toResponseBody())) verifyThrowingSuspended(action = { interactor.startProgram(forApplianceId = "appliance_id", testStartProgramRequest) }) { error -> - assertTrue(error is HomeConnectError.Unspecified) + assertTrue(error is HomeConnectError.StartProgramIssue) } }