Skip to content

Commit 0b0e806

Browse files
authored
Merge pull request #180 from KryptKode/feat/sms-delivered-status
Show 2 checks when sms is delivered
2 parents 3818db5 + 67078dc commit 0b0e806

File tree

13 files changed

+66
-26
lines changed

13 files changed

+66
-26
lines changed

app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -569,8 +569,8 @@ class ThreadActivity : SimpleActivity() {
569569
conversationsDB.markRead(threadId)
570570
}
571571

572-
if (i == cnt - 1 && message.type == Telephony.Sms.MESSAGE_TYPE_SENT) {
573-
items.add(ThreadSuccess(message.id))
572+
if (i == cnt - 1 && (message.type == Telephony.Sms.MESSAGE_TYPE_SENT )) {
573+
items.add(ThreadSent(message.id, delivered = message.status == Telephony.Sms.STATUS_COMPLETE))
574574
}
575575
}
576576

app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class ThreadAdapter(
9999
THREAD_DATE_TIME -> R.layout.item_thread_date_time
100100
THREAD_RECEIVED_MESSAGE -> R.layout.item_received_message
101101
THREAD_SENT_MESSAGE_ERROR -> R.layout.item_thread_error
102-
THREAD_SENT_MESSAGE_SUCCESS -> R.layout.item_thread_success
102+
THREAD_SENT_MESSAGE_SENT -> R.layout.item_thread_success
103103
THREAD_SENT_MESSAGE_SENDING -> R.layout.item_thread_sending
104104
else -> R.layout.item_sent_message
105105
}
@@ -113,7 +113,7 @@ class ThreadAdapter(
113113
holder.bindView(item, isClickable, isLongClickable) { itemView, layoutPosition ->
114114
when (item) {
115115
is ThreadDateTime -> setupDateTime(itemView, item)
116-
is ThreadSuccess -> setupThreadSuccess(itemView)
116+
is ThreadSent -> setupThreadSuccess(itemView, item.delivered)
117117
is ThreadError -> setupThreadError(itemView)
118118
is ThreadSending -> setupThreadSending(itemView)
119119
else -> setupView(itemView, item as Message)
@@ -130,7 +130,7 @@ class ThreadAdapter(
130130
item is ThreadDateTime -> THREAD_DATE_TIME
131131
(messages[position] as? Message)?.isReceivedMessage() == true -> THREAD_RECEIVED_MESSAGE
132132
item is ThreadError -> THREAD_SENT_MESSAGE_ERROR
133-
item is ThreadSuccess -> THREAD_SENT_MESSAGE_SUCCESS
133+
item is ThreadSent -> THREAD_SENT_MESSAGE_SENT
134134
item is ThreadSending -> THREAD_SENT_MESSAGE_SENDING
135135
else -> THREAD_SENT_MESSAGE
136136
}
@@ -350,7 +350,8 @@ class ThreadAdapter(
350350
}
351351
}
352352

353-
private fun setupThreadSuccess(view: View) {
353+
private fun setupThreadSuccess(view: View, isDelivered: Boolean = false) {
354+
view.thread_success.setImageResource(if (isDelivered) R.drawable.ic_check_double_vector else R.drawable.ic_check_vector)
354355
view.thread_success.applyColorFilter(textColor)
355356
}
356357

app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import com.simplemobiletools.smsmessenger.models.Conversation
1717
import com.simplemobiletools.smsmessenger.models.Message
1818
import com.simplemobiletools.smsmessenger.models.MessageAttachment
1919

20-
@Database(entities = [Conversation::class, Attachment::class, MessageAttachment::class, Message::class], version = 3)
20+
@Database(entities = [Conversation::class, Attachment::class, MessageAttachment::class, Message::class], version = 4)
2121
@TypeConverters(Converters::class)
2222
abstract class MessagesDatabase : RoomDatabase() {
2323

@@ -40,6 +40,7 @@ abstract class MessagesDatabase : RoomDatabase() {
4040
.fallbackToDestructiveMigration()
4141
.addMigrations(MIGRATION_1_2)
4242
.addMigrations(MIGRATION_2_3)
43+
.addMigrations(MIGRATION_3_4)
4344
.build()
4445
}
4546
}
@@ -76,5 +77,13 @@ abstract class MessagesDatabase : RoomDatabase() {
7677
}
7778
}
7879
}
80+
81+
private val MIGRATION_3_4 = object : Migration(3, 4) {
82+
override fun migrate(database: SupportSQLiteDatabase) {
83+
database.apply {
84+
execSQL("ALTER TABLE messages ADD COLUMN status INTEGER NOT NULL DEFAULT -1")
85+
}
86+
}
87+
}
7988
}
8089
}

