diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultAvailableFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultAvailableFragmentTest.kt index 20941db024c95eaf479e2c8afa8b113bb6a49377..b8c94ec58d480c7ac817a2f9c8e8e6c43e4eba56 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultAvailableFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultAvailableFragmentTest.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import androidx.test.ext.junit.runners.AndroidJUnit4 import dagger.Module import dagger.android.ContributesAndroidInjector +import de.rki.coronawarnapp.coronatest.type.CoronaTest import de.rki.coronawarnapp.datadonation.analytics.modules.keysubmission.AnalyticsKeySubmissionCollector import de.rki.coronawarnapp.presencetracing.checkins.CheckInRepository import de.rki.coronawarnapp.submission.SubmissionRepository @@ -11,6 +12,7 @@ import de.rki.coronawarnapp.submission.auto.AutoSubmission import de.rki.coronawarnapp.submission.data.tekhistory.TEKHistoryUpdater_Factory_Impl import de.rki.coronawarnapp.ui.submission.resultavailable.SubmissionTestResultAvailableFragment import de.rki.coronawarnapp.ui.submission.resultavailable.SubmissionTestResultAvailableViewModel +import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultConsentGivenFragmentArgs import de.rki.coronawarnapp.util.shortcuts.AppShortcutsHelper import io.mockk.MockKAnnotations import io.mockk.Runs @@ -41,6 +43,9 @@ class SubmissionTestResultAvailableFragmentTest : BaseUITest() { @MockK lateinit var appShortcutsHelper: AppShortcutsHelper @MockK lateinit var analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector @MockK lateinit var checkInRepository: CheckInRepository + @MockK lateinit var testType: CoronaTest.Type + private val resultAvailableFragmentArgs = + SubmissionTestResultConsentGivenFragmentArgs(testType = CoronaTest.Type.PCR).toBundle() @Rule @JvmField @@ -63,13 +68,14 @@ class SubmissionTestResultAvailableFragmentTest : BaseUITest() { submissionRepository = submissionRepository, autoSubmission = autoSubmission, analyticsKeySubmissionCollector = analyticsKeySubmissionCollector, - checkInRepository = checkInRepository + checkInRepository = checkInRepository, + testType = testType ) ) setupMockViewModel( object : SubmissionTestResultAvailableViewModel.Factory { - override fun create(): SubmissionTestResultAvailableViewModel = viewModel + override fun create(testType: CoronaTest.Type): SubmissionTestResultAvailableViewModel = viewModel } ) } @@ -83,14 +89,20 @@ class SubmissionTestResultAvailableFragmentTest : BaseUITest() { @Screenshot fun capture_fragment_with_consent() { every { viewModel.consent } returns MutableLiveData(true) - captureScreenshot<SubmissionTestResultAvailableFragment>("_consent") + captureScreenshot<SubmissionTestResultAvailableFragment>( + suffix = "_consent", + fragmentArgs = resultAvailableFragmentArgs + ) } @Test @Screenshot fun capture_fragment_without_consent() { every { viewModel.consent } returns MutableLiveData(false) - captureScreenshot<SubmissionTestResultAvailableFragment>("_no_consent") + captureScreenshot<SubmissionTestResultAvailableFragment>( + suffix = "_no_consent", + fragmentArgs = resultAvailableFragmentArgs + ) } } diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt index 97f06b6023be71680d732e9bc1dcb791831f1674..ee50cc5942512829c9b1d2b97dadc71e10bc6819 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt @@ -20,6 +20,7 @@ import de.rki.coronawarnapp.submission.SubmissionRepository import de.rki.coronawarnapp.submission.auto.AutoSubmission import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultConsentGivenFragment +import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultConsentGivenFragmentArgs import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultConsentGivenViewModel import io.mockk.MockKAnnotations import io.mockk.every @@ -48,6 +49,9 @@ class SubmissionTestResultConsentGivenFragmentTest : BaseUITest() { @MockK lateinit var autoSubmission: AutoSubmission @MockK lateinit var testResultAvailableNotificationService: PCRTestResultAvailableNotificationService @MockK lateinit var analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector + @MockK lateinit var testType: CoronaTest.Type + private val consentGivenFragmentArgs = + SubmissionTestResultConsentGivenFragmentArgs(testType = CoronaTest.Type.PCR).toBundle() @Rule @JvmField @@ -74,12 +78,13 @@ class SubmissionTestResultConsentGivenFragmentTest : BaseUITest() { autoSubmission, testResultAvailableNotificationService, analyticsKeySubmissionCollector, + testType, TestDispatcherProvider() ) ) setupMockViewModel( object : SubmissionTestResultConsentGivenViewModel.Factory { - override fun create(): SubmissionTestResultConsentGivenViewModel = viewModel + override fun create(testType: CoronaTest.Type): SubmissionTestResultConsentGivenViewModel = viewModel } ) } @@ -91,12 +96,12 @@ class SubmissionTestResultConsentGivenFragmentTest : BaseUITest() { @Test fun launch_fragment() { - launchFragment2<SubmissionTestResultConsentGivenFragment>() + launchFragment2<SubmissionTestResultConsentGivenFragment>(consentGivenFragmentArgs) } @Test fun testEventConsentGivenContinueWithSymptomsClicked() { - launchFragmentInContainer2<SubmissionTestResultConsentGivenFragment>().onFragment { fragment -> + launchFragmentInContainer2<SubmissionTestResultConsentGivenFragment>(consentGivenFragmentArgs).onFragment { fragment -> Navigation.setViewNavController(fragment.requireView(), navController) } // Verify that performing a click prompts the correct Navigation action @@ -111,11 +116,12 @@ class SubmissionTestResultConsentGivenFragmentTest : BaseUITest() { coronaTest = mockk<CoronaTest>().apply { every { testResult } returns CoronaTestResult.PCR_POSITIVE every { registeredAt } returns Instant.now() + every { type } returns CoronaTest.Type.PCR } ) ) - captureScreenshot<SubmissionTestResultConsentGivenFragment>() + captureScreenshot<SubmissionTestResultConsentGivenFragment>(fragmentArgs = consentGivenFragmentArgs) } } diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragmentTest.kt index 849a4e22013f7d00d36f500edb61df251c3d62bb..98685d2bed6ca2f06dc41bb304fef2560a9aedef 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragmentTest.kt @@ -73,6 +73,7 @@ class SubmissionTestResultFragmentTest : BaseUITest() { every { testResult } returns CoronaTestResult.PCR_POSITIVE every { registeredAt } returns Instant.now() every { isProcessing } returns false + every { type } returns CoronaTest.Type.PCR } ) ) @@ -118,6 +119,7 @@ class SubmissionTestResultFragmentTest : BaseUITest() { every { testResult } returns CoronaTestResult.PCR_OR_RAT_PENDING every { registeredAt } returns Instant.now() every { isProcessing } returns false + every { type } returns CoronaTest.Type.PCR } ) ) diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNegativeFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNegativeFragmentTest.kt index 53df826ee0150196d647da355c51c091e58f43bf..4086ecd6d3cfaa4e29942c3a22c6bce1013b78a4 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNegativeFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNegativeFragmentTest.kt @@ -11,6 +11,7 @@ import de.rki.coronawarnapp.submission.SubmissionRepository import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState import de.rki.coronawarnapp.ui.submission.testresult.negative.SubmissionTestResultNegativeFragment import de.rki.coronawarnapp.ui.submission.testresult.negative.SubmissionTestResultNegativeViewModel +import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultConsentGivenFragmentArgs import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.impl.annotations.MockK @@ -36,6 +37,9 @@ class SubmissionTestResultNegativeFragmentTest : BaseUITest() { lateinit var viewModel: SubmissionTestResultNegativeViewModel @MockK lateinit var submissionRepository: SubmissionRepository @MockK lateinit var testResultAvailableNotificationService: PCRTestResultAvailableNotificationService + @MockK lateinit var testType: CoronaTest.Type + private val resultNegativeFragmentArgs = + SubmissionTestResultConsentGivenFragmentArgs(testType = CoronaTest.Type.PCR).toBundle() @Rule @JvmField @@ -54,13 +58,14 @@ class SubmissionTestResultNegativeFragmentTest : BaseUITest() { SubmissionTestResultNegativeViewModel( TestDispatcherProvider(), submissionRepository, - testResultAvailableNotificationService + testResultAvailableNotificationService, + testType ) ) setupMockViewModel( object : SubmissionTestResultNegativeViewModel.Factory { - override fun create(): SubmissionTestResultNegativeViewModel = viewModel + override fun create(testType: CoronaTest.Type): SubmissionTestResultNegativeViewModel = viewModel } ) } @@ -78,10 +83,11 @@ class SubmissionTestResultNegativeFragmentTest : BaseUITest() { coronaTest = mockk<CoronaTest>().apply { every { testResult } returns CoronaTestResult.PCR_NEGATIVE every { registeredAt } returns Instant.now() + every { type } returns CoronaTest.Type.PCR } ) ) - captureScreenshot<SubmissionTestResultNegativeFragment>() + captureScreenshot<SubmissionTestResultNegativeFragment>(fragmentArgs = resultNegativeFragmentArgs) } } diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNoConsentGivenFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNoConsentGivenFragmentTest.kt index 3ec1a885ea9f0fef9e4443cda94977da3a276781..17de3dcefa6c55abad85cce5cbfedab66367dd3b 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNoConsentGivenFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNoConsentGivenFragmentTest.kt @@ -10,6 +10,7 @@ import de.rki.coronawarnapp.datadonation.analytics.modules.keysubmission.Analyti import de.rki.coronawarnapp.notification.PCRTestResultAvailableNotificationService import de.rki.coronawarnapp.submission.SubmissionRepository import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState +import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultConsentGivenFragmentArgs import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultNoConsentFragment import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultNoConsentViewModel import io.mockk.MockKAnnotations @@ -35,6 +36,9 @@ class SubmissionTestResultNoConsentGivenFragmentTest : BaseUITest() { @MockK lateinit var submissionRepository: SubmissionRepository @MockK lateinit var testResultAvailableNotificationService: PCRTestResultAvailableNotificationService @MockK lateinit var analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector + @MockK lateinit var testType: CoronaTest.Type + private val noConsentGivenFragmentArgs = + SubmissionTestResultConsentGivenFragmentArgs(testType = CoronaTest.Type.PCR).toBundle() @Rule @JvmField @@ -53,12 +57,13 @@ class SubmissionTestResultNoConsentGivenFragmentTest : BaseUITest() { SubmissionTestResultNoConsentViewModel( submissionRepository, testResultAvailableNotificationService, - analyticsKeySubmissionCollector + analyticsKeySubmissionCollector, + testType ) ) setupMockViewModel( object : SubmissionTestResultNoConsentViewModel.Factory { - override fun create(): SubmissionTestResultNoConsentViewModel = viewModel + override fun create(testType: CoronaTest.Type): SubmissionTestResultNoConsentViewModel = viewModel } ) } @@ -76,11 +81,12 @@ class SubmissionTestResultNoConsentGivenFragmentTest : BaseUITest() { coronaTest = mockk<CoronaTest>().apply { every { testResult } returns CoronaTestResult.PCR_POSITIVE every { registeredAt } returns Instant.now() + every { type } returns CoronaTest.Type.PCR } ) ) - captureScreenshot<SubmissionTestResultNoConsentFragment>() + captureScreenshot<SubmissionTestResultNoConsentFragment>(fragmentArgs = noConsentGivenFragmentArgs) } } diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionYourConsentFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionYourConsentFragmentTest.kt index 0fd406215f89d46298b82483eec683e8142cdae7..cd871668764b4b70aa3a3876611b154901b47b84 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionYourConsentFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionYourConsentFragmentTest.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.ui.submission import androidx.test.ext.junit.runners.AndroidJUnit4 import dagger.Module import dagger.android.ContributesAndroidInjector +import de.rki.coronawarnapp.coronatest.type.CoronaTest import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository import de.rki.coronawarnapp.submission.SubmissionRepository import de.rki.coronawarnapp.ui.submission.yourconsent.SubmissionYourConsentFragment @@ -29,6 +30,7 @@ class SubmissionYourConsentFragmentTest : BaseUITest() { @MockK lateinit var submissionRepository: SubmissionRepository @MockK lateinit var interoperabilityRepository: InteroperabilityRepository + @MockK lateinit var testType: CoronaTest.Type @Rule @JvmField @@ -44,10 +46,15 @@ class SubmissionYourConsentFragmentTest : BaseUITest() { MockKAnnotations.init(this, relaxed = true) every { submissionRepository.testForType(any()) } returns flowOf() viewModel = - SubmissionYourConsentViewModel(TestDispatcherProvider(), interoperabilityRepository, submissionRepository) + SubmissionYourConsentViewModel( + TestDispatcherProvider(), + interoperabilityRepository, + submissionRepository, + testType + ) setupMockViewModel( object : SubmissionYourConsentViewModel.Factory { - override fun create(): SubmissionYourConsentViewModel = viewModel + override fun create(testType: CoronaTest.Type): SubmissionYourConsentViewModel = viewModel } ) } @@ -61,7 +68,7 @@ class SubmissionYourConsentFragmentTest : BaseUITest() { @Screenshot fun capture_fragment_results() { captureScreenshot<SubmissionYourConsentFragment>( - fragmentArgs = SubmissionYourConsentFragmentArgs(true).toBundle() + fragmentArgs = SubmissionYourConsentFragmentArgs(true, testType).toBundle() ) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt index ff35f3915795045b9d37d746d8a55c58e1f90ef8..8516f8c8664fbd597c33d532eb4efab04fd4ffb7 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt @@ -187,7 +187,7 @@ class HomeFragmentViewModel @AssistedInject constructor( } is SubmissionStatePCR.TestNegative -> PcrTestNegativeCard.Item(state) { routeToScreen.postValue( - HomeFragmentDirections.actionMainFragmentToSubmissionTestResultNegativeFragment() + HomeFragmentDirections.actionMainFragmentToSubmissionTestResultNegativeFragment(CoronaTest.Type.PCR) ) } is SubmissionStatePCR.TestInvalid -> PcrTestInvalidCard.Item(state) { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentFragment.kt index 33dfa460c14a79465c8fd39988dc15e0701b8d90..c11dbe490f54cff9590b1355064a5553f09787d2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.View import androidx.activity.OnBackPressedCallback import androidx.fragment.app.Fragment +import androidx.navigation.fragment.navArgs import com.google.android.material.dialog.MaterialAlertDialogBuilder import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.CheckInsConsentFragmentBinding @@ -21,13 +22,16 @@ class CheckInsConsentFragment : Fragment(R.layout.check_ins_consent_fragment), A private val binding: CheckInsConsentFragmentBinding by viewBindingLazy() + private val navArgs by navArgs<CheckInsConsentFragmentArgs>() + @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory private val viewModel: CheckInsConsentViewModel by cwaViewModelsAssisted( factoryProducer = { viewModelFactory }, constructorCall = { factory, savedState -> factory as CheckInsConsentViewModel.Factory factory.create( - savedState = savedState + savedState = savedState, + testType = navArgs.testType, ) } ) @@ -69,7 +73,7 @@ class CheckInsConsentFragment : Fragment(R.layout.check_ins_consent_fragment), A ) CheckInsConsentNavigation.ToSubmissionTestResultConsentGivenFragment -> doNavigate( CheckInsConsentFragmentDirections - .actionCheckInsConsentFragmentToSubmissionTestResultConsentGivenFragment() + .actionCheckInsConsentFragmentToSubmissionTestResultConsentGivenFragment(navArgs.testType) ) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentViewModel.kt index 698969365ff832c50599f13f811632e2ca08142f..ee398a8155056d60b6dc033cf8fb1b988707a2ba 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentViewModel.kt @@ -27,14 +27,12 @@ class CheckInsConsentViewModel @AssistedInject constructor( dispatcherProvider: DispatcherProvider, private val checkInRepository: CheckInRepository, private val submissionRepository: SubmissionRepository, - private val autoSubmission: AutoSubmission + private val autoSubmission: AutoSubmission, + @Assisted private val testType: CoronaTest.Type ) : CWAViewModel(dispatcherProvider) { - // TODO Use navargs to supply this - private val coronaTestType: CoronaTest.Type = CoronaTest.Type.PCR - private val selectedSetFlow = MutableStateFlow(initialSet()) - private val coronaTest = submissionRepository.testForType(coronaTestType).filterNotNull() + private val coronaTest = submissionRepository.testForType(testType).filterNotNull() val checkIns: LiveData<List<CheckInsConsentItem>> = combine( checkInRepository.completedCheckIns, @@ -162,6 +160,7 @@ class CheckInsConsentViewModel @AssistedInject constructor( interface Factory : CWAViewModelFactory<CheckInsConsentViewModel> { fun create( savedState: SavedStateHandle, + testType: CoronaTest.Type ): CheckInsConsentViewModel } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/deletionwarning/SubmissionDeletionWarningFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/deletionwarning/SubmissionDeletionWarningFragment.kt index e3707942a9329a3423d9f6ab207aa30e078977a0..38b737b09b30de54bf34e26500b4c128e51842fb 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/deletionwarning/SubmissionDeletionWarningFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/deletionwarning/SubmissionDeletionWarningFragment.kt @@ -98,7 +98,9 @@ class SubmissionDeletionWarningFragment : Fragment(R.layout.fragment_submission_ SubmissionDeletionWarningViewModel.RegistrationType.TAN -> { doNavigate( SubmissionDeletionWarningFragmentDirections - .actionSubmissionDeletionFragmentToSubmissionTestResultNoConsentFragment() + .actionSubmissionDeletionFragmentToSubmissionTestResultNoConsentFragment( + viewModel.getTestType() + ) ) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/resultavailable/SubmissionTestResultAvailableFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/resultavailable/SubmissionTestResultAvailableFragment.kt index b8759f19066dd5eb922cb2c03cc98fc3e509b4de..93053d7e0a31f9c8cc8faeaebe68e6e95cac31c3 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/resultavailable/SubmissionTestResultAvailableFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/resultavailable/SubmissionTestResultAvailableFragment.kt @@ -6,6 +6,7 @@ import android.view.View import android.view.accessibility.AccessibilityEvent import androidx.activity.OnBackPressedCallback import androidx.fragment.app.Fragment +import androidx.navigation.fragment.navArgs import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSubmissionTestResultAvailableBinding import de.rki.coronawarnapp.tracing.ui.TracingConsentDialog @@ -17,7 +18,7 @@ import de.rki.coronawarnapp.util.ui.doNavigate import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider -import de.rki.coronawarnapp.util.viewmodel.cwaViewModels +import de.rki.coronawarnapp.util.viewmodel.cwaViewModelsAssisted import timber.log.Timber import javax.inject.Inject @@ -29,21 +30,30 @@ class SubmissionTestResultAvailableFragment : Fragment(R.layout.fragment_submiss @Inject lateinit var appShortcutsHelper: AppShortcutsHelper @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory - private val vm: SubmissionTestResultAvailableViewModel by cwaViewModels { viewModelFactory } private val binding: FragmentSubmissionTestResultAvailableBinding by viewBindingLazy() private lateinit var keyRetrievalProgress: SubmissionBlockingDialog + private val navArgs by navArgs<SubmissionTestResultAvailableFragmentArgs>() + + private val viewModel: SubmissionTestResultAvailableViewModel by cwaViewModelsAssisted( + factoryProducer = { viewModelFactory }, + constructorCall = { factory, _ -> + factory as SubmissionTestResultAvailableViewModel.Factory + factory.create(navArgs.testType) + } + ) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) keyRetrievalProgress = SubmissionBlockingDialog(requireContext()) val backCallback = object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() = vm.goBack() + override fun handleOnBackPressed() = viewModel.goBack() } requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, backCallback) - vm.consent.observe2(this) { + viewModel.consent.observe2(this) { if (it) { binding.submissionTestResultAvailableText.setText( R.string.submission_test_result_available_text_consent_given @@ -56,30 +66,30 @@ class SubmissionTestResultAvailableFragment : Fragment(R.layout.fragment_submiss binding.submissionTestResultAvailableConsentStatus.consent = it } - vm.showKeysRetrievalProgress.observe2(this) { show -> + viewModel.showKeysRetrievalProgress.observe2(this) { show -> Timber.i("SubmissionTestResult:showKeyRetrievalProgress:$show") keyRetrievalProgress.setState(show) binding.submissionTestResultAvailableProceedButton.isEnabled = !show } binding.apply { - submissionTestResultAvailableProceedButton.setOnClickListener { vm.proceed() } - submissionTestResultAvailableConsentStatus.setOnClickListener { vm.goConsent() } - submissionTestResultAvailableHeader.headerButtonBack.buttonIcon.setOnClickListener { vm.goBack() } + submissionTestResultAvailableProceedButton.setOnClickListener { viewModel.proceed() } + submissionTestResultAvailableConsentStatus.setOnClickListener { viewModel.goConsent() } + submissionTestResultAvailableHeader.headerButtonBack.buttonIcon.setOnClickListener { viewModel.goBack() } } - vm.showCloseDialog.observe2(this) { + viewModel.showCloseDialog.observe2(this) { showCloseDialog() } - vm.routeToScreen.observe2(this) { + viewModel.routeToScreen.observe2(this) { doNavigate(it) } - vm.showPermissionRequest.observe2(this) { permissionRequest -> + viewModel.showPermissionRequest.observe2(this) { permissionRequest -> permissionRequest.invoke(requireActivity()) } - vm.showTracingConsentDialog.observe2(this) { onConsentResult -> + viewModel.showTracingConsentDialog.observe2(this) { onConsentResult -> TracingConsentDialog(requireContext()).show( onConsentGiven = { onConsentResult(true) }, onConsentDeclined = { onConsentResult(false) } @@ -102,12 +112,12 @@ class SubmissionTestResultAvailableFragment : Fragment(R.layout.fragment_submiss negativeButton = R.string.submission_test_result_available_close_dialog_cancel_button, cancelable = true, positiveButtonFunction = {}, - negativeButtonFunction = { vm.onCancelConfirmed() } + negativeButtonFunction = { viewModel.onCancelConfirmed() } ) DialogHelper.showDialog(closeDialogInstance) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - vm.handleActivityResult(requestCode, resultCode, data) + viewModel.handleActivityResult(requestCode, resultCode, data) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/resultavailable/SubmissionTestResultAvailableViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/resultavailable/SubmissionTestResultAvailableViewModel.kt index 069dbdbe54906de32218bb61202cd0d263a996ef..e5bc9c33455c323b41aba5ba967aae1050eb2a5d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/resultavailable/SubmissionTestResultAvailableViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/resultavailable/SubmissionTestResultAvailableViewModel.kt @@ -5,6 +5,7 @@ import android.content.Intent import androidx.lifecycle.asLiveData import androidx.navigation.NavDirections import com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey +import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import de.rki.coronawarnapp.coronatest.type.CoronaTest @@ -19,7 +20,7 @@ import de.rki.coronawarnapp.submission.data.tekhistory.TEKHistoryUpdater 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 +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map @@ -31,15 +32,12 @@ class SubmissionTestResultAvailableViewModel @AssistedInject constructor( submissionRepository: SubmissionRepository, private val checkInRepository: CheckInRepository, private val autoSubmission: AutoSubmission, - private val analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector + private val analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector, + @Assisted private val testType: CoronaTest.Type ) : CWAViewModel(dispatcherProvider = dispatcherProvider) { - - // TODO Use navargs to supply this? - private val coronaTestType: CoronaTest.Type = CoronaTest.Type.PCR - val routeToScreen = SingleLiveEvent<NavDirections>() - private val consentFlow = submissionRepository.testForType(type = coronaTestType) + private val consentFlow = submissionRepository.testForType(type = testType) .filterNotNull() .map { it.isAdvancedConsentGiven } val consent = consentFlow.asLiveData(dispatcherProvider.Default) @@ -57,12 +55,12 @@ class SubmissionTestResultAvailableViewModel @AssistedInject constructor( val navDirections = if (completedCheckInsExist) { Timber.tag(TAG).d("Navigate to CheckInsConsentFragment") SubmissionTestResultAvailableFragmentDirections - .actionSubmissionTestResultAvailableFragmentToCheckInsConsentFragment() + .actionSubmissionTestResultAvailableFragmentToCheckInsConsentFragment(testType) } else { autoSubmission.updateMode(AutoSubmission.Mode.MONITOR) Timber.tag(TAG).d("Navigate to SubmissionTestResultConsentGivenFragment") SubmissionTestResultAvailableFragmentDirections - .actionSubmissionTestResultAvailableFragmentToSubmissionTestResultConsentGivenFragment() + .actionSubmissionTestResultAvailableFragmentToSubmissionTestResultConsentGivenFragment(testType) } routeToScreen.postValue(navDirections) } @@ -72,7 +70,7 @@ class SubmissionTestResultAvailableViewModel @AssistedInject constructor( showKeysRetrievalProgress.postValue(false) routeToScreen.postValue( SubmissionTestResultAvailableFragmentDirections - .actionSubmissionTestResultAvailableFragmentToSubmissionTestResultNoConsentFragment() + .actionSubmissionTestResultAvailableFragmentToSubmissionTestResultNoConsentFragment(testType) ) } @@ -118,6 +116,7 @@ class SubmissionTestResultAvailableViewModel @AssistedInject constructor( routeToScreen.postValue( SubmissionTestResultAvailableFragmentDirections .actionSubmissionTestResultAvailableFragmentToSubmissionYourConsentFragment( + testType = testType, isTestResultAvailable = true ) ) @@ -135,7 +134,7 @@ class SubmissionTestResultAvailableViewModel @AssistedInject constructor( showKeysRetrievalProgress.postValue(false) routeToScreen.postValue( SubmissionTestResultAvailableFragmentDirections - .actionSubmissionTestResultAvailableFragmentToSubmissionTestResultNoConsentFragment() + .actionSubmissionTestResultAvailableFragmentToSubmissionTestResultNoConsentFragment(testType) ) } } @@ -147,7 +146,9 @@ class SubmissionTestResultAvailableViewModel @AssistedInject constructor( } @AssistedFactory - interface Factory : SimpleCWAViewModelFactory<SubmissionTestResultAvailableViewModel> + interface Factory : CWAViewModelFactory<SubmissionTestResultAvailableViewModel> { + fun create(testType: CoronaTest.Type): SubmissionTestResultAvailableViewModel + } companion object { private const val TAG = "TestAvailableViewModel" diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt index 8e7ec16ac0fa7dd84cff1afc0bfc7790c3a78117..083d67a6601505ff81f9c9a7c65b992b8cb8b0f1 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt @@ -5,6 +5,7 @@ import android.view.View import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.coronatest.type.CoronaTest import de.rki.coronawarnapp.databinding.FragmentSubmissionTanBinding import de.rki.coronawarnapp.exception.http.BadRequestException import de.rki.coronawarnapp.exception.http.CwaClientError @@ -84,7 +85,9 @@ class SubmissionTanFragment : Fragment(R.layout.fragment_submission_tan), AutoIn if (ApiRequestState.SUCCESS == it) { // TODO What about negative tests and consent? doNavigate( - SubmissionTanFragmentDirections.actionSubmissionTanFragmentToSubmissionTestResultNoConsentFragment() + SubmissionTanFragmentDirections.actionSubmissionTanFragmentToSubmissionTestResultNoConsentFragment( + CoronaTest.Type.PCR + ) ) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/invalid/SubmissionTestResultInvalidFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/invalid/SubmissionTestResultInvalidFragment.kt index 8ee096b5f6da43022e8b30083fbd8775f0c97924..260b40ed42ac2e2ac116bac144dba491046fd0c4 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/invalid/SubmissionTestResultInvalidFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/invalid/SubmissionTestResultInvalidFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.View import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment +import androidx.navigation.fragment.navArgs import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSubmissionTestResultInvalidBinding import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat @@ -15,13 +16,21 @@ import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.popBackStack import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider -import de.rki.coronawarnapp.util.viewmodel.cwaViewModels +import de.rki.coronawarnapp.util.viewmodel.cwaViewModelsAssisted import javax.inject.Inject class SubmissionTestResultInvalidFragment : Fragment(R.layout.fragment_submission_test_result_invalid), AutoInject { + private val navArgs by navArgs<SubmissionTestResultInvalidFragmentArgs>() + @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory - private val viewModel: SubmissionTestResultInvalidViewModel by cwaViewModels { viewModelFactory } + private val viewModel: SubmissionTestResultInvalidViewModel by cwaViewModelsAssisted( + factoryProducer = { viewModelFactory }, + constructorCall = { factory, _ -> + factory as SubmissionTestResultInvalidViewModel.Factory + factory.create(navArgs.testType) + } + ) private val binding: FragmentSubmissionTestResultInvalidBinding by viewBindingLazy() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/invalid/SubmissionTestResultInvalidViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/invalid/SubmissionTestResultInvalidViewModel.kt index d6e40ed1b55061fac0d811365af65631c574f058..163264bb67137733718622557b47349967f9ada0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/invalid/SubmissionTestResultInvalidViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/invalid/SubmissionTestResultInvalidViewModel.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.ui.submission.testresult.invalid import androidx.lifecycle.LiveData import androidx.lifecycle.asLiveData import androidx.navigation.NavDirections +import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import de.rki.coronawarnapp.coronatest.type.CoronaTest @@ -12,7 +13,7 @@ import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState 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 +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map import timber.log.Timber @@ -21,17 +22,16 @@ class SubmissionTestResultInvalidViewModel @AssistedInject constructor( dispatcherProvider: DispatcherProvider, private val submissionRepository: SubmissionRepository, private val testResultAvailableNotificationService: PCRTestResultAvailableNotificationService, + @Assisted private val testType: CoronaTest.Type ) : CWAViewModel(dispatcherProvider = dispatcherProvider) { - // TODO Use navargs to supply this - private val coronaTestType: CoronaTest.Type = CoronaTest.Type.PCR init { - Timber.v("init() coronaTestType=%s", coronaTestType) + Timber.v("init() coronaTestType=%s", testType) } val routeToScreen = SingleLiveEvent<NavDirections?>() - val testResult: LiveData<TestResultUIState> = submissionRepository.testForType(type = coronaTestType) + val testResult: LiveData<TestResultUIState> = submissionRepository.testForType(type = testType) .filterNotNull() .map { test -> TestResultUIState(coronaTest = test) @@ -40,16 +40,18 @@ class SubmissionTestResultInvalidViewModel @AssistedInject constructor( fun deregisterTestFromDevice() = launch { Timber.d("deregisterTestFromDevice()") - submissionRepository.removeTestFromDevice(type = coronaTestType) + submissionRepository.removeTestFromDevice(type = testType) routeToScreen.postValue(null) } fun onTestOpened() = launch { Timber.d("onTestOpened()") - submissionRepository.setViewedTestResult(type = coronaTestType) + submissionRepository.setViewedTestResult(type = testType) testResultAvailableNotificationService.cancelTestResultAvailableNotification() } @AssistedFactory - interface Factory : SimpleCWAViewModelFactory<SubmissionTestResultInvalidViewModel> + interface Factory : CWAViewModelFactory<SubmissionTestResultInvalidViewModel> { + fun create(testType: CoronaTest.Type): SubmissionTestResultInvalidViewModel + } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/negative/SubmissionTestResultNegativeFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/negative/SubmissionTestResultNegativeFragment.kt index 3372b725f72f8731e29955ac4a37d8e49b3af704..082c4a3b8bd6a1da185ffabdde0718ee0ef2e5e5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/negative/SubmissionTestResultNegativeFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/negative/SubmissionTestResultNegativeFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.View import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment +import androidx.navigation.fragment.navArgs import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSubmissionTestResultNegativeBinding import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat @@ -15,13 +16,21 @@ import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.popBackStack import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider -import de.rki.coronawarnapp.util.viewmodel.cwaViewModels +import de.rki.coronawarnapp.util.viewmodel.cwaViewModelsAssisted import javax.inject.Inject class SubmissionTestResultNegativeFragment : Fragment(R.layout.fragment_submission_test_result_negative), AutoInject { + private val navArgs by navArgs<SubmissionTestResultNegativeFragmentArgs>() + @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory - private val viewModel: SubmissionTestResultNegativeViewModel by cwaViewModels { viewModelFactory } + private val viewModel: SubmissionTestResultNegativeViewModel by cwaViewModelsAssisted( + factoryProducer = { viewModelFactory }, + constructorCall = { factory, _ -> + factory as SubmissionTestResultNegativeViewModel.Factory + factory.create(navArgs.testType) + } + ) private val binding: FragmentSubmissionTestResultNegativeBinding by viewBindingLazy() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/negative/SubmissionTestResultNegativeViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/negative/SubmissionTestResultNegativeViewModel.kt index 8640c2bb8dd493c5648255ae79253800ac1ce543..d4b683833c8999b3cce67f313f797461414e7ef7 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/negative/SubmissionTestResultNegativeViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/negative/SubmissionTestResultNegativeViewModel.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.ui.submission.testresult.negative import androidx.lifecycle.LiveData import androidx.lifecycle.asLiveData import androidx.navigation.NavDirections +import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import de.rki.coronawarnapp.coronatest.type.CoronaTest @@ -12,7 +13,7 @@ import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState 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 +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map import timber.log.Timber @@ -20,17 +21,16 @@ import timber.log.Timber class SubmissionTestResultNegativeViewModel @AssistedInject constructor( dispatcherProvider: DispatcherProvider, private val submissionRepository: SubmissionRepository, - private val testResultAvailableNotificationService: PCRTestResultAvailableNotificationService + private val testResultAvailableNotificationService: PCRTestResultAvailableNotificationService, + @Assisted private val testType: CoronaTest.Type ) : CWAViewModel(dispatcherProvider = dispatcherProvider) { - // TODO Use navargs to supply this - private val coronaTestType: CoronaTest.Type = CoronaTest.Type.PCR init { - Timber.v("init() coronaTestType=%s", coronaTestType) + Timber.v("init() coronaTestType=%s", testType) } val routeToScreen = SingleLiveEvent<NavDirections?>() - val testResult: LiveData<TestResultUIState> = submissionRepository.testForType(type = coronaTestType) + val testResult: LiveData<TestResultUIState> = submissionRepository.testForType(type = testType) .filterNotNull() .map { test -> TestResultUIState(coronaTest = test) @@ -38,19 +38,21 @@ class SubmissionTestResultNegativeViewModel @AssistedInject constructor( fun deregisterTestFromDevice() = launch { Timber.tag(TAG).d("deregisterTestFromDevice()") - submissionRepository.removeTestFromDevice(type = coronaTestType) + submissionRepository.removeTestFromDevice(type = testType) routeToScreen.postValue(null) } fun onTestOpened() = launch { Timber.tag(TAG).d("onTestOpened()") - submissionRepository.setViewedTestResult(type = coronaTestType) + submissionRepository.setViewedTestResult(type = testType) testResultAvailableNotificationService.cancelTestResultAvailableNotification() } @AssistedFactory - interface Factory : SimpleCWAViewModelFactory<SubmissionTestResultNegativeViewModel> + interface Factory : CWAViewModelFactory<SubmissionTestResultNegativeViewModel> { + fun create(testType: CoronaTest.Type): SubmissionTestResultNegativeViewModel + } companion object { private const val TAG = "SubmissionTestResult:VM" diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingViewModel.kt index d04817c085031fc1f430c95619ae7f28b7d9ab57..d7300a8b70e8f2db57eb47152aaed28e85dec75c 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingViewModel.kt @@ -61,34 +61,23 @@ class SubmissionTestResultPendingViewModel @AssistedInject constructor( val testState: LiveData<TestResultUIState> = testResultFlow .onEach { testResultUIState -> when (val deviceState = testResultUIState.coronaTest.testResult) { - CoronaTestResult.PCR_POSITIVE -> + CoronaTestResult.PCR_POSITIVE, CoronaTestResult.RAT_POSITIVE -> SubmissionTestResultPendingFragmentDirections - .actionSubmissionTestResultPendingFragmentToSubmissionTestResultAvailableFragment( - testType = CoronaTest.Type.PCR - ) - CoronaTestResult.RAT_POSITIVE -> - SubmissionTestResultPendingFragmentDirections - .actionSubmissionTestResultPendingFragmentToSubmissionTestResultAvailableFragment( - testType = CoronaTest.Type.RAPID_ANTIGEN - ) + .actionSubmissionTestResultPendingFragmentToSubmissionTestResultAvailableFragment(testType) CoronaTestResult.PCR_NEGATIVE -> SubmissionTestResultPendingFragmentDirections - .actionSubmissionTestResultPendingFragmentToSubmissionTestResultNegativeFragment() + .actionSubmissionTestResultPendingFragmentToSubmissionTestResultNegativeFragment(testType) CoronaTestResult.RAT_NEGATIVE -> SubmissionTestResultPendingFragmentDirections .actionSubmissionTestResultPendingFragmentToSubmissionNegativeAntigenTestResultFragment() - CoronaTestResult.PCR_REDEEMED, CoronaTestResult.PCR_INVALID -> - SubmissionTestResultPendingFragmentDirections - .actionSubmissionTestResultPendingFragmentToSubmissionTestResultInvalidFragment( - CoronaTest.Type.PCR - ) - CoronaTestResult.RAT_REDEEMED, CoronaTestResult.RAT_INVALID -> + CoronaTestResult.PCR_REDEEMED, + CoronaTestResult.PCR_INVALID, + CoronaTestResult.RAT_REDEEMED, + CoronaTestResult.RAT_INVALID -> SubmissionTestResultPendingFragmentDirections - .actionSubmissionTestResultPendingFragmentToSubmissionTestResultInvalidFragment( - CoronaTest.Type.RAPID_ANTIGEN - ) + .actionSubmissionTestResultPendingFragmentToSubmissionTestResultInvalidFragment(testType) else -> { - Timber.w("Unknown success state: %s", deviceState) + Timber.w("Unknown success state: $deviceState") null } }?.let { routeToScreen.postValue(it) } @@ -122,7 +111,7 @@ class SubmissionTestResultPendingViewModel @AssistedInject constructor( fun onConsentClicked() { routeToScreen.postValue( SubmissionTestResultPendingFragmentDirections - .actionSubmissionResultFragmentToSubmissionYourConsentFragment() + .actionSubmissionResultFragmentToSubmissionYourConsentFragment(testType = testType) ) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultConsentGivenFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultConsentGivenFragment.kt index 411733b90aebaa7f501eeba3f8f40036222d0690..07b6e9f665052b7bc797a496b4923f0377550df5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultConsentGivenFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultConsentGivenFragment.kt @@ -6,6 +6,7 @@ import android.view.View import android.view.accessibility.AccessibilityEvent import androidx.activity.OnBackPressedCallback import androidx.fragment.app.Fragment +import androidx.navigation.fragment.navArgs import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSubmissionTestResultConsentGivenBinding import de.rki.coronawarnapp.ui.submission.SubmissionBlockingDialog @@ -15,7 +16,7 @@ import de.rki.coronawarnapp.util.ui.doNavigate import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider -import de.rki.coronawarnapp.util.viewmodel.cwaViewModels +import de.rki.coronawarnapp.util.viewmodel.cwaViewModelsAssisted import javax.inject.Inject /** @@ -26,8 +27,16 @@ class SubmissionTestResultConsentGivenFragment : Fragment(R.layout.fragment_submission_test_result_consent_given), AutoInject { + private val navArgs by navArgs<SubmissionTestResultConsentGivenFragmentArgs>() + @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory - private val viewModel: SubmissionTestResultConsentGivenViewModel by cwaViewModels { viewModelFactory } + private val viewModel: SubmissionTestResultConsentGivenViewModel by cwaViewModelsAssisted( + factoryProducer = { viewModelFactory }, + constructorCall = { factory, _ -> + factory as SubmissionTestResultConsentGivenViewModel.Factory + factory.create(navArgs.testType) + } + ) private val binding: FragmentSubmissionTestResultConsentGivenBinding by viewBindingLazy() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultConsentGivenViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultConsentGivenViewModel.kt index e217fa4c4e8d4f7ebe94cfaac97819063bb3579f..c2c4f6b45b70d5e3b4e9e3d4b4a202fe2fb26df9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultConsentGivenViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultConsentGivenViewModel.kt @@ -2,6 +2,7 @@ package de.rki.coronawarnapp.ui.submission.testresult.positive import androidx.lifecycle.LiveData import androidx.lifecycle.asLiveData +import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import de.rki.coronawarnapp.coronatest.type.CoronaTest @@ -15,7 +16,7 @@ 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 +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map @@ -26,19 +27,18 @@ class SubmissionTestResultConsentGivenViewModel @AssistedInject constructor( private val autoSubmission: AutoSubmission, private val testResultAvailableNotificationService: PCRTestResultAvailableNotificationService, private val analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector, + @Assisted private val testType: CoronaTest.Type, dispatcherProvider: DispatcherProvider ) : CWAViewModel(dispatcherProvider = dispatcherProvider) { - // TODO Use navargs to supply this - private val coronaTestType: CoronaTest.Type = CoronaTest.Type.PCR init { - Timber.v("init() coronaTestType=%s", coronaTestType) + Timber.v("init() coronaTestType=%s", testType) } val showUploadDialog = autoSubmission.isSubmissionRunning .asLiveData(context = dispatcherProvider.Default) - val uiState: LiveData<TestResultUIState> = submissionRepository.testForType(type = coronaTestType) + val uiState: LiveData<TestResultUIState> = submissionRepository.testForType(type = testType) .filterNotNull() .map { test -> TestResultUIState(coronaTest = test) @@ -50,7 +50,7 @@ class SubmissionTestResultConsentGivenViewModel @AssistedInject constructor( fun onTestOpened() = launch { Timber.d("onTestOpened()") - submissionRepository.setViewedTestResult(type = coronaTestType) + submissionRepository.setViewedTestResult(type = testType) testResultAvailableNotificationService.cancelTestResultAvailableNotification() } @@ -82,5 +82,7 @@ class SubmissionTestResultConsentGivenViewModel @AssistedInject constructor( } @AssistedFactory - interface Factory : SimpleCWAViewModelFactory<SubmissionTestResultConsentGivenViewModel> + interface Factory : CWAViewModelFactory<SubmissionTestResultConsentGivenViewModel> { + fun create(testType: CoronaTest.Type): SubmissionTestResultConsentGivenViewModel + } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultNoConsentFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultNoConsentFragment.kt index 091025361fa654a41a92b4b07a04aa87f6a5c07b..8c6448f7b5684357020b97961cdf31bee20c28e2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultNoConsentFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultNoConsentFragment.kt @@ -16,7 +16,7 @@ import de.rki.coronawarnapp.util.ui.doNavigate import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider -import de.rki.coronawarnapp.util.viewmodel.cwaViewModels +import de.rki.coronawarnapp.util.viewmodel.cwaViewModelsAssisted import javax.inject.Inject /** @@ -29,8 +29,14 @@ class SubmissionTestResultNoConsentFragment : @Inject lateinit var appShortcutsHelper: AppShortcutsHelper @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory - private val viewModel: SubmissionTestResultNoConsentViewModel by cwaViewModels { viewModelFactory } private val binding: FragmentSubmissionTestResultPositiveNoConsentBinding by viewBindingLazy() + private val viewModel: SubmissionTestResultNoConsentViewModel by cwaViewModelsAssisted( + factoryProducer = { viewModelFactory }, + constructorCall = { factory, _ -> + factory as SubmissionTestResultNoConsentViewModel.Factory + factory.create(navArgs.testType) + } + ) private val navArgs by navArgs<SubmissionTestResultPendingFragmentArgs>() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultNoConsentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultNoConsentViewModel.kt index 80afcd0a31a65f2e1b14817fe8db78a4e399ebb4..9868f82dfbe3bd56e2c53218a47096e82175497c 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultNoConsentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/positive/SubmissionTestResultNoConsentViewModel.kt @@ -2,6 +2,7 @@ package de.rki.coronawarnapp.ui.submission.testresult.positive import androidx.lifecycle.LiveData import androidx.lifecycle.asLiveData +import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import de.rki.coronawarnapp.coronatest.type.CoronaTest @@ -11,7 +12,7 @@ import de.rki.coronawarnapp.notification.PCRTestResultAvailableNotificationServi import de.rki.coronawarnapp.submission.SubmissionRepository import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState import de.rki.coronawarnapp.util.viewmodel.CWAViewModel -import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map @@ -20,16 +21,14 @@ import timber.log.Timber class SubmissionTestResultNoConsentViewModel @AssistedInject constructor( private val submissionRepository: SubmissionRepository, private val testResultAvailableNotificationService: PCRTestResultAvailableNotificationService, - private val analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector + private val analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector, + @Assisted private val testType: CoronaTest.Type ) : CWAViewModel() { - // TODO Use navargs to supply this - private val coronaTestType: CoronaTest.Type = CoronaTest.Type.PCR - init { - Timber.v("init() coronaTestType=%s", coronaTestType) + Timber.v("init() coronaTestType=%s", testType) } - val uiState: LiveData<TestResultUIState> = submissionRepository.testForType(type = coronaTestType) + val uiState: LiveData<TestResultUIState> = submissionRepository.testForType(type = testType) .filterNotNull() .map { test -> TestResultUIState(coronaTest = test) @@ -38,10 +37,12 @@ class SubmissionTestResultNoConsentViewModel @AssistedInject constructor( fun onTestOpened() = launch { Timber.v("onTestOpened()") analyticsKeySubmissionCollector.reportLastSubmissionFlowScreen(Screen.TEST_RESULT) - submissionRepository.setViewedTestResult(type = coronaTestType) + submissionRepository.setViewedTestResult(type = testType) testResultAvailableNotificationService.cancelTestResultAvailableNotification() } @AssistedFactory - interface Factory : SimpleCWAViewModelFactory<SubmissionTestResultNoConsentViewModel> + interface Factory : CWAViewModelFactory<SubmissionTestResultNoConsentViewModel> { + fun create(testType: CoronaTest.Type): SubmissionTestResultNoConsentViewModel + } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentFragment.kt index 4d245b7f5bf0022d5156ccf891cc251e603cd840..7a4c5ce4b935e261eac2d14c461a7a738174dcea 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.View import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment +import androidx.navigation.fragment.navArgs import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSubmissionNoConsentPositiveOtherWarningBinding import de.rki.coronawarnapp.tracing.ui.TracingConsentDialog @@ -26,13 +27,15 @@ import javax.inject.Inject class SubmissionResultPositiveOtherWarningNoConsentFragment : Fragment(R.layout.fragment_submission_no_consent_positive_other_warning), AutoInject { + private val navArgs by navArgs<SubmissionResultPositiveOtherWarningNoConsentFragmentArgs>() + @Inject lateinit var appShortcutsHelper: AppShortcutsHelper @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory private val viewModel: SubmissionResultPositiveOtherWarningNoConsentViewModel by cwaViewModelsAssisted( factoryProducer = { viewModelFactory }, constructorCall = { factory, _ -> factory as SubmissionResultPositiveOtherWarningNoConsentViewModel.Factory - factory.create() + factory.create(navArgs.testType) } ) 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 8dad6e8631dcf73bd095391cfe2b28d55b537bb4..28f1e8a8c2e3f18fe1579f0c26247f59caff5716 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 @@ -5,6 +5,7 @@ import android.content.Intent import androidx.lifecycle.asLiveData import androidx.navigation.NavDirections import com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey +import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import de.rki.coronawarnapp.coronatest.type.CoronaTest @@ -34,13 +35,11 @@ class SubmissionResultPositiveOtherWarningNoConsentViewModel @AssistedInject con interoperabilityRepository: InteroperabilityRepository, private val submissionRepository: SubmissionRepository, private val checkInRepository: CheckInRepository, - private val analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector + private val analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector, + @Assisted private val testType: CoronaTest.Type ) : CWAViewModel(dispatcherProvider = dispatcherProvider) { - // TODO Use navargs to supply this - private val coronaTestType: CoronaTest.Type = CoronaTest.Type.PCR - init { - Timber.v("init() coronaTestType=%s", coronaTestType) + Timber.v("init() coronaTestType=%s", testType) } val routeToScreen = SingleLiveEvent<NavDirections>() @@ -66,7 +65,7 @@ class SubmissionResultPositiveOtherWarningNoConsentViewModel @AssistedInject con val navDirections = if (completedCheckInsExist) { Timber.tag(TAG).d("Navigate to CheckInsConsentFragment") SubmissionResultPositiveOtherWarningNoConsentFragmentDirections - .actionSubmissionResultPositiveOtherWarningNoConsentFragmentToCheckInsConsentFragment() + .actionSubmissionResultPositiveOtherWarningNoConsentFragmentToCheckInsConsentFragment(testType) } else { autoSubmission.updateMode(AutoSubmission.Mode.MONITOR) Timber.tag(TAG).d("Navigate to SubmissionResultReadyFragment") @@ -111,7 +110,7 @@ class SubmissionResultPositiveOtherWarningNoConsentViewModel @AssistedInject con fun onConsentButtonClicked() = launch { showKeysRetrievalProgress.postValue(true) - submissionRepository.giveConsentToSubmission(type = coronaTestType) + submissionRepository.giveConsentToSubmission(type = testType) launch { if (enfClient.isTracingEnabled.first()) { Timber.tag(TAG).d("tekHistoryUpdater.updateTEKHistoryOrRequestPermission()") @@ -144,7 +143,7 @@ class SubmissionResultPositiveOtherWarningNoConsentViewModel @AssistedInject con @AssistedFactory interface Factory : CWAViewModelFactory<SubmissionResultPositiveOtherWarningNoConsentViewModel> { - fun create(): SubmissionResultPositiveOtherWarningNoConsentViewModel + fun create(testType: CoronaTest.Type): SubmissionResultPositiveOtherWarningNoConsentViewModel } companion object { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt index ad3a705db9132490f996be00d3931cd9db12fb56..093eddf09783b70c5be5db58d9b7e09a2fc7687b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt @@ -13,7 +13,7 @@ import de.rki.coronawarnapp.util.ui.doNavigate import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider -import de.rki.coronawarnapp.util.viewmodel.cwaViewModels +import de.rki.coronawarnapp.util.viewmodel.cwaViewModelsAssisted import javax.inject.Inject /** @@ -22,10 +22,16 @@ import javax.inject.Inject */ class SubmissionYourConsentFragment : Fragment(R.layout.fragment_submission_your_consent), AutoInject { + private val navArgs by navArgs<SubmissionYourConsentFragmentArgs>() @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory - private val vm: SubmissionYourConsentViewModel by cwaViewModels { viewModelFactory } + private val vm: SubmissionYourConsentViewModel by cwaViewModelsAssisted( + factoryProducer = { viewModelFactory }, + constructorCall = { factory, _ -> + factory as SubmissionYourConsentViewModel.Factory + factory.create(navArgs.testType) + } + ) private val binding: FragmentSubmissionYourConsentBinding by viewBindingLazy() - private val navArgs: SubmissionYourConsentFragmentArgs by navArgs() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) 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 10e46bb07917a4188943464085ef60fd9d28257c..13788225fdd54b616c69c5dfd8e46ec3ccd54a3c 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 @@ -1,6 +1,7 @@ package de.rki.coronawarnapp.ui.submission.yourconsent import androidx.lifecycle.asLiveData +import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import de.rki.coronawarnapp.coronatest.type.CoronaTest @@ -9,7 +10,7 @@ import de.rki.coronawarnapp.submission.SubmissionRepository 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 +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map @@ -18,17 +19,16 @@ import timber.log.Timber class SubmissionYourConsentViewModel @AssistedInject constructor( val dispatcherProvider: DispatcherProvider, interoperabilityRepository: InteroperabilityRepository, - val submissionRepository: SubmissionRepository + val submissionRepository: SubmissionRepository, + @Assisted private val testType: CoronaTest.Type ) : CWAViewModel(dispatcherProvider = dispatcherProvider) { - // TODO Use navargs to supply this - private val coronaTestType: CoronaTest.Type = CoronaTest.Type.PCR init { - Timber.v("init() coronaTestType=%s", coronaTestType) + Timber.v("init() coronaTestType=%s", testType) } val clickEvent: SingleLiveEvent<SubmissionYourConsentEvents> = SingleLiveEvent() - private val consentFlow = submissionRepository.testForType(type = coronaTestType) + private val consentFlow = submissionRepository.testForType(type = testType) .filterNotNull() .map { it.isAdvancedConsentGiven } val consent = consentFlow.asLiveData(context = dispatcherProvider.Default) @@ -43,10 +43,10 @@ class SubmissionYourConsentViewModel @AssistedInject constructor( fun switchConsent() = launch { if (consentFlow.first()) { Timber.v("revokeConsentToSubmission()") - submissionRepository.revokeConsentToSubmission(type = coronaTestType) + submissionRepository.revokeConsentToSubmission(type = testType) } else { Timber.v("giveConsentToSubmission()") - submissionRepository.giveConsentToSubmission(type = coronaTestType) + submissionRepository.giveConsentToSubmission(type = testType) } } @@ -55,5 +55,7 @@ class SubmissionYourConsentViewModel @AssistedInject constructor( } @AssistedFactory - interface Factory : SimpleCWAViewModelFactory<SubmissionYourConsentViewModel> + interface Factory : CWAViewModelFactory<SubmissionYourConsentViewModel> { + fun create(testType: CoronaTest.Type): SubmissionYourConsentViewModel + } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt index acdb4ca5d7edbbdc25ecf6efe2aaa83496b1960b..0294876c153022b1f8065d42abd4c84f9edfdbdd 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt @@ -49,7 +49,15 @@ constructor( fun setTestResultSection(coronaTest: CoronaTest?) { binding.apply { - testResultSectionHeadline.text = context.getString(R.string.test_result_card_headline) + when (coronaTest?.type) { + CoronaTest.Type.PCR -> + testResultSectionHeadline.text = context.getString(R.string.test_result_card_headline) + .format(context.getString(R.string.ag_homescreen_card_pcr_title)) + CoronaTest.Type.RAPID_ANTIGEN -> + testResultSectionHeadline.text = context.getString(R.string.test_result_card_headline) + .format(context.getString(R.string.submission_test_result_antigen_title)) + } + testResultSectionRegisteredAtText.text = formatTestResultRegisteredAtText(coronaTest?.registeredAt) val testResultIcon = formatTestStatusIcon(coronaTest) testResultSectionStatusIcon.setImageDrawable(testResultIcon) diff --git a/Corona-Warn-App/src/main/res/layout/view_test_result_section.xml b/Corona-Warn-App/src/main/res/layout/view_test_result_section.xml index 62fefc498eafb3ccab565a421fcbcd63a3d826f4..14678c9871c1b12e264efdfb4654e3d5857ed39f 100644 --- a/Corona-Warn-App/src/main/res/layout/view_test_result_section.xml +++ b/Corona-Warn-App/src/main/res/layout/view_test_result_section.xml @@ -18,7 +18,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/spacing_small" - app:layout_constraintEnd_toStartOf="@id/test_result_section_status_icon" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="Ihr Befund"/> diff --git a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml index bed4a20bafb94d427d75105de5897a41ed7e4f3b..44c7f71310aaba1f7be87d768f2694d07f010719 100644 --- a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml +++ b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml @@ -484,6 +484,9 @@ <action android:id="@+id/action_submissionTestResultConsentGivenFragment_to_submissionSymptomIntroductionFragment" app:destination="@id/submissionSymptomIntroductionFragment" /> + <argument + android:name="testType" + app:argType="de.rki.coronawarnapp.coronatest.type.CoronaTest$Type" /> </fragment> <fragment android:id="@+id/submissionTestResultNoConsentFragment" @@ -497,6 +500,9 @@ <action android:id="@+id/action_submissionTestResultNoConsentFragment_to_submissionResultPositiveOtherWarningNoConsentFragment" app:destination="@id/submissionResultPositiveOtherWarningNoConsentFragment" /> + <argument + android:name="testType" + app:argType="de.rki.coronawarnapp.coronatest.type.CoronaTest$Type" /> </fragment> <fragment android:id="@+id/submissionYourConsentFragment" @@ -510,6 +516,9 @@ <action android:id="@+id/action_submissionYourConsentFragment_to_informationPrivacyFragment" app:destination="@id/informationPrivacyFragment" /> + <argument + android:name="testType" + app:argType="de.rki.coronawarnapp.coronatest.type.CoronaTest$Type" /> </fragment> <fragment android:id="@+id/submissionTestResultAvailableFragment" @@ -546,7 +555,11 @@ <fragment android:id="@+id/submissionTestResultNegativeFragment" android:name="de.rki.coronawarnapp.ui.submission.testresult.negative.SubmissionTestResultNegativeFragment" - android:label="SubmissionTestResultNegativeFragment" /> + android:label="SubmissionTestResultNegativeFragment"> + <argument + android:name="testType" + app:argType="de.rki.coronawarnapp.coronatest.type.CoronaTest$Type" /> + </fragment> <fragment android:id="@+id/submissionTestResultInvalidFragment" android:name="de.rki.coronawarnapp.ui.submission.testresult.invalid.SubmissionTestResultInvalidFragment" @@ -677,14 +690,14 @@ app:argType="boolean" /> <argument android:name="coronaTestQrCode" - app:nullable="true" android:defaultValue="@null" - app:argType="de.rki.coronawarnapp.coronatest.qrcode.CoronaTestQRCode" /> + app:argType="de.rki.coronawarnapp.coronatest.qrcode.CoronaTestQRCode" + app:nullable="true" /> <argument android:name="coronaTestTan" - app:nullable="true" android:defaultValue="@null" - app:argType="de.rki.coronawarnapp.coronatest.tan.CoronaTestTAN" /> + app:argType="de.rki.coronawarnapp.coronatest.tan.CoronaTestTAN" + app:nullable="true" /> <action android:id="@+id/action_submissionDeletionWarningFragment_to_submissionDispatcherFragment" app:popUpTo="@id/submissionQRCodeScanFragment" @@ -711,9 +724,9 @@ app:popUpToInclusive="false" /> <action android:id="@+id/action_submissionDeletionWarningFragment_to_submissionConsentFragment" + app:destination="@id/submissionConsentFragment" app:popUpTo="@id/mainFragment" - app:popUpToInclusive="false" - app:destination="@id/submissionConsentFragment" /> + app:popUpToInclusive="false" /> </fragment> <fragment @@ -738,5 +751,8 @@ app:destination="@id/submissionTestResultConsentGivenFragment" app:popUpTo="@id/mainFragment" app:popUpToInclusive="false" /> + <argument + android:name="testType" + app:argType="de.rki.coronawarnapp.coronatest.type.CoronaTest$Type" /> </fragment> </navigation> diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentViewModelTest.kt index 0012a6ae7af09003d77c24227dd99432abb9d0ac..bf5f2ee7a8c334051ded1733d6587b9b58b2f83f 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/presencetracing/attendee/checkins/consent/CheckInsConsentViewModelTest.kt @@ -35,6 +35,7 @@ class CheckInsConsentViewModelTest : BaseTest() { @MockK lateinit var checkInRepository: CheckInRepository @MockK lateinit var submissionRepository: SubmissionRepository @MockK lateinit var autoSubmission: AutoSubmission + @MockK lateinit var testType: CoronaTest.Type private val checkIn1 = CheckIn( id = 1L, @@ -340,6 +341,7 @@ class CheckInsConsentViewModelTest : BaseTest() { dispatcherProvider = TestDispatcherProvider(), checkInRepository = checkInRepository, submissionRepository = submissionRepository, - autoSubmission = autoSubmission + autoSubmission = autoSubmission, + testType = testType ) } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testavailable/SubmissionTestResultAvailableViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testavailable/SubmissionTestResultAvailableViewModelTest.kt index d9c1e6ea258382161a12a535ae48bb3b39a78e79..00fae3d0b58f412a9bbc0dc3cab9f2b780b5b75a 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testavailable/SubmissionTestResultAvailableViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testavailable/SubmissionTestResultAvailableViewModelTest.kt @@ -36,6 +36,7 @@ class SubmissionTestResultAvailableViewModelTest : BaseTest() { @MockK lateinit var analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector @MockK lateinit var coronaTestRepository: CoronaTestRepository @MockK lateinit var checkInRepository: CheckInRepository + @MockK lateinit var testType: CoronaTest.Type private val coronaTestFlow = MutableStateFlow( mockk<CoronaTest>().apply { @@ -63,7 +64,8 @@ class SubmissionTestResultAvailableViewModelTest : BaseTest() { tekHistoryUpdaterFactory = tekHistoryUpdaterFactory, autoSubmission = autoSubmission, analyticsKeySubmissionCollector = analyticsKeySubmissionCollector, - checkInRepository = checkInRepository + checkInRepository = checkInRepository, + testType = testType ) @Test @@ -98,7 +100,10 @@ class SubmissionTestResultAvailableViewModelTest : BaseTest() { viewModel.goConsent() viewModel.routeToScreen.value shouldBe SubmissionTestResultAvailableFragmentDirections - .actionSubmissionTestResultAvailableFragmentToSubmissionYourConsentFragment(true) + .actionSubmissionTestResultAvailableFragmentToSubmissionYourConsentFragment( + testType = testType, + isTestResultAvailable = true, + ) } @Test @@ -122,6 +127,6 @@ class SubmissionTestResultAvailableViewModelTest : BaseTest() { viewModel.proceed() viewModel.routeToScreen.value shouldBe SubmissionTestResultAvailableFragmentDirections - .actionSubmissionTestResultAvailableFragmentToSubmissionTestResultNoConsentFragment() + .actionSubmissionTestResultAvailableFragmentToSubmissionTestResultNoConsentFragment(testType) } } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt index 8d160fe6b9fe5ec7ffd334e7e9940ca2b03be061..31e401a51b154f9487de4c8b4f94ee6210aee253 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt @@ -1,5 +1,6 @@ package de.rki.coronawarnapp.ui.submission.testresult +import de.rki.coronawarnapp.coronatest.type.CoronaTest import de.rki.coronawarnapp.datadonation.analytics.modules.keysubmission.AnalyticsKeySubmissionCollector import de.rki.coronawarnapp.notification.PCRTestResultAvailableNotificationService import de.rki.coronawarnapp.submission.SubmissionRepository @@ -23,6 +24,7 @@ class SubmissionTestResultConsentGivenViewModelTest : BaseTest() { @MockK lateinit var testResultAvailableNotificationService: PCRTestResultAvailableNotificationService @MockK lateinit var analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector lateinit var viewModel: SubmissionTestResultConsentGivenViewModel + @MockK lateinit var testType: CoronaTest.Type @BeforeEach fun setUp() { @@ -34,7 +36,8 @@ class SubmissionTestResultConsentGivenViewModelTest : BaseTest() { dispatcherProvider = TestDispatcherProvider(), autoSubmission = autoSubmission, testResultAvailableNotificationService = testResultAvailableNotificationService, - analyticsKeySubmissionCollector = analyticsKeySubmissionCollector + analyticsKeySubmissionCollector = analyticsKeySubmissionCollector, + testType = testType ) @Test diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt index 40080f1f514b7f5af1865eb5243bc9c837b0b365..a189fc59576067c2b46f9d644792a5509daaf66e 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt @@ -37,6 +37,7 @@ class SubmissionResultPositiveOtherWarningNoConsentViewModelTest : BaseTest() { @MockK lateinit var enfClient: ENFClient @MockK lateinit var analyticsKeySubmissionCollector: AnalyticsKeySubmissionCollector @MockK lateinit var checkInRepository: CheckInRepository + @MockK lateinit var testType: CoronaTest.Type private val coronaTestFlow = MutableStateFlow( mockk<CoronaTest>().apply { @@ -68,7 +69,8 @@ class SubmissionResultPositiveOtherWarningNoConsentViewModelTest : BaseTest() { interoperabilityRepository = interoperabilityRepository, submissionRepository = submissionRepository, analyticsKeySubmissionCollector = analyticsKeySubmissionCollector, - checkInRepository = checkInRepository + checkInRepository = checkInRepository, + testType = testType ) @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 e11349903be08c2f7d039efc891d1b868519aa7f..5a81ac156199fde1b94883142a459884d1cb0791 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 @@ -26,6 +26,7 @@ class SubmissionYourConsentViewModelTest : BaseTest() { @MockK lateinit var submissionRepository: SubmissionRepository @MockK lateinit var interoperabilityRepository: InteroperabilityRepository + @MockK lateinit var testType: CoronaTest.Type private val countryList = Country.values().toList() @@ -47,7 +48,8 @@ class SubmissionYourConsentViewModelTest : BaseTest() { private fun createViewModel(): SubmissionYourConsentViewModel = SubmissionYourConsentViewModel( interoperabilityRepository = interoperabilityRepository, submissionRepository = submissionRepository, - dispatcherProvider = TestDispatcherProvider() + dispatcherProvider = TestDispatcherProvider(), + testType = testType ) @Test