mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-06-05 21:49:22 +02:00
handle deleting individual messages
This commit is contained in:
@@ -78,17 +78,17 @@ class MessagesAdapter(
|
|||||||
|
|
||||||
ConfirmationDialog(activity, question) {
|
ConfirmationDialog(activity, question) {
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
deleteMessages()
|
deleteThreads()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun deleteMessages() {
|
private fun deleteThreads() {
|
||||||
if (selectedKeys.isEmpty()) {
|
if (selectedKeys.isEmpty()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val messagesToRemove = messages.filter { selectedKeys.contains(it.id) } as java.util.ArrayList<Message>
|
val messagesToRemove = messages.filter { selectedKeys.contains(it.id) } as ArrayList<Message>
|
||||||
val positions = getSelectedItemPositions()
|
val positions = getSelectedItemPositions()
|
||||||
messagesToRemove.forEach {
|
messagesToRemove.forEach {
|
||||||
activity.deleteThread(it.thread)
|
activity.deleteThread(it.thread)
|
||||||
|
@@ -4,21 +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.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
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.smsmessenger.R
|
import com.simplemobiletools.smsmessenger.R
|
||||||
import com.simplemobiletools.smsmessenger.activities.SimpleActivity
|
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_DATE_TIME
|
||||||
import com.simplemobiletools.smsmessenger.helpers.THREAD_RECEIVED_MESSAGE
|
import com.simplemobiletools.smsmessenger.helpers.THREAD_RECEIVED_MESSAGE
|
||||||
import com.simplemobiletools.smsmessenger.helpers.THREAD_SENT_MESSAGE
|
import com.simplemobiletools.smsmessenger.helpers.THREAD_SENT_MESSAGE
|
||||||
import com.simplemobiletools.smsmessenger.helpers.THREAD_SENT_MESSAGE_ERROR
|
import com.simplemobiletools.smsmessenger.helpers.THREAD_SENT_MESSAGE_ERROR
|
||||||
import com.simplemobiletools.smsmessenger.models.Message
|
import com.simplemobiletools.smsmessenger.models.*
|
||||||
import com.simplemobiletools.smsmessenger.models.ThreadDateTime
|
|
||||||
import com.simplemobiletools.smsmessenger.models.ThreadError
|
|
||||||
import com.simplemobiletools.smsmessenger.models.ThreadItem
|
|
||||||
import kotlinx.android.synthetic.main.item_received_message.view.*
|
import kotlinx.android.synthetic.main.item_received_message.view.*
|
||||||
import kotlinx.android.synthetic.main.item_thread_date_time.view.*
|
import kotlinx.android.synthetic.main.item_thread_date_time.view.*
|
||||||
|
import org.greenrobot.eventbus.EventBus
|
||||||
|
|
||||||
class ThreadAdapter(
|
class ThreadAdapter(
|
||||||
activity: SimpleActivity, var messages: ArrayList<ThreadItem>,
|
activity: SimpleActivity, var messages: ArrayList<ThreadItem>,
|
||||||
@@ -42,6 +43,7 @@ class ThreadAdapter(
|
|||||||
|
|
||||||
when (id) {
|
when (id) {
|
||||||
R.id.cab_select_all -> selectAll()
|
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<ThreadItem>
|
||||||
|
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 isThreadDateTime(position: Int) = messages.getOrNull(position) is ThreadDateTime
|
||||||
|
|
||||||
private fun setupView(view: View, message: Message) {
|
private fun setupView(view: View, message: Message) {
|
||||||
|
@@ -182,6 +182,13 @@ fun Context.deleteThread(id: Int) {
|
|||||||
contentResolver.delete(uri, selection, selectionArgs)
|
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) {
|
fun Context.markSMSRead(id: Int) {
|
||||||
val uri = Telephony.Sms.CONTENT_URI
|
val uri = Telephony.Sms.CONTENT_URI
|
||||||
val contentValues = ContentValues().apply {
|
val contentValues = ContentValues().apply {
|
||||||
|
@@ -17,4 +17,10 @@
|
|||||||
<item quantity="one">%d conversation</item>
|
<item quantity="one">%d conversation</item>
|
||||||
<item quantity="other">%d conversations</item>
|
<item quantity="other">%d conversations</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
|
<!-- Are you sure you want to delete 5 messages? -->
|
||||||
|
<plurals name="delete_messages">
|
||||||
|
<item quantity="one">%d message</item>
|
||||||
|
<item quantity="other">%d messages</item>
|
||||||
|
</plurals>
|
||||||
</resources>
|
</resources>
|
||||||
|
Reference in New Issue
Block a user