From 11f0adbc386fabe06d04981569ac499275e26a76 Mon Sep 17 00:00:00 2001 From: Thomas Klingbeil <64434904+tklingbeil@users.noreply.github.com> Date: Tue, 2 Jun 2020 13:12:30 +0200 Subject: [PATCH] Add persistance of timestamp and whether user is allowed to submit keys (#74) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Store timestamp of receiving registration token * also reset this timestamp when deleting the registration token * use correct timestamp for display of test time * replace tracing activation time by test result reception time * rename TAN request to match context * set isAllowedToSubmitDiagnosisKeys properly Co-authored-by: Jakob Möller <jakob.moeller@sap.com> --- .../coronawarnapp/http/WebRequestBuilder.kt | 4 ++-- .../service/submission/SubmissionService.kt | 2 ++ .../de/rki/coronawarnapp/storage/LocalData.kt | 18 ++++++++++++++++++ .../storage/SubmissionRepository.kt | 6 ++++-- .../ui/viewmodel/SubmissionViewModel.kt | 2 ++ .../src/main/res/values/strings.xml | 3 +++ 6 files changed, 31 insertions(+), 4 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt index 7088a91ac..68167454a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt @@ -192,7 +192,7 @@ object WebRequestBuilder { ) = suspendCoroutine<String> { cont -> val requestID = UUID.randomUUID() - val getTestResultRequest = + val getTANRequest = TanRequest( url, requestID, @@ -209,7 +209,7 @@ object WebRequestBuilder { }, RequestErrorListener(requestID, cont) ) - RequestQueueHolder.addToRequestQueue(getTestResultRequest) + RequestQueueHolder.addToRequestQueue(getTANRequest) Log.d(TAG, "$requestID: Added $url to queue.") } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt index b6751d06c..77f4d57c1 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt @@ -22,6 +22,7 @@ object SubmissionService { testTAN != null -> asyncRegisterDeviceViaTAN(testTAN) else -> throw NoGUIDOrTANSetException() } + LocalData.devicePairingSuccessfulTimestamp(System.currentTimeMillis()) } private suspend fun asyncRegisterDeviceViaGUID(guid: String) { @@ -73,6 +74,7 @@ object SubmissionService { fun deleteRegistrationToken() { LocalData.registrationToken(null) + LocalData.devicePairingSuccessfulTimestamp(0L) } private fun deleteAuthCode() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt index a469d22a3..7725698b6 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt @@ -386,6 +386,24 @@ object LocalData { return timestamp } + fun devicePairingSuccessfulTimestamp(value: Long) = + with(getSharedPreferenceInstance().edit()) { + putLong( + CoronaWarnApplication.getAppContext() + .getString(R.string.preference_device_pairing_successful_time), + value + ) + commit() + } + + fun devicePairingSuccessfulTimestamp(): Long? { + return getSharedPreferenceInstance().getLong( + CoronaWarnApplication.getAppContext() + .getString(R.string.preference_device_pairing_successful_time), + 0L + ) + } + fun numberOfSuccessfulSubmissions(value: Int) = getSharedPreferenceInstance().edit(true) { putInt( diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt index 839ab0715..5d3546d60 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt @@ -19,12 +19,14 @@ object SubmissionRepository { val testResultValue = WebRequestBuilder.asyncGetTestResult(TEST_RESULT_URL, registrationToken) testResult.value = TestResult.fromInt(testResultValue) - + if (testResult == TestResult.POSITIVE) { + LocalData.isAllowedToSubmitDiagnosisKeys(true) + } val initialTestResultReceivedTimestamp = LocalData.inititalTestResultReceivedTimestamp() if (initialTestResultReceivedTimestamp == null) { val currentTime = System.currentTimeMillis() - LocalData.initialTracingActivationTimestamp(currentTime) + LocalData.inititalTestResultReceivedTimestamp(currentTime) testResultReceivedDate.value = Date(currentTime) } else { testResultReceivedDate.value = Date(initialTestResultReceivedTimestamp) 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 1fec0e4e1..e1fda8bb4 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 @@ -60,6 +60,8 @@ class SubmissionViewModel : ViewModel() { fun deregisterTestFromDevice() { deleteTestGUID() SubmissionService.deleteRegistrationToken() + LocalData.isAllowedToSubmitDiagnosisKeys(false) + LocalData.inititalTestResultReceivedTimestamp(0L) } private fun executeRequestWithState(apiRequest: suspend () -> Unit, state: MutableLiveData<ApiRequestState>) { diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml index 9075db9a4..2839a6bc0 100644 --- a/Corona-Warn-App/src/main/res/values/strings.xml +++ b/Corona-Warn-App/src/main/res/values/strings.xml @@ -47,6 +47,9 @@ <string name="preference_m_registration_token"> <xliff:g id="preference">preference_m_registration_token</xliff:g> </string> + <string name="preference_device_pairing_successful_time"> + <xliff:g id="preference">preference_device_pairing_successful_time</xliff:g> + </string> <string name="preference_initial_tracing_activation_time"> <xliff:g id="preference">preference_initial_tracing_activation_time</xliff:g> </string> -- GitLab