From 3cf6ce2e375313f0c12376625bba6afbcea5f214 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 5 Apr 2020 13:38:33 +0200 Subject: [PATCH] handle deleting individual messages --- .../smsmessenger/adapters/MessagesAdapter.kt | 6 +-- .../smsmessenger/adapters/ThreadAdapter.kt | 46 +++++++++++++++++-- .../smsmessenger/extensions/Context.kt | 7 +++ app/src/main/res/values/strings.xml | 6 +++ 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/MessagesAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/MessagesAdapter.kt index 5561765b..b7ff080c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/MessagesAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/MessagesAdapter.kt @@ -78,17 +78,17 @@ class MessagesAdapter( ConfirmationDialog(activity, question) { ensureBackgroundThread { - deleteMessages() + deleteThreads() } } } - private fun deleteMessages() { + private fun deleteThreads() { if (selectedKeys.isEmpty()) { return } - val messagesToRemove = messages.filter { selectedKeys.contains(it.id) } as java.util.ArrayList + val messagesToRemove = messages.filter { selectedKeys.contains(it.id) } as ArrayList val positions = getSelectedItemPositions() messagesToRemove.forEach { activity.deleteThread(it.thread) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index 4848c857..d99a5aa7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -4,21 +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.* +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.views.FastScroller import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.activities.SimpleActivity +import com.simplemobiletools.smsmessenger.extensions.deleteMessage import com.simplemobiletools.smsmessenger.helpers.THREAD_DATE_TIME import com.simplemobiletools.smsmessenger.helpers.THREAD_RECEIVED_MESSAGE import com.simplemobiletools.smsmessenger.helpers.THREAD_SENT_MESSAGE import com.simplemobiletools.smsmessenger.helpers.THREAD_SENT_MESSAGE_ERROR -import com.simplemobiletools.smsmessenger.models.Message -import com.simplemobiletools.smsmessenger.models.ThreadDateTime -import com.simplemobiletools.smsmessenger.models.ThreadError -import com.simplemobiletools.smsmessenger.models.ThreadItem +import com.simplemobiletools.smsmessenger.models.* import kotlinx.android.synthetic.main.item_received_message.view.* import kotlinx.android.synthetic.main.item_thread_date_time.view.* +import org.greenrobot.eventbus.EventBus class ThreadAdapter( activity: SimpleActivity, var messages: ArrayList, @@ -42,6 +43,7 @@ class ThreadAdapter( when (id) { R.id.cab_select_all -> selectAll() + R.id.cab_delete -> askConfirmDelete() } } @@ -91,6 +93,42 @@ class ThreadAdapter( } } + private fun askConfirmDelete() { + val itemsCnt = selectedKeys.size + val items = resources.getQuantityString(R.plurals.delete_messages, itemsCnt, itemsCnt) + + val baseString = R.string.delete_conversations_confirmation + val question = String.format(resources.getString(baseString), items) + + ConfirmationDialog(activity, question) { + ensureBackgroundThread { + deleteMessages() + } + } + } + + private fun deleteMessages() { + if (selectedKeys.isEmpty()) { + return + } + + val messagesToRemove = messages.filter { selectedKeys.contains((it as? Message)?.id ?: 0) } as ArrayList + val positions = getSelectedItemPositions() + messagesToRemove.forEach { + activity.deleteMessage((it as Message).id) + } + messages.removeAll(messagesToRemove) + + activity.runOnUiThread { + if (messages.filter { it is Message }.isEmpty()) { + activity.finish() + } else { + removeSelectedItems(positions) + } + EventBus.getDefault().post(Events.RefreshMessages()) + } + } + private fun isThreadDateTime(position: Int) = messages.getOrNull(position) is ThreadDateTime private fun setupView(view: View, message: Message) { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index f5ea4d63..9abddaae 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -182,6 +182,13 @@ fun Context.deleteThread(id: Int) { contentResolver.delete(uri, selection, selectionArgs) } +fun Context.deleteMessage(id: Int) { + val uri = Telephony.Sms.CONTENT_URI + val selection = "${Telephony.Sms._ID} = ?" + val selectionArgs = arrayOf(id.toString()) + contentResolver.delete(uri, selection, selectionArgs) +} + fun Context.markSMSRead(id: Int) { val uri = Telephony.Sms.CONTENT_URI val contentValues = ContentValues().apply { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7794317c..cd79c233 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,4 +17,10 @@ %d conversation %d conversations + + + + %d message + %d messages +