mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-02-26 08:27:39 +01:00
allow deleting threads from the main screen
This commit is contained in:
parent
560935b61e
commit
2a319f9550
@ -6,13 +6,18 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
||||||
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.extensions.formatDateOrTime
|
import com.simplemobiletools.commons.extensions.formatDateOrTime
|
||||||
|
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.deleteThread
|
||||||
|
import com.simplemobiletools.smsmessenger.models.Events
|
||||||
import com.simplemobiletools.smsmessenger.models.Message
|
import com.simplemobiletools.smsmessenger.models.Message
|
||||||
import kotlinx.android.synthetic.main.item_message.view.*
|
import kotlinx.android.synthetic.main.item_message.view.*
|
||||||
|
import org.greenrobot.eventbus.EventBus
|
||||||
|
|
||||||
class MessagesAdapter(
|
class MessagesAdapter(
|
||||||
activity: SimpleActivity, var messages: ArrayList<Message>,
|
activity: SimpleActivity, var messages: ArrayList<Message>,
|
||||||
@ -36,6 +41,7 @@ class MessagesAdapter(
|
|||||||
|
|
||||||
when (id) {
|
when (id) {
|
||||||
R.id.cab_select_all -> selectAll()
|
R.id.cab_select_all -> selectAll()
|
||||||
|
R.id.cab_delete -> askConfirmDelete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,9 +69,41 @@ class MessagesAdapter(
|
|||||||
|
|
||||||
override fun getItemCount() = messages.size
|
override fun getItemCount() = messages.size
|
||||||
|
|
||||||
private fun getItemWithKey(key: Int): Message? = messages.firstOrNull { it.id == key }
|
private fun askConfirmDelete() {
|
||||||
|
val itemsCnt = selectedKeys.size
|
||||||
|
val items = resources.getQuantityString(R.plurals.delete_conversations, itemsCnt, itemsCnt)
|
||||||
|
|
||||||
private fun getSelectedItems() = messages.filter { selectedKeys.contains(it.id) } as ArrayList<Message>
|
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.id) } as java.util.ArrayList<Message>
|
||||||
|
val positions = getSelectedItemPositions()
|
||||||
|
messagesToRemove.forEach {
|
||||||
|
activity.deleteThread(it.thread)
|
||||||
|
}
|
||||||
|
messages.removeAll(messagesToRemove)
|
||||||
|
|
||||||
|
activity.runOnUiThread {
|
||||||
|
if (messagesToRemove.isEmpty()) {
|
||||||
|
EventBus.getDefault().post(Events.RefreshMessages())
|
||||||
|
finishActMode()
|
||||||
|
} else {
|
||||||
|
removeSelectedItems(positions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun setupView(view: View, message: Message) {
|
private fun setupView(view: View, message: Message) {
|
||||||
view.apply {
|
view.apply {
|
||||||
|
@ -175,6 +175,13 @@ fun Context.insertNewSMS(address: String, subject: String, body: String, date: L
|
|||||||
contentResolver.insert(uri, contentValues)
|
contentResolver.insert(uri, contentValues)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Context.deleteThread(id: Int) {
|
||||||
|
val uri = Telephony.Sms.CONTENT_URI
|
||||||
|
val selection = "${Telephony.Sms.THREAD_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 {
|
||||||
|
@ -8,4 +8,13 @@
|
|||||||
<!-- Notifications -->
|
<!-- Notifications -->
|
||||||
<string name="channel_received_sms">Received SMS</string>
|
<string name="channel_received_sms">Received SMS</string>
|
||||||
<string name="new_message">New message</string>
|
<string name="new_message">New message</string>
|
||||||
|
|
||||||
|
<!-- Confirmation dialog -->
|
||||||
|
<string name="delete_conversations_confirmation">Are you sure you want to delete %s?</string> <!-- Are you sure you want to delete 5 conversations? -->
|
||||||
|
|
||||||
|
<!-- Are you sure you want to delete 5 conversations? -->
|
||||||
|
<plurals name="delete_conversations">
|
||||||
|
<item quantity="one">%d conversation</item>
|
||||||
|
<item quantity="other">%d conversations</item>
|
||||||
|
</plurals>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user