From 855b4e01885867d5628c6acf1b01df50a661a7a8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 14 Apr 2020 23:59:36 +0200 Subject: [PATCH] shortening some code by importing more specific classes --- app/build.gradle | 2 +- .../contacts/pro/helpers/ContactsHelper.kt | 655 +++++++++--------- 2 files changed, 329 insertions(+), 328 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b5fa1cf6..6bfe0670 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.25.14' + implementation 'com.simplemobiletools:commons:5.25.16' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4' implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5' diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt index 0eea63ef..5aa11b2b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt @@ -8,10 +8,8 @@ import android.graphics.Bitmap import android.net.Uri import android.os.Handler import android.os.Looper -import android.provider.ContactsContract -import android.provider.ContactsContract.CommonDataKinds -import android.provider.ContactsContract.CommonDataKinds.Nickname -import android.provider.ContactsContract.CommonDataKinds.Note +import android.provider.ContactsContract.* +import android.provider.ContactsContract.CommonDataKinds.* import android.provider.MediaStore import android.text.TextUtils import android.util.SparseArray @@ -20,6 +18,9 @@ import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.extensions.* import com.simplemobiletools.contacts.pro.models.* +import com.simplemobiletools.contacts.pro.models.Email +import com.simplemobiletools.contacts.pro.models.Event +import com.simplemobiletools.contacts.pro.models.Organization import com.simplemobiletools.contacts.pro.overloads.times import java.util.* import kotlin.collections.ArrayList @@ -99,7 +100,7 @@ class ContactsHelper(val context: Context) { private fun getContentResolverAccounts(): HashSet { val sources = HashSet() - arrayOf(ContactsContract.Groups.CONTENT_URI, ContactsContract.Settings.CONTENT_URI, ContactsContract.RawContacts.CONTENT_URI).forEach { + arrayOf(Groups.CONTENT_URI, Settings.CONTENT_URI, RawContacts.CONTENT_URI).forEach { fillSourcesFromUri(it, sources) } @@ -108,8 +109,8 @@ class ContactsHelper(val context: Context) { private fun fillSourcesFromUri(uri: Uri, sources: HashSet) { val projection = arrayOf( - ContactsContract.RawContacts.ACCOUNT_NAME, - ContactsContract.RawContacts.ACCOUNT_TYPE + RawContacts.ACCOUNT_NAME, + RawContacts.ACCOUNT_TYPE ) var cursor: Cursor? = null @@ -117,8 +118,8 @@ class ContactsHelper(val context: Context) { cursor = context.contentResolver.query(uri, projection, null, null, null) if (cursor?.moveToFirst() == true) { do { - val name = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_NAME) ?: "" - val type = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_TYPE) ?: "" + val name = cursor.getStringValue(RawContacts.ACCOUNT_NAME) ?: "" + val type = cursor.getStringValue(RawContacts.ACCOUNT_TYPE) ?: "" var publicName = name if (type == TELEGRAM_PACKAGE) { publicName += " (${context.getString(R.string.telegram)})" @@ -140,11 +141,11 @@ class ContactsHelper(val context: Context) { } val ignoredSources = ignoredContactSources ?: context.config.ignoredContactSources - val uri = ContactsContract.Data.CONTENT_URI + val uri = Data.CONTENT_URI val projection = getContactProjection() - val selection = "${ContactsContract.Data.MIMETYPE} = ? OR ${ContactsContract.Data.MIMETYPE} = ?" - val selectionArgs = arrayOf(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) + val selection = "${Data.MIMETYPE} = ? OR ${Data.MIMETYPE} = ?" + val selectionArgs = arrayOf(StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) val sortOrder = getSortString() var cursor: Cursor? = null @@ -152,13 +153,13 @@ class ContactsHelper(val context: Context) { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, sortOrder) if (cursor?.moveToFirst() == true) { do { - val accountName = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_NAME) ?: "" - val accountType = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_TYPE) ?: "" + val accountName = cursor.getStringValue(RawContacts.ACCOUNT_NAME) ?: "" + val accountType = cursor.getStringValue(RawContacts.ACCOUNT_TYPE) ?: "" if (ignoredSources.contains("$accountName:$accountType")) { continue } - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) var prefix = "" var firstName = "" var middleName = "" @@ -166,23 +167,23 @@ class ContactsHelper(val context: Context) { var suffix = "" // ignore names at Organization type contacts - if (cursor.getStringValue(ContactsContract.Data.MIMETYPE) == CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) { - prefix = cursor.getStringValue(CommonDataKinds.StructuredName.PREFIX) ?: "" - firstName = cursor.getStringValue(CommonDataKinds.StructuredName.GIVEN_NAME) ?: "" - middleName = cursor.getStringValue(CommonDataKinds.StructuredName.MIDDLE_NAME) ?: "" - surname = cursor.getStringValue(CommonDataKinds.StructuredName.FAMILY_NAME) ?: "" - suffix = cursor.getStringValue(CommonDataKinds.StructuredName.SUFFIX) ?: "" + if (cursor.getStringValue(Data.MIMETYPE) == StructuredName.CONTENT_ITEM_TYPE) { + prefix = cursor.getStringValue(StructuredName.PREFIX) ?: "" + firstName = cursor.getStringValue(StructuredName.GIVEN_NAME) ?: "" + middleName = cursor.getStringValue(StructuredName.MIDDLE_NAME) ?: "" + surname = cursor.getStringValue(StructuredName.FAMILY_NAME) ?: "" + suffix = cursor.getStringValue(StructuredName.SUFFIX) ?: "" } val nickname = "" - val photoUri = cursor.getStringValue(CommonDataKinds.StructuredName.PHOTO_URI) ?: "" + val photoUri = cursor.getStringValue(StructuredName.PHOTO_URI) ?: "" val numbers = ArrayList() // proper value is obtained below val emails = ArrayList() val addresses = ArrayList
() val events = ArrayList() - val starred = cursor.getIntValue(CommonDataKinds.StructuredName.STARRED) - val contactId = cursor.getIntValue(ContactsContract.Data.CONTACT_ID) - val thumbnailUri = cursor.getStringValue(CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI) ?: "" + val starred = cursor.getIntValue(StructuredName.STARRED) + val contactId = cursor.getIntValue(Data.CONTACT_ID) + val thumbnailUri = cursor.getStringValue(StructuredName.PHOTO_THUMBNAIL_URI) ?: "" val notes = "" val groups = ArrayList() val organization = Organization("", "") @@ -269,16 +270,16 @@ class ContactsHelper(val context: Context) { private fun getPhoneNumbers(contactId: Int? = null): SparseArray> { val phoneNumbers = SparseArray>() - val uri = CommonDataKinds.Phone.CONTENT_URI + val uri = Phone.CONTENT_URI val projection = arrayOf( - ContactsContract.Data.RAW_CONTACT_ID, - CommonDataKinds.Phone.NUMBER, - CommonDataKinds.Phone.NORMALIZED_NUMBER, - CommonDataKinds.Phone.TYPE, - CommonDataKinds.Phone.LABEL + Data.RAW_CONTACT_ID, + Phone.NUMBER, + Phone.NORMALIZED_NUMBER, + Phone.TYPE, + Phone.LABEL ) - val selection = if (contactId == null) getSourcesSelection() else "${ContactsContract.Data.RAW_CONTACT_ID} = ?" + val selection = if (contactId == null) getSourcesSelection() else "${Data.RAW_CONTACT_ID} = ?" val selectionArgs = if (contactId == null) getSourcesSelectionArgs() else arrayOf(contactId.toString()) var cursor: Cursor? = null @@ -286,11 +287,11 @@ class ContactsHelper(val context: Context) { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) - val number = cursor.getStringValue(CommonDataKinds.Phone.NUMBER) ?: continue - val normalizedNumber = cursor.getStringValue(CommonDataKinds.Phone.NORMALIZED_NUMBER) ?: number.normalizeNumber() - val type = cursor.getIntValue(CommonDataKinds.Phone.TYPE) - val label = cursor.getStringValue(CommonDataKinds.Phone.LABEL) ?: "" + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) + val number = cursor.getStringValue(Phone.NUMBER) ?: continue + val normalizedNumber = cursor.getStringValue(Phone.NORMALIZED_NUMBER) ?: number.normalizeNumber() + val type = cursor.getIntValue(Phone.TYPE) + val label = cursor.getStringValue(Phone.LABEL) ?: "" if (phoneNumbers[id] == null) { phoneNumbers.put(id, ArrayList()) @@ -311,9 +312,9 @@ class ContactsHelper(val context: Context) { private fun getNicknames(contactId: Int? = null): SparseArray { val nicknames = SparseArray() - val uri = ContactsContract.Data.CONTENT_URI + val uri = Data.CONTENT_URI val projection = arrayOf( - ContactsContract.Data.RAW_CONTACT_ID, + Data.RAW_CONTACT_ID, Nickname.NAME ) @@ -325,7 +326,7 @@ class ContactsHelper(val context: Context) { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) val nickname = cursor.getStringValue(Nickname.NAME) ?: continue nicknames.put(id, nickname) } while (cursor.moveToNext()) @@ -343,13 +344,13 @@ class ContactsHelper(val context: Context) { val emails = SparseArray>() val uri = CommonDataKinds.Email.CONTENT_URI val projection = arrayOf( - ContactsContract.Data.RAW_CONTACT_ID, + Data.RAW_CONTACT_ID, CommonDataKinds.Email.DATA, CommonDataKinds.Email.TYPE, CommonDataKinds.Email.LABEL ) - val selection = if (contactId == null) getSourcesSelection() else "${ContactsContract.Data.RAW_CONTACT_ID} = ?" + val selection = if (contactId == null) getSourcesSelection() else "${Data.RAW_CONTACT_ID} = ?" val selectionArgs = if (contactId == null) getSourcesSelectionArgs() else arrayOf(contactId.toString()) var cursor: Cursor? = null @@ -357,7 +358,7 @@ class ContactsHelper(val context: Context) { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) val email = cursor.getStringValue(CommonDataKinds.Email.DATA) ?: continue val type = cursor.getIntValue(CommonDataKinds.Email.TYPE) val label = cursor.getStringValue(CommonDataKinds.Email.LABEL) ?: "" @@ -380,15 +381,15 @@ class ContactsHelper(val context: Context) { private fun getAddresses(contactId: Int? = null): SparseArray> { val addresses = SparseArray>() - val uri = CommonDataKinds.StructuredPostal.CONTENT_URI + val uri = StructuredPostal.CONTENT_URI val projection = arrayOf( - ContactsContract.Data.RAW_CONTACT_ID, - CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, - CommonDataKinds.StructuredPostal.TYPE, - CommonDataKinds.StructuredPostal.LABEL + Data.RAW_CONTACT_ID, + StructuredPostal.FORMATTED_ADDRESS, + StructuredPostal.TYPE, + StructuredPostal.LABEL ) - val selection = if (contactId == null) getSourcesSelection() else "${ContactsContract.Data.RAW_CONTACT_ID} = ?" + val selection = if (contactId == null) getSourcesSelection() else "${Data.RAW_CONTACT_ID} = ?" val selectionArgs = if (contactId == null) getSourcesSelectionArgs() else arrayOf(contactId.toString()) var cursor: Cursor? = null @@ -396,10 +397,10 @@ class ContactsHelper(val context: Context) { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) - val address = cursor.getStringValue(CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS) ?: continue - val type = cursor.getIntValue(CommonDataKinds.StructuredPostal.TYPE) - val label = cursor.getStringValue(CommonDataKinds.StructuredPostal.LABEL) ?: "" + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) + val address = cursor.getStringValue(StructuredPostal.FORMATTED_ADDRESS) ?: continue + val type = cursor.getIntValue(StructuredPostal.TYPE) + val label = cursor.getStringValue(StructuredPostal.LABEL) ?: "" if (addresses[id] == null) { addresses.put(id, ArrayList()) @@ -419,26 +420,26 @@ class ContactsHelper(val context: Context) { private fun getIMs(contactId: Int? = null): SparseArray> { val IMs = SparseArray>() - val uri = ContactsContract.Data.CONTENT_URI + val uri = Data.CONTENT_URI val projection = arrayOf( - ContactsContract.Data.RAW_CONTACT_ID, - CommonDataKinds.Im.DATA, - CommonDataKinds.Im.PROTOCOL, - CommonDataKinds.Im.CUSTOM_PROTOCOL + Data.RAW_CONTACT_ID, + Im.DATA, + Im.PROTOCOL, + Im.CUSTOM_PROTOCOL ) val selection = getSourcesSelection(true, contactId != null) - val selectionArgs = getSourcesSelectionArgs(CommonDataKinds.Im.CONTENT_ITEM_TYPE, contactId) + val selectionArgs = getSourcesSelectionArgs(Im.CONTENT_ITEM_TYPE, contactId) var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) - val IM = cursor.getStringValue(CommonDataKinds.Im.DATA) ?: continue - val type = cursor.getIntValue(CommonDataKinds.Im.PROTOCOL) - val label = cursor.getStringValue(CommonDataKinds.Im.CUSTOM_PROTOCOL) ?: "" + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) + val IM = cursor.getStringValue(Im.DATA) ?: continue + val type = cursor.getIntValue(Im.PROTOCOL) + val label = cursor.getStringValue(Im.CUSTOM_PROTOCOL) ?: "" if (IMs[id] == null) { IMs.put(id, ArrayList()) @@ -458,9 +459,9 @@ class ContactsHelper(val context: Context) { private fun getEvents(contactId: Int? = null): SparseArray> { val events = SparseArray>() - val uri = ContactsContract.Data.CONTENT_URI + val uri = Data.CONTENT_URI val projection = arrayOf( - ContactsContract.Data.RAW_CONTACT_ID, + Data.RAW_CONTACT_ID, CommonDataKinds.Event.START_DATE, CommonDataKinds.Event.TYPE ) @@ -473,7 +474,7 @@ class ContactsHelper(val context: Context) { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) val startDate = cursor.getStringValue(CommonDataKinds.Event.START_DATE) ?: continue val type = cursor.getIntValue(CommonDataKinds.Event.TYPE) @@ -495,9 +496,9 @@ class ContactsHelper(val context: Context) { private fun getNotes(contactId: Int? = null): SparseArray { val notes = SparseArray() - val uri = ContactsContract.Data.CONTENT_URI + val uri = Data.CONTENT_URI val projection = arrayOf( - ContactsContract.Data.RAW_CONTACT_ID, + Data.RAW_CONTACT_ID, Note.NOTE ) @@ -509,7 +510,7 @@ class ContactsHelper(val context: Context) { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) val note = cursor.getStringValue(Note.NOTE) ?: continue notes.put(id, note) } while (cursor.moveToNext()) @@ -525,9 +526,9 @@ class ContactsHelper(val context: Context) { private fun getOrganizations(contactId: Int? = null): SparseArray { val organizations = SparseArray() - val uri = ContactsContract.Data.CONTENT_URI + val uri = Data.CONTENT_URI val projection = arrayOf( - ContactsContract.Data.RAW_CONTACT_ID, + Data.RAW_CONTACT_ID, CommonDataKinds.Organization.COMPANY, CommonDataKinds.Organization.TITLE ) @@ -540,7 +541,7 @@ class ContactsHelper(val context: Context) { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) val company = cursor.getStringValue(CommonDataKinds.Organization.COMPANY) ?: "" val title = cursor.getStringValue(CommonDataKinds.Organization.TITLE) ?: "" if (company.isEmpty() && title.isEmpty()) { @@ -562,22 +563,22 @@ class ContactsHelper(val context: Context) { private fun getWebsites(contactId: Int? = null): SparseArray> { val websites = SparseArray>() - val uri = ContactsContract.Data.CONTENT_URI + val uri = Data.CONTENT_URI val projection = arrayOf( - ContactsContract.Data.RAW_CONTACT_ID, - CommonDataKinds.Website.URL + Data.RAW_CONTACT_ID, + Website.URL ) val selection = getSourcesSelection(true, contactId != null) - val selectionArgs = getSourcesSelectionArgs(CommonDataKinds.Website.CONTENT_ITEM_TYPE, contactId) + val selectionArgs = getSourcesSelectionArgs(Website.CONTENT_ITEM_TYPE, contactId) var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) - val url = cursor.getStringValue(CommonDataKinds.Website.URL) ?: continue + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) + val url = cursor.getStringValue(Website.URL) ?: continue if (websites[id] == null) { websites.put(id, ArrayList()) @@ -601,22 +602,22 @@ class ContactsHelper(val context: Context) { return groups } - val uri = ContactsContract.Data.CONTENT_URI + val uri = Data.CONTENT_URI val projection = arrayOf( - ContactsContract.Data.CONTACT_ID, - ContactsContract.Data.DATA1 + Data.CONTACT_ID, + Data.DATA1 ) val selection = getSourcesSelection(true, contactId != null, false) - val selectionArgs = getSourcesSelectionArgs(CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE, contactId) + val selectionArgs = getSourcesSelectionArgs(GroupMembership.CONTENT_ITEM_TYPE, contactId) var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID) - val newRowId = cursor.getLongValue(ContactsContract.Data.DATA1) + val id = cursor.getIntValue(Data.CONTACT_ID) + val newRowId = cursor.getLongValue(Data.DATA1) val groupTitle = storedGroups.firstOrNull { it.id == newRowId }?.title ?: continue val group = Group(newRowId, groupTitle) @@ -640,20 +641,20 @@ class ContactsHelper(val context: Context) { private fun getSourcesSelection(addMimeType: Boolean = false, addContactId: Boolean = false, useRawContactId: Boolean = true): String { val strings = ArrayList() if (addMimeType) { - strings.add("${ContactsContract.Data.MIMETYPE} = ?") + strings.add("${Data.MIMETYPE} = ?") } if (addContactId) { - strings.add("${if (useRawContactId) ContactsContract.Data.RAW_CONTACT_ID else ContactsContract.Data.CONTACT_ID} = ?") + strings.add("${if (useRawContactId) Data.RAW_CONTACT_ID else Data.CONTACT_ID} = ?") } else { // sometimes local device storage has null account_name, handle it properly val accountnameString = StringBuilder() if (displayContactSources.contains("")) { accountnameString.append("(") } - accountnameString.append("${ContactsContract.RawContacts.ACCOUNT_NAME} IN (${getQuestionMarks()})") + accountnameString.append("${RawContacts.ACCOUNT_NAME} IN (${getQuestionMarks()})") if (displayContactSources.contains("")) { - accountnameString.append(" OR ${ContactsContract.RawContacts.ACCOUNT_NAME} IS NULL)") + accountnameString.append(" OR ${RawContacts.ACCOUNT_NAME} IS NULL)") } strings.add(accountnameString.toString()) } @@ -698,14 +699,14 @@ class ContactsHelper(val context: Context) { return groups } - val uri = ContactsContract.Groups.CONTENT_URI + val uri = Groups.CONTENT_URI val projection = arrayOf( - ContactsContract.Groups._ID, - ContactsContract.Groups.TITLE, - ContactsContract.Groups.SYSTEM_ID + Groups._ID, + Groups.TITLE, + Groups.SYSTEM_ID ) - val selection = "${ContactsContract.Groups.AUTO_ADD} = ? AND ${ContactsContract.Groups.FAVORITES} = ?" + val selection = "${Groups.AUTO_ADD} = ? AND ${Groups.FAVORITES} = ?" val selectionArgs = arrayOf("0", "0") var cursor: Cursor? = null @@ -713,10 +714,10 @@ class ContactsHelper(val context: Context) { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { do { - val id = cursor.getLongValue(ContactsContract.Groups._ID) - val title = cursor.getStringValue(ContactsContract.Groups.TITLE) ?: continue + val id = cursor.getLongValue(Groups._ID) + val title = cursor.getStringValue(Groups.TITLE) ?: continue - val systemId = cursor.getStringValue(ContactsContract.Groups.SYSTEM_ID) + val systemId = cursor.getStringValue(Groups.SYSTEM_ID) if (groups.map { it.title }.contains(title) && systemId != null) { continue } @@ -741,16 +742,16 @@ class ContactsHelper(val context: Context) { } val operations = ArrayList() - ContentProviderOperation.newInsert(ContactsContract.Groups.CONTENT_URI).apply { - withValue(ContactsContract.Groups.TITLE, title) - withValue(ContactsContract.Groups.GROUP_VISIBLE, 1) - withValue(ContactsContract.Groups.ACCOUNT_NAME, accountName) - withValue(ContactsContract.Groups.ACCOUNT_TYPE, accountType) + ContentProviderOperation.newInsert(Groups.CONTENT_URI).apply { + withValue(Groups.TITLE, title) + withValue(Groups.GROUP_VISIBLE, 1) + withValue(Groups.ACCOUNT_NAME, accountName) + withValue(Groups.ACCOUNT_TYPE, accountType) operations.add(build()) } try { - val results = context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + val results = context.contentResolver.applyBatch(AUTHORITY, operations) val rawId = ContentUris.parseId(results[0].uri) return Group(rawId, title) } catch (e: Exception) { @@ -761,16 +762,16 @@ class ContactsHelper(val context: Context) { fun renameGroup(group: Group) { val operations = ArrayList() - ContentProviderOperation.newUpdate(ContactsContract.Groups.CONTENT_URI).apply { - val selection = "${ContactsContract.Groups._ID} = ?" + ContentProviderOperation.newUpdate(Groups.CONTENT_URI).apply { + val selection = "${Groups._ID} = ?" val selectionArgs = arrayOf(group.id.toString()) withSelection(selection, selectionArgs) - withValue(ContactsContract.Groups.TITLE, group.title) + withValue(Groups.TITLE, group.title) operations.add(build()) } try { - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) } catch (e: Exception) { context.showErrorToast(e) } @@ -778,14 +779,14 @@ class ContactsHelper(val context: Context) { fun deleteGroup(id: Long) { val operations = ArrayList() - val uri = ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, id).buildUpon() - .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true") + val uri = ContentUris.withAppendedId(Groups.CONTENT_URI, id).buildUpon() + .appendQueryParameter(CALLER_IS_SYNCADAPTER, "true") .build() operations.add(ContentProviderOperation.newDelete(uri).build()) try { - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) } catch (e: Exception) { context.showErrorToast(e) } @@ -798,26 +799,26 @@ class ContactsHelper(val context: Context) { return LocalContactsHelper(context).getContactWithId(id) } - val selection = "(${ContactsContract.Data.MIMETYPE} = ? OR ${ContactsContract.Data.MIMETYPE} = ?) AND ${ContactsContract.Data.RAW_CONTACT_ID} = ?" - val selectionArgs = arrayOf(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE, id.toString()) + val selection = "(${Data.MIMETYPE} = ? OR ${Data.MIMETYPE} = ?) AND ${Data.RAW_CONTACT_ID} = ?" + val selectionArgs = arrayOf(StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE, id.toString()) return parseContactCursor(selection, selectionArgs) } fun getContactWithLookupKey(key: String): Contact? { - val selection = "(${ContactsContract.Data.MIMETYPE} = ? OR ${ContactsContract.Data.MIMETYPE} = ?) AND ${ContactsContract.Data.LOOKUP_KEY} = ?" - val selectionArgs = arrayOf(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE, key) + val selection = "(${Data.MIMETYPE} = ? OR ${Data.MIMETYPE} = ?) AND ${Data.LOOKUP_KEY} = ?" + val selectionArgs = arrayOf(StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE, key) return parseContactCursor(selection, selectionArgs) } private fun parseContactCursor(selection: String, selectionArgs: Array): Contact? { val storedGroups = getStoredGroupsSync() - val uri = ContactsContract.Data.CONTENT_URI + val uri = Data.CONTENT_URI val projection = getContactProjection() var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { - val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) + val id = cursor.getIntValue(Data.RAW_CONTACT_ID) var prefix = "" var firstName = "" @@ -826,26 +827,26 @@ class ContactsHelper(val context: Context) { var suffix = "" // ignore names at Organization type contacts - if (cursor.getStringValue(ContactsContract.Data.MIMETYPE) == CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) { - prefix = cursor.getStringValue(CommonDataKinds.StructuredName.PREFIX) ?: "" - firstName = cursor.getStringValue(CommonDataKinds.StructuredName.GIVEN_NAME) ?: "" - middleName = cursor.getStringValue(CommonDataKinds.StructuredName.MIDDLE_NAME) ?: "" - surname = cursor.getStringValue(CommonDataKinds.StructuredName.FAMILY_NAME) ?: "" - suffix = cursor.getStringValue(CommonDataKinds.StructuredName.SUFFIX) ?: "" + if (cursor.getStringValue(Data.MIMETYPE) == StructuredName.CONTENT_ITEM_TYPE) { + prefix = cursor.getStringValue(StructuredName.PREFIX) ?: "" + firstName = cursor.getStringValue(StructuredName.GIVEN_NAME) ?: "" + middleName = cursor.getStringValue(StructuredName.MIDDLE_NAME) ?: "" + surname = cursor.getStringValue(StructuredName.FAMILY_NAME) ?: "" + suffix = cursor.getStringValue(StructuredName.SUFFIX) ?: "" } val nickname = getNicknames(id)[id] ?: "" - val photoUri = cursor.getStringValue(CommonDataKinds.Phone.PHOTO_URI) ?: "" + val photoUri = cursor.getStringValue(Phone.PHOTO_URI) ?: "" val number = getPhoneNumbers(id)[id] ?: ArrayList() val emails = getEmails(id)[id] ?: ArrayList() val addresses = getAddresses(id)[id] ?: ArrayList() val events = getEvents(id)[id] ?: ArrayList() val notes = getNotes(id)[id] ?: "" - val accountName = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_NAME) ?: "" - val starred = cursor.getIntValue(CommonDataKinds.StructuredName.STARRED) - val contactId = cursor.getIntValue(ContactsContract.Data.CONTACT_ID) + val accountName = cursor.getStringValue(RawContacts.ACCOUNT_NAME) ?: "" + val starred = cursor.getIntValue(StructuredName.STARRED) + val contactId = cursor.getIntValue(Data.CONTACT_ID) val groups = getContactGroups(storedGroups, contactId)[contactId] ?: ArrayList() - val thumbnailUri = cursor.getStringValue(CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI) ?: "" + val thumbnailUri = cursor.getStringValue(StructuredName.PHOTO_THUMBNAIL_URI) ?: "" val organization = getOrganizations(id)[id] ?: Organization("", "") val websites = getWebsites(id)[id] ?: ArrayList() val ims = getIMs(id)[id] ?: ArrayList() @@ -865,7 +866,7 @@ class ContactsHelper(val context: Context) { } } - fun getContactSourcesSync(): ArrayList { + private fun getContactSourcesSync(): ArrayList { val sources = getDeviceContactSources() sources.add(context.getPrivateContactSource()) return ArrayList(sources) @@ -879,7 +880,7 @@ class ContactsHelper(val context: Context) { val accounts = AccountManager.get(context).accounts accounts.forEach { - if (ContentResolver.getIsSyncable(it, ContactsContract.AUTHORITY) == 1) { + if (ContentResolver.getIsSyncable(it, AUTHORITY) == 1) { var publicName = it.name if (it.type == TELEGRAM_PACKAGE) { publicName += " (${context.getString(R.string.telegram)})" @@ -900,41 +901,41 @@ class ContactsHelper(val context: Context) { private fun getContactSourceType(accountName: String) = getDeviceContactSources().firstOrNull { it.name == accountName }?.type ?: "" private fun getContactProjection() = arrayOf( - ContactsContract.Data.MIMETYPE, - ContactsContract.Data.CONTACT_ID, - ContactsContract.Data.RAW_CONTACT_ID, - CommonDataKinds.StructuredName.PREFIX, - CommonDataKinds.StructuredName.GIVEN_NAME, - CommonDataKinds.StructuredName.MIDDLE_NAME, - CommonDataKinds.StructuredName.FAMILY_NAME, - CommonDataKinds.StructuredName.SUFFIX, - CommonDataKinds.StructuredName.PHOTO_URI, - CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI, - CommonDataKinds.StructuredName.STARRED, - ContactsContract.RawContacts.ACCOUNT_NAME, - ContactsContract.RawContacts.ACCOUNT_TYPE + Data.MIMETYPE, + Data.CONTACT_ID, + Data.RAW_CONTACT_ID, + StructuredName.PREFIX, + StructuredName.GIVEN_NAME, + StructuredName.MIDDLE_NAME, + StructuredName.FAMILY_NAME, + StructuredName.SUFFIX, + StructuredName.PHOTO_URI, + StructuredName.PHOTO_THUMBNAIL_URI, + StructuredName.STARRED, + RawContacts.ACCOUNT_NAME, + RawContacts.ACCOUNT_TYPE ) private fun getSortString(): String { val sorting = context.config.sorting return when { - sorting and SORT_BY_FIRST_NAME != 0 -> "${CommonDataKinds.StructuredName.GIVEN_NAME} COLLATE NOCASE" - sorting and SORT_BY_MIDDLE_NAME != 0 -> "${CommonDataKinds.StructuredName.MIDDLE_NAME} COLLATE NOCASE" - sorting and SORT_BY_SURNAME != 0 -> "${CommonDataKinds.StructuredName.FAMILY_NAME} COLLATE NOCASE" - else -> CommonDataKinds.Phone.NUMBER + sorting and SORT_BY_FIRST_NAME != 0 -> "${StructuredName.GIVEN_NAME} COLLATE NOCASE" + sorting and SORT_BY_MIDDLE_NAME != 0 -> "${StructuredName.MIDDLE_NAME} COLLATE NOCASE" + sorting and SORT_BY_SURNAME != 0 -> "${StructuredName.FAMILY_NAME} COLLATE NOCASE" + else -> Phone.NUMBER } } private fun getRealContactId(id: Long): Int { - val uri = ContactsContract.Data.CONTENT_URI + val uri = Data.CONTENT_URI val projection = getContactProjection() - val selection = "(${ContactsContract.Data.MIMETYPE} = ? OR ${ContactsContract.Data.MIMETYPE} = ?) AND ${ContactsContract.Data.RAW_CONTACT_ID} = ?" - val selectionArgs = arrayOf(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE, id.toString()) + val selection = "(${Data.MIMETYPE} = ? OR ${Data.MIMETYPE} = ?) AND ${Data.RAW_CONTACT_ID} = ?" + val selectionArgs = arrayOf(StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE, id.toString()) var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { - return cursor.getIntValue(ContactsContract.Data.CONTACT_ID) + return cursor.getIntValue(Data.CONTACT_ID) } } finally { cursor?.close() @@ -951,58 +952,58 @@ class ContactsHelper(val context: Context) { try { val operations = ArrayList() - ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND (${ContactsContract.Data.MIMETYPE} = ? OR ${ContactsContract.Data.MIMETYPE} = ?)" - val selectionArgs = arrayOf(contact.id.toString(), CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) + ContentProviderOperation.newUpdate(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND (${Data.MIMETYPE} = ? OR ${Data.MIMETYPE} = ?)" + val selectionArgs = arrayOf(contact.id.toString(), StructuredName.CONTENT_ITEM_TYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) - withValue(CommonDataKinds.StructuredName.PREFIX, contact.prefix) - withValue(CommonDataKinds.StructuredName.GIVEN_NAME, contact.firstName) - withValue(CommonDataKinds.StructuredName.MIDDLE_NAME, contact.middleName) - withValue(CommonDataKinds.StructuredName.FAMILY_NAME, contact.surname) - withValue(CommonDataKinds.StructuredName.SUFFIX, contact.suffix) + withValue(StructuredName.PREFIX, contact.prefix) + withValue(StructuredName.GIVEN_NAME, contact.firstName) + withValue(StructuredName.MIDDLE_NAME, contact.middleName) + withValue(StructuredName.FAMILY_NAME, contact.surname) + withValue(StructuredName.SUFFIX, contact.suffix) operations.add(build()) } // delete nickname - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? " + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? " val selectionArgs = arrayOf(contact.id.toString(), Nickname.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) } // add nickname - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE) withValue(Nickname.NAME, contact.nickname) operations.add(build()) } // delete phone numbers - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? " - val selectionArgs = arrayOf(contact.id.toString(), CommonDataKinds.Phone.CONTENT_ITEM_TYPE) + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? " + val selectionArgs = arrayOf(contact.id.toString(), Phone.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) } // add phone numbers contact.phoneNumbers.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Phone.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.Phone.NUMBER, it.value) - withValue(CommonDataKinds.Phone.NORMALIZED_NUMBER, it.normalizedNumber) - withValue(CommonDataKinds.Phone.TYPE, it.type) - withValue(CommonDataKinds.Phone.LABEL, it.label) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) + withValue(Phone.NUMBER, it.value) + withValue(Phone.NORMALIZED_NUMBER, it.normalizedNumber) + withValue(Phone.TYPE, it.type) + withValue(Phone.LABEL, it.label) operations.add(build()) } } // delete emails - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? " + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? " val selectionArgs = arrayOf(contact.id.toString(), CommonDataKinds.Email.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) @@ -1010,9 +1011,9 @@ class ContactsHelper(val context: Context) { // add emails contact.emails.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Email.CONTENT_ITEM_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, CommonDataKinds.Email.CONTENT_ITEM_TYPE) withValue(CommonDataKinds.Email.DATA, it.value) withValue(CommonDataKinds.Email.TYPE, it.type) withValue(CommonDataKinds.Email.LABEL, it.label) @@ -1021,48 +1022,48 @@ class ContactsHelper(val context: Context) { } // delete addresses - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? " - val selectionArgs = arrayOf(contact.id.toString(), CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? " + val selectionArgs = arrayOf(contact.id.toString(), StructuredPostal.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) } // add addresses contact.addresses.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, it.value) - withValue(CommonDataKinds.StructuredPostal.TYPE, it.type) - withValue(CommonDataKinds.StructuredPostal.LABEL, it.label) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE) + withValue(StructuredPostal.FORMATTED_ADDRESS, it.value) + withValue(StructuredPostal.TYPE, it.type) + withValue(StructuredPostal.LABEL, it.label) operations.add(build()) } } // delete IMs - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? " - val selectionArgs = arrayOf(contact.id.toString(), CommonDataKinds.Im.CONTENT_ITEM_TYPE) + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? " + val selectionArgs = arrayOf(contact.id.toString(), Im.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) } // add IMs contact.IMs.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Im.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.Im.DATA, it.value) - withValue(CommonDataKinds.Im.PROTOCOL, it.type) - withValue(CommonDataKinds.Im.CUSTOM_PROTOCOL, it.label) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE) + withValue(Im.DATA, it.value) + withValue(Im.PROTOCOL, it.type) + withValue(Im.CUSTOM_PROTOCOL, it.label) operations.add(build()) } } // delete events - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? " + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? " val selectionArgs = arrayOf(contact.id.toString(), CommonDataKinds.Event.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) @@ -1070,9 +1071,9 @@ class ContactsHelper(val context: Context) { // add events contact.events.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Event.CONTENT_ITEM_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, CommonDataKinds.Event.CONTENT_ITEM_TYPE) withValue(CommonDataKinds.Event.START_DATE, it.value) withValue(CommonDataKinds.Event.TYPE, it.type) operations.add(build()) @@ -1080,33 +1081,33 @@ class ContactsHelper(val context: Context) { } // delete notes - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? " + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? " val selectionArgs = arrayOf(contact.id.toString(), Note.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) } // add notes - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, Note.CONTENT_ITEM_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE) withValue(Note.NOTE, contact.notes) operations.add(build()) } // delete organization - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? " + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? " val selectionArgs = arrayOf(contact.id.toString(), CommonDataKinds.Organization.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) } // add organization - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) withValue(CommonDataKinds.Organization.COMPANY, contact.organization.company) withValue(CommonDataKinds.Organization.TYPE, DEFAULT_ORGANIZATION_TYPE) withValue(CommonDataKinds.Organization.TITLE, contact.organization.jobPosition) @@ -1115,20 +1116,20 @@ class ContactsHelper(val context: Context) { } // delete websites - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? " - val selectionArgs = arrayOf(contact.id.toString(), CommonDataKinds.Website.CONTENT_ITEM_TYPE) + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? " + val selectionArgs = arrayOf(contact.id.toString(), Website.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) } // add websites contact.websites.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Website.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.Website.URL, it) - withValue(CommonDataKinds.Website.TYPE, DEFAULT_WEBSITE_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE) + withValue(Website.URL, it) + withValue(Website.TYPE, DEFAULT_WEBSITE_TYPE) operations.add(build()) } } @@ -1137,9 +1138,9 @@ class ContactsHelper(val context: Context) { val relevantGroupIDs = getStoredGroupsSync().map { it.id } if (relevantGroupIDs.isNotEmpty()) { val IDsString = TextUtils.join(",", relevantGroupIDs) - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? AND ${ContactsContract.Data.DATA1} IN ($IDsString)" - val selectionArgs = arrayOf(contact.contactId.toString(), CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE) + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? AND ${Data.DATA1} IN ($IDsString)" + val selectionArgs = arrayOf(contact.contactId.toString(), GroupMembership.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) } @@ -1147,19 +1148,19 @@ class ContactsHelper(val context: Context) { // add groups contact.groups.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.GroupMembership.GROUP_ROW_ID, it.id) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE) + withValue(GroupMembership.GROUP_ROW_ID, it.id) operations.add(build()) } } // favorite try { - val uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contact.contactId.toString()) + val uri = Uri.withAppendedPath(Contacts.CONTENT_URI, contact.contactId.toString()) val contentValues = ContentValues(1) - contentValues.put(ContactsContract.Contacts.STARRED, contact.starred) + contentValues.put(Contacts.STARRED, contact.starred) context.contentResolver.update(uri, contentValues, null, null) } catch (e: Exception) { context.showErrorToast(e) @@ -1171,7 +1172,7 @@ class ContactsHelper(val context: Context) { PHOTO_REMOVED -> removePhoto(contact, operations) } - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) return true } catch (e: Exception) { context.showErrorToast(e) @@ -1192,10 +1193,10 @@ class ContactsHelper(val context: Context) { val fullSizePhotoData = bitmap.getByteArray() bitmap.recycle() - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.id) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Photo.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.Photo.PHOTO, scaledSizePhotoData) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, contact.id) + withValue(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE) + withValue(Photo.PHOTO, scaledSizePhotoData) operations.add(build()) } @@ -1205,9 +1206,9 @@ class ContactsHelper(val context: Context) { } private fun removePhoto(contact: Contact, operations: ArrayList): ArrayList { - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ?" - val selectionArgs = arrayOf(contact.id.toString(), CommonDataKinds.Photo.CONTENT_ITEM_TYPE) + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.RAW_CONTACT_ID} = ? AND ${Data.MIMETYPE} = ?" + val selectionArgs = arrayOf(contact.id.toString(), Photo.CONTENT_ITEM_TYPE) withSelection(selection, selectionArgs) operations.add(build()) } @@ -1218,21 +1219,21 @@ class ContactsHelper(val context: Context) { fun addContactsToGroup(contacts: ArrayList, groupId: Long) { val operations = ArrayList() contacts.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValue(ContactsContract.Data.RAW_CONTACT_ID, it.id) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.GroupMembership.GROUP_ROW_ID, groupId) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValue(Data.RAW_CONTACT_ID, it.id) + withValue(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE) + withValue(GroupMembership.GROUP_ROW_ID, groupId) operations.add(build()) } if (operations.size % BATCH_SIZE == 0) { - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) operations.clear() } } try { - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) } catch (e: Exception) { context.showErrorToast(e) } @@ -1241,19 +1242,19 @@ class ContactsHelper(val context: Context) { fun removeContactsFromGroup(contacts: ArrayList, groupId: Long) { val operations = ArrayList() contacts.forEach { - ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { - val selection = "${ContactsContract.Data.CONTACT_ID} = ? AND ${ContactsContract.Data.MIMETYPE} = ? AND ${ContactsContract.Data.DATA1} = ?" - val selectionArgs = arrayOf(it.contactId.toString(), CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE, groupId.toString()) + ContentProviderOperation.newDelete(Data.CONTENT_URI).apply { + val selection = "${Data.CONTACT_ID} = ? AND ${Data.MIMETYPE} = ? AND ${Data.DATA1} = ?" + val selectionArgs = arrayOf(it.contactId.toString(), GroupMembership.CONTENT_ITEM_TYPE, groupId.toString()) withSelection(selection, selectionArgs) operations.add(build()) } if (operations.size % BATCH_SIZE == 0) { - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) operations.clear() } } - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) } fun insertContact(contact: Contact): Boolean { @@ -1263,50 +1264,50 @@ class ContactsHelper(val context: Context) { try { val operations = ArrayList() - ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI).apply { - withValue(ContactsContract.RawContacts.ACCOUNT_NAME, contact.source) - withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, getContactSourceType(contact.source)) + ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).apply { + withValue(RawContacts.ACCOUNT_NAME, contact.source) + withValue(RawContacts.ACCOUNT_TYPE, getContactSourceType(contact.source)) operations.add(build()) } // names - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.StructuredName.PREFIX, contact.prefix) - withValue(CommonDataKinds.StructuredName.GIVEN_NAME, contact.firstName) - withValue(CommonDataKinds.StructuredName.MIDDLE_NAME, contact.middleName) - withValue(CommonDataKinds.StructuredName.FAMILY_NAME, contact.surname) - withValue(CommonDataKinds.StructuredName.SUFFIX, contact.suffix) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) + withValue(StructuredName.PREFIX, contact.prefix) + withValue(StructuredName.GIVEN_NAME, contact.firstName) + withValue(StructuredName.MIDDLE_NAME, contact.middleName) + withValue(StructuredName.FAMILY_NAME, contact.surname) + withValue(StructuredName.SUFFIX, contact.suffix) operations.add(build()) } // nickname - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE) withValue(Nickname.NAME, contact.nickname) operations.add(build()) } // phone numbers contact.phoneNumbers.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Phone.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.Phone.NUMBER, it.value) - withValue(CommonDataKinds.Phone.NORMALIZED_NUMBER, it.normalizedNumber) - withValue(CommonDataKinds.Phone.TYPE, it.type) - withValue(CommonDataKinds.Phone.LABEL, it.label) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) + withValue(Phone.NUMBER, it.value) + withValue(Phone.NORMALIZED_NUMBER, it.normalizedNumber) + withValue(Phone.TYPE, it.type) + withValue(Phone.LABEL, it.label) operations.add(build()) } } // emails contact.emails.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Email.CONTENT_ITEM_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, CommonDataKinds.Email.CONTENT_ITEM_TYPE) withValue(CommonDataKinds.Email.DATA, it.value) withValue(CommonDataKinds.Email.TYPE, it.type) withValue(CommonDataKinds.Email.LABEL, it.label) @@ -1316,33 +1317,33 @@ class ContactsHelper(val context: Context) { // addresses contact.addresses.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, it.value) - withValue(CommonDataKinds.StructuredPostal.TYPE, it.type) - withValue(CommonDataKinds.StructuredPostal.LABEL, it.label) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE) + withValue(StructuredPostal.FORMATTED_ADDRESS, it.value) + withValue(StructuredPostal.TYPE, it.type) + withValue(StructuredPostal.LABEL, it.label) operations.add(build()) } } // IMs contact.IMs.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Im.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.Im.DATA, it.value) - withValue(CommonDataKinds.Im.PROTOCOL, it.type) - withValue(CommonDataKinds.Im.CUSTOM_PROTOCOL, it.label) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE) + withValue(Im.DATA, it.value) + withValue(Im.PROTOCOL, it.type) + withValue(Im.CUSTOM_PROTOCOL, it.label) operations.add(build()) } } // events contact.events.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Event.CONTENT_ITEM_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, CommonDataKinds.Event.CONTENT_ITEM_TYPE) withValue(CommonDataKinds.Event.START_DATE, it.value) withValue(CommonDataKinds.Event.TYPE, it.type) operations.add(build()) @@ -1350,18 +1351,18 @@ class ContactsHelper(val context: Context) { } // notes - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, Note.CONTENT_ITEM_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE) withValue(Note.NOTE, contact.notes) operations.add(build()) } // organization if (contact.organization.isNotEmpty()) { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) withValue(CommonDataKinds.Organization.COMPANY, contact.organization.company) withValue(CommonDataKinds.Organization.TYPE, DEFAULT_ORGANIZATION_TYPE) withValue(CommonDataKinds.Organization.TITLE, contact.organization.jobPosition) @@ -1372,21 +1373,21 @@ class ContactsHelper(val context: Context) { // websites contact.websites.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Website.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.Website.URL, it) - withValue(CommonDataKinds.Website.TYPE, DEFAULT_WEBSITE_TYPE) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE) + withValue(Website.URL, it) + withValue(Website.TYPE, DEFAULT_WEBSITE_TYPE) operations.add(build()) } } // groups contact.groups.forEach { - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.GroupMembership.GROUP_ROW_ID, it.id) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE) + withValue(GroupMembership.GROUP_ROW_ID, it.id) operations.add(build()) } } @@ -1406,17 +1407,17 @@ class ContactsHelper(val context: Context) { scaledPhoto.recycle() bitmap.recycle() - ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).apply { - withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Photo.CONTENT_ITEM_TYPE) - withValue(CommonDataKinds.Photo.PHOTO, scaledSizePhotoData) + ContentProviderOperation.newInsert(Data.CONTENT_URI).apply { + withValueBackReference(Data.RAW_CONTACT_ID, 0) + withValue(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE) + withValue(Photo.PHOTO, scaledSizePhotoData) operations.add(build()) } } val results: Array try { - results = context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + results = context.contentResolver.applyBatch(AUTHORITY, operations) } finally { scaledSizePhotoData = null } @@ -1430,9 +1431,9 @@ class ContactsHelper(val context: Context) { // favorite val userId = getRealContactId(rawId) if (userId != 0 && contact.starred == 1) { - val uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, userId.toString()) + val uri = Uri.withAppendedPath(Contacts.CONTENT_URI, userId.toString()) val contentValues = ContentValues(1) - contentValues.put(ContactsContract.Contacts.STARRED, contact.starred) + contentValues.put(Contacts.STARRED, contact.starred) context.contentResolver.update(uri, contentValues, null, null) } @@ -1444,8 +1445,8 @@ class ContactsHelper(val context: Context) { } private fun addFullSizePhoto(contactId: Long, fullSizePhotoData: ByteArray) { - val baseUri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, contactId) - val displayPhotoUri = Uri.withAppendedPath(baseUri, ContactsContract.RawContacts.DisplayPhoto.CONTENT_DIRECTORY) + val baseUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, contactId) + val displayPhotoUri = Uri.withAppendedPath(baseUri, RawContacts.DisplayPhoto.CONTENT_DIRECTORY) val fileDescriptor = context.contentResolver.openAssetFileDescriptor(displayPhotoUri, "rw") val photoStream = fileDescriptor!!.createOutputStream() photoStream.write(fullSizePhotoData) @@ -1454,16 +1455,16 @@ class ContactsHelper(val context: Context) { } fun getContactLookupKey(contactId: String): String { - val uri = ContactsContract.Data.CONTENT_URI - val projection = arrayOf(ContactsContract.Data.CONTACT_ID, ContactsContract.Data.LOOKUP_KEY) - val selection = "${ContactsContract.Data.MIMETYPE} = ? AND ${ContactsContract.Data.RAW_CONTACT_ID} = ?" - val selectionArgs = arrayOf(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, contactId) + val uri = Data.CONTENT_URI + val projection = arrayOf(Data.CONTACT_ID, Data.LOOKUP_KEY) + val selection = "${Data.MIMETYPE} = ? AND ${Data.RAW_CONTACT_ID} = ?" + val selectionArgs = arrayOf(StructuredName.CONTENT_ITEM_TYPE, contactId) var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { - val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID) - val lookupKey = cursor.getStringValue(ContactsContract.Data.LOOKUP_KEY) + val id = cursor.getIntValue(Data.CONTACT_ID) + val lookupKey = cursor.getStringValue(Data.LOOKUP_KEY) return "$lookupKey/$id" } } finally { @@ -1473,16 +1474,16 @@ class ContactsHelper(val context: Context) { } fun getContactMimeTypeId(contactId: String, mimeType: String): String { - val uri = ContactsContract.Data.CONTENT_URI - val projection = arrayOf(ContactsContract.Data._ID, ContactsContract.Data.RAW_CONTACT_ID, ContactsContract.Data.MIMETYPE) - val selection = "${ContactsContract.Data.MIMETYPE} = ? AND ${ContactsContract.Data.RAW_CONTACT_ID} = ?" + val uri = Data.CONTENT_URI + val projection = arrayOf(Data._ID, Data.RAW_CONTACT_ID, Data.MIMETYPE) + val selection = "${Data.MIMETYPE} = ? AND ${Data.RAW_CONTACT_ID} = ?" val selectionArgs = arrayOf(mimeType, contactId) var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) if (cursor?.moveToFirst() == true) { - return cursor.getStringValue(ContactsContract.Data._ID) + return cursor.getStringValue(Data._ID) } } finally { cursor?.close() @@ -1512,18 +1513,18 @@ class ContactsHelper(val context: Context) { try { val operations = ArrayList() contacts.filter { !it.isPrivate() }.map { it.contactId.toString() }.forEach { - val uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, it) + val uri = Uri.withAppendedPath(Contacts.CONTENT_URI, it) ContentProviderOperation.newUpdate(uri).apply { - withValue(ContactsContract.Contacts.STARRED, if (addToFavorites) 1 else 0) + withValue(Contacts.STARRED, if (addToFavorites) 1 else 0) operations.add(build()) } if (operations.size % BATCH_SIZE == 0) { - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) operations.clear() } } - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) } catch (e: Exception) { context.showErrorToast(e) } @@ -1558,22 +1559,22 @@ class ContactsHelper(val context: Context) { return try { val operations = ArrayList() - val selection = "${ContactsContract.RawContacts._ID} = ?" + val selection = "${RawContacts._ID} = ?" contacts.filter { !it.isPrivate() }.forEach { - ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI).apply { + ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).apply { val selectionArgs = arrayOf(it.id.toString()) withSelection(selection, selectionArgs) operations.add(build()) } if (operations.size % BATCH_SIZE == 0) { - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) operations.clear() } } if (context.hasPermission(PERMISSION_WRITE_CONTACTS)) { - context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + context.contentResolver.applyBatch(AUTHORITY, operations) } true } catch (e: Exception) {