From 4ea021301e38afb302d787024bc1ae77b926f5f8 Mon Sep 17 00:00:00 2001 From: Matthias Urhahn <matthias.urhahn@sap.com> Date: Thu, 10 Dec 2020 15:22:10 +0100 Subject: [PATCH] Fix merge regressions. * Renamed variables * Don't observe the countryList on the main thread (as it comes directly via appconfig now) --- .../consent/SubmissionConsentViewModel.kt | 9 +- ...tPositiveOtherWarningNoConsentViewModel.kt | 3 +- ...sionResultPositiveOtherWarningViewModel.kt | 111 ------------------ .../SubmissionYourConsentViewModel.kt | 3 +- .../consent/SubmissionConsentViewModelTest.kt | 9 +- .../SubmissionYourConsentViewModelTest.kt | 2 +- 6 files changed, 18 insertions(+), 119 deletions(-) delete mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningViewModel.kt diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModel.kt index e720c062a..eeda799a5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModel.kt @@ -5,18 +5,21 @@ import com.squareup.inject.assisted.AssistedInject import de.rki.coronawarnapp.storage.SubmissionRepository import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents +import de.rki.coronawarnapp.util.coroutine.DispatcherProvider import de.rki.coronawarnapp.util.ui.SingleLiveEvent import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory class SubmissionConsentViewModel @AssistedInject constructor( private val submissionRepository: SubmissionRepository, - interoperabilityRepository: InteroperabilityRepository -) : CWAViewModel() { + interoperabilityRepository: InteroperabilityRepository, + dispatcherProvider: DispatcherProvider +) : CWAViewModel(dispatcherProvider = dispatcherProvider) { val routeToScreen: SingleLiveEvent<SubmissionNavigationEvents> = SingleLiveEvent() - val countries = interoperabilityRepository.countryListFlow.asLiveData() + val countries = interoperabilityRepository.countryList + .asLiveData(context = dispatcherProvider.Default) fun onConsentButtonClick() { submissionRepository.giveConsentToSubmission() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModel.kt index 8ad813794..dd6496f0b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModel.kt @@ -31,7 +31,8 @@ class SubmissionResultPositiveOtherWarningNoConsentViewModel @AssistedInject con val showEnableTracingEvent = SingleLiveEvent<Unit>() - val countryList = interoperabilityRepository.countryListFlow.asLiveData() + val countryList = interoperabilityRepository.countryList + .asLiveData(context = dispatcherProvider.Default) init { tekHistoryUpdater.callback = object : TEKHistoryUpdater.Callback { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningViewModel.kt deleted file mode 100644 index a6153679a..000000000 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningViewModel.kt +++ /dev/null @@ -1,111 +0,0 @@ -package de.rki.coronawarnapp.ui.submission.warnothers - -import androidx.lifecycle.asLiveData -import com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey -import com.squareup.inject.assisted.Assisted -import com.squareup.inject.assisted.AssistedInject -import de.rki.coronawarnapp.exception.NoRegistrationTokenSetException -import de.rki.coronawarnapp.nearby.ENFClient -import de.rki.coronawarnapp.notification.TestResultNotificationService -import de.rki.coronawarnapp.service.submission.SubmissionService -import de.rki.coronawarnapp.storage.LocalData -import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository -import de.rki.coronawarnapp.submission.SubmissionTask -import de.rki.coronawarnapp.submission.Symptoms -import de.rki.coronawarnapp.task.TaskController -import de.rki.coronawarnapp.task.common.DefaultTaskRequest -import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents -import de.rki.coronawarnapp.util.coroutine.DispatcherProvider -import de.rki.coronawarnapp.util.flow.combine -import de.rki.coronawarnapp.util.ui.SingleLiveEvent -import de.rki.coronawarnapp.util.viewmodel.CWAViewModel -import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.onEach -import timber.log.Timber -import java.util.UUID - -class SubmissionResultPositiveOtherWarningViewModel @AssistedInject constructor( - @Assisted private val symptoms: Symptoms, - dispatcherProvider: DispatcherProvider, - private val enfClient: ENFClient, - private val taskController: TaskController, - interoperabilityRepository: InteroperabilityRepository, - private val testResultNotificationService: TestResultNotificationService -) : CWAViewModel(dispatcherProvider = dispatcherProvider) { - private var currentSubmissionRequestId: UUID? = null - - private val currentSubmission = taskController.tasks - .map { it.find { taskInfo -> taskInfo.taskState.request.id == currentSubmissionRequestId }?.taskState } - .onEach { - it?.let { - when { - it.isFailed -> submissionError.postValue(it.error) - it.isSuccessful -> routeToScreen.postValue(SubmissionNavigationEvents.NavigateToSubmissionDone) - } - } - } - - val uiState = combine( - currentSubmission, - interoperabilityRepository.countryList - ) { state, countries -> - WarnOthersState( - submitTaskState = state, - countryList = countries - ) - }.asLiveData(context = dispatcherProvider.Default) - - val submissionError = SingleLiveEvent<Throwable>() - val routeToScreen: SingleLiveEvent<SubmissionNavigationEvents> = SingleLiveEvent() - - val requestKeySharing = SingleLiveEvent<Unit>() - val showEnableTracingEvent = SingleLiveEvent<Unit>() - - fun onBackPressed() { - routeToScreen.postValue(SubmissionNavigationEvents.NavigateToTestResult) - } - - fun onWarnOthersPressed() { - launch { - if (enfClient.isTracingEnabled.first()) { - requestKeySharing.postValue(Unit) - } else { - showEnableTracingEvent.postValue(Unit) - } - } - } - - fun onKeysShared(keys: List<TemporaryExposureKey>) { - if (keys.isNotEmpty()) { - submitDiagnosisKeys(keys) - } else { - submitWithNoDiagnosisKeys() - routeToScreen.postValue(SubmissionNavigationEvents.NavigateToSubmissionDone) - } - testResultNotificationService.cancelPositiveTestResultNotification() - } - - private fun submitDiagnosisKeys(keys: List<TemporaryExposureKey>) { - Timber.d("submitDiagnosisKeys(keys=%s, symptoms=%s)", keys, symptoms) - val registrationToken = - LocalData.registrationToken() ?: throw NoRegistrationTokenSetException() - val taskRequest = DefaultTaskRequest( - SubmissionTask::class, - SubmissionTask.Arguments(registrationToken, keys, symptoms) - ) - currentSubmissionRequestId = taskRequest.id - taskController.submit(taskRequest) - } - - private fun submitWithNoDiagnosisKeys() { - Timber.d("submitWithNoDiagnosisKeys()") - SubmissionService.submissionSuccessful() - } - - @AssistedInject.Factory - interface Factory : CWAViewModelFactory<SubmissionResultPositiveOtherWarningViewModel> { - fun create(symptoms: Symptoms): SubmissionResultPositiveOtherWarningViewModel - } -} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModel.kt index 1d8817763..a0fce136f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModel.kt @@ -18,7 +18,8 @@ class SubmissionYourConsentViewModel @AssistedInject constructor( val clickEvent: SingleLiveEvent<SubmissionYourConsentEvents> = SingleLiveEvent() val consent = submissionRepository.hasGivenConsentToSubmission.asLiveData() - val countryList = interoperabilityRepository.countryListFlow.asLiveData() + val countryList = interoperabilityRepository.countryList + .asLiveData(context = dispatcherProvider.Default) fun goBack() { clickEvent.postValue(SubmissionYourConsentEvents.GoBack) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModelTest.kt index ffd94b9fd..a5f39e2e9 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModelTest.kt @@ -15,6 +15,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith +import testhelpers.TestDispatcherProvider import testhelpers.extensions.InstantExecutorExtension @ExtendWith(InstantExecutorExtension::class) @@ -30,9 +31,13 @@ class SubmissionConsentViewModelTest { @BeforeEach fun setUp() { MockKAnnotations.init(this) - every { interoperabilityRepository.countryListFlow } returns MutableStateFlow(countryList) + every { interoperabilityRepository.countryList } returns MutableStateFlow(countryList) every { submissionRepository.giveConsentToSubmission() } just Runs - viewModel = SubmissionConsentViewModel(submissionRepository, interoperabilityRepository) + viewModel = SubmissionConsentViewModel( + submissionRepository, + interoperabilityRepository, + dispatcherProvider = TestDispatcherProvider + ) } @Test diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModelTest.kt index 56b4b2e06..ae54f2e94 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModelTest.kt @@ -34,7 +34,7 @@ class SubmissionYourConsentViewModelTest : BaseTest() { @BeforeEach fun setUp() { MockKAnnotations.init(this) - every { interoperabilityRepository.countryListFlow } returns MutableStateFlow(countryList) + every { interoperabilityRepository.countryList } returns MutableStateFlow(countryList) every { submissionRepository.hasGivenConsentToSubmission } returns flowOf(true) every { submissionRepository.giveConsentToSubmission() } just Runs every { submissionRepository.revokeConsentToSubmission() } just Runs -- GitLab