app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ import com.simplemobiletools.smsmessenger.interfaces.MessagesDao
3535
import com.simplemobiletools.smsmessenger.models.*
3636
import com.simplemobiletools.smsmessenger.receivers.DirectReplyReceiver
3737
import com.simplemobiletools.smsmessenger.receivers.MarkAsReadReceiver
38-
import me.leolin.shortcutbadger.ShortcutBadger
3938
import java.util.*
4039
import kotlin.collections.ArrayList
40+
import me.leolin.shortcutbadger.ShortcutBadger
4141

4242
val Context.config: Config get() = Config.newInstance(applicationContext)
4343

@@ -61,7 +61,8 @@ fun Context.getMessages(threadId: Long): ArrayList<Message> {
6161
Sms.DATE,
6262
Sms.READ,
6363
Sms.THREAD_ID,
64-
Sms.SUBSCRIPTION_ID
64+
Sms.SUBSCRIPTION_ID,
65+
Sms.STATUS
6566
)
6667

6768
val selection = "${Sms.THREAD_ID} = ?"
@@ -96,9 +97,10 @@ fun Context.getMessages(threadId: Long): ArrayList<Message> {
9697
val read = cursor.getIntValue(Sms.READ) == 1
9798
val thread = cursor.getLongValue(Sms.THREAD_ID)
9899
val subscriptionId = cursor.getIntValue(Sms.SUBSCRIPTION_ID)
100+
val status = cursor.getIntValue(Sms.STATUS)
99101
val participant = SimpleContact(0, 0, senderName, photoUri, arrayListOf(senderNumber), ArrayList(), ArrayList())
100102
val isMMS = false
101-
val message = Message(id, body, type, arrayListOf(participant), date, read, thread, isMMS, null, senderName, photoUri, subscriptionId)
103+
val message = Message(id, body, type, status, arrayListOf(participant), date, read, thread, isMMS, null, senderName, photoUri, subscriptionId)
102104
messages.add(message)
103105
}
104106

@@ -118,7 +120,8 @@ fun Context.getMMS(threadId: Long? = null, sortOrder: String? = null): ArrayList
118120
Mms.READ,
119121
Mms.MESSAGE_BOX,
120122
Mms.THREAD_ID,
121-
Mms.SUBSCRIPTION_ID
123+
Mms.SUBSCRIPTION_ID,
124+
Mms.STATUS
122125
)
123126

