From 2e9ff2dad1953b0f9975dd39e1ee62be304bb30c Mon Sep 17 00:00:00 2001
From: Lukas Lechner <lukas.lechner@sap.com>
Date: Fri, 26 Feb 2021 15:06:19 +0100
Subject: [PATCH] Contact diary person and place with more than 250 letters can
 be saved (EXPOSUREAPP-5400) #2476

* Restrict name, phone number and email text field to 250 characters in contact diary

* Trim name, phone and mail when mapping to entity in contact diary

* Remove unnecessary styles items

* Don't trim whitespaces

* Remove trim() for all values of persons and locations

Co-authored-by: BMItter <46747780+BMItter@users.noreply.github.com>
Co-authored-by: Ralf Gehrer <ralfgehrer@users.noreply.github.com>
---
 .../storage/entity/ContactDiaryLocationEntity.kt       | 10 +++++++---
 .../storage/entity/ContactDiaryPersonEntity.kt         | 10 +++++++---
 .../ui/location/ContactDiaryAddLocationFragment.kt     |  8 ++++----
 .../ui/location/ContactDiaryAddLocationViewModel.kt    |  2 +-
 .../ui/person/ContactDiaryAddPersonFragment.kt         |  8 ++++----
 .../ui/person/ContactDiaryAddPersonViewModel.kt        |  2 +-
 .../res/layout/contact_diary_add_location_fragment.xml |  3 +++
 .../res/layout/contact_diary_add_person_fragment.xml   |  3 +++
 Corona-Warn-App/src/main/res/values/styles.xml         |  2 --
 .../ui/durationpicker/DurationExtensionKtTest.kt       |  2 +-
 10 files changed, 31 insertions(+), 19 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryLocationEntity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryLocationEntity.kt
index c7e21989f..31529a238 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryLocationEntity.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryLocationEntity.kt
@@ -5,6 +5,7 @@ import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import de.rki.coronawarnapp.contactdiary.model.ContactDiaryLocation
+import de.rki.coronawarnapp.util.trimToLength
 import kotlinx.parcelize.Parcelize
 
 @Parcelize
@@ -19,10 +20,13 @@ data class ContactDiaryLocationEntity(
         get() = locationId
 }
 
+private const val MAX_CHARACTERS = 250
+private fun String.trimMaxCharacters(): String = this.trimToLength(MAX_CHARACTERS)
+
 fun ContactDiaryLocation.toContactDiaryLocationEntity(): ContactDiaryLocationEntity =
     ContactDiaryLocationEntity(
         locationId = this.locationId,
-        locationName = this.locationName,
-        phoneNumber = this.phoneNumber,
-        emailAddress = this.emailAddress
+        locationName = this.locationName.trimMaxCharacters(),
+        phoneNumber = this.phoneNumber?.trimMaxCharacters(),
+        emailAddress = this.emailAddress?.trimMaxCharacters()
     )
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryPersonEntity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryPersonEntity.kt
index f9a10824c..df4c00802 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryPersonEntity.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/entity/ContactDiaryPersonEntity.kt
@@ -5,6 +5,7 @@ import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import de.rki.coronawarnapp.contactdiary.model.ContactDiaryPerson
+import de.rki.coronawarnapp.util.trimToLength
 import kotlinx.parcelize.Parcelize
 
 @Parcelize
@@ -19,10 +20,13 @@ data class ContactDiaryPersonEntity(
         get() = personId
 }
 
+private const val MAX_CHARACTERS = 250
+private fun String.trimMaxCharacters(): String = this.trimToLength(MAX_CHARACTERS)
+
 fun ContactDiaryPerson.toContactDiaryPersonEntity(): ContactDiaryPersonEntity =
     ContactDiaryPersonEntity(
         personId = this.personId,
-        fullName = this.fullName,
-        phoneNumber = this.phoneNumber,
-        emailAddress = this.emailAddress
+        fullName = this.fullName.trimMaxCharacters(),
+        phoneNumber = this.phoneNumber?.trimMaxCharacters(),
+        emailAddress = this.emailAddress?.trimMaxCharacters()
     )
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/location/ContactDiaryAddLocationFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/location/ContactDiaryAddLocationFragment.kt
index b7540115e..8e35cbf81 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/location/ContactDiaryAddLocationFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/location/ContactDiaryAddLocationFragment.kt
@@ -52,8 +52,8 @@ class ContactDiaryAddLocationFragment : Fragment(R.layout.contact_diary_add_loca
                     it.hideKeyboard()
                     viewModel.updateLocation(
                         location,
-                        phoneNumber = binding.locationPhoneInput.text.toString().trim(),
-                        emailAddress = binding.locationEmailInput.text.toString().trim()
+                        phoneNumber = binding.locationPhoneInput.text.toString(),
+                        emailAddress = binding.locationEmailInput.text.toString()
                     )
                 }
             }
@@ -64,8 +64,8 @@ class ContactDiaryAddLocationFragment : Fragment(R.layout.contact_diary_add_loca
                 locationSaveButton.setOnClickListener {
                     it.hideKeyboard()
                     viewModel.addLocation(
-                        phoneNumber = binding.locationPhoneInput.text.toString().trim(),
-                        emailAddress = binding.locationEmailInput.text.toString().trim()
+                        phoneNumber = binding.locationPhoneInput.text.toString(),
+                        emailAddress = binding.locationEmailInput.text.toString()
                     )
                 }
             }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/location/ContactDiaryAddLocationViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/location/ContactDiaryAddLocationViewModel.kt
