Skip to content

Commit a9a138e

Browse files
authored
Merge pull request #37 from NdoleStudio/36/add-sticky-notification-for-android-13
36/add sticky notification for android 13
2 parents 5310c1b + ed548be commit a9a138e

File tree

3 files changed

+28
-16
lines changed

3 files changed

+28
-16
lines changed

android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,18 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
116116

117117
Timber.d("sending SMS for message with ID [${message.id}]")
118118
return try {
119-
// The trick here is to listen to the intent only on the last part
120119
val sentIntents = ArrayList<PendingIntent>()
121120
val deliveredIntents = ArrayList<PendingIntent>()
122121

123122
for (i in 0 until parts.size) {
124123
var id = "${message.id}.$i"
124+
125+
// Listen for 'delivered' and 'sent' intents only on the last part in the
126+
// multipart SMS message
125127
if (i == parts.size -1) {
126128
id = message.id
127129
}
130+
128131
sentIntents.add(createPendingIntent(id, SmsManagerService.sentAction(id)))
129132
deliveredIntents.add(createPendingIntent(id, SmsManagerService.deliveredAction(id)))
130133
}

android/app/src/main/java/com/httpsms/MainActivity.kt

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.app.NotificationManager
77
import android.content.Context
88
import android.content.Intent
99
import android.content.pm.PackageManager
10+
import android.os.Build
1011
import android.os.Bundle
1112
import android.telephony.PhoneNumberUtils
1213
import android.view.View
@@ -15,6 +16,8 @@ import android.widget.Toast
1516
import androidx.activity.result.contract.ActivityResultContracts
1617
import androidx.appcompat.app.AppCompatActivity
1718
import androidx.core.app.ActivityCompat
19+
import androidx.core.app.NotificationCompat
20+
import androidx.core.app.NotificationManagerCompat
1821
import androidx.lifecycle.MutableLiveData
1922
import androidx.work.ExistingPeriodicWorkPolicy
2023
import androidx.work.PeriodicWorkRequestBuilder
@@ -26,6 +29,7 @@ import com.google.android.material.switchmaterial.SwitchMaterial
2629
import com.httpsms.services.StickyNotificationService
2730
import com.httpsms.worker.HeartbeatWorker
2831
import okhttp3.internal.format
32+
import okhttp3.internal.notify
2933
import timber.log.Timber
3034
import java.time.Instant
3135
import java.time.ZoneId
@@ -37,9 +41,6 @@ import java.util.concurrent.TimeUnit
3741

3842

3943
class MainActivity : AppCompatActivity() {
40-
private val sentReceiver = SentReceiver()
41-
private val deliveredReceiver = DeliveredReceiver()
42-
4344
override fun onCreate(savedInstanceState: Bundle?) {
4445
super.onCreate(savedInstanceState)
4546

@@ -224,7 +225,10 @@ class MainActivity : AppCompatActivity() {
224225
) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
225226
context,
226227
Manifest.permission.READ_PHONE_STATE
227-
) == PackageManager.PERMISSION_GRANTED
228+
) == PackageManager.PERMISSION_GRANTED && (Build.VERSION.SDK_INT < 33 || ActivityCompat.checkSelfPermission(
229+
context,
230+
Manifest.permission.POST_NOTIFICATIONS
231+
) == PackageManager.PERMISSION_GRANTED)
228232
) {
229233
return true
230234
}
@@ -266,16 +270,20 @@ class MainActivity : AppCompatActivity() {
266270
}
267271
}
268272

269-
requestPermissionLauncher.launch(
270-
arrayOf(
271-
Manifest.permission.SEND_SMS,
272-
Manifest.permission.RECEIVE_SMS,
273-
READ_PHONE_NUMBERS,
274-
Manifest.permission.READ_SMS,
275-
Manifest.permission.READ_PHONE_STATE
276-
)
273+
var permissions = arrayOf(
274+
Manifest.permission.SEND_SMS,
275+
Manifest.permission.RECEIVE_SMS,
276+
READ_PHONE_NUMBERS,
277+
Manifest.permission.READ_SMS,
278+
Manifest.permission.READ_PHONE_STATE
277279
)
278280

281+
if(Build.VERSION.SDK_INT >= 33) {
282+
permissions += Manifest.permission.POST_NOTIFICATIONS
283+
}
284+
285+
requestPermissionLauncher.launch(permissions)
286+
279287
Timber.d("creating permissions launcher")
280288
}
281289

@@ -304,6 +312,7 @@ class MainActivity : AppCompatActivity() {
304312
return@run
305313
}
306314
Toast.makeText(context, "Heartbeat Sent", Toast.LENGTH_SHORT).show()
315+
307316
setLastHeartbeatTimestamp(this)
308317
}
309318
}

android/app/src/main/java/com/httpsms/services/StickyNotificationService.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ class StickyNotificationService: Service() {
6868
)
6969

7070
return builder
71-
.setContentTitle("HTTP SMS")
72-
.setContentText("Service running in background")
71+
.setContentTitle("SMS Listener")
72+
.setContentText("HTTP SMS is listening for sent and received SMS messages in the background.")
7373
.setContentIntent(pendingIntent)
74+
.setOngoing(true)
7475
.setSmallIcon(R.drawable.ic_stat_name)
75-
.setTicker("Ticker text")
7676
.build()
7777
}
7878
}

0 commit comments

Comments
 (0)