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 9f23a0958369ed53342a94d09c7dd527d98ef72b..3b2323a43678459565c662bdf8a5b3d398b1a3f5 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 58d651827b5faf9752ca52ffb1fb8cb5648ab373..7b28f7cdf85e2e50696cb26e80b72732ec2223ff 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 99d00bfe09b590b55b6a3f49661018ca168be732..a7c7a04ed15f33e27dfefebdc7c84a8891208014 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 60376083e3218e6f765c16708cc0e5b579a356b8..7e78fd840c0bfef3902a54c7d54e7c95a9c0257c 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 9abda2c0f7385896b0dd40bce9f7c458665afcbb..9d7c44dc6f31a213e364c820d12c18d37c2168af 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 2e0406745742677dd41e23f8ce8b351f8bd5f58a..ffca652df4eaa17528ff38460e9f03926876b4a2 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 a880483f4cb00481bf8fddc79232611ce1a5fcf1..0806273fc493d4ada0889377129427bf640400e5 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"