index 3f0b7c7ab..ca6484156 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/location/ContactDiaryAddLocationViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/location/ContactDiaryAddLocationViewModel.kt
@@ -39,7 +39,7 @@ class ContactDiaryAddLocationViewModel @AssistedInject constructor(
         .asLiveData()
 
     fun locationChanged(value: String) {
-        locationName.value = value.trim()
+        locationName.value = value
     }
 
     fun addLocation(phoneNumber: String, emailAddress: String) = launch(coroutineExceptionHandler) {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/person/ContactDiaryAddPersonFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/person/ContactDiaryAddPersonFragment.kt
index ae8716f9f..e54cede4d 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/person/ContactDiaryAddPersonFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/person/ContactDiaryAddPersonFragment.kt
@@ -54,8 +54,8 @@ class ContactDiaryAddPersonFragment :
                     it.hideKeyboard()
                     viewModel.updatePerson(
                         person,
-                        phoneNumber = binding.personPhoneNumberInput.text.toString().trim(),
-                        emailAddress = binding.personEmailInput.text.toString().trim()
+                        phoneNumber = binding.personPhoneNumberInput.text.toString(),
+                        emailAddress = binding.personEmailInput.text.toString()
                     )
                 }
             }
@@ -65,8 +65,8 @@ class ContactDiaryAddPersonFragment :
             binding.personSaveButton.setOnClickListener {
                 it.hideKeyboard()
                 viewModel.addPerson(
-                    phoneNumber = binding.personPhoneNumberInput.text.toString().trim(),
-                    emailAddress = binding.personEmailInput.text.toString().trim()
+                    phoneNumber = binding.personPhoneNumberInput.text.toString(),
+                    emailAddress = binding.personEmailInput.text.toString()
                 )
             }
         }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/person/ContactDiaryAddPersonViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/person/ContactDiaryAddPersonViewModel.kt
index f00889cfb..34eb68336 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/person/ContactDiaryAddPersonViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/person/ContactDiaryAddPersonViewModel.kt
@@ -38,7 +38,7 @@ class ContactDiaryAddPersonViewModel @AssistedInject constructor(
         .asLiveData()
 
     fun nameChanged(value: String) {
-        name.value = value.trim()
+        name.value = value
     }
 
     fun addPerson(phoneNumber: String, emailAddress: String) = launch(coroutineExceptionHandler) {
diff --git a/Corona-Warn-App/src/main/res/layout/contact_diary_add_location_fragment.xml b/Corona-Warn-App/src/main/res/layout/contact_diary_add_location_fragment.xml
index 1e1ec8dbe..b2b7e568a 100644
--- a/Corona-Warn-App/src/main/res/layout/contact_diary_add_location_fragment.xml
+++ b/Corona-Warn-App/src/main/res/layout/contact_diary_add_location_fragment.xml
@@ -63,6 +63,7 @@
                 android:id="@+id/location_name_input_edit"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:maxLength="250"
                 android:imeOptions="actionNext"
                 android:inputType="textCapWords" />
 
@@ -85,6 +86,7 @@
                 android:id="@+id/location_phone_input"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:maxLength="250"
                 android:imeOptions="actionNext"
                 android:inputType="phone" />
 
@@ -107,6 +109,7 @@
                 android:id="@+id/location_email_input"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:maxLength="250"
                 android:imeOptions="actionDone"
                 android:inputType="textEmailAddress" />
 
diff --git a/Corona-Warn-App/src/main/res/layout/contact_diary_add_person_fragment.xml b/Corona-Warn-App/src/main/res/layout/contact_diary_add_person_fragment.xml
index 2163a98fb..b77f76052 100644
--- a/Corona-Warn-App/src/main/res/layout/contact_diary_add_person_fragment.xml
+++ b/Corona-Warn-App/src/main/res/layout/contact_diary_add_person_fragment.xml
@@ -62,6 +62,7 @@
                 android:id="@+id/person_name_input"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:maxLength="250"
                 android:imeOptions="actionNext"
                 android:inputType="textCapWords" />
 
@@ -84,6 +85,7 @@
                 android:id="@+id/person_phone_number_input"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:maxLength="250"
                 android:imeOptions="actionNext"
                 android:inputType="phone" />
 
@@ -107,6 +109,7 @@
                 android:id="@+id/person_email_input"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:maxLength="250"
                 android:imeOptions="actionDone"
                 android:inputType="textEmailAddress" />
 
diff --git a/Corona-Warn-App/src/main/res/values/styles.xml b/Corona-Warn-App/src/main/res/values/styles.xml
index 246bcd8c0..d1fc93e47 100644
--- a/Corona-Warn-App/src/main/res/values/styles.xml
+++ b/Corona-Warn-App/src/main/res/values/styles.xml
@@ -477,8 +477,6 @@
         <item name="boxCornerRadiusTopStart">@dimen/spacing_mega_tiny</item>
         <item name="boxStrokeWidth">0dp</item>
         <item name="boxStrokeWidthFocused">0dp</item>
-        <item name="counterTextAppearance">@color/colorTransparent</item>
-        <item name="android:maxLength">5</item>
     </style>
 
     <style name="DefaultNumberPickerTheme" parent="AppTheme">
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/durationpicker/DurationExtensionKtTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/durationpicker/DurationExtensionKtTest.kt
index 4bfa961ca..84d647ea2 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/durationpicker/DurationExtensionKtTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/durationpicker/DurationExtensionKtTest.kt
@@ -54,4 +54,4 @@ internal class DurationExtensionKtTest {
         val suffix: String?,
         val expectedReadableDuration: String
     )
-}
\ No newline at end of file
+}
-- 
GitLab