From 94b267bf4551736bbc26775770721a76286926d6 Mon Sep 17 00:00:00 2001
From: Alex Paulescu <alex.paulescu@gmail.com>
Date: Wed, 9 Dec 2020 19:10:27 +0200
Subject: [PATCH] Homescreen Contact Diary card (EXPOSUREAPP-4153) (#1848)

* Added vector graphics.

* Added strings.

* Added card.

* Changed diary card position.

* Added navigation to diary activity.

* Removed finish call on main activity.

* Added newline at end of files.
---
 .../rki/coronawarnapp/ui/main/MainActivity.kt |  5 ++
 .../ui/main/home/HomeFragment.kt              |  8 ++
 .../ui/main/home/HomeFragmentEvents.kt        |  2 +
 .../ui/main/home/HomeFragmentViewModel.kt     |  4 +
 .../src/main/res/drawable/ic_diary_book.xml   | 22 ++++++
 .../contact_diary_homescreen_card_include.xml | 74 +++++++++++++++++++
 .../src/main/res/layout/fragment_home.xml     | 14 +++-
 7 files changed, 127 insertions(+), 2 deletions(-)
 create mode 100644 Corona-Warn-App/src/main/res/drawable/ic_diary_book.xml
 create mode 100644 Corona-Warn-App/src/main/res/layout/contact_diary_homescreen_card_include.xml

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt
index c9f7e3d3c..5b917458e 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt
@@ -14,6 +14,7 @@ import dagger.android.AndroidInjector
 import dagger.android.DispatchingAndroidInjector
 import dagger.android.HasAndroidInjector
 import de.rki.coronawarnapp.R
+import de.rki.coronawarnapp.contactdiary.ui.ContactDiaryActivity
 import de.rki.coronawarnapp.deadman.DeadmanNotificationScheduler
 import de.rki.coronawarnapp.storage.LocalData
 import de.rki.coronawarnapp.ui.base.startActivitySafely
@@ -197,6 +198,10 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector {
         onBackPressed()
     }
 
+    fun navigateToContactDiaryActivity() {
+        ContactDiaryActivity.start(this)
+    }
+
     /**
      * Scheduling for a download of keys every hour.
      */
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragment.kt
index 887906299..65bf1c2ad 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragment.kt
@@ -7,6 +7,7 @@ import android.view.accessibility.AccessibilityEvent
 import androidx.fragment.app.Fragment
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.FragmentHomeBinding
+import de.rki.coronawarnapp.ui.main.MainActivity
 import de.rki.coronawarnapp.util.DialogHelper
 import de.rki.coronawarnapp.util.ExternalActionHelper
 import de.rki.coronawarnapp.util.di.AutoInject
@@ -87,6 +88,9 @@ class HomeFragment : Fragment(R.layout.fragment_home), AutoInject {
                 HomeFragmentEvents.ShowDeleteTestDialog -> {
                     showRemoveTestDialog()
                 }
+                HomeFragmentEvents.GoToContactDiary -> {
+                    (requireActivity() as MainActivity).navigateToContactDiaryActivity()
+                }
             }
         }
 
@@ -97,6 +101,10 @@ class HomeFragment : Fragment(R.layout.fragment_home), AutoInject {
         }
 
         vm.observeTestResultToSchedulePositiveTestResultReminder()
