data class Contact(var uid: String? = null, var group: Boolean = false, val members: MutableSet<String> = mutableSetOf(), var displayName: String? = null, var prefix: String? = null, var givenName: String? = null, var middleName: String? = null, var familyName: String? = null, var suffix: String? = null, var phoneticGivenName: String? = null, var phoneticMiddleName: String? = null, var phoneticFamilyName: String? = null, var nickName: LabeledProperty<Nickname>? = null, var organization: Organization? = null, var jobTitle: String? = null, var jobDescription: String? = null, val phoneNumbers: LinkedList<LabeledProperty<Telephone>> = LinkedList(), val emails: LinkedList<LabeledProperty<Email>> = LinkedList(), val impps: LinkedList<LabeledProperty<Impp>> = LinkedList(), val addresses: LinkedList<LabeledProperty<Address>> = LinkedList(), val categories: LinkedList<String> = LinkedList(), val urls: LinkedList<LabeledProperty<Url>> = LinkedList(), val relations: LinkedList<Related> = LinkedList(), var note: String? = null, var anniversary: Anniversary? = null, var birthDay: Birthday? = null, val customDates: LinkedList<LabeledProperty<XAbDate>> = LinkedList(), var photo: ByteArray? = null, var unknownProperties: String? = null) Data class for a contact; between vCards and the Android contacts provider.
Data shall be stored without workarounds in the most appropriate form. For instance, an anniversary should be stored as anniversary and not in customDates with a proprietary label. Strings should not be empty values (rather null in this case).
vCards are parsed to Contacts by ContactReader. Contacts are written to vCards by ContactWriter.
Contacts are written to and read from the Android storage by at.bitfire.synctools.storage.contacts.AndroidContact.