From 664dd25a26654a0db0cd1432a785402c5458ceff Mon Sep 17 00:00:00 2001 From: Stephan Ritscher Date: Tue, 23 Jan 2024 21:46:15 +0100 Subject: [PATCH 1/5] Add option to edit structured addresses --- .../activities/EditContactActivity.kt | 132 ++++++++++++++---- .../dialogs/ManageVisibleFieldsDialog.kt | 1 + .../fossify/contacts/helpers/VcfExporter.kt | 14 +- .../fossify/contacts/helpers/VcfImporter.kt | 12 +- .../main/res/layout/activity_edit_contact.xml | 2 - .../layout/dialog_manage_visible_fields.xml | 8 ++ .../layout/item_edit_structured_address.xml | 131 +++++++++++++++++ app/src/main/res/values/strings.xml | 8 ++ gradle/libs.versions.toml | 4 +- 9 files changed, 277 insertions(+), 35 deletions(-) create mode 100644 app/src/main/res/layout/item_edit_structured_address.xml diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt index bb0e0a60c..849f32734 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt @@ -50,6 +50,8 @@ import org.fossify.contacts.helpers.ADD_NEW_CONTACT_NUMBER import org.fossify.contacts.helpers.IS_FROM_SIMPLE_CONTACTS import org.fossify.contacts.helpers.KEY_EMAIL import org.fossify.contacts.helpers.KEY_NAME +import java.util.LinkedList +import java.util.Locale class EditContactActivity : ContactActivity() { companion object { @@ -609,19 +611,46 @@ class EditContactActivity : ContactActivity() { } private fun setupAddresses() { + if (binding.contactAddressesHolder.childCount > 0 && + (binding.contactAddressesHolder.getChildAt(0).id == R.id.contact_structured_address_holder) != + (config.showContactFields and SHOW_STRUCTURED_ADDRESSES_FIELD != 0)) { + // Config was changed with edit view loaded + binding.contactAddressesHolder.removeAllViews() + } contact!!.addresses.forEachIndexed { index, address -> - val addressHolderView = binding.contactAddressesHolder.getChildAt(index) - val addressHolder = if (addressHolderView == null) { - ItemEditAddressBinding.inflate(layoutInflater, binding.contactAddressesHolder, false).apply { - binding.contactAddressesHolder.addView(root) + var addressHolderView = binding.contactAddressesHolder.getChildAt(index) + if (config.showContactFields and SHOW_STRUCTURED_ADDRESSES_FIELD != 0) { + var structuredAddressHolder = if (addressHolderView == null) { + ItemEditStructuredAddressBinding.inflate(layoutInflater, binding.contactAddressesHolder, false).apply { + binding.contactAddressesHolder.addView(root) + } + } else { + ItemEditStructuredAddressBinding.bind(addressHolderView) + } + + structuredAddressHolder.apply { + contactStreet.setText(address.street) + contactNeighborhood.setText(address.neighborhood) + contactCity.setText(address.city) + contactPostcode.setText(address.postcode) + contactPobox.setText(address.pobox) + contactRegion.setText(address.region) + contactCountry.setText(address.country) + setupAddressTypePicker(contactStructuredAddressType, address.type, address.label) } } else { - ItemEditAddressBinding.bind(addressHolderView) - } + val addressHolder = if (addressHolderView == null) { + ItemEditAddressBinding.inflate(layoutInflater, binding.contactAddressesHolder, false).apply { + binding.contactAddressesHolder.addView(root) + } + } else { + ItemEditAddressBinding.bind(addressHolderView) + } - addressHolder.apply { - contactAddress.setText(address.value) - setupAddressTypePicker(contactAddressType, address.type, address.label) + addressHolder.apply { + contactAddress.setText(address.value) + setupAddressTypePicker(contactAddressType, address.type, address.label) + } } } } @@ -828,10 +857,7 @@ class EditContactActivity : ContactActivity() { } if (contact!!.addresses.isEmpty()) { - val addressHolder = ItemEditAddressBinding.bind(binding.contactAddressesHolder.getChildAt(0)) - addressHolder.contactAddressType.apply { - setupAddressTypePicker(this, DEFAULT_ADDRESS_TYPE, "") - } + addNewAddressField() } if (contact!!.IMs.isEmpty()) { @@ -1188,13 +1214,44 @@ class EditContactActivity : ContactActivity() { val addresses = ArrayList
() val addressesCount = binding.contactAddressesHolder.childCount for (i in 0 until addressesCount) { - val addressHolder = ItemEditAddressBinding.bind(binding.contactAddressesHolder.getChildAt(i)) - val address = addressHolder.contactAddress.value - val addressType = getAddressTypeId(addressHolder.contactAddressType.value) - val addressLabel = if (addressType == StructuredPostal.TYPE_CUSTOM) addressHolder.contactAddressType.value else "" + val addressHolderView = binding.contactAddressesHolder.getChildAt(i) + // Don't rely on config.showContactFields since that might just have changed + if (addressHolderView.id == R.id.contact_structured_address_holder) { + val structuredAddressHolder = ItemEditStructuredAddressBinding.bind(addressHolderView) + val street = structuredAddressHolder.contactStreet.value + val neighborhood = structuredAddressHolder.contactNeighborhood.value + val city = structuredAddressHolder.contactCity.value + val postcode = structuredAddressHolder.contactPostcode.value + val pobox = structuredAddressHolder.contactPobox.value + val region = structuredAddressHolder.contactRegion.value + val country = structuredAddressHolder.contactCountry.value + + /* from DAVdroid */ + val lineStreet = arrayOf(street, pobox, neighborhood).filter { it.isNotEmpty() }.joinToString(" ") + val lineLocality = arrayOf(postcode, city).filter { it.isNotEmpty() }.joinToString(" ") + val lines = LinkedList() + if (lineStreet.isNotEmpty()) lines += lineStreet + if (lineLocality.isNotEmpty()) lines += lineLocality + if (region.isNotEmpty()) lines += region + if (country.isNotEmpty()) lines += country.uppercase(Locale.getDefault()) + val address = lines.joinToString("\n") + val addressType = getAddressTypeId(structuredAddressHolder.contactStructuredAddressType.value) + val addressLabel = if (addressType == StructuredPostal.TYPE_CUSTOM) + structuredAddressHolder.contactStructuredAddressType.value else "" + + if (address.isNotEmpty()) { + addresses.add(Address(address, addressType, addressLabel, country, region, city, postcode, pobox, + street, neighborhood)) + } + } else { + val addressHolder = ItemEditAddressBinding.bind(addressHolderView) + val address = addressHolder.contactAddress.value + val addressType = getAddressTypeId(addressHolder.contactAddressType.value) + val addressLabel = if (addressType == StructuredPostal.TYPE_CUSTOM) addressHolder.contactAddressType.value else "" - if (address.isNotEmpty()) { - addresses.add(Address(address, addressType, addressLabel)) + if (address.isNotEmpty()) { + addresses.add(Address(address, addressType, addressLabel, "", "", "", "", "", "", "")) + } } } return addresses @@ -1375,13 +1432,25 @@ class EditContactActivity : ContactActivity() { } private fun addNewAddressField() { - val addressHolder = ItemEditAddressBinding.inflate(layoutInflater, binding.contactAddressesHolder, false) - updateTextColors(addressHolder.root) - setupAddressTypePicker(addressHolder.contactAddressType, DEFAULT_ADDRESS_TYPE, "") - binding.contactAddressesHolder.addView(addressHolder.root) - binding.contactAddressesHolder.onGlobalLayout { - addressHolder.contactAddress.requestFocus() - showKeyboard(addressHolder.contactAddress) + if (config.showContactFields and SHOW_STRUCTURED_ADDRESSES_FIELD != 0) { + val structutedAddressHolder = ItemEditStructuredAddressBinding.inflate(layoutInflater, + binding.contactAddressesHolder, false) + updateTextColors(structutedAddressHolder.root) + setupAddressTypePicker(structutedAddressHolder.contactStructuredAddressType, DEFAULT_ADDRESS_TYPE, "") + binding.contactAddressesHolder.addView(structutedAddressHolder.root) + binding.contactAddressesHolder.onGlobalLayout { + structutedAddressHolder.contactStreet.requestFocus() + showKeyboard(structutedAddressHolder.contactStreet) + } + } else { + val addressHolder = ItemEditAddressBinding.inflate(layoutInflater, binding.contactAddressesHolder, false) + updateTextColors(addressHolder.root) + setupAddressTypePicker(addressHolder.contactAddressType, DEFAULT_ADDRESS_TYPE, "") + binding.contactAddressesHolder.addView(addressHolder.root) + binding.contactAddressesHolder.onGlobalLayout { + addressHolder.contactAddress.requestFocus() + showKeyboard(addressHolder.contactAddress) + } } } @@ -1473,8 +1542,15 @@ class EditContactActivity : ContactActivity() { private fun parseAddress(contentValues: ContentValues) { val type = contentValues.getAsInteger(StructuredPostal.DATA2) ?: DEFAULT_ADDRESS_TYPE val addressValue = contentValues.getAsString(StructuredPostal.DATA4) - ?: contentValues.getAsString(StructuredPostal.DATA1) ?: return - val address = Address(addressValue, type, "") + ?: contentValues.getAsString(StructuredPostal.DATA1) ?: return + val country = contentValues.getAsString(StructuredPostal.COUNTRY) + val region = contentValues.getAsString(StructuredPostal.REGION) + val city = contentValues.getAsString(StructuredPostal.CITY) + val postcode = contentValues.getAsString(StructuredPostal.POSTCODE) + val pobox = contentValues.getAsString(StructuredPostal.POBOX) + val street = contentValues.getAsString(StructuredPostal.STREET) + val neighborhood = contentValues.getAsString(StructuredPostal.NEIGHBORHOOD) + val address = Address(addressValue, type, "", country, region, city, postcode, pobox, street, neighborhood) contact!!.addresses.add(address) } diff --git a/app/src/main/kotlin/org/fossify/contacts/dialogs/ManageVisibleFieldsDialog.kt b/app/src/main/kotlin/org/fossify/contacts/dialogs/ManageVisibleFieldsDialog.kt index 773fefd98..6b8f27494 100644 --- a/app/src/main/kotlin/org/fossify/contacts/dialogs/ManageVisibleFieldsDialog.kt +++ b/app/src/main/kotlin/org/fossify/contacts/dialogs/ManageVisibleFieldsDialog.kt @@ -24,6 +24,7 @@ class ManageVisibleFieldsDialog(val activity: BaseSimpleActivity, val callback: put(SHOW_EMAILS_FIELD, R.id.manage_visible_fields_emails) put(SHOW_ADDRESSES_FIELD, R.id.manage_visible_fields_addresses) put(SHOW_IMS_FIELD, R.id.manage_visible_fields_ims) + put(SHOW_STRUCTURED_ADDRESSES_FIELD, R.id.manage_visible_fields_structured_addresses) put(SHOW_EVENTS_FIELD, R.id.manage_visible_fields_events) put(SHOW_NOTES_FIELD, R.id.manage_visible_fields_notes) put(SHOW_ORGANIZATION_FIELD, R.id.manage_visible_fields_organization) diff --git a/app/src/main/kotlin/org/fossify/contacts/helpers/VcfExporter.kt b/app/src/main/kotlin/org/fossify/contacts/helpers/VcfExporter.kt index 698f4161a..bda35482d 100644 --- a/app/src/main/kotlin/org/fossify/contacts/helpers/VcfExporter.kt +++ b/app/src/main/kotlin/org/fossify/contacts/helpers/VcfExporter.kt @@ -110,7 +110,19 @@ class VcfExporter { contact.addresses.forEach { val address = Address() - address.streetAddress = it.value + if (listOf(it.country, it.region, it.city, it.postcode, it.pobox, it.street, it.neighborhood) + .map{it.isNullOrEmpty()} + .fold(false){a, b -> a || b}) { + address.country = it.country + address.region = it.region + address.locality = it.city + address.postalCode = it.postcode + address.poBox = it.pobox + address.streetAddress = it.street + address.extendedAddress = it.neighborhood + } else { + address.streetAddress = it.value + } address.parameters.addType(getAddressTypeLabel(it.type, it.label)) card.addAddress(address) } diff --git a/app/src/main/kotlin/org/fossify/contacts/helpers/VcfImporter.kt b/app/src/main/kotlin/org/fossify/contacts/helpers/VcfImporter.kt index dbfa1e121..338bbe916 100644 --- a/app/src/main/kotlin/org/fossify/contacts/helpers/VcfImporter.kt +++ b/app/src/main/kotlin/org/fossify/contacts/helpers/VcfImporter.kt @@ -94,6 +94,13 @@ class VcfImporter(val activity: SimpleActivity) { } else { "" } + val country = it.country ?: "" + val region = it.region ?: "" + val city = it.locality ?: "" + val postcode = it.postalCode ?: "" + val pobox = it.poBox ?: "" + val street = it.streetAddress ?: "" + val neighborhood = it.extendedAddress ?: "" if (it.locality?.isNotEmpty() == true) { address += " ${it.locality} " @@ -116,8 +123,9 @@ class VcfImporter(val activity: SimpleActivity) { address = address.trim() - if (address.isNotEmpty()) { - addresses.add(Address(address, type, label)) + if (address?.isNotEmpty() == true) { + addresses.add(Address(address, type, label, country, region, city, postcode, pobox, street, + neighborhood)) } } diff --git a/app/src/main/res/layout/activity_edit_contact.xml b/app/src/main/res/layout/activity_edit_contact.xml index 5b7b260dd..99482f3b6 100644 --- a/app/src/main/res/layout/activity_edit_contact.xml +++ b/app/src/main/res/layout/activity_edit_contact.xml @@ -278,8 +278,6 @@ android:layout_toEndOf="@+id/contact_name_image" android:orientation="vertical"> - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7c4a7c8c5..10aba255e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,6 +2,13 @@ Contacts Address + Street + Appartment or suite number + City + Postal code + Post office box + State + Country Inserting… Updating… Phone storage @@ -82,6 +89,7 @@ Phone numbers Emails Addresses + Structured Addresses (edit mode) Events (birthdays, anniversaries) Organization Websites diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1fbe1887e..05561a251 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ indicatorfastscroll = "4524cd0b61" #Room room = "2.6.1" #Fossify -commons = "3788b3609c" +commons = "89147bc3d8" #Gradle gradlePlugins-agp = "8.7.1" #build @@ -43,7 +43,7 @@ androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = " androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" } androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } #Fossify -fossify-commons = { module = "org.fossify:commons", version.ref = "commons" } +fossify-commons = { module = "com.github.stephanritscher:FossifyCommons", version.ref = "commons" } [bundles] room = [ "androidx-room-ktx", From 3f345b1d424cc97fa29fce4076ba4f5b0072bade Mon Sep 17 00:00:00 2001 From: Stephan Ritscher Date: Sun, 27 Oct 2024 22:42:40 +0100 Subject: [PATCH 2/5] Upgrade detekt for Java 21 compatability --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 05561a251..e2ce5e71d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ kotlin = "1.9.25" #KSP ksp = "1.9.25-1.0.20" #Detekt -detekt = "1.23.3" +detekt = "1.23.7" #AndroidX androidx-swiperefreshlayout = "1.1.0" #AutoFitTextView From 1529c19f957aab41eafd492ccce0f594a3435c19 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sat, 31 May 2025 15:53:50 +0530 Subject: [PATCH 3/5] chore(deps): bump org.fossify.commons to 3.0.0 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3ba1635ff..ada127e41 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ indicatorfastscroll = "4524cd0b61" #Room room = "2.7.1" #Fossify -commons = "2.0.3" +commons = "3.0.0" #Gradle gradlePlugins-agp = "8.10.1" #build @@ -39,7 +39,7 @@ androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = " androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" } androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } #Fossify -fossify-commons = { module = "com.github.stephanritscher:FossifyCommons", version.ref = "commons" } +fossify-commons = { module = "org.fossify:commons", version.ref = "commons" } [bundles] room = [ "androidx-room-ktx", From fdf89cfa3015bf344437e31aa946bbcdacd30047 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sat, 31 May 2025 15:54:08 +0530 Subject: [PATCH 4/5] fix: use proper case --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 10aba255e..4fc886e5f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -89,7 +89,7 @@ Phone numbers Emails Addresses - Structured Addresses (edit mode) + Structured addresses (edit mode) Events (birthdays, anniversaries) Organization Websites From 1d55b691efd05fed9bc61b697334a76aca3c898a Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sat, 31 May 2025 16:24:43 +0530 Subject: [PATCH 5/5] refactor: shorten some lines --- .../fossify/contacts/helpers/VcfExporter.kt | 31 +++- .../fossify/contacts/helpers/VcfImporter.kt | 149 +++++++++++++----- 2 files changed, 134 insertions(+), 46 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/contacts/helpers/VcfExporter.kt b/app/src/main/kotlin/org/fossify/contacts/helpers/VcfExporter.kt index bda35482d..89208e19b 100644 --- a/app/src/main/kotlin/org/fossify/contacts/helpers/VcfExporter.kt +++ b/app/src/main/kotlin/org/fossify/contacts/helpers/VcfExporter.kt @@ -1,7 +1,6 @@ package org.fossify.contacts.helpers import android.content.Context -import android.net.Uri import android.os.Build import android.provider.ContactsContract.CommonDataKinds.Email import android.provider.ContactsContract.CommonDataKinds.Event @@ -9,6 +8,7 @@ import android.provider.ContactsContract.CommonDataKinds.Im import android.provider.ContactsContract.CommonDataKinds.Phone import android.provider.ContactsContract.CommonDataKinds.StructuredPostal import androidx.annotation.RequiresApi +import androidx.core.net.toUri import ezvcard.Ezvcard import ezvcard.VCard import ezvcard.VCardVersion @@ -37,7 +37,7 @@ class VcfExporter { contacts: ArrayList, showExportingToast: Boolean, version: VCardVersion = VCardVersion.V4_0, - callback: (result: ExportResult) -> Unit + callback: (result: ExportResult) -> Unit, ) { try { if (outputStream == null) { @@ -53,7 +53,13 @@ class VcfExporter { for (contact in contacts) { val card = VCard() - val formattedName = arrayOf(contact.prefix, contact.firstName, contact.middleName, contact.surname, contact.suffix) + val formattedName = arrayOf( + contact.prefix, + contact.firstName, + contact.middleName, + contact.surname, + contact.suffix + ) .filter { it.isNotEmpty() } .joinToString(separator = " ") card.formattedName = FormattedName(formattedName) @@ -110,9 +116,19 @@ class VcfExporter { contact.addresses.forEach { val address = Address() - if (listOf(it.country, it.region, it.city, it.postcode, it.pobox, it.street, it.neighborhood) - .map{it.isNullOrEmpty()} - .fold(false){a, b -> a || b}) { + if ( + listOf( + it.country, + it.region, + it.city, + it.postcode, + it.pobox, + it.street, + it.neighborhood + ) + .map { it.isEmpty() } + .fold(false) { a, b -> a || b } + ) { address.country = it.country address.region = it.region address.locality = it.city @@ -159,7 +175,8 @@ class VcfExporter { } try { - val inputStream = context.contentResolver.openInputStream(Uri.parse(contact.photoUri)) + val inputStream = + context.contentResolver.openInputStream(contact.photoUri.toUri()) if (inputStream != null) { val photoByteArray = inputStream.readBytes() diff --git a/app/src/main/kotlin/org/fossify/contacts/helpers/VcfImporter.kt b/app/src/main/kotlin/org/fossify/contacts/helpers/VcfImporter.kt index 338bbe916..041920b86 100644 --- a/app/src/main/kotlin/org/fossify/contacts/helpers/VcfImporter.kt +++ b/app/src/main/kotlin/org/fossify/contacts/helpers/VcfImporter.kt @@ -17,7 +17,13 @@ import org.fossify.commons.extensions.showErrorToast import org.fossify.commons.helpers.ContactsHelper import org.fossify.commons.helpers.DEFAULT_MIMETYPE import org.fossify.commons.models.PhoneNumber -import org.fossify.commons.models.contacts.* +import org.fossify.commons.models.contacts.Address +import org.fossify.commons.models.contacts.Contact +import org.fossify.commons.models.contacts.Email +import org.fossify.commons.models.contacts.Event +import org.fossify.commons.models.contacts.Group +import org.fossify.commons.models.contacts.IM +import org.fossify.commons.models.contacts.Organization import org.fossify.contacts.activities.SimpleActivity import org.fossify.contacts.extensions.getCachePhotoUri import org.fossify.contacts.helpers.VcfImporter.ImportResult.IMPORT_FAIL @@ -59,15 +65,26 @@ class VcfImporter(val activity: SimpleActivity) { val phoneNumbers = ArrayList() ezContact.telephoneNumbers.forEach { val number = it.text - val type = getPhoneNumberTypeId(it.types.firstOrNull()?.value ?: MOBILE, it.types.getOrNull(1)?.value) + val type = getPhoneNumberTypeId( + type = it.types.firstOrNull()?.value ?: MOBILE, + subtype = it.types.getOrNull(1)?.value + ) val label = if (type == Phone.TYPE_CUSTOM) { it.types.firstOrNull()?.value ?: "" } else { "" } - val preferred = getPreferredValue(it.types.lastOrNull()?.value) == 1 - phoneNumbers.add(PhoneNumber(number, type, label, number.normalizePhoneNumber(), preferred)) + val preferred = getPreferredValue(it.types.lastOrNull()?.value) == 1 + phoneNumbers.add( + PhoneNumber( + value = number, + type = type, + label = label, + normalizedNumber = number.normalizePhoneNumber(), + isPrimary = preferred + ) + ) } val emails = ArrayList() @@ -122,28 +139,51 @@ class VcfImporter(val activity: SimpleActivity) { } address = address.trim() - - if (address?.isNotEmpty() == true) { - addresses.add(Address(address, type, label, country, region, city, postcode, pobox, street, - neighborhood)) + if (address.isNotEmpty() == true) { + addresses.add( + Address( + value = address, + type = type, + label = label, + country = country, + region = region, + city = city, + postcode = postcode, + pobox = pobox, + street = street, + neighborhood = neighborhood + ) + ) } } val events = ArrayList() ezContact.anniversaries.forEach { anniversary -> val event = if (anniversary.date != null) { - Event(formatDateToDayCode(anniversary.date), CommonDataKinds.Event.TYPE_ANNIVERSARY) + Event( + formatDateToDayCode(anniversary.date), + CommonDataKinds.Event.TYPE_ANNIVERSARY + ) } else { - Event(formatPartialDateToDayCode(anniversary.partialDate), CommonDataKinds.Event.TYPE_ANNIVERSARY) + Event( + formatPartialDateToDayCode(anniversary.partialDate), + CommonDataKinds.Event.TYPE_ANNIVERSARY + ) } events.add(event) } ezContact.birthdays.forEach { birthday -> val event = if (birthday.date != null) { - Event(formatDateToDayCode(birthday.date), CommonDataKinds.Event.TYPE_BIRTHDAY) + Event( + formatDateToDayCode(birthday.date), + CommonDataKinds.Event.TYPE_BIRTHDAY + ) } else { - Event(formatPartialDateToDayCode(birthday.partialDate), CommonDataKinds.Event.TYPE_BIRTHDAY) + Event( + formatPartialDateToDayCode(birthday.partialDate), + CommonDataKinds.Event.TYPE_BIRTHDAY + ) } events.add(event) } @@ -173,7 +213,10 @@ class VcfImporter(val activity: SimpleActivity) { val IMs = ArrayList() ezContact.impps.forEach { val typeString = it.uri.scheme - val value = URLDecoder.decode(it.uri.toString().substring(it.uri.scheme.length + 1), "UTF-8") + val value = URLDecoder.decode( + it.uri.toString().substring(it.uri.scheme.length + 1), + "UTF-8" + ) val type = when { it.isAim -> Im.PROTOCOL_AIM it.isYahoo -> Im.PROTOCOL_YAHOO @@ -186,18 +229,45 @@ class VcfImporter(val activity: SimpleActivity) { else -> Im.PROTOCOL_CUSTOM } - val label = if (type == Im.PROTOCOL_CUSTOM) URLDecoder.decode(typeString, "UTF-8") else "" + val label = if (type == Im.PROTOCOL_CUSTOM) URLDecoder.decode( + typeString, + "UTF-8" + ) else "" val IM = IM(value, type, label) IMs.add(IM) } val contact = Contact( - 0, prefix, firstName, middleName, surname, suffix, nickname, photoUri, phoneNumbers, emails, addresses, events, - targetContactSource, starred, contactId, thumbnailUri, photo, notes, groups, organization, websites, IMs, DEFAULT_MIMETYPE, ringtone + 0, + prefix, + firstName, + middleName, + surname, + suffix, + nickname, + photoUri, + phoneNumbers, + emails, + addresses, + events, + targetContactSource, + starred, + contactId, + thumbnailUri, + photo, + notes, + groups, + organization, + websites, + IMs, + DEFAULT_MIMETYPE, + ringtone ) // if there is no N and ORG fields at the given contact, only FN, treat it as an organization - if (contact.getNameToDisplay().isEmpty() && contact.organization.isEmpty() && ezContact.formattedName?.value?.isNotEmpty() == true) { + if (contact.getNameToDisplay() + .isEmpty() && contact.organization.isEmpty() && ezContact.formattedName?.value?.isNotEmpty() == true + ) { contact.organization.company = ezContact.formattedName.value contact.mimetype = CommonDataKinds.Organization.CONTENT_ITEM_TYPE } @@ -261,32 +331,33 @@ class VcfImporter(val activity: SimpleActivity) { return groups } - private fun getPhoneNumberTypeId(type: String, subtype: String?) = when (type.uppercase(Locale.getDefault())) { - CELL -> Phone.TYPE_MOBILE - HOME -> { - if (subtype?.uppercase(Locale.getDefault()) == FAX) { - Phone.TYPE_FAX_HOME - } else { - Phone.TYPE_HOME + private fun getPhoneNumberTypeId(type: String, subtype: String?) = + when (type.uppercase(Locale.getDefault())) { + CELL -> Phone.TYPE_MOBILE + HOME -> { + if (subtype?.uppercase(Locale.getDefault()) == FAX) { + Phone.TYPE_FAX_HOME + } else { + Phone.TYPE_HOME + } } - } - WORK -> { - if (subtype?.uppercase(Locale.getDefault()) == FAX) { - Phone.TYPE_FAX_WORK - } else { - Phone.TYPE_WORK + WORK -> { + if (subtype?.uppercase(Locale.getDefault()) == FAX) { + Phone.TYPE_FAX_WORK + } else { + Phone.TYPE_WORK + } } - } - MAIN -> Phone.TYPE_MAIN - WORK_FAX -> Phone.TYPE_FAX_WORK - HOME_FAX -> Phone.TYPE_FAX_HOME - FAX -> Phone.TYPE_FAX_WORK - PAGER -> Phone.TYPE_PAGER - OTHER -> Phone.TYPE_OTHER - else -> Phone.TYPE_CUSTOM - } + MAIN -> Phone.TYPE_MAIN + WORK_FAX -> Phone.TYPE_FAX_WORK + HOME_FAX -> Phone.TYPE_FAX_HOME + FAX -> Phone.TYPE_FAX_WORK + PAGER -> Phone.TYPE_PAGER + OTHER -> Phone.TYPE_OTHER + else -> Phone.TYPE_CUSTOM + } private fun getEmailTypeId(type: String) = when (type.uppercase(Locale.getDefault())) { HOME -> CommonDataKinds.Email.TYPE_HOME