From 4b6f6d98bcff602c2c7f1fe067921cc90e959743 Mon Sep 17 00:00:00 2001
From: Mohamed <mohamed.metwalli@sap.com>
Date: Thu, 8 Apr 2021 16:49:24 +0200
Subject: [PATCH] Improve CheckIns transitions  (DEV) (#2768)

* Improve transition from CheckIns to its destinations

* Polishing

* Update trace_location_organizer_qr_code_detail_fragment.xml

Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com>
---
 .../attendee/checkins/CheckInEvent.kt         |  2 +-
 .../attendee/checkins/CheckInsFragment.kt     | 50 ++++++++----
 .../attendee/checkins/CheckInsViewModel.kt    |  7 +-
 .../checkins/items/ActiveCheckInVH.kt         |  6 ++
 .../attendee/checkins/items/PastCheckInVH.kt  |  7 +-
 .../confirm/ConfirmCheckInFragment.kt         |  8 ++
 .../attendee/edit/EditCheckInFragment.kt      |  9 +++
 .../onboarding/CheckInOnboardingFragment.kt   | 11 ++-
 .../fragment_trace_location_onboarding.xml    | 81 ++++++++++---------
 ...ce_location_attendee_checkins_fragment.xml |  4 +-
 ...tion_organizer_qr_code_detail_fragment.xml |  3 +-
 11 files changed, 125 insertions(+), 63 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInEvent.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInEvent.kt
index be14a1abc..5af35e5be 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInEvent.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInEvent.kt
@@ -11,7 +11,7 @@ sealed class CheckInEvent {
 
     data class ConfirmCheckIn(val verifiedTraceLocation: VerifiedTraceLocation) : CheckInEvent()
 
-    data class EditCheckIn(val checkInId: Long) : CheckInEvent()
+    data class EditCheckIn(val checkInId: Long, val position: Int) : CheckInEvent()
 
     data class ConfirmSwipeItem(val checkIn: CheckIn, val position: Int) : CheckInEvent()
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsFragment.kt
index b39c06703..4a99d5359 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsFragment.kt
@@ -17,12 +17,14 @@ import androidx.navigation.fragment.findNavController
 import androidx.navigation.fragment.navArgs
 import androidx.recyclerview.widget.DefaultItemAnimator
 import com.google.android.material.transition.Hold
+import com.google.android.material.transition.MaterialSharedAxis
 import de.rki.coronawarnapp.BuildConfig
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.TraceLocationAttendeeCheckinsFragmentBinding
 import de.rki.coronawarnapp.eventregistration.checkins.CheckIn
 import de.rki.coronawarnapp.ui.eventregistration.attendee.checkins.items.CameraPermissionVH
 import de.rki.coronawarnapp.ui.eventregistration.attendee.checkins.items.CheckInsItem
+import de.rki.coronawarnapp.ui.eventregistration.attendee.edit.EditCheckInFragmentArgs
 import de.rki.coronawarnapp.util.di.AutoInject
 import de.rki.coronawarnapp.util.list.isSwipeable
 import de.rki.coronawarnapp.util.list.onSwipeItem
@@ -58,11 +60,6 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag
     private val binding: TraceLocationAttendeeCheckinsFragmentBinding by viewBindingLazy()
     private val checkInsAdapter = CheckInsAdapter()
 
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        exitTransition = Hold()
-    }
-
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         setupMenu(binding.toolbar)
@@ -91,11 +88,14 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag
 
     private fun onNavigationEvent(event: CheckInEvent?) {
         when (event) {
-            is CheckInEvent.ConfirmCheckIn -> doNavigate(
-                CheckInsFragmentDirections.actionCheckInsFragmentToConfirmCheckInFragment(
-                    verifiedTraceLocation = event.verifiedTraceLocation
+            is CheckInEvent.ConfirmCheckIn -> {
+                setupAxisTransition()
+                doNavigate(
+                    CheckInsFragmentDirections.actionCheckInsFragmentToConfirmCheckInFragment(
+                        verifiedTraceLocation = event.verifiedTraceLocation
+                    )
                 )
-            )
+            }
 
             is CheckInEvent.ConfirmSwipeItem -> showRemovalConfirmation(event.checkIn, event.position)
 
@@ -103,15 +103,24 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag
 
             is CheckInEvent.ConfirmRemoveAll -> showRemovalConfirmation(null, null)
 
-            is CheckInEvent.EditCheckIn -> doNavigate(
-                CheckInsFragmentDirections.actionCheckInsFragmentToEditCheckInFragment(
-                    editCheckInId = event.checkInId
+            is CheckInEvent.EditCheckIn -> {
+                setupHoldTransition()
+                val navigatorExtras = binding.checkInsList.layoutManager
+                    ?.findViewByPosition(event.position)?.run {
+                        FragmentNavigatorExtras(this to transitionName)
+                    }
+                findNavController().navigate(
+                    R.id.action_checkInsFragment_to_editCheckInFragment,
+                    EditCheckInFragmentArgs(event.checkInId).toBundle(),
+                    null,
+                    navigatorExtras
                 )
-            )
+            }
 
-            is CheckInEvent.ShowInformation ->
+            is CheckInEvent.ShowInformation -> {
+                setupAxisTransition()
                 doNavigate(CheckInsFragmentDirections.actionCheckInsFragmentToCheckInOnboardingFragment(false))
-
+            }
             is CheckInEvent.OpenDeviceSettings -> openDeviceSettings()
         }
     }
@@ -142,6 +151,7 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag
     private fun bindFAB() {
         binding.scanCheckinQrcodeFab.apply {
             setOnClickListener {
+                setupHoldTransition()
                 findNavController().navigate(
                     R.id.action_checkInsFragment_to_scanCheckInQrCodeFragment,
                     null,
@@ -152,6 +162,16 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag
         }
     }
 
+    private fun setupHoldTransition() {
+        exitTransition = Hold()
+        reenterTransition = Hold()
+    }
+
+    private fun setupAxisTransition() {
+        exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
+        reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
+    }
+
     private fun bindRecycler() {
         binding.checkInsList.apply {
             adapter = checkInsAdapter
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt
index 3810a8070..91ebb6441 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt
@@ -105,6 +105,9 @@ class CheckInsViewModel @AssistedInject constructor(
             when {
                 !checkin.completed -> ActiveCheckInVH.Item(
                     checkin = checkin,
+                    onCardClicked = { checkIn, position ->
+                        events.postValue(CheckInEvent.EditCheckIn(checkIn.id, position))
+                    },
                     onRemoveItem = { events.postValue(CheckInEvent.ConfirmRemoveItem(it)) },
                     onCheckout = { doCheckOutNow(it) },
                     onSwipeItem = { checkIn, position ->
@@ -113,7 +116,9 @@ class CheckInsViewModel @AssistedInject constructor(
                 )
                 else -> PastCheckInVH.Item(
                     checkin = checkin,
-                    onCardClicked = { events.postValue(CheckInEvent.EditCheckIn(it.id)) },
+                    onCardClicked = { checkIn, position ->
+                        events.postValue(CheckInEvent.EditCheckIn(checkIn.id, position))
+                    },
                     onRemoveItem = { events.postValue(CheckInEvent.ConfirmRemoveItem(it)) },
                     onSwipeItem = { checkIn, position ->
                         events.postValue(CheckInEvent.ConfirmSwipeItem(checkIn, position))
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/items/ActiveCheckInVH.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/items/ActiveCheckInVH.kt
index ec44fa16e..4f91c74d8 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/items/ActiveCheckInVH.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/items/ActiveCheckInVH.kt
@@ -78,10 +78,16 @@ class ActiveCheckInVH(parent: ViewGroup) :
         }
 
         checkoutAction.setOnClickListener { curItem.onCheckout(curItem.checkin) }
+
+        itemView.apply {
+            setOnClickListener { curItem.onCardClicked(curItem.checkin, adapterPosition) }
+            transitionName = item.checkin.id.toString()
+        }
     }
 
     data class Item(
         val checkin: CheckIn,
+        val onCardClicked: (CheckIn, Int) -> Unit,
         val onRemoveItem: (CheckIn) -> Unit,
         val onCheckout: (CheckIn) -> Unit,
         val onSwipeItem: (CheckIn, Int) -> Unit,
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/items/PastCheckInVH.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/items/PastCheckInVH.kt
index 7613181df..4ae061dcb 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/items/PastCheckInVH.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/items/PastCheckInVH.kt
@@ -46,12 +46,15 @@ class PastCheckInVH(parent: ViewGroup) :
             }
         }
 
-        itemView.setOnClickListener { curItem.onCardClicked(curItem.checkin) }
+        itemView.apply {
+            setOnClickListener { curItem.onCardClicked(curItem.checkin, adapterPosition) }
+            transitionName = item.checkin.id.toString()
+        }
     }
 
     data class Item(
         val checkin: CheckIn,
-        val onCardClicked: (CheckIn) -> Unit,
+        val onCardClicked: (CheckIn, Int) -> Unit,
         val onRemoveItem: (CheckIn) -> Unit,
         val onSwipeItem: (CheckIn, Int) -> Unit,
     ) : CheckInsItem, HasPayloadDiffer, SwipeConsumer {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/confirm/ConfirmCheckInFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/confirm/ConfirmCheckInFragment.kt
index 6f979cd4c..b2d4e6966 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/confirm/ConfirmCheckInFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/confirm/ConfirmCheckInFragment.kt
@@ -6,6 +6,7 @@ import androidx.core.view.isGone
 import androidx.fragment.app.Fragment
 import androidx.navigation.fragment.navArgs
 import com.google.android.material.appbar.AppBarLayout
+import com.google.android.material.transition.MaterialSharedAxis
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.FragmentConfirmCheckInBinding
 import de.rki.coronawarnapp.ui.durationpicker.DurationPicker
@@ -31,6 +32,13 @@ class ConfirmCheckInFragment : Fragment(R.layout.fragment_confirm_check_in), Aut
         }
     )
 
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+        enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
+        returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
+    }
+
     private val binding: FragmentConfirmCheckInBinding by viewBindingLazy()
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/edit/EditCheckInFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/edit/EditCheckInFragment.kt
index a4213b87a..4f5471d19 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/edit/EditCheckInFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/edit/EditCheckInFragment.kt
@@ -10,6 +10,7 @@ import com.google.android.material.appbar.AppBarLayout
 import com.google.android.material.datepicker.MaterialDatePicker
 import com.google.android.material.timepicker.MaterialTimePicker
 import com.google.android.material.timepicker.TimeFormat
+import com.google.android.material.transition.MaterialContainerTransform
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.FragmentEditCheckInBinding
 import de.rki.coronawarnapp.util.di.AutoInject
@@ -36,6 +37,13 @@ class EditCheckInFragment : Fragment(R.layout.fragment_edit_check_in), AutoInjec
         }
     )
 
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+        sharedElementEnterTransition = MaterialContainerTransform()
+        sharedElementReturnTransition = MaterialContainerTransform()
+    }
+
     private val binding: FragmentEditCheckInBinding by viewBindingLazy()
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -71,6 +79,7 @@ class EditCheckInFragment : Fragment(R.layout.fragment_edit_check_in), AutoInjec
             editCheckinConfirmButton.setOnClickListener {
                 viewModel.onSaveClicked()
             }
+            root.transitionName = navArgs.editCheckInId.toString()
         }
 
         viewModel.events.observe2(this) { navEvent ->
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/onboarding/CheckInOnboardingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/onboarding/CheckInOnboardingFragment.kt
index 3f00d809e..1a9eb4cd3 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/onboarding/CheckInOnboardingFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/onboarding/CheckInOnboardingFragment.kt
@@ -4,12 +4,14 @@ import android.os.Bundle
 import android.view.View
 import androidx.fragment.app.Fragment
 import androidx.navigation.fragment.navArgs
+import com.google.android.material.transition.MaterialSharedAxis
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.FragmentTraceLocationOnboardingBinding
 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.popBackStack
 import de.rki.coronawarnapp.util.ui.viewBindingLazy
 import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
 import de.rki.coronawarnapp.util.viewmodel.cwaViewModels
@@ -23,6 +25,13 @@ class CheckInOnboardingFragment : Fragment(R.layout.fragment_trace_location_onbo
     private val binding: FragmentTraceLocationOnboardingBinding by viewBindingLazy()
     private val args by navArgs<CheckInOnboardingFragmentArgs>()
 
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+        enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
+        returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
+    }
+
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
 
@@ -40,7 +49,7 @@ class CheckInOnboardingFragment : Fragment(R.layout.fragment_trace_location_onbo
                 checkInOnboardingToolbar.apply {
                     navigationIcon = context.getDrawableCompat(R.drawable.ic_close)
                     navigationContentDescription = getString(R.string.accessibility_close)
-                    setNavigationOnClickListener { viewModel.onBackButtonPress() }
+                    setNavigationOnClickListener { popBackStack() }
                 }
             }
         }
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml b/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml
index 8100354a0..3d8399ed7 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml
@@ -2,7 +2,8 @@
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:background="@color/colorBackground">
 
     <com.google.android.material.appbar.MaterialToolbar
         android:id="@+id/check_in_onboarding_toolbar"
@@ -19,36 +20,36 @@
         style="@style/buttonPrimary"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:text="@string/trace_location_onboarding_body_confirm"
         android:layout_marginHorizontal="24dp"
         android:layout_marginBottom="24dp"
+        android:text="@string/trace_location_onboarding_body_confirm"
+        app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent"/>
+        app:layout_constraintStart_toStartOf="parent" />
 
     <androidx.core.widget.NestedScrollView
         android:id="@+id/check_in_onboarding_scroll_view"
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_marginBottom="20dp"
-        app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_toolbar"
-        app:layout_constraintBottom_toTopOf="@+id/check_in_onboarding_acknowledge" >
+        app:layout_constraintBottom_toTopOf="@+id/check_in_onboarding_acknowledge"
+        app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_toolbar">
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:layout_width="match_parent"
-            android:layout_height="wrap_content" >
+            android:layout_height="wrap_content">
 
             <ImageView
                 android:id="@+id/check_in_onboarding_image"
                 android:layout_width="0dp"
                 android:layout_height="190dp"
-                android:src="@drawable/trace_location_onboarding"
                 android:layout_marginHorizontal="24dp"
                 android:layout_marginTop="4dp"
                 android:contentDescription="@string/trace_location_onboarding_content_description"
-                app:layout_constraintTop_toTopOf="parent"
+                android:src="@drawable/trace_location_onboarding"
                 app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent" />
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
 
             <TextView
                 android:id="@+id/check_in_onboarding_title"
@@ -56,11 +57,11 @@
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
-                android:layout_marginTop="24dp"
                 android:layout_marginHorizontal="24dp"
+                android:layout_marginTop="24dp"
                 android:text="@string/trace_location_onboarding_title2"
-                app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_image" />
 
             <TextView
@@ -68,11 +69,11 @@
                 style="@style/subtitleMedium"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="22dp"
                 android:layout_marginHorizontal="24dp"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintEnd_toEndOf="parent"
+                android:layout_marginTop="22dp"
                 android:text="@string/trace_location_onboarding_subheadline"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_title" />
 
             <ImageView
@@ -83,8 +84,8 @@
                 android:layout_marginTop="@dimen/spacing_large"
                 android:importantForAccessibility="no"
                 android:src="@drawable/ic_qr_tracing_static"
-                app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_subtitle"
-                app:layout_constraintStart_toStartOf="parent" />
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_subtitle" />
 
             <TextView
                 android:id="@+id/check_in_onboarding_warning"
@@ -93,9 +94,9 @@
                 android:layout_height="wrap_content"
                 android:layout_marginHorizontal="16dp"
                 android:text="@string/trace_location_onboarding_body_warning"
-                app:layout_constraintTop_toTopOf="@id/check_in_warning_image"
+                app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toEndOf="@id/check_in_warning_image"
-                app:layout_constraintEnd_toEndOf="parent" />
+                app:layout_constraintTop_toTopOf="@id/check_in_warning_image" />
 
             <ImageView
                 android:id="@+id/check_in_stay_image"
@@ -105,8 +106,8 @@
                 android:layout_marginTop="@dimen/spacing_medium"
                 android:importantForAccessibility="no"
                 android:src="@drawable/ic_qr_time"
-                app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_warning"
-                app:layout_constraintStart_toStartOf="parent" />
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_warning" />
 
             <TextView
                 android:id="@+id/check_in_onboarding_stay"
@@ -115,17 +116,17 @@
                 android:layout_height="wrap_content"
                 android:layout_marginHorizontal="16dp"
                 android:text="@string/trace_location_onboarding_body_stay"
-                app:layout_constraintTop_toTopOf="@id/check_in_stay_image"
+                app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toEndOf="@id/check_in_warning_image"
-                app:layout_constraintEnd_toEndOf="parent" />
+                app:layout_constraintTop_toTopOf="@id/check_in_stay_image" />
 
             <androidx.constraintlayout.widget.ConstraintLayout
                 android:id="@+id/check_in_onboarding_card_container"
                 style="@style/cardTracing"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="24dp"
                 android:layout_marginHorizontal="24dp"
+                android:layout_marginTop="24dp"
                 android:background="#F5F5F5"
                 android:orientation="vertical"
                 app:layout_constraintEnd_toEndOf="parent"
@@ -146,20 +147,20 @@
                     style="@style/subtitle"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
-                    android:text="@string/trace_location_onboarding_body_intro"
                     android:layout_marginTop="4dp"
-                    app:layout_constraintStart_toStartOf="parent"
+                    android:text="@string/trace_location_onboarding_body_intro"
                     app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_card_title" />
 
                 <ImageView
                     android:id="@+id/check_in_onboarding_bulletpoint1"
                     android:layout_width="8dp"
                     android:layout_height="8dp"
-                    android:src="@drawable/bullet_point"
                     android:layout_marginTop="24dp"
-                    app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_card_subtitle"
-                    app:layout_constraintStart_toStartOf="parent" />
+                    android:src="@drawable/bullet_point"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_card_subtitle" />
 
                 <TextView
                     android:id="@+id/check_in_onboarding_body2"
@@ -169,8 +170,8 @@
                     android:layout_marginStart="15dp"
                     android:layout_marginTop="16dp"
                     android:focusable="true"
-                    android:textStyle="bold"
                     android:text="@string/trace_location_onboarding_body_consent2"
+                    android:textStyle="bold"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toEndOf="@id/check_in_onboarding_bulletpoint1"
                     app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_card_subtitle" />
@@ -192,10 +193,10 @@
                     android:id="@+id/check_in_onboarding_bulletpoint2"
                     android:layout_width="8dp"
                     android:layout_height="8dp"
-                    android:src="@drawable/bullet_point"
                     android:layout_marginTop="22dp"
-                    app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_body3"
-                    app:layout_constraintStart_toStartOf="parent" />
+                    android:src="@drawable/bullet_point"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_body3" />
 
                 <TextView
                     android:id="@+id/check_in_onboarding_body4"
@@ -205,8 +206,8 @@
                     android:layout_marginStart="15dp"
                     android:layout_marginTop="16dp"
                     android:focusable="true"
-                    android:textStyle="bold"
                     android:text="@string/trace_location_onboarding_body_consent4"
+                    android:textStyle="bold"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toEndOf="@id/check_in_onboarding_bulletpoint2"
                     app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_body3" />
@@ -215,10 +216,10 @@
                     android:id="@+id/check_in_onboarding_bulletpoint3"
                     android:layout_width="8dp"
                     android:layout_height="8dp"
-                    android:src="@drawable/bullet_point"
                     android:layout_marginTop="22dp"
-                    app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_body4"
-                    app:layout_constraintStart_toStartOf="parent" />
+                    android:src="@drawable/bullet_point"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_body4" />
 
                 <TextView
                     android:id="@+id/check_in_onboarding_body5"
@@ -228,8 +229,8 @@
                     android:layout_marginStart="15dp"
                     android:layout_marginTop="16dp"
                     android:focusable="true"
-                    android:textStyle="bold"
                     android:text="@string/trace_location_onboarding_body_consent5"
+                    android:textStyle="bold"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toEndOf="@id/check_in_onboarding_bulletpoint3"
                     app:layout_constraintTop_toBottomOf="@id/check_in_onboarding_body4" />
@@ -255,8 +256,8 @@
                 android:layout_marginHorizontal="24dp"
                 android:layout_marginTop="30dp"
                 android:focusable="true"
-                app:titleText="@string/contact_diary_onboarding_legal_information"
-                app:layout_constraintTop_toBottomOf="@+id/check_in_onboarding_card_container"/>
+                app:layout_constraintTop_toBottomOf="@+id/check_in_onboarding_card_container"
+                app:titleText="@string/contact_diary_onboarding_legal_information" />
         </androidx.constraintlayout.widget.ConstraintLayout>
     </androidx.core.widget.NestedScrollView>
 
diff --git a/Corona-Warn-App/src/main/res/layout/trace_location_attendee_checkins_fragment.xml b/Corona-Warn-App/src/main/res/layout/trace_location_attendee_checkins_fragment.xml
index 0d86c8e35..1e665b70b 100644
--- a/Corona-Warn-App/src/main/res/layout/trace_location_attendee_checkins_fragment.xml
+++ b/Corona-Warn-App/src/main/res/layout/trace_location_attendee_checkins_fragment.xml
@@ -4,7 +4,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/content_container"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:background="@color/colorBackground">
 
     <com.google.android.material.appbar.MaterialToolbar
         android:id="@+id/toolbar"
@@ -58,6 +59,7 @@
             android:layout_marginTop="36dp"
             android:text="@string/trace_location_checkins_empty_label"
             android:textStyle="bold" />
+
         <TextView
             style="@style/body2Medium"
             android:layout_width="wrap_content"
diff --git a/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_detail_fragment.xml b/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_detail_fragment.xml
index 7927284dd..9396dc157 100644
--- a/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_detail_fragment.xml
+++ b/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_detail_fragment.xml
@@ -6,8 +6,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@drawable/trace_location_gradient_background"
-    android:contentDescription="@string/trace_location_event_detail_title_accessibility"
-    android:transitionName="trace_location_container_transition">
+    android:contentDescription="@string/trace_location_event_detail_title_accessibility">
 
     <androidx.coordinatorlayout.widget.CoordinatorLayout
         android:id="@+id/coordinator_layout"
-- 
GitLab