Skip to content
Snippets Groups Projects
Unverified Commit e7c26e27 authored by Kolya Opahle's avatar Kolya Opahle Committed by GitHub
Browse files

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: default avatarHee Tatt Ooi <hee.tatt.ooi@sap.com>
Co-authored-by: default avatarharambasicluka <64483219+harambasicluka@users.noreply.github.com>
parent 40e72d50
No related branches found
No related tags found
No related merge requests found
...@@ -136,6 +136,11 @@ class SubmissionQRCodeScanFragment : Fragment() { ...@@ -136,6 +136,11 @@ class SubmissionQRCodeScanFragment : Fragment() {
}) })
viewModel.registrationState.observeEvent(viewLifecycleOwner, { viewModel.registrationState.observeEvent(viewLifecycleOwner, {
binding.submissionQrCodeScanSpinner.visibility = when (it) {
ApiRequestState.STARTED -> View.VISIBLE
else -> View.GONE
}
if (ApiRequestState.SUCCESS == it) { if (ApiRequestState.SUCCESS == it) {
findNavController().doNavigate( findNavController().doNavigate(
SubmissionQRCodeScanFragmentDirections SubmissionQRCodeScanFragmentDirections
......
...@@ -52,6 +52,8 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(), ...@@ -52,6 +52,8 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(),
} }
override fun onFailure(exception: Exception?) { override fun onFailure(exception: Exception?) {
binding.submissionPositiveOtherWarningButtonNext.isEnabled = true
binding.submissionPositiveOtherWarningSpinner.visibility = View.GONE
submissionFailed = true submissionFailed = true
} }
...@@ -137,6 +139,16 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(), ...@@ -137,6 +139,16 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(),
}) })
submissionViewModel.submissionState.observeEvent(viewLifecycleOwner, { 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) { if (it == ApiRequestState.SUCCESS) {
findNavController().doNavigate( findNavController().doNavigate(
SubmissionResultPositiveOtherWarningFragmentDirections SubmissionResultPositiveOtherWarningFragmentDirections
...@@ -148,6 +160,8 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(), ...@@ -148,6 +160,8 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(),
private fun setButtonOnClickListener() { private fun setButtonOnClickListener() {
binding.submissionPositiveOtherWarningButtonNext.setOnClickListener { binding.submissionPositiveOtherWarningButtonNext.setOnClickListener {
binding.submissionPositiveOtherWarningButtonNext.isEnabled = false
binding.submissionPositiveOtherWarningSpinner.visibility = View.VISIBLE
initiateWarningOthers() initiateWarningOthers()
} }
binding.submissionPositiveOtherWarningHeader.headerButtonBack.buttonIcon.setOnClickListener { binding.submissionPositiveOtherWarningHeader.headerButtonBack.buttonIcon.setOnClickListener {
......
...@@ -101,6 +101,11 @@ class SubmissionTanFragment : Fragment() { ...@@ -101,6 +101,11 @@ class SubmissionTanFragment : Fragment() {
binding.submissionTanHeader.headerButtonBack.buttonIcon.setOnClickListener { navigateToDispatchScreen() } binding.submissionTanHeader.headerButtonBack.buttonIcon.setOnClickListener { navigateToDispatchScreen() }
submissionViewModel.registrationState.observeEvent(viewLifecycleOwner, { submissionViewModel.registrationState.observeEvent(viewLifecycleOwner, {
binding.submissionTanSpinner.visibility = when (it) {
ApiRequestState.STARTED -> View.VISIBLE
else -> View.GONE
}
if (ApiRequestState.SUCCESS == it) { if (ApiRequestState.SUCCESS == it) {
findNavController().doNavigate( findNavController().doNavigate(
SubmissionTanFragmentDirections.actionSubmissionTanFragmentToSubmissionResultFragment() SubmissionTanFragmentDirections.actionSubmissionTanFragmentToSubmissionResultFragment()
......
...@@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData ...@@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import de.rki.coronawarnapp.exception.ExceptionCategory import de.rki.coronawarnapp.exception.ExceptionCategory
import de.rki.coronawarnapp.exception.TransactionException
import de.rki.coronawarnapp.exception.http.CwaWebException import de.rki.coronawarnapp.exception.http.CwaWebException
import de.rki.coronawarnapp.exception.reporting.report import de.rki.coronawarnapp.exception.reporting.report
import de.rki.coronawarnapp.service.submission.SubmissionService import de.rki.coronawarnapp.service.submission.SubmissionService
...@@ -121,7 +122,15 @@ class SubmissionViewModel : ViewModel() { ...@@ -121,7 +122,15 @@ class SubmissionViewModel : ViewModel() {
} catch (err: CwaWebException) { } catch (err: CwaWebException) {
exceptionLiveData?.value = Event(err) exceptionLiveData?.value = Event(err)
state.value = Event(ApiRequestState.FAILED) 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) { } catch (err: Exception) {
state.value = Event(ApiRequestState.FAILED)
err.report(ExceptionCategory.INTERNAL) err.report(ExceptionCategory.INTERNAL)
} }
} }
......
...@@ -41,6 +41,19 @@ ...@@ -41,6 +41,19 @@
app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintStart_toStartOf="@id/guideline_start"
app:layout_constraintTop_toBottomOf="@id/guideline_action" /> 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 <androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_action" android:id="@+id/guideline_action"
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
...@@ -40,6 +40,17 @@ ...@@ -40,6 +40,17 @@
app:layout_constraintStart_toStartOf="@+id/submission_qr_code_scan_preview" app:layout_constraintStart_toStartOf="@+id/submission_qr_code_scan_preview"
app:layout_constraintTop_toBottomOf="@+id/submission_qr_code_scan_guideline_center" /> 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 <include
android:id="@+id/submission_qr_code_scan_close" android:id="@+id/submission_qr_code_scan_close"
layout="@layout/include_button_icon" layout="@layout/include_button_icon"
......
...@@ -41,6 +41,17 @@ ...@@ -41,6 +41,17 @@
app:layout_constraintTop_toBottomOf="@+id/submission_tan_header" app:layout_constraintTop_toBottomOf="@+id/submission_tan_header"
app:viewmodel="@{viewmodel}" /> 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 <Button
android:id="@+id/submission_tan_button_enter" android:id="@+id/submission_tan_button_enter"
style="@style/buttonPrimary" style="@style/buttonPrimary"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment