mirror of
				https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
				synced 2025-06-05 21:49:22 +02:00 
			
		
		
		
	allow deleting threads from the main screen
This commit is contained in:
		@@ -6,13 +6,18 @@ import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import android.widget.TextView
 | 
			
		||||
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
 | 
			
		||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
 | 
			
		||||
import com.simplemobiletools.commons.extensions.formatDateOrTime
 | 
			
		||||
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.deleteThread
 | 
			
		||||
import com.simplemobiletools.smsmessenger.models.Events
 | 
			
		||||
import com.simplemobiletools.smsmessenger.models.Message
 | 
			
		||||
import kotlinx.android.synthetic.main.item_message.view.*
 | 
			
		||||
import org.greenrobot.eventbus.EventBus
 | 
			
		||||
 | 
			
		||||
class MessagesAdapter(
 | 
			
		||||
    activity: SimpleActivity, var messages: ArrayList<Message>,
 | 
			
		||||
@@ -36,6 +41,7 @@ class MessagesAdapter(
 | 
			
		||||
 | 
			
		||||
        when (id) {
 | 
			
		||||
            R.id.cab_select_all -> selectAll()
 | 
			
		||||
            R.id.cab_delete -> askConfirmDelete()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -63,9 +69,41 @@ class MessagesAdapter(
 | 
			
		||||
 | 
			
		||||
    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) {
 | 
			
		||||
        view.apply {
 | 
			
		||||
 
 | 
			
		||||
@@ -175,6 +175,13 @@ fun Context.insertNewSMS(address: String, subject: String, body: String, date: L
 | 
			
		||||
    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) {
 | 
			
		||||
    val uri = Telephony.Sms.CONTENT_URI
 | 
			
		||||
    val contentValues = ContentValues().apply {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,4 +8,13 @@
 | 
			
		||||
    <!-- Notifications -->
 | 
			
		||||
    <string name="channel_received_sms">Received SMS</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>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user