+
+        binding.contactDiaryCard.contactDiaryCardHomescreenButton.setOnClickListener {
+            vm.moveToContactDiary()
+        }
     }
 
     override fun onResume() {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentEvents.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentEvents.kt
index 26bee23f2..bc6482d6a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentEvents.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentEvents.kt
@@ -10,4 +10,6 @@ sealed class HomeFragmentEvents {
     object ShowErrorResetDialog : HomeFragmentEvents()
 
     object ShowDeleteTestDialog : HomeFragmentEvents()
+
+    object GoToContactDiary : HomeFragmentEvents()
 }
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 bdcdbc0ae..196c76869 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
@@ -118,6 +118,10 @@ class HomeFragmentViewModel @AssistedInject constructor(
         popupEvents.postValue(HomeFragmentEvents.ShowDeleteTestDialog)
     }
 
+    fun moveToContactDiary() {
+        popupEvents.postValue(HomeFragmentEvents.GoToContactDiary)
+    }
+
     fun deregisterWarningAccepted() {
         submissionRepository.deleteTestGUID()
         SubmissionRepository.deleteRegistrationToken()
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_diary_book.xml b/Corona-Warn-App/src/main/res/drawable/ic_diary_book.xml
new file mode 100644
index 000000000..940b4b971
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_diary_book.xml
@@ -0,0 +1,22 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
+    android:viewportWidth="88"
+    android:viewportHeight="120"
+    android:width="88dp"
+    android:height="120dp">
+    <group>
+        <clip-path
+            android:pathData="M0 0H88V120H0V0Z" />
+        <path
+            android:pathData="M88.0002 110.549V5.25664C88.0002 2.3469 85.6586 0 82.7791 0H11.7716C5.24249 0 -0.0419402 5.35221 0.000250894 11.9257L0.56983 100.354C0.612021 106.864 5.86481 112.131 12.3411 112.131H86.4286C87.3041 112.131 88.0002 111.419 88.0002 110.549Z"
+            android:fillColor="#C66A61" />
+        <path
+            android:pathData="M64.4999 108.467H12.5099C7.56303 108.467 3.56543 104.432 3.56543 99.4619V98.4212C3.56543 93.4406 7.57358 89.4159 12.5099 89.4159H64.4893C69.4362 89.4159 73.4338 93.4513 73.4338 98.4212V99.4619C73.4444 104.432 69.4362 108.467 64.4999 108.467Z"
+            android:fillColor="#FFFFFF" />
+        <path
+            android:pathData="M85.817 108.467H13.0269V89.4055H85.817C85.0892 90.6374 83.2644 94.0675 83.2644 98.9312C83.2644 100.418 83.4332 104.443 85.817 108.467Z"
+            android:fillColor="#FFFFFF" />
+        <path
+            android:pathData="M13.9231 99.345H24.4287C24.7451 99.345 24.9983 99.5999 24.9983 99.9184V119.426C24.9983 120 24.2599 120.223 23.9435 119.745L19.6505 113.256C19.4185 112.917 18.9227 112.917 18.7012 113.256L14.4083 119.745C14.0919 120.223 13.3535 120 13.3535 119.426V99.9184C13.3535 99.5999 13.6067 99.345 13.9231 99.345Z"
+            android:fillColor="#657887" />
+    </group>
+</vector>
diff --git a/Corona-Warn-App/src/main/res/layout/contact_diary_homescreen_card_include.xml b/Corona-Warn-App/src/main/res/layout/contact_diary_homescreen_card_include.xml
new file mode 100644
index 000000000..378c93cc2
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/layout/contact_diary_homescreen_card_include.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:tools="http://schemas.android.com/tools"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/contact_diary_homescreen_card"
+        style="@style/cardNoPadding"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:focusable="true">
+
+
+        <TextView
+            android:id="@+id/contact_diary_card_homescreen_title"
+            style="@style/headline5"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/card_padding"
+            android:layout_marginTop="@dimen/card_padding"
+            android:accessibilityHeading="true"
+            android:focusable="false"
+            android:text="@string/contact_diary_homescreen_card_header"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+        <TextView
+            android:id="@+id/contact_diary_card_homescreen_body"
+            style="@style/subtitleMedium"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/card_padding"
+            android:layout_marginTop="@dimen/spacing_normal"
+            android:layout_marginEnd="@dimen/spacing_small"
+            android:focusable="false"
+            android:text="@string/contact_diary_homescreen_card_body"
+            app:layout_constraintEnd_toStartOf="@+id/contact_diary_card_homescreen_icon"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/contact_diary_card_homescreen_title" />
+
+        <Button
+            android:id="@+id/contact_diary_card_homescreen_button"
+            style="@style/buttonPrimary"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/card_padding"
+            android:layout_marginTop="@dimen/spacing_normal"
+            android:layout_marginEnd="@dimen/card_padding"
+            android:layout_marginBottom="@dimen/card_padding"
+            android:text="@string/contact_diary_homescreen_card_button_text"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/submission_status_card_unregistered_barrier" />
+
+        <ImageView
+            android:id="@+id/contact_diary_card_homescreen_icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="@dimen/spacing_normal"
+            android:importantForAccessibility="no"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/contact_diary_card_homescreen_body"
+            app:srcCompat="@drawable/ic_diary_book" />
+
+        <androidx.constraintlayout.widget.Barrier
+            android:id="@+id/submission_status_card_unregistered_barrier"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:barrierDirection="bottom"
+            app:constraint_referenced_ids="contact_diary_card_homescreen_icon,contact_diary_card_homescreen_body" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_home.xml b/Corona-Warn-App/src/main/res/layout/fragment_home.xml
index 7b1ebe31b..ab29b94ed 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_home.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_home.xml
@@ -220,7 +220,17 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 app:barrierDirection="bottom"
-                app:constraint_referenced_ids="main_test_done, main_risk" />
+                app:constraint_referenced_ids="main_test_done" />
+
+            <include
+                android:id="@+id/contact_diary_card"
+                layout="@layout/contact_diary_homescreen_card_include"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_small"
+                app:layout_constraintEnd_toStartOf="@+id/guideline_card_end"
+                app:layout_constraintStart_toStartOf="@+id/guideline_card_start"
+                app:layout_constraintTop_toBottomOf="@id/main_barrier" />
 
             <include
                 android:id="@+id/main_about"
@@ -231,7 +241,7 @@
                 gone="@{submissionCard == null }"
                 app:layout_constraintEnd_toStartOf="@+id/guideline_card_end"
                 app:layout_constraintStart_toStartOf="@+id/guideline_card_start"
-                app:layout_constraintTop_toBottomOf="@+id/main_barrier"
+                app:layout_constraintTop_toBottomOf="@+id/contact_diary_card"
                 app:layout_constraintBottom_toBottomOf="@+id/guideline_bottom"
                 app:layout_constraintVertical_bias="0.0" />
 
-- 
GitLab