124127
val selection = if (threadId == null) {
@@ -143,6 +146,7 @@ fun Context.getMMS(threadId: Long? = null, sortOrder: String? = null): ArrayList
143146
val read = cursor.getIntValue(Mms.READ) == 1
144147
val threadId = cursor.getLongValue(Mms.THREAD_ID)
145148
val subscriptionId = cursor.getIntValue(Mms.SUBSCRIPTION_ID)
149+
val status = cursor.getIntValue(Mms.STATUS)
146150
val participants = if (threadParticipants.containsKey(threadId)) {
147151
threadParticipants[threadId]!!
148152
} else {
@@ -164,7 +168,7 @@ fun Context.getMMS(threadId: Long? = null, sortOrder: String? = null): ArrayList
164168
senderPhotoUri = namePhoto.photoUri ?: ""
165169
}
166170

167-
val message = Message(mmsId, body, type, participants, date, read, threadId, isMMS, attachment, senderName, senderPhotoUri, subscriptionId)
171+
val message = Message(mmsId, body, type, status, participants, date, read, threadId, isMMS, attachment, senderName, senderPhotoUri, subscriptionId)
168172
messages.add(message)
169173

170174
participants.forEach {
@@ -580,10 +584,20 @@ fun Context.markThreadMessagesUnread(threadId: Long) {
580584
}
581585
}
582586

583-
fun Context.updateMessageType(id: Long, status: Int) {
587+
fun Context.updateMessageType(id: Long, type: Int) {
588+
val uri = Sms.CONTENT_URI
589+
val contentValues = ContentValues().apply {
590+
put(Sms.TYPE, type)
591+
}
592+
val selection = "${Sms._ID} = ?"
593+
val selectionArgs = arrayOf(id.toString())
594+
contentResolver.update(uri, contentValues, selection, selectionArgs)
595+
}
596+
597+
fun Context.updateMessageStatus(id: Long, status: Int) {
584598
val uri = Sms.CONTENT_URI
585599
val contentValues = ContentValues().apply {
586-
put(Sms.TYPE, status)
600+
put(Sms.STATUS, status)
587601
}
588602
val selection = "${Sms._ID} = ?"
589603
val selectionArgs = arrayOf(id.toString())

app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const val THREAD_DATE_TIME = 1
2525
const val THREAD_RECEIVED_MESSAGE = 2
2626
const val THREAD_SENT_MESSAGE = 3
2727
const val THREAD_SENT_MESSAGE_ERROR = 4
28-
const val THREAD_SENT_MESSAGE_SUCCESS = 5
28+
const val THREAD_SENT_MESSAGE_SENT = 5
2929
const val THREAD_SENT_MESSAGE_SENDING = 6
3030

3131
// lock screen visibility constants

app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ interface MessagesDao {
3535
@Query("UPDATE messages SET type = :type WHERE id = :id")
3636
fun updateType(id: Long, type: Int): Int
3737

38+
@Query("UPDATE messages SET status = :status WHERE id = :id")
39+
fun updateStatus(id: Long, status: Int): Int
40+
3841
@Query("DELETE FROM messages WHERE id = :id")
3942
fun delete(id: Long)
4043

app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ data class Message(
1111
@PrimaryKey val id: Long,
1212
@ColumnInfo(name = "body") val body: String,
1313
@ColumnInfo(name = "type") val type: Int,
14+
@ColumnInfo(name = "status") val status: Int,
1415
@ColumnInfo(name = "participants") val participants: ArrayList<SimpleContact>,
1516
@ColumnInfo(name = "date") val date: Int,
1617
@ColumnInfo(name = "read") val read: Boolean,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.simplemobiletools.smsmessenger.models
2+
3+
// show a check after the latest message, if it is a sent one and succeeded,
4+
// show a double check if it is delivered
5+
data class ThreadSent(val messageID: Long, val delivered: Boolean) : ThreadItem()

app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadSuccess.kt

Lines changed: 0 additions & 4 deletions
This file was deleted.

app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class SmsReceiver : BroadcastReceiver() {
2121
var subject = ""
2222
var date = 0L
2323
var threadId = 0L
24+
var status = Telephony.Sms.STATUS_NONE
2425
val type = Telephony.Sms.MESSAGE_TYPE_INBOX
2526
val read = 0
2627
val subscriptionId = intent.getIntExtra("subscription", -1)
@@ -29,6 +30,7 @@ class SmsReceiver : BroadcastReceiver() {
2930
messages.forEach {
3031
address = it.originatingAddress ?: ""
3132
subject = it.pseudoSubject
33+
status = it.status
3234
body += it.messageBody
3335
date = Math.min(it.timestampMillis, System.currentTimeMillis())
3436
threadId = context.getThreadId(address)
@@ -49,7 +51,7 @@ class SmsReceiver : BroadcastReceiver() {
4951
val participant = SimpleContact(0, 0, address, "", arrayListOf(address), ArrayList(), ArrayList())
5052
val participants = arrayListOf(participant)
5153
val messageDate = (date / 1000).toInt()
52-
val message = Message(newMessageId, body, type, participants, messageDate, false, threadId, false, null, address, "", subscriptionId)
54+
val message = Message(newMessageId, body, type, status, participants, messageDate, false, threadId, false, null, address, "", subscriptionId)
5355
context.messagesDB.insertOrUpdate(message)
5456
refreshMessages()
5557
}

0 commit comments

Comments
 (0)