Skip to content
This repository was archived by the owner on Jun 20, 2023. It is now read-only.

Commit 5098b8d

Browse files
authored
Add truncated submission dialog and 429 error (EXPOSUREAPP-14366) (#5744)
* Add truncated submission dialog and 429 error. * Ignore missing translation. * Ignore missing translation in default strings file.
1 parent b4347b1 commit 5098b8d

20 files changed

+99
-11
lines changed

Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/submission/ui/SubmissionTestFragment.kt

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
1111
import de.rki.coronawarnapp.R
1212
import de.rki.coronawarnapp.appconfig.ConfigData
1313
import de.rki.coronawarnapp.databinding.FragmentTestSubmissionBinding
14+
import de.rki.coronawarnapp.srs.ui.dialogs.showTruncatedSubmissionDialog
1415
import de.rki.coronawarnapp.test.menu.ui.TestMenuItem
1516
import de.rki.coronawarnapp.tracing.ui.tracingConsentDialog
1617
import de.rki.coronawarnapp.ui.dialog.displayDialog
@@ -85,6 +86,7 @@ class SubmissionTestFragment : Fragment(R.layout.fragment_test_submission), Auto
8586
vm.srsSubmissionResult.observe(viewLifecycleOwner) { result ->
8687
when (result) {
8788
is Error -> displayDialog { setError(result.cause) }
89+
is TruncatedSubmission -> showTruncatedSubmissionDialog(result.numberOfDays) { }
8890
Success -> Toast.makeText(requireContext(), "SRS submission is successful", Toast.LENGTH_LONG).show()
8991
}
9092
}

Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/submission/ui/SubmissionTestFragmentViewModel.kt

+7-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import dagger.assisted.AssistedInject
1111
import de.rki.coronawarnapp.appconfig.AppConfigProvider
1212
import de.rki.coronawarnapp.appconfig.ConfigData
1313
import de.rki.coronawarnapp.srs.core.AndroidIdProvider
14+
import de.rki.coronawarnapp.srs.core.error.SrsSubmissionTruncatedException
1415
import de.rki.coronawarnapp.srs.core.model.SrsSubmissionType
1516
import de.rki.coronawarnapp.srs.core.repository.SrsSubmissionRepository
1617
import de.rki.coronawarnapp.srs.core.storage.SrsDevSettings
@@ -23,7 +24,6 @@ import de.rki.coronawarnapp.util.ui.SingleLiveEvent
2324
import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
2425
import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory
2526
import timber.log.Timber
26-
import kotlin.Exception
2727

2828
class SubmissionTestFragmentViewModel @AssistedInject constructor(
2929
@BaseGson baseGson: Gson,
@@ -92,7 +92,10 @@ class SubmissionTestFragmentViewModel @AssistedInject constructor(
9292
srsSubmissionRepository.submit(type = SrsSubmissionType.SRS_SELF_TEST)
9393
srsSubmissionResult.postValue(Success)
9494
} catch (e: Exception) {
95-
srsSubmissionResult.postValue(Error(e))
95+
when (e) {
96+
is SrsSubmissionTruncatedException -> srsSubmissionResult.postValue(TruncatedSubmission(e.message))
97+
else -> srsSubmissionResult.postValue(Error(e))
98+
}
9699
Timber.e(e, "submit()")
97100
}
98101
}
@@ -147,5 +150,7 @@ class SubmissionTestFragmentViewModel @AssistedInject constructor(
147150
}
148151

149152
sealed interface SrsSubmissionResult
153+
154+
data class TruncatedSubmission(val numberOfDays: String?) : SrsSubmissionResult
150155
data class Error(val cause: Exception) : SrsSubmissionResult
151156
object Success : SrsSubmissionResult

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/srs/core/error/SrsSubmissionException.kt

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class SrsSubmissionException(
3636
SRS_SUB_SERVER_ERROR("SRS_SUB_SERVER_ERROR", TextKey.TRY_AGAIN_LATER),
3737
SRS_SUB_400("SRS_SUB_400", TextKey.CALL_HOTLINE),
3838
SRS_SUB_403("SRS_SUB_403", TextKey.CALL_HOTLINE),
39+
SRS_SUB_429("SRS_SUB_429", TextKey.TRY_AGAIN_LATER),
3940

4041
// Local
4142
ANDROID_ID_INVALID_LOCAL("ANDROID_ID_INVALID_LOCAL", TextKey.DEVICE_NOT_TRUSTED),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package de.rki.coronawarnapp.srs.core.error
2+
3+
class SrsSubmissionTruncatedException(headerValue: String) : Exception(headerValue)

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/srs/core/server/SrsSubmissionServer.kt

+10-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import de.rki.coronawarnapp.exception.http.NetworkReadTimeoutException
1010
import de.rki.coronawarnapp.server.protocols.internal.SubmissionPayloadOuterClass
1111
import de.rki.coronawarnapp.srs.core.error.SrsSubmissionException
1212
import de.rki.coronawarnapp.srs.core.error.SrsSubmissionException.ErrorCode
13+
import de.rki.coronawarnapp.srs.core.error.SrsSubmissionTruncatedException
1314
import de.rki.coronawarnapp.srs.core.model.SrsSubmissionPayload
1415
import de.rki.coronawarnapp.tag
1516
import de.rki.coronawarnapp.util.PaddingTool
@@ -34,7 +35,9 @@ class SrsSubmissionServer @Inject constructor(
3435
submitPayload(payload)
3536
} catch (e: Exception) {
3637
throw when (e) {
37-
is SrsSubmissionException -> e
38+
is SrsSubmissionException,
39+
is SrsSubmissionTruncatedException -> e
40+
3841
is CwaUnknownHostException,
3942
is NetworkReadTimeoutException,
4043
is NetworkConnectTimeoutException -> SrsSubmissionException(ErrorCode.SRS_SUB_NO_NETWORK, cause = e)
@@ -75,13 +78,18 @@ class SrsSubmissionServer @Inject constructor(
7578

7679
val bodyResponse = api.submitPayload(payload.srsOtp.uuid.toString(), submissionPayload)
7780
if (bodyResponse.isSuccessful) {
81+
val truncatedHeaderException = bodyResponse.headers()[CWA_KEYS_TRUNCATED]
82+
if (truncatedHeaderException != null) {
83+
throw SrsSubmissionTruncatedException(truncatedHeaderException)
84+
}
7885
Timber.i("SRS submission is successful!")
7986
return
8087
}
8188

8289
throw when (bodyResponse.code()) {
8390
400 -> SrsSubmissionException(ErrorCode.SRS_SUB_400)
8491
403 -> SrsSubmissionException(ErrorCode.SRS_SUB_403)
92+
429 -> SrsSubmissionException(ErrorCode.SRS_SUB_429)
8593
in 400..499 -> SrsSubmissionException(ErrorCode.SRS_SUB_CLIENT_ERROR)
8694
// error code in 500..599
8795
else -> SrsSubmissionException(ErrorCode.SRS_SUB_SERVER_ERROR)
@@ -90,5 +98,6 @@ class SrsSubmissionServer @Inject constructor(
9098

9199
companion object {
92100
val TAG = tag<SrsSubmissionServer>()
101+
private const val CWA_KEYS_TRUNCATED = "cwa-keys-truncated"
93102
}
94103
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package de.rki.coronawarnapp.srs.ui.dialogs
2+
3+
import androidx.fragment.app.Fragment
4+
import de.rki.coronawarnapp.R
5+
import de.rki.coronawarnapp.ui.dialog.displayDialog
6+
7+
fun Fragment.showTruncatedSubmissionDialog(numberOfDays: String?, positiveFunction: () -> Unit) = displayDialog {
8+
title(R.string.srs_submission_truncated_warning_dialog_title)
9+
message(getString(R.string.srs_submission_truncated_warning_dialog_message, numberOfDays))
10+
positiveButton(R.string.srs_submission_truncated_warning_dialog_button) { positiveFunction() }
11+
}

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/srs/ui/symptoms/calendar/SrsSymptomsCalendarFragment.kt

+7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import de.rki.coronawarnapp.R
1212
import de.rki.coronawarnapp.databinding.FragmentSubmissionSymptomCalendarBinding
1313
import de.rki.coronawarnapp.srs.ui.dialogs.showCloseDialog
1414
import de.rki.coronawarnapp.srs.ui.dialogs.showSubmissionWarningDialog
15+
import de.rki.coronawarnapp.srs.ui.dialogs.showTruncatedSubmissionDialog
1516
import de.rki.coronawarnapp.submission.Symptoms
1617
import de.rki.coronawarnapp.ui.dialog.displayDialog
1718
import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl
@@ -85,6 +86,12 @@ class SrsSymptomsCalendarFragment : Fragment(R.layout.fragment_submission_sympto
8586
)
8687
)
8788

89+
is SrsSymptomsCalendarNavigation.TruncatedSubmission -> {
90+
showTruncatedSubmissionDialog(it.numberOfDays) {
91+
viewModel.onTruncatedDialogClick()
92+
}
93+
}
94+
8895
is SrsSymptomsCalendarNavigation.Error -> displayDialog {
8996
setError(it.cause)
9097
positiveButton(R.string.nm_faq_label) { openUrl(R.string.srs_faq_url) }

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/srs/ui/symptoms/calendar/SrsSymptomsCalendarNavigation.kt

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ sealed class SrsSymptomsCalendarNavigation {
99
object GoToHome : SrsSymptomsCalendarNavigation()
1010

1111
data class GoToThankYouScreen(val submissionType: SrsSubmissionType) : SrsSymptomsCalendarNavigation()
12+
13+
data class TruncatedSubmission(val numberOfDays: String?) : SrsSymptomsCalendarNavigation()
1214
data class Error(val cause: Exception) : SrsSymptomsCalendarNavigation()
1315

1416
object ShowSubmissionWarning : SrsSymptomsCalendarNavigation()

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/srs/ui/symptoms/calendar/SrsSymptomsCalendarViewModel.kt

+11-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import dagger.assisted.AssistedInject
77
import de.rki.coronawarnapp.bugreporting.reportProblem
88
import de.rki.coronawarnapp.presencetracing.checkins.CheckInRepository
99
import de.rki.coronawarnapp.presencetracing.checkins.common.completedCheckIns
10+
import de.rki.coronawarnapp.srs.core.error.SrsSubmissionTruncatedException
1011
import de.rki.coronawarnapp.srs.core.model.SrsSubmissionType
1112
import de.rki.coronawarnapp.srs.core.repository.SrsSubmissionRepository
1213
import de.rki.coronawarnapp.submission.Symptoms
@@ -41,6 +42,9 @@ class SrsSymptomsCalendarViewModel @AssistedInject constructor(
4142

4243
fun goHome() = events.postValue(SrsSymptomsCalendarNavigation.GoToHome)
4344

45+
fun onTruncatedDialogClick() =
46+
events.postValue(SrsSymptomsCalendarNavigation.GoToThankYouScreen(submissionType))
47+
4448
fun startSubmission() {
4549
if (symptomStartInternal.value == null) {
4650
IllegalStateException("Can't finish symptom indication without symptomStart value.")
@@ -66,7 +70,13 @@ class SrsSymptomsCalendarViewModel @AssistedInject constructor(
6670
)
6771
events.postValue(SrsSymptomsCalendarNavigation.GoToThankYouScreen(submissionType))
6872
} catch (e: Exception) {
69-
events.postValue(SrsSymptomsCalendarNavigation.Error(e))
73+
when (e) {
74+
is SrsSubmissionTruncatedException -> events.postValue(
75+
SrsSymptomsCalendarNavigation.TruncatedSubmission(e.message)
76+
)
77+
78+
else -> events.postValue(SrsSymptomsCalendarNavigation.Error(e))
79+
}
7080
} finally {
7181
showLoadingIndicator.postValue(false)
7282
}

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/srs/ui/symptoms/intro/SrsSymptomsIntroductionFragment.kt

+7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import de.rki.coronawarnapp.R
1212
import de.rki.coronawarnapp.databinding.FragmentSubmissionSymptomIntroBinding
1313
import de.rki.coronawarnapp.srs.ui.dialogs.showCloseDialog
1414
import de.rki.coronawarnapp.srs.ui.dialogs.showSubmissionWarningDialog
15+
import de.rki.coronawarnapp.srs.ui.dialogs.showTruncatedSubmissionDialog
1516
import de.rki.coronawarnapp.submission.Symptoms
1617
import de.rki.coronawarnapp.ui.dialog.displayDialog
1718
import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl
@@ -83,6 +84,12 @@ class SrsSymptomsIntroductionFragment : Fragment(R.layout.fragment_submission_sy
8384
)
8485
)
8586

87+
is SrsSymptomsIntroductionNavigation.TruncatedSubmission -> {
88+
showTruncatedSubmissionDialog(it.numberOfDays) {
89+
viewModel.onTruncatedDialogClick()
90+
}
91+
}
92+
8693
is SrsSymptomsIntroductionNavigation.Error -> displayDialog {
8794
setError(it.cause)
8895
positiveButton(R.string.nm_faq_label) { openUrl(R.string.srs_faq_url) }

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/srs/ui/symptoms/intro/SrsSymptomsIntroductionNavigation.kt

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ sealed class SrsSymptomsIntroductionNavigation {
1212
data class GoToThankYouScreen(val submissionType: SrsSubmissionType) : SrsSymptomsIntroductionNavigation()
1313

1414
object ShowSubmissionWarning : SrsSymptomsIntroductionNavigation()
15+
16+
data class TruncatedSubmission(val numberOfDays: String?) : SrsSymptomsIntroductionNavigation()
1517
data class Error(val cause: Exception) : SrsSymptomsIntroductionNavigation()
1618

1719
data class GoToSymptomCalendar(

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/srs/ui/symptoms/intro/SrsSymptomsIntroductionViewModel.kt

+11-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import dagger.assisted.AssistedFactory
66
import dagger.assisted.AssistedInject
77
import de.rki.coronawarnapp.presencetracing.checkins.CheckInRepository
88
import de.rki.coronawarnapp.presencetracing.checkins.common.completedCheckIns
9+
import de.rki.coronawarnapp.srs.core.error.SrsSubmissionTruncatedException
910
import de.rki.coronawarnapp.srs.core.model.SrsSubmissionType
1011
import de.rki.coronawarnapp.srs.core.repository.SrsSubmissionRepository
1112
import de.rki.coronawarnapp.submission.Symptoms
@@ -77,7 +78,13 @@ class SrsSymptomsIntroductionViewModel @AssistedInject constructor(
7778
)
7879
events.postValue(SrsSymptomsIntroductionNavigation.GoToThankYouScreen(submissionType))
7980
} catch (e: Exception) {
80-
events.postValue(SrsSymptomsIntroductionNavigation.Error(e))
81+
when (e) {
82+
is SrsSubmissionTruncatedException -> events.postValue(
83+
SrsSymptomsIntroductionNavigation.TruncatedSubmission(e.message)
84+
)
85+
86+
else -> events.postValue(SrsSymptomsIntroductionNavigation.Error(e))
87+
}
8188
} finally {
8289
showLoadingIndicator.postValue(false)
8390
}
@@ -96,6 +103,9 @@ class SrsSymptomsIntroductionViewModel @AssistedInject constructor(
96103

97104
fun goHome() = events.postValue(SrsSymptomsIntroductionNavigation.GoToHome)
98105

106+
fun onTruncatedDialogClick() =
107+
events.postValue(SrsSymptomsIntroductionNavigation.GoToThankYouScreen(submissionType))
108+
99109
private fun resetPreviousSubmissionConsents() = launch {
100110
try {
101111
Timber.d("Trying to reset submission consents")

Corona-Warn-App/src/main/res/values-bg/srs_submission_strings.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="UTF-8"?><resources>
1+
<?xml version="1.0" encoding="UTF-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
22

33
<!-- Home screen register test card -->
44
<!-- XHED: Register test card title -->

Corona-Warn-App/src/main/res/values-de/srs_submission_strings.xml

+9
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,15 @@
9595
<string name="srs_submission_warning_dialog_positive_button">Andere Warnen</string>
9696
<!-- XBUT: Submission warning negative button -->
9797
<string name="srs_submission_warning_dialog_negative_button">Abbrechen</string>
98+
99+
<!-- Srs Submission Truncated Warning Dialog -->
100+
<!-- XHED: Submission truncated warning dialog title -->
101+
<string name="srs_submission_truncated_warning_dialog_title">Hinweis</string>
102+
<!-- XTXT: Submission truncated warning message -->
103+
<string name="srs_submission_truncated_warning_dialog_message">Aufgrund des aktuell erhöhten Aufkommens von Warnungen über die App wurden nur Kontakte der letzen %s Tage gewarnt.</string>
104+
<!-- XBUT: Submission truncated warning ok button -->
105+
<string name="srs_submission_truncated_warning_dialog_button">Ok</string>
106+
98107
<!-- Srs Errors-->
99108
<!-- XTXT: SRS error title -->
100109
<string name="srs_error_title">Andere warnen nicht möglich</string>

Corona-Warn-App/src/main/res/values-pl/srs_submission_strings.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="UTF-8"?><resources>
1+
<?xml version="1.0" encoding="UTF-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
22

33
<!-- Home screen register test card -->
44
<!-- XHED: Register test card title -->

Corona-Warn-App/src/main/res/values-ro/srs_submission_strings.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="UTF-8"?><resources>
1+
<?xml version="1.0" encoding="UTF-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
22

33
<!-- Home screen register test card -->
44
<!-- XHED: Register test card title -->

Corona-Warn-App/src/main/res/values-tr/srs_submission_strings.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="UTF-8"?><resources>
1+
<?xml version="1.0" encoding="UTF-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
22

33
<!-- Home screen register test card -->
44
<!-- XHED: Register test card title -->

Corona-Warn-App/src/main/res/values-uk/srs_submission_strings.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="UTF-8"?><resources>
1+
<?xml version="1.0" encoding="UTF-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
22

33
<!-- Home screen register test card -->
44
<!-- XHED: Register test card title -->

Corona-Warn-App/src/main/res/values/srs_submission_strings.xml

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="UTF-8"?><resources>
1+
<?xml version="1.0" encoding="UTF-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
22

33
<!-- Home screen register test card -->
44
<!-- XHED: Register test card title -->
@@ -94,6 +94,15 @@
9494
<string name="srs_submission_warning_dialog_positive_button">"Warn Others"</string>
9595
<!-- XBUT: Submission warning negative button -->
9696
<string name="srs_submission_warning_dialog_negative_button">"Cancel"</string>
97+
98+
<!-- Srs Submission Truncated Warning Dialog -->
99+
<!-- XHED: Submission truncated warning dialog title -->
100+
<string name="srs_submission_truncated_warning_dialog_title">Hinweis</string>
101+
<!-- XTXT: Submission truncated warning message -->
102+
<string name="srs_submission_truncated_warning_dialog_message">Aufgrund des aktuell erhöhten Aufkommens von Warnungen über die App wurden nur Kontakte der letzen %s Tage gewarnt.</string>
103+
<!-- XBUT: Submission truncated warning ok button -->
104+
<string name="srs_submission_truncated_warning_dialog_button">Ok</string>
105+
97106
<!-- Srs Errors-->
98107
<!-- XTXT: SRS error title -->
99108
<string name="srs_error_title">"You Cannot Warn Others"</string>

Corona-Warn-App/src/test/java/de/rki/coronawarnapp/srs/core/server/SrsSubmissionServerTest.kt

+1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ internal class SrsSubmissionServerTest : BaseTest() {
9393
listOf(
9494
400 to SrsSubmissionException.ErrorCode.SRS_SUB_400,
9595
403 to SrsSubmissionException.ErrorCode.SRS_SUB_403,
96+
429 to SrsSubmissionException.ErrorCode.SRS_SUB_429,
9697
404 to SrsSubmissionException.ErrorCode.SRS_SUB_CLIENT_ERROR,
9798
505 to SrsSubmissionException.ErrorCode.SRS_SUB_SERVER_ERROR,
9899
).forEach { (responseErrorCode, errorCode) ->

0 commit comments

Comments
 (0)