Skip to content

Commit 6dc7983

Browse files
authored
Merge pull request #668 from AAlier/master
Add Delete Action No Reply Notification message
2 parents 220dec1 + 73c12d0 commit 6dc7983

8 files changed

Lines changed: 64 additions & 9 deletions

File tree

app/src/main/AndroidManifest.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,15 @@
212212
</intent-filter>
213213
</receiver>
214214

215+
<receiver
216+
android:name=".receivers.DeleteSmsReceiver"
217+
android:enabled="true"
218+
android:exported="true">
219+
<intent-filter>
220+
<action android:name="com.simplemobiletools.smsmessenger.action.delete" />
221+
</intent-filter>
222+
</receiver>
223+
215224
<receiver
216225
android:name=".receivers.ScheduledMessageReceiver"
217226
android:exported="false" />

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -683,13 +683,13 @@ fun Context.getThreadId(addresses: Set<String>): Long {
683683
}
684684
}
685685

686-
fun Context.showReceivedMessageNotification(address: String, body: String, threadId: Long, bitmap: Bitmap?) {
686+
fun Context.showReceivedMessageNotification(messageId: Long, address: String, body: String, threadId: Long, bitmap: Bitmap?) {
687687
val privateCursor = getMyContactsCursor(favoritesOnly = false, withPhoneNumbersOnly = true)
688688
ensureBackgroundThread {
689689
val senderName = getNameFromAddress(address, privateCursor)
690690

691691
Handler(Looper.getMainLooper()).post {
692-
notificationHelper.showMessageNotification(address, body, threadId, bitmap, senderName)
692+
notificationHelper.showMessageNotification(messageId, address, body, threadId, bitmap, senderName)
693693
}
694694
}
695695
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ const val WAS_DB_CLEARED = "was_db_cleared_2"
3535
const val EXTRA_VCARD_URI = "vcard"
3636
const val SCHEDULED_MESSAGE_ID = "scheduled_message_id"
3737
const val SOFT_KEYBOARD_HEIGHT = "soft_keyboard_height"
38+
const val IS_MMS = "is_mms"
39+
const val MESSAGE_ID = "message_id"
3840

3941
private const val PATH = "com.simplemobiletools.smsmessenger.action."
4042
const val MARK_AS_READ = PATH + "mark_as_read"

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import com.simplemobiletools.smsmessenger.R
2323
import com.simplemobiletools.smsmessenger.activities.ThreadActivity
2424
import com.simplemobiletools.smsmessenger.extensions.config
2525
import com.simplemobiletools.smsmessenger.messaging.isShortCodeWithLetters
26+
import com.simplemobiletools.smsmessenger.receivers.DeleteSmsReceiver
2627
import com.simplemobiletools.smsmessenger.receivers.DirectReplyReceiver
2728
import com.simplemobiletools.smsmessenger.receivers.MarkAsReadReceiver
2829

@@ -35,7 +36,7 @@ class NotificationHelper(private val context: Context) {
3536
.build()
3637

3738
@SuppressLint("NewApi")
38-
fun showMessageNotification(address: String, body: String, threadId: Long, bitmap: Bitmap?, sender: String?, alertOnlyOnce: Boolean = false) {
39+
fun showMessageNotification(messageId: Long, address: String, body: String, threadId: Long, bitmap: Bitmap?, sender: String?, alertOnlyOnce: Boolean = false) {
3940
maybeCreateChannel(name = context.getString(R.string.channel_received_sms))
4041

4142
val notificationId = threadId.hashCode()
@@ -52,8 +53,16 @@ class NotificationHelper(private val context: Context) {
5253
val markAsReadPendingIntent =
5354
PendingIntent.getBroadcast(context, notificationId, markAsReadIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE)
5455

56+
val deleteSmsIntent = Intent(context, DeleteSmsReceiver::class.java).apply {
57+
putExtra(THREAD_ID, threadId)
58+
putExtra(MESSAGE_ID, messageId)
59+
}
60+
val deleteSmsPendingIntent =
61+
PendingIntent.getBroadcast(context, notificationId, deleteSmsIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE)
62+
5563
var replyAction: NotificationCompat.Action? = null
56-
if (isNougatPlus() && !isShortCodeWithLetters(address)) {
64+
val isNoReplySms = isShortCodeWithLetters(address)
65+
if (isNougatPlus() && !isNoReplySms) {
5766
val replyLabel = context.getString(R.string.reply)
5867
val remoteInput = RemoteInput.Builder(REPLY)
5968
.setLabel(replyLabel)
@@ -112,7 +121,10 @@ class NotificationHelper(private val context: Context) {
112121

113122
builder.addAction(R.drawable.ic_check_vector, context.getString(R.string.mark_as_read), markAsReadPendingIntent)
114123
.setChannelId(NOTIFICATION_CHANNEL)
115-
124+
if (isNoReplySms) {
125+
builder.addAction(R.drawable.ic_delete_vector, context.getString(R.string.delete), deleteSmsPendingIntent)
126+
.setChannelId(NOTIFICATION_CHANNEL)
127+
}
116128
notificationManager.notify(notificationId, builder.build())
117129
}
118130

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.simplemobiletools.smsmessenger.receivers
2+
3+
import android.content.BroadcastReceiver
4+
import android.content.Context
5+
import android.content.Intent
6+
import com.simplemobiletools.commons.extensions.notificationManager
7+
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
8+
import com.simplemobiletools.smsmessenger.extensions.conversationsDB
9+
import com.simplemobiletools.smsmessenger.extensions.deleteMessage
10+
import com.simplemobiletools.smsmessenger.extensions.updateLastConversationMessage
11+
import com.simplemobiletools.smsmessenger.extensions.updateUnreadCountBadge
12+
import com.simplemobiletools.smsmessenger.helpers.IS_MMS
13+
import com.simplemobiletools.smsmessenger.helpers.MESSAGE_ID
14+
import com.simplemobiletools.smsmessenger.helpers.THREAD_ID
15+
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
16+
17+
class DeleteSmsReceiver: BroadcastReceiver() {
18+
19+
override fun onReceive(context: Context, intent: Intent) {
20+
val threadId = intent.getLongExtra(THREAD_ID, 0L)
21+
val messageId = intent.getLongExtra(MESSAGE_ID, 0L)
22+
val isMms = intent.getBooleanExtra(IS_MMS, false)
23+
context.notificationManager.cancel(threadId.hashCode())
24+
ensureBackgroundThread {
25+
context.deleteMessage(messageId, isMms)
26+
context.updateUnreadCountBadge(context.conversationsDB.getUnreadConversations())
27+
context.updateLastConversationMessage(threadId)
28+
refreshMessages()
29+
}
30+
}
31+
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,13 @@ class DirectReplyReceiver : BroadcastReceiver() {
3737
}
3838

3939
ensureBackgroundThread {
40+
var messageId: Long = 0L
4041
try {
4142
context.sendMessageCompat(body, listOf(address), subscriptionId, emptyList())
4243
val message = context.getMessages(threadId, getImageResolutions = false, includeScheduledMessages = false, limit = 1).lastOrNull()
4344
if (message != null) {
4445
context.messagesDB.insertOrUpdate(message)
46+
messageId = message.id
4547
}
4648
} catch (e: Exception) {
4749
context.showErrorToast(e)
@@ -50,7 +52,7 @@ class DirectReplyReceiver : BroadcastReceiver() {
5052
val photoUri = SimpleContactsHelper(context).getPhotoUriFromPhoneNumber(address)
5153
val bitmap = context.getNotificationBitmap(photoUri)
5254
Handler(Looper.getMainLooper()).post {
53-
context.notificationHelper.showMessageNotification(address, body, threadId, bitmap, sender = null, alertOnlyOnce = true)
55+
context.notificationHelper.showMessageNotification(messageId, address, body, threadId, bitmap, sender = null, alertOnlyOnce = true)
5456
}
5557

5658
context.markThreadMessagesRead(threadId)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class MmsReceiver : com.klinker.android.send_message.MmsReceivedReceiver() {
3838
}
3939

4040
Handler(Looper.getMainLooper()).post {
41-
context.showReceivedMessageNotification(address, mms.body, mms.threadId, glideBitmap)
41+
context.showReceivedMessageNotification(mms.id, address, mms.body, mms.threadId, glideBitmap)
4242
val conversation = context.getConversations(mms.threadId).firstOrNull() ?: return@post
4343
ensureBackgroundThread {
4444
context.insertOrUpdateConversation(conversation)

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,8 @@ class SmsReceiver : BroadcastReceiver() {
8686
Message(newMessageId, body, type, status, participants, messageDate, false, threadId, false, null, senderName, photoUri, subscriptionId)
8787
context.messagesDB.insertOrUpdate(message)
8888
refreshMessages()
89+
context.showReceivedMessageNotification(newMessageId, address, body, threadId, bitmap)
8990
}
90-
91-
context.showReceivedMessageNotification(address, body, threadId, bitmap)
9291
}
9392
}
9493
}

0 commit comments

Comments
 (0)