1 package host.exp.exponent.utils 2 3 import android.content.ContentProviderOperation 4 import android.provider.ContactsContract 5 import android.content.Context 6 import android.net.Uri 7 import java.lang.Exception 8 import java.lang.RuntimeException 9 import java.util.ArrayList 10 11 object TestContacts { addnull12 fun add(context: Context) { 13 removeAllContacts(context) 14 addContact(context, "JESSE", "TEST", "1234567890", "[email protected]") 15 addContact(context, "BEN", "TEST", "1234567891", "[email protected]") 16 addContact(context, "JAMES", "TEST", "1234567892", "[email protected]") 17 addContact(context, "BRENT", "TEST", "1234567894", "[email protected]") 18 } 19 addContactnull20 private fun addContact( 21 context: Context, 22 firstName: String, 23 lastName: String, 24 phoneNumber: String, 25 email: String 26 ) { 27 val operationList = ArrayList<ContentProviderOperation>() 28 operationList.add( 29 ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 30 .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 31 .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 32 .build() 33 ) 34 35 // first and last names 36 operationList.add( 37 ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 38 .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 39 .withValue( 40 ContactsContract.Data.MIMETYPE, 41 ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE 42 ) 43 .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, firstName) 44 .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, lastName) 45 .build() 46 ) 47 operationList.add( 48 ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 49 .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 50 .withValue( 51 ContactsContract.Data.MIMETYPE, 52 ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE 53 ) 54 .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber) 55 .withValue( 56 ContactsContract.CommonDataKinds.Phone.TYPE, 57 ContactsContract.CommonDataKinds.Phone.TYPE_HOME 58 ) 59 .build() 60 ) 61 operationList.add( 62 ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 63 .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 64 .withValue( 65 ContactsContract.Data.MIMETYPE, 66 ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE 67 ) 68 .withValue(ContactsContract.CommonDataKinds.Email.DATA, email) 69 .withValue( 70 ContactsContract.CommonDataKinds.Email.TYPE, 71 ContactsContract.CommonDataKinds.Email.TYPE_WORK 72 ) 73 .build() 74 ) 75 try { 76 context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operationList) 77 } catch (e: Exception) { 78 throw RuntimeException(e) 79 } 80 } 81 removeAllContactsnull82 private fun removeAllContacts(context: Context) { 83 val cr = context.contentResolver 84 val cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null) ?: return 85 cursor.use { 86 while (it.moveToNext()) { 87 val id = it.getString(it.getColumnIndex(ContactsContract.Contacts._ID)) 88 val cur1 = cr.query( 89 ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 90 ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", arrayOf(id), null 91 ) 92 var shouldDelete = false 93 while (cur1!!.moveToNext()) { 94 val email = 95 cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)) 96 if (email != null && email.endsWith("@testexpo.io")) { 97 shouldDelete = true 98 break 99 } 100 } 101 cur1.close() 102 if (shouldDelete) { 103 val lookupKey = it.getString(it.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)) 104 val uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey) 105 cr.delete(uri, null, null) 106 } 107 } 108 } 109 } 110 } 111