diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt
index 130eb9fa..0fcb3e88 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt
@@ -160,7 +160,7 @@ fun Context.getNameFromPhoneNumber(number: String): Int? {
return null
}
-fun Context.insertNewSMS(address: String, subject: String, body: String, date: Long) {
+fun Context.insertNewSMS(address: String, subject: String, body: String, date: Long, threadID: Long) {
val uri = Telephony.Sms.CONTENT_URI
val contentValues = ContentValues().apply {
put(Telephony.Sms.ADDRESS, address)
@@ -168,6 +168,7 @@ fun Context.insertNewSMS(address: String, subject: String, body: String, date: L
put(Telephony.Sms.BODY, body)
put(Telephony.Sms.DATE, date)
put(Telephony.Sms.READ, 0)
+ put(Telephony.Sms.THREAD_ID, threadID)
put(Telephony.Sms.TYPE, Telephony.Sms.MESSAGE_TYPE_INBOX)
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt
index 43ee2c08..1f76e22d 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt
@@ -1,14 +1,31 @@
package com.simplemobiletools.smsmessenger.receivers
+import android.annotation.SuppressLint
+import android.app.Notification
+import android.app.NotificationChannel
+import android.app.NotificationManager
+import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
+import android.media.AudioAttributes
+import android.media.AudioManager
+import android.media.RingtoneManager
import android.provider.Telephony
+import androidx.core.app.NotificationCompat
+import com.simplemobiletools.commons.helpers.isMarshmallowPlus
+import com.simplemobiletools.commons.helpers.isOreoPlus
+import com.simplemobiletools.smsmessenger.R
+import com.simplemobiletools.smsmessenger.activities.ThreadActivity
import com.simplemobiletools.smsmessenger.extensions.insertNewSMS
+import com.simplemobiletools.smsmessenger.helpers.THREAD_ID
+import com.simplemobiletools.smsmessenger.helpers.THREAD_NAME
+import com.simplemobiletools.smsmessenger.helpers.THREAD_NUMBER
import com.simplemobiletools.smsmessenger.models.Events
import org.greenrobot.eventbus.EventBus
class SmsReceiver : BroadcastReceiver() {
+ @SuppressLint("NewApi")
override fun onReceive(context: Context, intent: Intent) {
val messages = Telephony.Sms.Intents.getMessagesFromIntent(intent)
messages.forEach {
@@ -16,9 +33,61 @@ class SmsReceiver : BroadcastReceiver() {
val subject = it.pseudoSubject
val body = it.messageBody
val date = it.timestampMillis
- context.insertNewSMS(address, subject, body, date)
+ val threadID = if (isMarshmallowPlus()) {
+ Telephony.Threads.getOrCreateThreadId(context, address)
+ } else {
+ 0
+ }
+
+ context.insertNewSMS(address, subject, body, date, threadID)
+ showNotification(context, address, body, threadID.toInt())
}
EventBus.getDefault().post(Events.RefreshMessages())
}
+
+ @SuppressLint("NewApi")
+ private fun showNotification(context: Context, address: String, body: String, threadID: Int) {
+ val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
+ val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
+ val channelId = "simple_sms_messenger"
+ if (isOreoPlus()) {
+ val audioAttributes = AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_NOTIFICATION)
+ .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+ .setLegacyStreamType(AudioManager.STREAM_NOTIFICATION)
+ .build()
+
+ val name = context.getString(R.string.channel_received_sms)
+ val importance = NotificationManager.IMPORTANCE_HIGH
+ NotificationChannel(channelId, name, importance).apply {
+ setBypassDnd(false)
+ enableLights(true)
+ setSound(soundUri, audioAttributes)
+ notificationManager.createNotificationChannel(this)
+ }
+ }
+
+ val intent = Intent(context, ThreadActivity::class.java).apply {
+ putExtra(THREAD_ID, threadID)
+ putExtra(THREAD_NAME, address)
+ putExtra(THREAD_NUMBER, address)
+ }
+
+ val pendingIntent = PendingIntent.getActivity(context, threadID, intent, PendingIntent.FLAG_UPDATE_CURRENT)
+
+ val builder = NotificationCompat.Builder(context, channelId)
+ .setContentTitle(address)
+ .setContentText(body)
+ .setSmallIcon(R.drawable.ic_launcher_foreground)
+ .setContentIntent(pendingIntent)
+ .setPriority(NotificationCompat.PRIORITY_MAX)
+ .setDefaults(Notification.DEFAULT_LIGHTS)
+ .setCategory(Notification.CATEGORY_MESSAGE)
+ .setAutoCancel(true)
+ .setSound(soundUri, AudioManager.STREAM_NOTIFICATION)
+ .setChannelId(channelId)
+
+ notificationManager.notify(threadID, builder.build())
+ }
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 81c7ed89..feb3f5ef 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,4 +3,7 @@
SMS Messenger
Type a messageā¦
Message has not been sent.
+
+
+ Received SMS