Skip to content
Snippets Groups Projects
Unverified Commit 9749838d authored by Mohamed's avatar Mohamed Committed by GitHub
Browse files

Polishing (EXPOSUREAPP-6913) (#3135)

* Connect to actual graph

* Adapt new title

* Lint

* Connect to main screen cards

* Lint

* FixME :: :tools:

* lint

* Keep testing logic

* Remove fix me

* Navigation

* Naming
parent 1d0507b7
No related branches found
No related tags found
No related merge requests found
Showing
with 82 additions and 36 deletions
......@@ -29,6 +29,7 @@ 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.vaccination.ui.list.VaccinationListFragment
import javax.inject.Inject
/**
......@@ -116,6 +117,9 @@ class HomeFragment : Fragment(R.layout.home_fragment_layout), AutoInject {
viewModel.tracingExplanationWasShown()
}
}
is HomeFragmentEvents.GoToVaccinationList -> findNavController().navigate(
VaccinationListFragment.navigationUri(event.vaccinatedPersonIdentifier)
)
}
}
......
......@@ -8,7 +8,9 @@ sealed class HomeFragmentEvents {
object ShowErrorResetDialog : HomeFragmentEvents()
object GoToStatisticsExplanation : HomeFragmentEvents()
data class ShowDeleteTestDialog(val type: CoronaTest.Type) : HomeFragmentEvents()
object GoToStatisticsExplanation : HomeFragmentEvents()
data class GoToVaccinationList(val vaccinatedPersonIdentifier: String) : HomeFragmentEvents()
}
......@@ -307,18 +307,22 @@ class HomeFragmentViewModel @AssistedInject constructor(
else -> add(tracingItem)
}
vaccinatedPersons.forEach {
val card = when (it.vaccinationStatus) {
vaccinatedPersons.forEach { vaccinatedPerson ->
val card = when (vaccinatedPerson.vaccinationStatus) {
VaccinatedPerson.Status.COMPLETE -> CompleteVaccinationHomeCard.Item(
vaccinatedPerson = it,
vaccinatedPerson = vaccinatedPerson,
onClickAction = {
// TODO
popupEvents.postValue(
HomeFragmentEvents.GoToVaccinationList(vaccinatedPerson.identifier.code)
)
}
)
VaccinatedPerson.Status.INCOMPLETE -> IncompleteVaccinationHomeCard.Item(
vaccinatedPerson = it,
vaccinatedPerson = vaccinatedPerson,
onClickAction = {
// TODO
popupEvents.postValue(
HomeFragmentEvents.GoToVaccinationList(vaccinatedPerson.identifier.code)
)
}
)
}
......
......@@ -3,13 +3,13 @@ package de.rki.coronawarnapp.vaccination.ui.details
import android.os.Bundle
import android.view.View
import android.widget.LinearLayout
import android.widget.Toast
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.navArgs
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.bugreporting.ui.toErrorDialogBuilder
import de.rki.coronawarnapp.databinding.FragmentVaccinationDetailsBinding
import de.rki.coronawarnapp.ui.view.onOffsetChange
import de.rki.coronawarnapp.util.di.AutoInject
......@@ -39,38 +39,43 @@ class VaccinationDetailsFragment : Fragment(R.layout.fragment_vaccination_detail
override fun onViewCreated(view: View, savedInstanceState: Bundle?) =
with(binding) {
toolbar.setNavigationOnClickListener { popBackStack() }
deleteButton.setOnClickListener {
showDeletionDialog()
}
toolbar.setNavigationOnClickListener { viewModel.onClose() }
deleteButton.setOnClickListener { showDeletionDialog() }
viewModel.vaccinationCertificate.observe(viewLifecycleOwner) {
it.certificate?.let { certificate -> bindCertificateViews(certificate) }
appBarLayout.onOffsetChange { titleAlpha, subtitleAlpha ->
title.alpha = titleAlpha
subtitle.alpha = subtitleAlpha
}
setToolbarOverlay()
val background = if (it.isComplete) {
R.drawable.vaccination_compelete_gradient
} else {
R.drawable.vaccination_incomplete
val background = when {
it.isComplete -> R.drawable.vaccination_compelete_gradient
else -> R.drawable.vaccination_incomplete
}
expandedImage.setImageResource(background)
}
appBarLayout.onOffsetChange { titleAlpha, subtitleAlpha ->
title.alpha = titleAlpha
subtitle.alpha = subtitleAlpha
}
setToolbarOverlay()
viewModel.errors.observe(viewLifecycleOwner) {
it.toErrorDialogBuilder(requireContext()).show()
}
viewModel.events.observe(viewLifecycleOwner) {
when (it) {
VaccinationDetailsNavigation.Back -> popBackStack()
}
}
}
private fun showDeletionDialog() {
MaterialAlertDialogBuilder(requireContext())
.setTitle(getString(R.string.vaccination_details_deletion_dialog_title))
.setMessage(getString(R.string.vaccination_details_deletion_dialog_message))
.setPositiveButton(getString(R.string.vaccination_details_deletion_dialog_positive_button)) { _, _ ->
Toast.makeText(requireContext(), "TODO \uD83D\uDEA7", Toast.LENGTH_LONG).show()
.setTitle(R.string.vaccination_details_deletion_dialog_title)
.setMessage(R.string.vaccination_details_deletion_dialog_message)
.setPositiveButton(R.string.vaccination_details_deletion_dialog_positive_button) { _, _ ->
viewModel.deleteVaccination()
}
.setNegativeButton(getString(R.string.vaccination_details_deletion_dialog_negative_button)) { _, _ ->
.setNegativeButton(R.string.vaccination_details_deletion_dialog_negative_button) { _, _ ->
// No-Op
}
.show()
......@@ -90,6 +95,11 @@ class VaccinationDetailsFragment : Fragment(R.layout.fragment_vaccination_detail
certificateIssuer.text = certificate.certificateIssuer
certificateCountry.text = certificate.certificateCountry.getLabel(requireContext())
certificateId.text = certificate.certificateId
title.text = getString(
R.string.vaccination_details_title,
certificate.doseNumber,
certificate.totalSeriesOfDoses
)
}
private fun setToolbarOverlay() {
......
package de.rki.coronawarnapp.vaccination.ui.details
sealed class VaccinationDetailsNavigation {
object Back : VaccinationDetailsNavigation()
}
......@@ -5,12 +5,14 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
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.CWAViewModelFactory
import de.rki.coronawarnapp.vaccination.core.VaccinatedPerson
import de.rki.coronawarnapp.vaccination.core.VaccinationCertificate
import de.rki.coronawarnapp.vaccination.core.repository.VaccinationRepository
import kotlinx.coroutines.flow.map
import timber.log.Timber
class VaccinationDetailsViewModel @AssistedInject constructor(
private val vaccinationRepository: VaccinationRepository,
......@@ -22,8 +24,22 @@ class VaccinationDetailsViewModel @AssistedInject constructor(
findVaccinationDetails(it)
}.asLiveData(context = dispatcherProvider.Default)
val errors = SingleLiveEvent<Throwable>()
val events = SingleLiveEvent<VaccinationDetailsNavigation>()
fun deleteVaccination() = launch {
vaccinationRepository.deleteVaccinationCertificate(vaccinationCertificateId)
try {
Timber.d("deleteVaccination")
vaccinationRepository.deleteVaccinationCertificate(vaccinationCertificateId)
events.postValue(VaccinationDetailsNavigation.Back)
} catch (e: Exception) {
Timber.d(e, "deleteVaccinationCertificate failed")
errors.postValue(e)
}
}
fun onClose() {
events.postValue(VaccinationDetailsNavigation.Back)
}
private fun findVaccinationDetails(vaccinatedPersons: Set<VaccinatedPerson>): VaccinationDetails {
......
......@@ -5,6 +5,7 @@ import android.view.View
import android.widget.LinearLayout
import android.widget.Toast
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.net.toUri
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.navArgs
......@@ -59,9 +60,8 @@ class VaccinationListFragment : Fragment(R.layout.fragment_vaccination_list), Au
viewModel.events.observe(viewLifecycleOwner) { event ->
when (event) {
is NavigateToVaccinationCertificateDetails -> doNavigate(
VaccinationListFragmentDirections.actionVaccinationListFragmentToVaccinationDetailsFragment(
event.vaccinationCertificateId
)
VaccinationListFragmentDirections
.actionVaccinationListFragmentToVaccinationDetailsFragment(event.vaccinationCertificateId)
)
}
}
......@@ -119,4 +119,8 @@ class VaccinationListFragment : Fragment(R.layout.fragment_vaccination_list), Au
val behavior: AppBarLayout.ScrollingViewBehavior = params.behavior as (AppBarLayout.ScrollingViewBehavior)
behavior.overlayTop = (deviceWidth / divider) - 24
}
companion object {
fun navigationUri(personIdentifier: String) = "coronawarnapp://vaccination-list/$personIdentifier".toUri()
}
}
......@@ -52,10 +52,10 @@
android:layout_marginTop="90dp"
android:layout_marginBottom="12dp"
android:gravity="center"
android:text="@string/vaccination_details_title"
android:textColor="@android:color/white"
android:textSize="20sp"
android:textStyle="bold" />
android:textStyle="bold"
tools:text="Impfung 1 von 2" />
<TextView
android:id="@+id/subtitle"
......
......@@ -16,6 +16,7 @@
<action
android:id="@+id/action_vaccinationListFragment_to_vaccinationDetailsFragment"
app:destination="@id/vaccinationDetailsFragment" />
<deepLink app:uri="coronawarnapp://vaccination-list/{vaccinatedPersonId}" />
</fragment>
<fragment
......
......@@ -19,7 +19,7 @@
<!-- XTXT: Vaccination Details subtitle-->
<string name="vaccination_details_subtitle">Impfzertifikat</string>
<!-- XTXT: Vaccination Details title-->
<string name="vaccination_details_title">Erste Impfung</string>
<string name="vaccination_details_title">Impfung %1$d von %2$d</string>
<!-- XTXT: Vaccination Details deletion dialog title-->
<string name="vaccination_details_deletion_dialog_title">Wollen Sie das Impfzertifikat wirklich entfernen?</string>
<!-- XTXT: Vaccination Details deletion dialog message-->
......
......@@ -19,7 +19,7 @@
<!-- XTXT: Vaccination Details subtitle-->
<string name="vaccination_details_subtitle">Impfzertifikat</string>
<!-- XTXT: Vaccination Details title-->
<string name="vaccination_details_title">Erste Impfung</string>
<string name="vaccination_details_title">Impfung %1$d von %2$d</string>
<!-- XTXT: Vaccination Details deletion dialog title-->
<string name="vaccination_details_deletion_dialog_title">Wollen Sie das Impfzertifikat wirklich entfernen?</string>
<!-- XTXT: Vaccination Details deletion dialog message-->
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment