mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-06-05 21:49:22 +02:00
improving the messages delivery status
This commit is contained in:
@@ -515,6 +515,10 @@ class ThreadActivity : SimpleActivity() {
|
|||||||
items.add(ThreadError(message.id))
|
items.add(ThreadError(message.id))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (message.type == Telephony.Sms.MESSAGE_TYPE_OUTBOX) {
|
||||||
|
items.add(ThreadSending(message.id))
|
||||||
|
}
|
||||||
|
|
||||||
if (!message.read) {
|
if (!message.read) {
|
||||||
hadUnreadItems = true
|
hadUnreadItems = true
|
||||||
markMessageRead(message.id, message.isMMS)
|
markMessageRead(message.id, message.isMMS)
|
||||||
|
@@ -39,6 +39,7 @@ import kotlinx.android.synthetic.main.item_received_unknown_attachment.view.*
|
|||||||
import kotlinx.android.synthetic.main.item_sent_unknown_attachment.view.*
|
import kotlinx.android.synthetic.main.item_sent_unknown_attachment.view.*
|
||||||
import kotlinx.android.synthetic.main.item_thread_date_time.view.*
|
import kotlinx.android.synthetic.main.item_thread_date_time.view.*
|
||||||
import kotlinx.android.synthetic.main.item_thread_error.view.*
|
import kotlinx.android.synthetic.main.item_thread_error.view.*
|
||||||
|
import kotlinx.android.synthetic.main.item_thread_sending.view.*
|
||||||
import kotlinx.android.synthetic.main.item_thread_success.view.*
|
import kotlinx.android.synthetic.main.item_thread_success.view.*
|
||||||
|
|
||||||
class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList<ThreadItem>, recyclerView: MyRecyclerView, fastScroller: FastScroller,
|
class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList<ThreadItem>, recyclerView: MyRecyclerView, fastScroller: FastScroller,
|
||||||
@@ -96,6 +97,7 @@ class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList<ThreadItem
|
|||||||
THREAD_RECEIVED_MESSAGE -> R.layout.item_received_message
|
THREAD_RECEIVED_MESSAGE -> R.layout.item_received_message
|
||||||
THREAD_SENT_MESSAGE_ERROR -> R.layout.item_thread_error
|
THREAD_SENT_MESSAGE_ERROR -> R.layout.item_thread_error
|
||||||
THREAD_SENT_MESSAGE_SUCCESS -> R.layout.item_thread_success
|
THREAD_SENT_MESSAGE_SUCCESS -> R.layout.item_thread_success
|
||||||
|
THREAD_SENT_MESSAGE_SENDING -> R.layout.item_thread_sending
|
||||||
else -> R.layout.item_sent_message
|
else -> R.layout.item_sent_message
|
||||||
}
|
}
|
||||||
return createViewHolder(layout, parent)
|
return createViewHolder(layout, parent)
|
||||||
@@ -108,6 +110,7 @@ class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList<ThreadItem
|
|||||||
is ThreadDateTime -> setupDateTime(itemView, item)
|
is ThreadDateTime -> setupDateTime(itemView, item)
|
||||||
is ThreadSuccess -> setupThreadSuccess(itemView)
|
is ThreadSuccess -> setupThreadSuccess(itemView)
|
||||||
is ThreadError -> setupThreadError(itemView)
|
is ThreadError -> setupThreadError(itemView)
|
||||||
|
is ThreadSending -> setupThreadSending(itemView)
|
||||||
else -> setupView(itemView, item as Message)
|
else -> setupView(itemView, item as Message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -123,6 +126,7 @@ class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList<ThreadItem
|
|||||||
(messages[position] as? Message)?.isReceivedMessage() == true -> THREAD_RECEIVED_MESSAGE
|
(messages[position] as? Message)?.isReceivedMessage() == true -> THREAD_RECEIVED_MESSAGE
|
||||||
item is ThreadError -> THREAD_SENT_MESSAGE_ERROR
|
item is ThreadError -> THREAD_SENT_MESSAGE_ERROR
|
||||||
item is ThreadSuccess -> THREAD_SENT_MESSAGE_SUCCESS
|
item is ThreadSuccess -> THREAD_SENT_MESSAGE_SUCCESS
|
||||||
|
item is ThreadSending -> THREAD_SENT_MESSAGE_SENDING
|
||||||
else -> THREAD_SENT_MESSAGE
|
else -> THREAD_SENT_MESSAGE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -336,4 +340,11 @@ class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList<ThreadItem
|
|||||||
private fun setupThreadError(view: View) {
|
private fun setupThreadError(view: View) {
|
||||||
view.thread_error.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
view.thread_error.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setupThreadSending(view: View) {
|
||||||
|
view.thread_sending.apply {
|
||||||
|
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
||||||
|
setTextColor(textColor)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -554,6 +554,16 @@ fun Context.markThreadMessagesUnread(threadId: Long) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Context.updateMessageDeliveryStatus(id: Long, status: Int) {
|
||||||
|
val uri = Sms.CONTENT_URI
|
||||||
|
val contentValues = ContentValues().apply {
|
||||||
|
put(Sms.TYPE, status)
|
||||||
|
}
|
||||||
|
val selection = "${Sms._ID} = ?"
|
||||||
|
val selectionArgs = arrayOf(id.toString())
|
||||||
|
contentResolver.update(uri, contentValues, selection, selectionArgs)
|
||||||
|
}
|
||||||
|
|
||||||
fun Context.updateMessageSubscriptionId(messageId: Long, subscriptionId: Int) {
|
fun Context.updateMessageSubscriptionId(messageId: Long, subscriptionId: Int) {
|
||||||
val uri = Sms.CONTENT_URI
|
val uri = Sms.CONTENT_URI
|
||||||
val contentValues = ContentValues().apply {
|
val contentValues = ContentValues().apply {
|
||||||
|
@@ -23,6 +23,7 @@ const val THREAD_RECEIVED_MESSAGE = 2
|
|||||||
const val THREAD_SENT_MESSAGE = 3
|
const val THREAD_SENT_MESSAGE = 3
|
||||||
const val THREAD_SENT_MESSAGE_ERROR = 4
|
const val THREAD_SENT_MESSAGE_ERROR = 4
|
||||||
const val THREAD_SENT_MESSAGE_SUCCESS = 5
|
const val THREAD_SENT_MESSAGE_SUCCESS = 5
|
||||||
|
const val THREAD_SENT_MESSAGE_SENDING = 6
|
||||||
|
|
||||||
fun refreshMessages() {
|
fun refreshMessages() {
|
||||||
EventBus.getDefault().post(Events.RefreshMessages())
|
EventBus.getDefault().post(Events.RefreshMessages())
|
||||||
|
@@ -1,3 +1,3 @@
|
|||||||
package com.simplemobiletools.smsmessenger.models
|
package com.simplemobiletools.smsmessenger.models
|
||||||
|
|
||||||
data class ThreadError(val messageID: Long) : ThreadItem()
|
data class ThreadError(val messageId: Long) : ThreadItem()
|
||||||
|
@@ -0,0 +1,3 @@
|
|||||||
|
package com.simplemobiletools.smsmessenger.models
|
||||||
|
|
||||||
|
data class ThreadSending(val messageId: Long) : ThreadItem()
|
@@ -44,7 +44,8 @@ class SmsReceiver : BroadcastReceiver() {
|
|||||||
context.updateUnreadCountBadge(context.conversationsDB.getUnreadConversations())
|
context.updateUnreadCountBadge(context.conversationsDB.getUnreadConversations())
|
||||||
|
|
||||||
val participant = SimpleContact(0, 0, address, "", arrayListOf(address), ArrayList(), ArrayList())
|
val participant = SimpleContact(0, 0, address, "", arrayListOf(address), ArrayList(), ArrayList())
|
||||||
val message = Message(newMessageId, body, type, arrayListOf(participant), (date / 1000).toInt(), false, threadId, false, null, address, "", subscriptionId)
|
val message = Message(newMessageId, body, type, arrayListOf(participant), (date / 1000).toInt(), false, threadId,
|
||||||
|
false, null, address, "", subscriptionId)
|
||||||
context.messagesDB.insertOrUpdate(message)
|
context.messagesDB.insertOrUpdate(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3,11 +3,22 @@ package com.simplemobiletools.smsmessenger.receivers
|
|||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.provider.Telephony
|
||||||
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
|
import com.simplemobiletools.smsmessenger.extensions.updateMessageDeliveryStatus
|
||||||
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
|
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
|
||||||
|
|
||||||
class SmsStatusDeliveredReceiver : BroadcastReceiver() {
|
class SmsStatusDeliveredReceiver : BroadcastReceiver() {
|
||||||
|
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
|
if (intent.extras?.containsKey("message_uri") == true) {
|
||||||
|
val uri = Uri.parse(intent.getStringExtra("message_uri"))
|
||||||
|
val id = uri?.lastPathSegment?.toLong() ?: 0L
|
||||||
|
ensureBackgroundThread {
|
||||||
|
context.updateMessageDeliveryStatus(id, Telephony.Sms.MESSAGE_TYPE_SENT)
|
||||||
refreshMessages()
|
refreshMessages()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -3,11 +3,23 @@ package com.simplemobiletools.smsmessenger.receivers
|
|||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.provider.Telephony
|
||||||
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
|
import com.simplemobiletools.smsmessenger.extensions.updateMessageDeliveryStatus
|
||||||
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
|
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
|
||||||
|
|
||||||
class SmsStatusSentReceiver : BroadcastReceiver() {
|
class SmsStatusSentReceiver : BroadcastReceiver() {
|
||||||
|
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
|
if (intent.extras?.containsKey("message_uri") == true) {
|
||||||
|
val uri = Uri.parse(intent.getStringExtra("message_uri"))
|
||||||
|
val id = uri?.lastPathSegment?.toLong() ?: 0L
|
||||||
|
ensureBackgroundThread {
|
||||||
|
val newStatus = if (intent.extras!!.containsKey("errorCode")) Telephony.Sms.MESSAGE_TYPE_FAILED else Telephony.Sms.MESSAGE_TYPE_OUTBOX
|
||||||
|
context.updateMessageDeliveryStatus(id, newStatus)
|
||||||
refreshMessages()
|
refreshMessages()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
10
app/src/main/res/layout/item_thread_sending.xml
Normal file
10
app/src/main/res/layout/item_thread_sending.xml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/thread_sending"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="end"
|
||||||
|
android:paddingStart="@dimen/activity_margin"
|
||||||
|
android:paddingEnd="@dimen/activity_margin"
|
||||||
|
android:text="@string/sending"
|
||||||
|
android:textSize="@dimen/normal_text_size" />
|
Reference in New Issue
Block a user