diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/submissiondone/SubmissionDoneFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/submissiondone/SubmissionDoneFragment.kt new file mode 100644 index 0000000000000000000000000000000000000000..4c6ddaa7d8b92a557c33ca491eb82a26e68be719 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/submissiondone/SubmissionDoneFragment.kt @@ -0,0 +1,70 @@ +package de.rki.coronawarnapp.ui.submission.submissiondone + +import android.os.Bundle +import android.view.View +import android.view.accessibility.AccessibilityEvent +import androidx.core.view.isVisible +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.navArgs +import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.coronatest.type.CoronaTest +import de.rki.coronawarnapp.databinding.FragmentSubmissionDoneBinding +import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat +import de.rki.coronawarnapp.util.di.AutoInject +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.cwaViewModelsAssisted +import javax.inject.Inject + +class SubmissionDoneFragment : Fragment(R.layout.fragment_submission_done), AutoInject { + + private val args by navArgs<SubmissionDoneFragmentArgs>() + + @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory + private val viewModel: SubmissionDoneViewModel by cwaViewModelsAssisted( + factoryProducer = { viewModelFactory }, + constructorCall = { factory, _ -> + factory as SubmissionDoneViewModel.Factory + factory.create(args.testType) + } + ) + + private val binding: FragmentSubmissionDoneBinding by viewBindingLazy() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding.apply { + + toolbar.apply { + navigationIcon = context.getDrawableCompat(R.drawable.ic_close) + navigationContentDescription = getString(R.string.accessibility_close) + setNavigationOnClickListener { viewModel.onFinishButtonClick() } + } + + submissionDoneButtonDone.setOnClickListener { + viewModel.onFinishButtonClick() + } + + submissionDoneContent.submissionDoneContent.submissionDonePcrValidation.root.isVisible = + (viewModel.testType == CoronaTest.Type.RAPID_ANTIGEN) + } + + viewModel.routeToScreen.observe2(this) { + when (it) { + SubmissionNavigationEvents.NavigateToMainActivity -> { + doNavigate( + SubmissionDoneFragmentDirections.actionSubmissionDoneFragmentToMainFragment() + ) + } + } + } + } + + override fun onResume() { + super.onResume() + binding.submissionDoneContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/submissiondone/SubmissionDoneModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/submissiondone/SubmissionDoneModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..ab24c4f9b677414eac42da432ec194c4e230a9d1 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/submissiondone/SubmissionDoneModule.kt @@ -0,0 +1,18 @@ +package de.rki.coronawarnapp.ui.submission.submissiondone + +import dagger.Binds +import dagger.Module +import dagger.multibindings.IntoMap +import de.rki.coronawarnapp.util.viewmodel.CWAViewModel +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelKey + +@Module +abstract class SubmissionDoneModule { + @Binds + @IntoMap + @CWAViewModelKey(SubmissionDoneViewModel::class) + abstract fun submissionDoneFragmentVM( + factory: SubmissionDoneViewModel.Factory + ): CWAViewModelFactory<out CWAViewModel> +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/submissiondone/SubmissionDoneViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/submissiondone/SubmissionDoneViewModel.kt new file mode 100644 index 0000000000000000000000000000000000000000..0f72b0df369c5c45fb88c7abe005905b7aa8d77e --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/submissiondone/SubmissionDoneViewModel.kt @@ -0,0 +1,26 @@ +package de.rki.coronawarnapp.ui.submission.submissiondone + +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import de.rki.coronawarnapp.coronatest.type.CoronaTest +import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents +import de.rki.coronawarnapp.util.ui.SingleLiveEvent +import de.rki.coronawarnapp.util.viewmodel.CWAViewModel +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory + +class SubmissionDoneViewModel @AssistedInject constructor( + @Assisted val testType: CoronaTest.Type + +) : CWAViewModel() { + val routeToScreen: SingleLiveEvent<SubmissionNavigationEvents> = SingleLiveEvent() + + fun onFinishButtonClick() { + routeToScreen.postValue(SubmissionNavigationEvents.NavigateToMainActivity) + } + + @AssistedFactory + interface Factory : CWAViewModelFactory<SubmissionDoneViewModel> { + fun create(testType: CoronaTest.Type): SubmissionDoneViewModel + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarViewModel.kt index 935aec8842c0cb099cbd5279fea6baeae78cb432..9d7816702666e20a29c0cfcbdeca2d60a9f62a88 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarViewModel.kt @@ -117,7 +117,8 @@ class SubmissionSymptomCalendarViewModel @AssistedInject constructor( Timber.i("Hide uploading progress and navigate to HomeFragment") mediatorShowUploadDialog.postValue(false) routeToScreen.postValue( - SubmissionSymptomCalendarFragmentDirections.actionSubmissionSymptomCalendarFragmentToMainFragment() + SubmissionSymptomCalendarFragmentDirections + .actionSubmissionSymptomCalendarFragmentToSubmissionDoneFragment(testType) ) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionViewModel.kt index 307fc779e1b29e44565b8e5cfb24b67bb8bb32c5..4bacd588ac13a17b0e50c46c20a14feed475dda0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionViewModel.kt @@ -67,6 +67,11 @@ class SubmissionSymptomIntroductionViewModel @AssistedInject constructor( ) } doSubmit() + + navigation.postValue( + SubmissionSymptomIntroductionFragmentDirections + .actionSubmissionSymptomIntroductionFragmentToSubmissionDoneFragment(testType) + ) } Symptoms.Indication.NO_INFORMATION -> { submissionRepository.currentSymptoms.update { @@ -76,6 +81,11 @@ class SubmissionSymptomIntroductionViewModel @AssistedInject constructor( ) } doSubmit() + + navigation.postValue( + SubmissionSymptomIntroductionFragmentDirections + .actionSubmissionSymptomIntroductionFragmentToSubmissionDoneFragment(testType) + ) } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/viewmodel/SubmissionFragmentModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/viewmodel/SubmissionFragmentModule.kt index 93186ab86ac5b3655f3b99668d21d719adbaa0d8..40b436ea56a0bf12eb637bcd3797854b2aa9d07e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/viewmodel/SubmissionFragmentModule.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/viewmodel/SubmissionFragmentModule.kt @@ -16,6 +16,8 @@ import de.rki.coronawarnapp.ui.submission.resultavailable.SubmissionTestResultAv import de.rki.coronawarnapp.ui.submission.resultavailable.SubmissionTestResultAvailableModule import de.rki.coronawarnapp.ui.submission.resultready.SubmissionResultReadyFragment import de.rki.coronawarnapp.ui.submission.resultready.SubmissionResultReadyModule +import de.rki.coronawarnapp.ui.submission.submissiondone.SubmissionDoneFragment +import de.rki.coronawarnapp.ui.submission.submissiondone.SubmissionDoneModule import de.rki.coronawarnapp.ui.submission.symptoms.calendar.SubmissionSymptomCalendarFragment import de.rki.coronawarnapp.ui.submission.symptoms.calendar.SubmissionSymptomCalendarModule import de.rki.coronawarnapp.ui.submission.symptoms.introduction.SubmissionSymptomIntroductionFragment @@ -86,6 +88,9 @@ internal abstract class SubmissionFragmentModule { @ContributesAndroidInjector(modules = [SubmissionTestResultAvailableModule::class]) abstract fun submissionTestResultAvailableScreen(): SubmissionTestResultAvailableFragment + @ContributesAndroidInjector(modules = [SubmissionDoneModule::class]) + abstract fun submissionDoneScreen(): SubmissionDoneFragment + @ContributesAndroidInjector(modules = [SubmissionTestResultConsentGivenModule::class]) abstract fun submissionTestResultConsentGivenScreen(): SubmissionTestResultConsentGivenFragment diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_done.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_done.xml index 5265e288aeb2b577b1f2910f5733633e77e5079a..25844017a9edf419fd46c3b30e697558c7e78cab 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_done.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_done.xml @@ -11,15 +11,14 @@ android:fillViewport="true" tools:context=".ui.submission.fragment.SubmissionDoneFragment"> - <include - android:id="@+id/submission_done_header" - layout="@layout/include_header" + <androidx.appcompat.widget.Toolbar + android:id="@+id/toolbar" android:layout_width="0dp" android:layout_height="wrap_content" - app:icon="@{@drawable/ic_close}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:title="@string/submission_done_title" /> <include android:id="@+id/submission_done_content" @@ -29,7 +28,7 @@ app:layout_constraintBottom_toBottomOf="@id/guideline_action" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/submission_done_header" /> + app:layout_constraintTop_toBottomOf="@id/toolbar"/> <Button android:id="@+id/submission_done_button_done" @@ -41,7 +40,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/guideline_action" /> + app:layout_constraintTop_toBottomOf="@id/guideline_action" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_action" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_consent_given.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_consent_given.xml index d000dfd81b3f6a4e4c2f52382680e89d979fcf8d..ec8026435bfdd6dcd1480f0b5e06bad91682af00 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_consent_given.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_consent_given.xml @@ -13,10 +13,10 @@ <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/submission_test_result_container" - android:contentDescription="@string/submission_test_result_headline" - android:accessibilityLiveRegion="assertive" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:accessibilityLiveRegion="assertive" + android:contentDescription="@string/submission_test_result_headline"> <include android:id="@+id/submission_test_result_consent_given_header" @@ -30,14 +30,15 @@ app:title="@{@string/submission_test_result_consent_given_heading}" /> <ScrollView + android:id="@+id/scroll_view" android:layout_width="0dp" android:layout_height="0dp" - app:layout_constraintEnd_toEndOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@+id/guideline_start" + android:layout_marginBottom="12dp" android:fillViewport="true" - app:layout_constraintTop_toBottomOf="@+id/submission_test_result_consent_given_header" - app:layout_constraintBottom_toTopOf="@+id/include_submission_test_result_consent_given_buttons" - app:layout_constraintVertical_bias="1.0"> + app:layout_constraintBottom_toTopOf="@id/submission_test_result_button_consent_given_continue" + app:layout_constraintEnd_toEndOf="@id/guideline_end" + app:layout_constraintStart_toStartOf="@id/guideline_start" + app:layout_constraintTop_toBottomOf="@id/submission_test_result_consent_given_header"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" @@ -65,7 +66,7 @@ android:text="@string/submission_test_result_consent_given_subtitle" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/submission_test_result_section" /> + app:layout_constraintTop_toBottomOf="@id/submission_test_result_section" /> <TextView android:id="@+id/submission_test_result_consent_given_body" @@ -77,39 +78,32 @@ android:text="@string/submission_test_result_consent_given_body" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/submission_test_result_consent_given_subtitle" /> + app:layout_constraintTop_toBottomOf="@id/submission_test_result_consent_given_subtitle" /> </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView> - <androidx.constraintlayout.widget.Barrier - android:id="@+id/include_submission_test_result_consent_given_buttons" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - app:barrierAllowsGoneWidgets="false" - app:barrierDirection="top" - app:constraint_referenced_ids="submission_test_result_button_consent_given_continue" /> - <Button android:id="@+id/submission_test_result_button_consent_given_continue" style="@style/buttonPrimary" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:layout_marginBottom="18dp" android:text="@string/submission_test_result_positive_continue_button_with_symptoms" - app:layout_constraintBottom_toTopOf="@+id/submission_test_result_button__consent_given_continue_without_symptoms" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/guideline_action_large" /> + app:layout_constraintBottom_toTopOf="@id/submission_test_result_button_consent_given_continue_without_symptoms" + app:layout_constraintEnd_toStartOf="@id/guideline_end" + app:layout_constraintStart_toStartOf="@id/guideline_start" /> <Button android:id="@+id/submission_test_result_button_consent_given_continue_without_symptoms" style="@style/buttonPrimary" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginBottom="18dp" android:text="@string/submission_test_result_consent_given_breakup_button" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/submission_test_result_button_consent_given_continue" /> + app:layout_constraintEnd_toStartOf="@id/guideline_end" + app:layout_constraintStart_toStartOf="@id/guideline_start" /> <include layout="@layout/merge_guidelines_side" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_done_content.xml b/Corona-Warn-App/src/main/res/layout/include_submission_done_content.xml index e37bf7a9566126cd425bf08e256483529d9f45fa..62d33f58f92e99de14b143adfd3eddace2f9a8ce 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_done_content.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_done_content.xml @@ -68,8 +68,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - app:body="@{@string/submission_done_share_keys}" - app:icon="@{@drawable/ic_share_keys}" + app:body="@{@string/submission_done_isolate}" + app:icon="@{@drawable/ic_risk_details_home}" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@id/submission_done_contagious" /> 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 b25a75044a413fc1b9a8421b28ecc62ccf797ab7..bfa756731ac7755907337488500703bb9deb018a 100644 --- a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml +++ b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml @@ -436,6 +436,11 @@ app:destination="@id/mainFragment" app:popUpTo="@id/nav_graph" app:popUpToInclusive="true" /> + <action + android:id="@+id/action_submissionSymptomIntroductionFragment_to_submissionDoneFragment" + app:destination="@id/submissionDoneFragment" + app:popUpTo="@id/mainFragment" + app:popUpToInclusive="false"/> </fragment> <fragment android:id="@+id/submissionSymptomCalendarFragment" @@ -458,6 +463,11 @@ app:destination="@id/mainFragment" app:popUpTo="@id/nav_graph" app:popUpToInclusive="true" /> + <action + android:id="@+id/action_submissionSymptomCalendarFragment_to_submissionDoneFragment" + app:destination="@id/submissionDoneFragment" + app:popUpTo="@id/mainFragment" + app:popUpToInclusive="false"/> </fragment> <fragment android:id="@+id/submissionConsentFragment" @@ -764,4 +774,18 @@ android:name="testType" app:argType="de.rki.coronawarnapp.coronatest.type.CoronaTest$Type" /> </fragment> + <fragment + android:id="@+id/submissionDoneFragment" + android:name="de.rki.coronawarnapp.ui.submission.submissiondone.SubmissionDoneFragment" + android:label="SubmissionDoneFragment" + tools:layout="@layout/fragment_submission_done"> + <action + android:id="@+id/action_submissionDoneFragment_to_mainFragment" + app:destination="@id/mainFragment" + app:popUpTo="@id/nav_graph" + app:popUpToInclusive="true"/> + <argument + android:name="testType" + app:argType="de.rki.coronawarnapp.coronatest.type.CoronaTest$Type"/> + </fragment> </navigation>