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 e720c062a86e95c1a3350965ed4992753eb6d84b..eeda799a51864941379e9cc3874db29745d4d999 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 8ad813794781f8d08386f7408c9ae45853670da9..dd6496f0bad62d2630378233f8601beeb4e48982 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 a6153679a5251c26f3a08649433fe610c5ef5463..0000000000000000000000000000000000000000 --- 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 1d88177635eda8308a8972f6ec38ef20cbf88090..a0fce136fe88b66f72b7cda8c6b4d4693f77ea2a 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 ffd94b9fd68c12e2ccc9a33e7c3c00c68e854073..a5f39e2e9deda72b0f4c56fe8e4c7bf94d826f3b 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 56b4b2e063c1b7000eb5fe755d1f9703872a9a6f..ae54f2e94067f5e810a00766d60c63ab20c202ad 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