fun saveMultipleFieldsContactTest() {
if (ContextCompat.checkSelfPermission(
appContext,
Manifest.permission.WRITE_CONTACTS
) != PackageManager.PERMISSION_GRANTED
) {
Assert.fail("Write Contacts Permission Denied")
}
val firstName = "Aerith"
val middleName = ""
val lastName = "Gainsborough"
val mobile = "+60000000001"
val work = "+60000000002"
val fax = "+60000000003"
val otherPhone = ""
val email1 = "aerith@gmail.com"
val email2 = "aerith.gainsborough@gmail.com"
val otherEmail = "aerithrawks@gmail.com"
val contentProviderOperation = ArrayList<ContentProviderOperation>()
val rawContactInsertIndex = contentProviderOperation.size
contentProviderOperation.add(
ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build()
)
/**
* Name
*/
val nameOperation = ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Contacts.Data.RAW_CONTACT_ID,
rawContactInsertIndex
)
.withValue(
ContactsContract.Contacts.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE
)
nameOperation.withValue(
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,
firstName
)
nameOperation.withValue(
ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME,
middleName
)
nameOperation.withValue(
ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME,
lastName
)
contentProviderOperation.add(nameOperation.build())
/**
* Phone Number
*/
val phoneList = listOf(mobile, work, fax, otherPhone)
phoneList.forEach { phoneNumber ->
val phoneNumberOperation = ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex
)
.withValue(
ContactsContract.Contacts.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
)
phoneNumberOperation.withValue(
ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber
)
when (phoneNumber) {
mobile -> {
phoneNumberOperation.withValue(
ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE
)
}
work -> {
phoneNumberOperation.withValue(
ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_WORK
)
}
fax -> {
phoneNumberOperation.withValue(
ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK
)
}
otherPhone -> {
phoneNumberOperation.withValue(
ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_OTHER
)
}
}
contentProviderOperation.add(phoneNumberOperation.build())
}
/**
* Email
*/
val emailList = listOf(email1, email2, otherEmail)
emailList.forEach { email ->
val emailOperation = ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex
)
.withValue(
ContactsContract.Contacts.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE
)
emailOperation.withValue(ContactsContract.CommonDataKinds.Email.DATA, email)
when (email) {
email1 -> emailOperation.withValue(
ContactsContract.CommonDataKinds.Email.TYPE,
ContactsContract.CommonDataKinds.Email.TYPE_MOBILE
)
email2 -> emailOperation.withValue(
ContactsContract.CommonDataKinds.Email.TYPE,
ContactsContract.CommonDataKinds.Email.TYPE_WORK
)
otherEmail -> emailOperation.withValue(
ContactsContract.CommonDataKinds.Email.TYPE,
ContactsContract.CommonDataKinds.Email.TYPE_OTHER
)
}
contentProviderOperation.add(emailOperation.build())
}
try {
contentResolver.applyBatch(ContactsContract.AUTHORITY, contentProviderOperation)
} catch (exception: Exception) {
Assert.fail(exception.localizedMessage)
}
}
Last active
June 23, 2021 14:47
-
-
Save delacrixmorgan/3b3efef4e449a9366836158c221142cd to your computer and use it in GitHub Desktop.
Adding Android Contacts with Contacts Contract
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
What if we also wanted to assign a group to the given contact
Tried following the same pattern but can't seem to get it to work right.... any pointers?