diff --git a/Corona-Warn-App/schemas/de.rki.coronawarnapp.contactdiary.storage.ContactDiaryDatabase/2.json b/Corona-Warn-App/schemas/de.rki.coronawarnapp.contactdiary.storage.ContactDiaryDatabase/2.json new file mode 100644 index 0000000000000000000000000000000000000000..4f53fc0540c1c155dab5a6b98fd26c8a07a280d4 --- /dev/null +++ b/Corona-Warn-App/schemas/de.rki.coronawarnapp.contactdiary.storage.ContactDiaryDatabase/2.json @@ -0,0 +1,196 @@ +{ + "formatVersion": 1, + "database": { + "version": 2, + "identityHash": "abaa3557b994e3bc2a61d8ee2edff8ba", + "entities": [ + { + "tableName": "locations", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `locationName` TEXT NOT NULL, `phoneNumber` TEXT, `emailAddress` TEXT)", + "fields": [ + { + "fieldPath": "locationId", + "columnName": "locationId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "locationName", + "columnName": "locationName", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "phoneNumber", + "columnName": "phoneNumber", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "emailAddress", + "columnName": "emailAddress", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "locationId" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "locationvisits", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `date` TEXT NOT NULL, `fkLocationId` INTEGER NOT NULL, FOREIGN KEY(`fkLocationId`) REFERENCES `locations`(`locationId`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fkLocationId", + "columnName": "fkLocationId", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_locationvisits_fkLocationId", + "unique": false, + "columnNames": [ + "fkLocationId" + ], + "createSql": "CREATE INDEX IF NOT EXISTS `index_locationvisits_fkLocationId` ON `${TABLE_NAME}` (`fkLocationId`)" + } + ], + "foreignKeys": [ + { + "table": "locations", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "fkLocationId" + ], + "referencedColumns": [ + "locationId" + ] + } + ] + }, + { + "tableName": "persons", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`personId` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `fullName` TEXT NOT NULL, `phoneNumber` TEXT, `emailAddress` TEXT)", + "fields": [ + { + "fieldPath": "personId", + "columnName": "personId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "fullName", + "columnName": "fullName", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "phoneNumber", + "columnName": "phoneNumber", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "emailAddress", + "columnName": "emailAddress", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "personId" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "personencounters", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `date` TEXT NOT NULL, `fkPersonId` INTEGER NOT NULL, FOREIGN KEY(`fkPersonId`) REFERENCES `persons`(`personId`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "date", + "columnName": "date", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fkPersonId", + "columnName": "fkPersonId", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_personencounters_fkPersonId", + "unique": false, + "columnNames": [ + "fkPersonId" + ], + "createSql": "CREATE INDEX IF NOT EXISTS `index_personencounters_fkPersonId` ON `${TABLE_NAME}` (`fkPersonId`)" + } + ], + "foreignKeys": [ + { + "table": "persons", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "fkPersonId" + ], + "referencedColumns": [ + "personId" + ] + } + ] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'abaa3557b994e3bc2a61d8ee2edff8ba')" + ] + } +} \ No newline at end of file diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocation.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocation.kt index d4192af041ce8789f72bb20a020d7e0d645126e0..1221b89bb7badc8431fbc5b73e148145799686f2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocation.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocation.kt @@ -6,6 +6,8 @@ import java.util.Locale interface ContactDiaryLocation : HasStableId { val locationId: Long var locationName: String + val phoneNumber: String? + val emailAddress: String? } fun List<ContactDiaryLocation>.sortByNameAndIdASC(): List<ContactDiaryLocation> = diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocationVisit.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocationVisit.kt index 2d477bcee18248a08aa8ecdfd9d4937f7e635ed2..2a1ec858e59a9dc526bd32eace645ee3bd5e09d9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocationVisit.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryLocationVisit.kt @@ -7,6 +7,12 @@ interface ContactDiaryLocationVisit { val id: Long val date: LocalDate val contactDiaryLocation: ContactDiaryLocation + + /* + Value in miliseconds + */ + val duration: Long? + val circumstances: String? } fun List<ContactDiaryLocationVisit>.sortByNameAndIdASC(): List<ContactDiaryLocationVisit> = diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPerson.kt index de391152bcfba7267c0d095124025137b2fc3214..0340fa66e10e5d3f7565b5ad4c69ada52a749039 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPerson.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPerson.kt @@ -6,6 +6,8 @@ import java.util.Locale interface ContactDiaryPerson : HasStableId { val personId: Long var fullName: String + val phoneNumber: String? + val emailAddress: String? } fun List<ContactDiaryPerson>.sortByNameAndIdASC(): List<ContactDiaryPerson> = diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPersonEncounter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPersonEncounter.kt index 47975a267757d5a18018d5a21c46d088bf32da3f..be1c173f981f2730cf80736a11a8749c569f25e7 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPersonEncounter.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/ContactDiaryPersonEncounter.kt @@ -7,6 +7,17 @@ interface ContactDiaryPersonEncounter { val id: Long val date: LocalDate val contactDiaryPerson: ContactDiaryPerson + val durationClassification: DurationClassification? + val withMask: Boolean? + val wasOutside: Boolean? + val circumstances: String? + + enum class DurationClassification( + val key: String + ) { + LESS_THAN_15_MINUTES("LessThan15Minutes"), + MORE_THAN_15_MINUTES("MoreThan15Minutes") + } } fun List<ContactDiaryPersonEncounter>.sortByNameAndIdASC(): List<ContactDiaryPersonEncounter> = diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocation.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocation.kt index 78ff94aa01a3af64f4036d54b4e8daeb14cc1321..3c20aa3cbdcd9dd56371687bacc227c80a8d7c4b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocation.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocation.kt @@ -2,7 +2,9 @@ package de.rki.coronawarnapp.contactdiary.model data class DefaultContactDiaryLocation( override val locationId: Long = 0L, - override var locationName: String + override var locationName: String, + override val phoneNumber: String? = null, + override val emailAddress: String? = null ) : ContactDiaryLocation { override val stableId: Long get() = locationId diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocationVisit.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocationVisit.kt index 0c2124a3c625123c3bac258c68db6e82e92e6702..46362e1d0c25cf677927d996863823a0cff11e31 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocationVisit.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryLocationVisit.kt @@ -5,5 +5,7 @@ import org.joda.time.LocalDate data class DefaultContactDiaryLocationVisit( override val id: Long = 0L, override val date: LocalDate, - override val contactDiaryLocation: ContactDiaryLocation + override val contactDiaryLocation: ContactDiaryLocation, + override val duration: Long? = null, + override val circumstances: String? = null ) : ContactDiaryLocationVisit diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPerson.kt index 911bd939bfc14b4fbdebc634d6ccdaf11bf68d7e..8827126fc9d1850d950573ffe1c4d274c38eee48 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPerson.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPerson.kt @@ -2,7 +2,9 @@ package de.rki.coronawarnapp.contactdiary.model data class DefaultContactDiaryPerson( override val personId: Long = 0L, - override var fullName: String + override var fullName: String, + override val phoneNumber: String? = null, + override val emailAddress: String? = null ) : ContactDiaryPerson { override val stableId: Long get() = personId diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPersonEncounter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPersonEncounter.kt index bdd303ef066b478fc64b0063e8800bab7a098285..149fdfe313d16b729db43a6912460751456ebb2e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPersonEncounter.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/model/DefaultContactDiaryPersonEncounter.kt @@ -5,5 +5,9 @@ import org.joda.time.LocalDate data class DefaultContactDiaryPersonEncounter( override val id: Long = 0L, override val date: LocalDate, - override val contactDiaryPerson: ContactDiaryPerson + override val contactDiaryPerson: ContactDiaryPerson, + override val durationClassification: ContactDiaryPersonEncounter.DurationClassification? = null, + override val withMask: Boolean? = null, + override val wasOutside: Boolean? = null, + override val circumstances: String? = null ) : ContactDiaryPersonEncounter diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/ContactDiaryDatabase.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/ContactDiaryDatabase.kt index b80474dca2a053ec526af698686352a6904cb838..fa8e6a74885d030de15cde3238fdc3c4cc4fa9d2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/ContactDiaryDatabase.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/storage/ContactDiaryDatabase.kt @@ -24,7 +24,7 @@ import javax.inject.Inject ContactDiaryPersonEntity::class, ContactDiaryPersonEncounterEntity::class ], - version = 1, + version = 2, // TODO check migration patterns exportSchema = true ) @TypeConverters(CommonConverters::class) @@ -38,7 +38,7 @@ abstract class ContactDiaryDatabase : RoomDatabase() { class Factory @Inject constructor(@AppContext private val ctx: Context) { fun create(): ContactDiaryDatabase = Room .databaseBuilder(ctx, ContactDiaryDatabase::class.java, CONTACT_DIARY_DATABASE_NAME) - .fallbackToDestructiveMigration() + .fallbackToDestructiveMigration() // TODO we increased schema version, need to migrate? .build() } 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 ed36e6276d4349e459baa7180fe60f778c7fd069..dc68c85122ca3412781deb22c367da62faa61c4f 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 @@ -11,7 +11,9 @@ import kotlinx.parcelize.Parcelize @Entity(tableName = "locations") data class ContactDiaryLocationEntity( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "locationId") override val locationId: Long = 0L, - @ColumnInfo(name = "locationName") override var locationName: String + @ColumnInfo(name = "locationName") override var locationName: String, + override val phoneNumber: String? = null, + override val emailAddress: String? = null ) : ContactDiaryLocation, Parcelable { override val stableId: Long get() = locationId 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 0d1d1738d28c0b648327e6a18e09212eb752de06..458988feed21613a77e69e41bdaf355934e21354 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 @@ -11,7 +11,9 @@ import kotlinx.parcelize.Parcelize @Entity(tableName = "persons") data class ContactDiaryPersonEntity( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "personId") override val personId: Long = 0L, - @ColumnInfo(name = "fullName") override var fullName: String + @ColumnInfo(name = "fullName") override var fullName: String, + override val phoneNumber: String? = null, + override val emailAddress: String? = null ) : ContactDiaryPerson, Parcelable { override val stableId: Long get() = personId diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt index a9022f4fe16940addcb635c13383dec6c14083e1..43600cde672c47e884de051a2d6604a4dc69f298 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt @@ -26,6 +26,8 @@ class ContactDiaryEditLocationsViewModelTest { private val location = object : ContactDiaryLocation { override val locationId = 1L override var locationName = "Supermarket" + override val phoneNumber: String? = null + override val emailAddress: String? = null override val stableId = 1L } private val locationList = listOf(location) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt index f1a8aa1e22d2f65e329e9dbfade18366738ab302..f18f6ecf7cc1eeb2a86a4e98ef5fceaa84960883 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt @@ -26,6 +26,8 @@ class ContactDiaryEditPersonsViewModelTest { private val person = object : ContactDiaryPerson { override val personId = 1L override var fullName = "Julia" + override val phoneNumber: String? = null + override val emailAddress: String? = null override val stableId = 1L }