From d8d4855dc6eae1d22f36108752ea48b701ecd5a2 Mon Sep 17 00:00:00 2001 From: Alex Paulescu <alex.paulescu@gmail.com> Date: Fri, 23 Apr 2021 12:15:13 +0300 Subject: [PATCH] Test result screens polishing (DEV) (#2923) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Positive tests polishing. * Persisted test type throughout the app. * Fixed tests. * Fixed more tests. * More UI test fixes. * ¥ou've guessed it, more test fixes. * Lint * Fixed issue where schnelltest result title would extend on a second line. --- ...bmissionTestResultAvailableFragmentTest.kt | 20 ++++++++-- ...ssionTestResultConsentGivenFragmentTest.kt | 14 +++++-- .../SubmissionTestResultFragmentTest.kt | 2 + ...ubmissionTestResultNegativeFragmentTest.kt | 12 ++++-- ...ionTestResultNoConsentGivenFragmentTest.kt | 12 ++++-- .../SubmissionYourConsentFragmentTest.kt | 13 +++++-- .../ui/main/home/HomeFragmentViewModel.kt | 2 +- .../consent/CheckInsConsentFragment.kt | 8 +++- .../consent/CheckInsConsentViewModel.kt | 9 ++--- .../SubmissionDeletionWarningFragment.kt | 4 +- .../SubmissionTestResultAvailableFragment.kt | 38 ++++++++++++------- .../SubmissionTestResultAvailableViewModel.kt | 25 ++++++------ .../submission/tan/SubmissionTanFragment.kt | 5 ++- .../SubmissionTestResultInvalidFragment.kt | 13 ++++++- .../SubmissionTestResultInvalidViewModel.kt | 18 +++++---- .../SubmissionTestResultNegativeFragment.kt | 13 ++++++- .../SubmissionTestResultNegativeViewModel.kt | 20 +++++----- .../SubmissionTestResultPendingViewModel.kt | 31 +++++---------- ...ubmissionTestResultConsentGivenFragment.kt | 13 ++++++- ...bmissionTestResultConsentGivenViewModel.kt | 16 ++++---- .../SubmissionTestResultNoConsentFragment.kt | 10 ++++- .../SubmissionTestResultNoConsentViewModel.kt | 19 +++++----- ...ltPositiveOtherWarningNoConsentFragment.kt | 5 ++- ...tPositiveOtherWarningNoConsentViewModel.kt | 15 ++++---- .../SubmissionYourConsentFragment.kt | 12 ++++-- .../SubmissionYourConsentViewModel.kt | 20 +++++----- .../ui/view/TestResultSectionView.kt | 10 ++++- .../res/layout/view_test_result_section.xml | 2 +- .../src/main/res/navigation/nav_graph.xml | 30 +++++++++++---- .../consent/CheckInsConsentViewModelTest.kt | 4 +- ...missionTestResultAvailableViewModelTest.kt | 11 ++++-- ...sionTestResultConsentGivenViewModelTest.kt | 5 ++- ...itiveOtherWarningNoConsentViewModelTest.kt | 4 +- .../SubmissionYourConsentViewModelTest.kt | 4 +- 34 files changed, 287 insertions(+), 152 deletions(-) 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 20941db02..b8c94ec58 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 97f06b602..ee50cc594 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 849a4e220..98685d2be 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 53df826ee..4086ecd6d 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 3ec1a885e..17de3dcef 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 0fd406215..cd8716687 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 ff35f3915..8516f8c86 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 33dfa460c..c11dbe490 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 698969365..ee398a815 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 e3707942a..38b737b09 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 b8759f190..93053d7e0 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 069dbdbe5..e5bc9c334 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 8e7ec16ac..083d67a66 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 8ee096b5f..260b40ed4 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 d6e40ed1b..163264bb6 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 3372b725f..082c4a3b8 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 8640c2bb8..d4b683833 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 d04817c08..d7300a8b7 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 411733b90..07b6e9f66 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 e217fa4c4..c2c4f6b45 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 091025361..8c6448f7b 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 80afcd0a3..9868f82df 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 4d245b7f5..7a4c5ce4b 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 8dad6e863..28f1e8a8c 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 ad3a705db..093eddf09 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 10e46bb07..13788225f 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 acdb4ca5d..0294876c1 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 62fefc498..14678c987 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 bed4a20ba..44c7f7131 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 0012a6ae7..bf5f2ee7a 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 d9c1e6ea2..00fae3d0b 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 8d160fe6b..31e401a51 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 40080f1f5..a189fc595 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 e11349903..5a81ac156 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 -- GitLab