From 31d54619868a38b3242aa7b4f337263c6cfd506e Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Dec 2017 19:09:54 +0100 Subject: [PATCH] implement contact deletion --- .../contacts/activities/ContactActivity.kt | 6 +++++- .../contacts/activities/MainActivity.kt | 8 +++++-- .../contacts/adapters/ContactsAdapter.kt | 8 +++++++ .../contacts/helpers/ContactsHelper.kt | 21 +++++++++++++++++-- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt index faff531f..5f82b35d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt @@ -14,6 +14,7 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.target.Target +import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS @@ -163,7 +164,10 @@ class ContactActivity : SimpleActivity() { } private fun deleteContact() { - + ConfirmationDialog(this) { + ContactsHelper(this).deleteContact(contact!!) + finish() + } } private fun showAccountSourcePicker() { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt index b87fb3cb..4a6600f9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -87,6 +87,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { contacts_placeholder_2.setOnClickListener { showFilterDialog() } + initContacts() } override fun onPause() { @@ -140,8 +141,11 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { ContactsHelper(this).getContacts { Contact.sorting = config.sorting it.sort() - runOnUiThread { - setupContacts(it) + + if (it.hashCode() != (contacts_list.adapter as? ContactsAdapter)?.contactItems?.hashCode()) { + runOnUiThread { + setupContacts(it) + } } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt index 63c487c0..aac1ecd5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt @@ -18,6 +18,7 @@ import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.activities.SimpleActivity import com.simplemobiletools.contacts.extensions.config import com.simplemobiletools.contacts.extensions.openContact +import com.simplemobiletools.contacts.helpers.ContactsHelper import com.simplemobiletools.contacts.models.Contact import kotlinx.android.synthetic.main.item_contact.view.* @@ -91,7 +92,14 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: MutableList() + selectedPositions.forEach { contacts.add(contactItems[it]) } + ContactsHelper(activity).deleteContacts(contacts) + removeSelectedItems() } override fun onViewRecycled(holder: ViewHolder?) { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt index 67c9f6a6..8b87167f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt @@ -1,7 +1,9 @@ package com.simplemobiletools.contacts.helpers +import android.content.ContentProviderOperation import android.database.Cursor import android.provider.ContactsContract +import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.getIntValue import com.simplemobiletools.commons.extensions.getStringValue import com.simplemobiletools.commons.extensions.showErrorToast @@ -9,13 +11,12 @@ import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME import com.simplemobiletools.commons.helpers.SORT_BY_MIDDLE_NAME import com.simplemobiletools.commons.helpers.SORT_BY_SURNAME import com.simplemobiletools.commons.helpers.SORT_DESCENDING -import com.simplemobiletools.contacts.activities.SimpleActivity import com.simplemobiletools.contacts.extensions.config import com.simplemobiletools.contacts.models.Contact import com.simplemobiletools.contacts.overloads.times import java.util.* -class ContactsHelper(val activity: SimpleActivity) { +class ContactsHelper(val activity: BaseSimpleActivity) { fun getContactSources(callback: (ArrayList) -> Unit) { val accounts = HashSet() Thread { @@ -242,4 +243,20 @@ class ContactsHelper(val activity: SimpleActivity) { } return sort } + + fun deleteContact(contact: Contact) = deleteContacts(arrayListOf(contact)) + + fun deleteContacts(contacts: ArrayList) { + try { + val operations = ArrayList() + val selection = "${ContactsContract.CommonDataKinds.Phone.CONTACT_ID} = ?" + contacts.forEach { + val selectionArgs = arrayOf(it.id.toString()) + operations.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI).withSelection(selection, selectionArgs).build()) + } + activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + } catch (e: Exception) { + activity.showErrorToast(e) + } + } }