implement Recent Call removing

This commit is contained in:
tibbi
2018-08-04 18:24:26 +02:00
parent 4743fcd730
commit 46580c3620
4 changed files with 63 additions and 6 deletions

View File

@ -91,11 +91,11 @@ class GroupsAdapter(activity: SimpleActivity, var groups: ArrayList<Group>, val
private fun askConfirmDelete() { private fun askConfirmDelete() {
ConfirmationDialog(activity) { ConfirmationDialog(activity) {
deleteContacts() deleteGroups()
} }
} }
private fun deleteContacts() { private fun deleteGroups() {
if (selectedPositions.isEmpty()) { if (selectedPositions.isEmpty()) {
return return
} }

View File

@ -4,18 +4,22 @@ import android.view.Menu
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.extensions.beVisibleIf import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.views.FastScroller import com.simplemobiletools.commons.views.FastScroller
import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.R
import com.simplemobiletools.contacts.activities.SimpleActivity import com.simplemobiletools.contacts.activities.SimpleActivity
import com.simplemobiletools.contacts.extensions.config 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 com.simplemobiletools.contacts.models.RecentCall
import kotlinx.android.synthetic.main.item_recent_call.view.* import kotlinx.android.synthetic.main.item_recent_call.view.*
import java.util.* import java.util.*
class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<RecentCall>, recyclerView: MyRecyclerView, fastScroller: FastScroller, class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<RecentCall>, val refreshListener: RefreshContactsListener?, recyclerView: MyRecyclerView,
itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { fastScroller: FastScroller, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
private val showPhoneNumbers = activity.config.showPhoneNumbers private val showPhoneNumbers = activity.config.showPhoneNumbers
init { init {
@ -39,6 +43,7 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<Re
when (id) { when (id) {
R.id.cab_select_all -> selectAll() R.id.cab_select_all -> selectAll()
R.id.cab_delete -> askConfirmDelete()
} }
} }
@ -65,6 +70,33 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<Re
fastScroller?.measureRecyclerView() fastScroller?.measureRecyclerView()
} }
private fun askConfirmDelete() {
ConfirmationDialog(activity) {
deleteRecentCalls()
}
}
private fun deleteRecentCalls() {
if (selectedPositions.isEmpty()) {
return
}
val callsToRemove = ArrayList<RecentCall>()
selectedPositions.sortedDescending().forEach {
val call = recentCalls[it]
callsToRemove.add(call)
}
ContactsHelper(activity).removeRecentCalls(callsToRemove.map { it.id } as ArrayList<Int>)
recentCalls.removeAll(callsToRemove)
if (recentCalls.isEmpty()) {
refreshListener?.refreshContacts(RECENTS_TAB_MASK)
finishActMode()
} else {
removeSelectedItems()
}
}
private fun setupView(view: View, recentCall: RecentCall) { private fun setupView(view: View, recentCall: RecentCall) {
view.apply { view.apply {
recent_call_name.apply { recent_call_name.apply {

View File

@ -23,7 +23,7 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
val currAdapter = fragment_list.adapter val currAdapter = fragment_list.adapter
if (currAdapter == null) { if (currAdapter == null) {
RecentCallsAdapter(activity!!, recentCalls, fragment_list, fragment_fastscroller) { RecentCallsAdapter(activity!!, recentCalls, activity, fragment_list, fragment_fastscroller) {
}.apply { }.apply {
addVerticalDividers(true) addVerticalDividers(true)

View File

@ -1323,7 +1323,7 @@ class ContactsHelper(val activity: Activity) {
return@Thread return@Thread
} }
val uri = android.provider.CallLog.Calls.CONTENT_URI val uri = CallLog.Calls.CONTENT_URI
val projection = arrayOf( val projection = arrayOf(
CallLog.Calls._ID, CallLog.Calls._ID,
CallLog.Calls.NUMBER, CallLog.Calls.NUMBER,
@ -1371,4 +1371,29 @@ class ContactsHelper(val activity: Activity) {
callback(calls) callback(calls)
}.start() }.start()
} }
fun removeRecentCalls(ids: ArrayList<Int>) {
Thread {
try {
val operations = ArrayList<ContentProviderOperation>()
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()
}
} }