From 653715601911cc701191cd38f3102203dd930758 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 21 Aug 2023 13:16:59 +0530 Subject: [PATCH] Better handle login states Signed-off-by: Aayush Gupta --- .../main/java/com/aurora/store/data/State.kt | 5 ++- .../store/view/ui/account/AccountFragment.kt | 7 +++- .../store/view/ui/splash/SplashFragment.kt | 7 +++- .../store/viewmodel/auth/AuthViewModel.kt | 37 ++++++++++++------- app/src/main/res/values/strings.xml | 2 + 5 files changed, 41 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/aurora/store/data/State.kt b/app/src/main/java/com/aurora/store/data/State.kt index b5f86bd73..ec5889890 100644 --- a/app/src/main/java/com/aurora/store/data/State.kt +++ b/app/src/main/java/com/aurora/store/data/State.kt @@ -41,5 +41,6 @@ sealed class AuthState { object SignedOut : AuthState() object Valid : AuthState() object Fetching: AuthState() - data class Status(val status: String?) : AuthState() -} \ No newline at end of file + object Verifying: AuthState() + data class Failed(val status: String) : AuthState() +} diff --git a/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt b/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt index df4d55c6e..7d290499e 100644 --- a/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt @@ -104,8 +104,13 @@ class AccountFragment : Fragment(R.layout.fragment_account) { updateActionLayout(true) } - is AuthState.Status -> { + AuthState.Verifying -> { + updateStatus(getString(R.string.verifying_new_session)) + } + + is AuthState.Failed -> { updateStatus(it.status) + updateActionLayout(true) resetActions() } } diff --git a/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt b/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt index d896cdcd0..5fc18d2ca 100644 --- a/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt @@ -115,8 +115,13 @@ class SplashFragment : Fragment(R.layout.fragment_splash) { updateActionLayout(true) } - is AuthState.Status -> { + AuthState.Verifying -> { + updateStatus(getString(R.string.verifying_new_session)) + } + + is AuthState.Failed -> { updateStatus(it.status) + updateActionLayout(true) resetActions() } } diff --git a/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt index 18ea20670..7b09c4f64 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt @@ -87,7 +87,11 @@ class AuthViewModel(application: Application) : BaseAndroidViewModel(application val authData = AuthHelper.build(email, aasToken, properties) verifyAndSaveAuth(authData, AccountType.GOOGLE) } catch (exception: Exception) { - updateStatus("Failed to generate Session") + liveData.postValue( + AuthState.Failed( + (getApplication() as Context).getString(R.string.failed_to_generate_session) + ) + ) Log.e(TAG, "Failed to generate Session", exception) } } @@ -136,7 +140,7 @@ class AuthViewModel(application: Application) : BaseAndroidViewModel(application throwError(playResponse, getApplication()) } } catch (exception: Exception) { - updateStatus(exception.message.toString()) + liveData.postValue(AuthState.Failed(exception.message.toString())) Log.e(TAG, "Failed to generate Session", exception) } } @@ -180,7 +184,7 @@ class AuthViewModel(application: Application) : BaseAndroidViewModel(application throwError(playResponse, getApplication()) } } catch (exception: Exception) { - updateStatus(exception.message.toString()) + liveData.postValue(AuthState.Failed(exception.message.toString())) Log.e(TAG, "Failed to generate Session", exception) } } @@ -242,11 +246,18 @@ class AuthViewModel(application: Application) : BaseAndroidViewModel(application } } } catch (e: Exception) { - when (e) { - is UnknownHostException -> updateStatus("No network") - is ConnectException -> updateStatus("Could not connect to server") - else -> updateStatus("Unknown error") + val error = when (e) { + is UnknownHostException -> { + (getApplication() as Context).getString(R.string.title_no_network) + } + is ConnectException -> { + (getApplication() as Context).getString(R.string.server_unreachable) + } + else -> { + (getApplication() as Context).getString(R.string.bad_request) + } } + liveData.postValue(AuthState.Failed(error)) requestState = RequestState.Pending } } @@ -272,7 +283,7 @@ class AuthViewModel(application: Application) : BaseAndroidViewModel(application } private fun verifyAndSaveAuth(authData: AuthData, type: AccountType) { - updateStatus("Verifying new session") + liveData.postValue(AuthState.Verifying) if (spoofProvider.isLocaleSpoofEnabled()) { authData.locale = spoofProvider.getSpoofLocale() @@ -289,7 +300,11 @@ class AuthViewModel(application: Application) : BaseAndroidViewModel(application liveData.postValue(AuthState.SignedOut) requestState = RequestState.Pending - updateStatus("Failed to verify session") + liveData.postValue( + AuthState.Failed( + (getApplication() as Context).getString(R.string.failed_to_generate_session) + ) + ) } } @@ -314,10 +329,6 @@ class AuthViewModel(application: Application) : BaseAndroidViewModel(application Preferences.putBoolean(getApplication(), Constants.ACCOUNT_SIGNED_IN, signedIn) } - private fun updateStatus(status: String) { - liveData.postValue(AuthState.Status(status)) - } - @Throws(Exception::class) private fun throwError(playResponse: PlayResponse, context: Context) { when (playResponse.code) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c019a072c..8d67ac066 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -364,6 +364,8 @@ Internal error! Please retry after sometime Oops, You are rate limited Server unreachable + Failed to generate Session + Verifying new session Failed to generate session, error code: %1$d Check internet connectivity App Language