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

Merge pull request #1708 from corona-warn-app/fix/3770-warn-others-app-reset

Screen: Andere warnen --> Button Einverstanden greyed out (EXPOSUREAPP-3770)
parents 1b9e37c9 cba9aed0
No related branches found
No related tags found
No related merge requests found
...@@ -13,9 +13,7 @@ import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository ...@@ -13,9 +13,7 @@ import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository
import de.rki.coronawarnapp.submission.SubmissionTask import de.rki.coronawarnapp.submission.SubmissionTask
import de.rki.coronawarnapp.submission.Symptoms import de.rki.coronawarnapp.submission.Symptoms
import de.rki.coronawarnapp.task.TaskController import de.rki.coronawarnapp.task.TaskController
import de.rki.coronawarnapp.task.TaskState
import de.rki.coronawarnapp.task.common.DefaultTaskRequest import de.rki.coronawarnapp.task.common.DefaultTaskRequest
import de.rki.coronawarnapp.ui.submission.ApiRequestState
import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents
import de.rki.coronawarnapp.util.coroutine.DispatcherProvider import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
import de.rki.coronawarnapp.util.ui.SingleLiveEvent import de.rki.coronawarnapp.util.ui.SingleLiveEvent
...@@ -24,6 +22,7 @@ import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory ...@@ -24,6 +22,7 @@ import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory
import kotlinx.coroutines.flow.combineTransform import kotlinx.coroutines.flow.combineTransform
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import timber.log.Timber import timber.log.Timber
import java.util.UUID import java.util.UUID
...@@ -35,48 +34,35 @@ class SubmissionResultPositiveOtherWarningViewModel @AssistedInject constructor( ...@@ -35,48 +34,35 @@ class SubmissionResultPositiveOtherWarningViewModel @AssistedInject constructor(
interoperabilityRepository: InteroperabilityRepository, interoperabilityRepository: InteroperabilityRepository,
private val testResultNotificationService: TestResultNotificationService private val testResultNotificationService: TestResultNotificationService
) : CWAViewModel(dispatcherProvider = dispatcherProvider) { ) : CWAViewModel(dispatcherProvider = dispatcherProvider) {
private var currentSubmissionRequestId: UUID? = null private var currentSubmissionRequestId: UUID? = null
private val currentSubmission = taskController.tasks private val currentSubmission = taskController.tasks
.map { it.find { taskInfo -> taskInfo.taskState.type == SubmissionTask::class }?.taskState } .map { it.find { taskInfo -> taskInfo.taskState.request.id == currentSubmissionRequestId }?.taskState }
private val submissionState = currentSubmission .onEach {
.map { taskState -> it?.let {
when { when {
taskState == null -> ApiRequestState.IDLE it.isFailed -> submissionError.postValue(it.error)
taskState.isFailed -> ApiRequestState.FAILED.also { updateUI(taskState) } it.isSuccessful -> routeToScreen.postValue(SubmissionNavigationEvents.NavigateToSubmissionDone)
taskState.isFinished -> ApiRequestState.SUCCESS.also { updateUI(taskState) }
else -> ApiRequestState.STARTED
} }
} }
val submissionError = SingleLiveEvent<Throwable>() }
val uiState = combineTransform( val uiState = combineTransform(
submissionState, currentSubmission,
interoperabilityRepository.countryListFlow interoperabilityRepository.countryListFlow
) { state, countries -> ) { state, countries ->
WarnOthersState( WarnOthersState(
apiRequestState = state, submitTaskState = state,
countryList = countries countryList = countries
).also { emit(it) } ).also { emit(it) }
}.asLiveData(context = dispatcherProvider.Default) }.asLiveData(context = dispatcherProvider.Default)
val submissionError = SingleLiveEvent<Throwable>()
val routeToScreen: SingleLiveEvent<SubmissionNavigationEvents> = SingleLiveEvent() val routeToScreen: SingleLiveEvent<SubmissionNavigationEvents> = SingleLiveEvent()
val requestKeySharing = SingleLiveEvent<Unit>() val requestKeySharing = SingleLiveEvent<Unit>()
val showEnableTracingEvent = SingleLiveEvent<Unit>() val showEnableTracingEvent = SingleLiveEvent<Unit>()
private fun updateUI(taskState: TaskState) {
if (taskState.request.id == currentSubmissionRequestId) {
currentSubmissionRequestId = null
when {
taskState.isFailed ->
submissionError.postValue(taskState.error ?: return)
taskState.isSuccessful ->
routeToScreen.postValue(SubmissionNavigationEvents.NavigateToSubmissionDone)
}
}
}
fun onBackPressed() { fun onBackPressed() {
routeToScreen.postValue(SubmissionNavigationEvents.NavigateToTestResult) routeToScreen.postValue(SubmissionNavigationEvents.NavigateToTestResult)
} }
...@@ -104,10 +90,10 @@ class SubmissionResultPositiveOtherWarningViewModel @AssistedInject constructor( ...@@ -104,10 +90,10 @@ class SubmissionResultPositiveOtherWarningViewModel @AssistedInject constructor(
private fun submitDiagnosisKeys(keys: List<TemporaryExposureKey>) { private fun submitDiagnosisKeys(keys: List<TemporaryExposureKey>) {
Timber.d("submitDiagnosisKeys(keys=%s, symptoms=%s)", keys, symptoms) Timber.d("submitDiagnosisKeys(keys=%s, symptoms=%s)", keys, symptoms)
val registrationToken = val registrationToken =
LocalData.registrationToken() ?: throw NoRegistrationTokenSetException() LocalData.registrationToken() ?: throw NoRegistrationTokenSetException()
val taskRequest = DefaultTaskRequest( val taskRequest = DefaultTaskRequest(
SubmissionTask::class, SubmissionTask::class,
SubmissionTask.Arguments(registrationToken, keys, symptoms) SubmissionTask.Arguments(registrationToken, keys, symptoms)
) )
currentSubmissionRequestId = taskRequest.id currentSubmissionRequestId = taskRequest.id
taskController.submit(taskRequest) taskController.submit(taskRequest)
......
package de.rki.coronawarnapp.ui.submission.warnothers package de.rki.coronawarnapp.ui.submission.warnothers
import de.rki.coronawarnapp.task.TaskState
import de.rki.coronawarnapp.ui.Country import de.rki.coronawarnapp.ui.Country
import de.rki.coronawarnapp.ui.submission.ApiRequestState
data class WarnOthersState( data class WarnOthersState(
val apiRequestState: ApiRequestState, val submitTaskState: TaskState?,
val countryList: List<Country> val countryList: List<Country>
) { ) {
fun isSubmitButtonEnabled(): Boolean = fun isSubmitButtonEnabled(): Boolean =
apiRequestState == ApiRequestState.IDLE || apiRequestState == ApiRequestState.FAILED submitTaskState == null || submitTaskState.isFailed
fun isSubmitSpinnerVisible(): Boolean { fun isSubmitSpinnerVisible(): Boolean =
return apiRequestState == ApiRequestState.STARTED submitTaskState != null && submitTaskState.isActive
}
} }
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