From e7c26e2732e666d8739751a49eeb8381f928dcc5 Mon Sep 17 00:00:00 2001 From: Kolya Opahle <k.opahle@sap.com> Date: Wed, 10 Jun 2020 17:15:31 +0200 Subject: [PATCH] Loading indicators for registration requests (#318) * Added loading spinners to QR Code and TAN fragments * Added handling for error state produced by TransactionExceptions * Added spinner to other warning fragment Co-authored-by: Hee Tatt Ooi <hee.tatt.ooi@sap.com> Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> --- .../ui/submission/SubmissionQRCodeScanFragment.kt | 5 +++++ ...SubmissionResultPositiveOtherWarningFragment.kt | 14 ++++++++++++++ .../ui/submission/SubmissionTanFragment.kt | 5 +++++ .../ui/viewmodel/SubmissionViewModel.kt | 9 +++++++++ .../fragment_submission_positive_other_warning.xml | 13 +++++++++++++ .../layout/fragment_submission_qr_code_scan.xml | 11 +++++++++++ .../main/res/layout/fragment_submission_tan.xml | 11 +++++++++++ 7 files changed, 68 insertions(+) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt index 9f23a0958..3b2323a43 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt @@ -136,6 +136,11 @@ class SubmissionQRCodeScanFragment : Fragment() { }) viewModel.registrationState.observeEvent(viewLifecycleOwner, { + binding.submissionQrCodeScanSpinner.visibility = when (it) { + ApiRequestState.STARTED -> View.VISIBLE + else -> View.GONE + } + if (ApiRequestState.SUCCESS == it) { findNavController().doNavigate( SubmissionQRCodeScanFragmentDirections diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionResultPositiveOtherWarningFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionResultPositiveOtherWarningFragment.kt index 58d651827..7b28f7cdf 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionResultPositiveOtherWarningFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionResultPositiveOtherWarningFragment.kt @@ -52,6 +52,8 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(), } override fun onFailure(exception: Exception?) { + binding.submissionPositiveOtherWarningButtonNext.isEnabled = true + binding.submissionPositiveOtherWarningSpinner.visibility = View.GONE submissionFailed = true } @@ -137,6 +139,16 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(), }) submissionViewModel.submissionState.observeEvent(viewLifecycleOwner, { + binding.submissionPositiveOtherWarningButtonNext.isEnabled = when (it) { + ApiRequestState.STARTED -> false + else -> true + } + + binding.submissionPositiveOtherWarningSpinner.visibility = when (it) { + ApiRequestState.STARTED -> View.VISIBLE + else -> View.GONE + } + if (it == ApiRequestState.SUCCESS) { findNavController().doNavigate( SubmissionResultPositiveOtherWarningFragmentDirections @@ -148,6 +160,8 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(), private fun setButtonOnClickListener() { binding.submissionPositiveOtherWarningButtonNext.setOnClickListener { + binding.submissionPositiveOtherWarningButtonNext.isEnabled = false + binding.submissionPositiveOtherWarningSpinner.visibility = View.VISIBLE initiateWarningOthers() } binding.submissionPositiveOtherWarningHeader.headerButtonBack.buttonIcon.setOnClickListener { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt index 99d00bfe0..a7c7a04ed 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt @@ -101,6 +101,11 @@ class SubmissionTanFragment : Fragment() { binding.submissionTanHeader.headerButtonBack.buttonIcon.setOnClickListener { navigateToDispatchScreen() } submissionViewModel.registrationState.observeEvent(viewLifecycleOwner, { + binding.submissionTanSpinner.visibility = when (it) { + ApiRequestState.STARTED -> View.VISIBLE + else -> View.GONE + } + if (ApiRequestState.SUCCESS == it) { findNavController().doNavigate( SubmissionTanFragmentDirections.actionSubmissionTanFragmentToSubmissionResultFragment() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt index 60376083e..7e78fd840 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import de.rki.coronawarnapp.exception.ExceptionCategory +import de.rki.coronawarnapp.exception.TransactionException import de.rki.coronawarnapp.exception.http.CwaWebException import de.rki.coronawarnapp.exception.reporting.report import de.rki.coronawarnapp.service.submission.SubmissionService @@ -121,7 +122,15 @@ class SubmissionViewModel : ViewModel() { } catch (err: CwaWebException) { exceptionLiveData?.value = Event(err) state.value = Event(ApiRequestState.FAILED) + } catch (err: TransactionException) { + if (err.cause is CwaWebException) { + exceptionLiveData?.value = Event(err.cause) + } else { + err.report(ExceptionCategory.INTERNAL) + } + state.value = Event(ApiRequestState.FAILED) } catch (err: Exception) { + state.value = Event(ApiRequestState.FAILED) err.report(ExceptionCategory.INTERNAL) } } diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml index 9abda2c0f..9d7c44dc6 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml @@ -41,6 +41,19 @@ app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@id/guideline_action" /> + <ProgressBar + android:id="@+id/submission_positive_other_warning_spinner" + style="?android:attr/progressBarStyleHorizontal" + android:layout_width="@dimen/match_constraint" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_large" + android:indeterminate="true" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="@+id/submission_positive_other_warning_button_next" + app:layout_constraintEnd_toEndOf="@+id/submission_positive_other_warning_button_next" + app:layout_constraintStart_toStartOf="@+id/submission_positive_other_warning_button_next" + app:layout_constraintTop_toTopOf="@+id/submission_positive_other_warning_button_next" /> + <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_action" android:layout_width="wrap_content" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_qr_code_scan.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_qr_code_scan.xml index 2e0406745..ffca652df 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_qr_code_scan.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_qr_code_scan.xml @@ -40,6 +40,17 @@ app:layout_constraintStart_toStartOf="@+id/submission_qr_code_scan_preview" app:layout_constraintTop_toBottomOf="@+id/submission_qr_code_scan_guideline_center" /> + <ProgressBar + android:id="@+id/submission_qr_code_scan_spinner" + style="?android:attr/progressBarStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:visibility="gone" + app:layout_constraintEnd_toEndOf="@+id/submission_qr_code_scan_body" + app:layout_constraintStart_toStartOf="@+id/submission_qr_code_scan_body" + app:layout_constraintTop_toBottomOf="@+id/submission_qr_code_scan_body" /> + <include android:id="@+id/submission_qr_code_scan_close" layout="@layout/include_button_icon" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_tan.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_tan.xml index a880483f4..0806273fc 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_tan.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_tan.xml @@ -41,6 +41,17 @@ app:layout_constraintTop_toBottomOf="@+id/submission_tan_header" app:viewmodel="@{viewmodel}" /> + <ProgressBar + android:id="@+id/submission_tan_spinner" + style="?android:attr/progressBarStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/spacing_normal" + android:visibility="gone" + app:layout_constraintBottom_toTopOf="@+id/guideline_action" + app:layout_constraintEnd_toEndOf="@id/guideline_end" + app:layout_constraintStart_toStartOf="@id/guideline_start" /> + <Button android:id="@+id/submission_tan_button_enter" style="@style/buttonPrimary" -- GitLab