From 46580c362039d0fad03e0620e07e6ca714669b35 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 4 Aug 2018 18:24:26 +0200 Subject: [PATCH] implement Recent Call removing --- .../contacts/adapters/GroupsAdapter.kt | 4 +-- .../contacts/adapters/RecentCallsAdapter.kt | 36 +++++++++++++++++-- .../contacts/fragments/RecentsFragment.kt | 2 +- .../contacts/helpers/ContactsHelper.kt | 27 +++++++++++++- 4 files changed, 63 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/GroupsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/GroupsAdapter.kt index fe7f7f3d..ca98b7cd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/GroupsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/GroupsAdapter.kt @@ -91,11 +91,11 @@ class GroupsAdapter(activity: SimpleActivity, var groups: ArrayList, val private fun askConfirmDelete() { ConfirmationDialog(activity) { - deleteContacts() + deleteGroups() } } - private fun deleteContacts() { + private fun deleteGroups() { if (selectedPositions.isEmpty()) { return } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/RecentCallsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/RecentCallsAdapter.kt index c2fa54f3..e54d8d2b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/RecentCallsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/RecentCallsAdapter.kt @@ -4,18 +4,22 @@ import android.view.Menu import android.view.View import android.view.ViewGroup import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter +import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.beVisibleIf import com.simplemobiletools.commons.views.FastScroller import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.activities.SimpleActivity import com.simplemobiletools.contacts.extensions.config +import com.simplemobiletools.contacts.helpers.ContactsHelper +import com.simplemobiletools.contacts.helpers.RECENTS_TAB_MASK +import com.simplemobiletools.contacts.interfaces.RefreshContactsListener import com.simplemobiletools.contacts.models.RecentCall import kotlinx.android.synthetic.main.item_recent_call.view.* import java.util.* -class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList, recyclerView: MyRecyclerView, fastScroller: FastScroller, - itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { +class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList, val refreshListener: RefreshContactsListener?, recyclerView: MyRecyclerView, + fastScroller: FastScroller, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { private val showPhoneNumbers = activity.config.showPhoneNumbers init { @@ -39,6 +43,7 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList selectAll() + R.id.cab_delete -> askConfirmDelete() } } @@ -65,6 +70,33 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList() + selectedPositions.sortedDescending().forEach { + val call = recentCalls[it] + callsToRemove.add(call) + } + ContactsHelper(activity).removeRecentCalls(callsToRemove.map { it.id } as ArrayList) + recentCalls.removeAll(callsToRemove) + + if (recentCalls.isEmpty()) { + refreshListener?.refreshContacts(RECENTS_TAB_MASK) + finishActMode() + } else { + removeSelectedItems() + } + } + private fun setupView(view: View, recentCall: RecentCall) { view.apply { recent_call_name.apply { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt index f7e70e4d..e68a0714 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt @@ -23,7 +23,7 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage val currAdapter = fragment_list.adapter if (currAdapter == null) { - RecentCallsAdapter(activity!!, recentCalls, fragment_list, fragment_fastscroller) { + RecentCallsAdapter(activity!!, recentCalls, activity, fragment_list, fragment_fastscroller) { }.apply { addVerticalDividers(true) 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 05d78abb..9b53113a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt @@ -1323,7 +1323,7 @@ class ContactsHelper(val activity: Activity) { return@Thread } - val uri = android.provider.CallLog.Calls.CONTENT_URI + val uri = CallLog.Calls.CONTENT_URI val projection = arrayOf( CallLog.Calls._ID, CallLog.Calls.NUMBER, @@ -1371,4 +1371,29 @@ class ContactsHelper(val activity: Activity) { callback(calls) }.start() } + + fun removeRecentCalls(ids: ArrayList) { + Thread { + try { + val operations = ArrayList() + val selection = "${CallLog.Calls._ID} = ?" + ids.forEach { + ContentProviderOperation.newDelete(CallLog.Calls.CONTENT_URI).apply { + val selectionArgs = arrayOf(it.toString()) + withSelection(selection, selectionArgs) + operations.add(build()) + } + + if (operations.size % BATCH_SIZE == 0) { + activity.contentResolver.applyBatch(CallLog.AUTHORITY, operations) + operations.clear() + } + } + + activity.contentResolver.applyBatch(CallLog.AUTHORITY, operations) + } catch (e: Exception) { + activity.showErrorToast(e) + } + }.start() + } }