diff --git a/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt b/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt index 3cf70ad6..6be019ce 100644 --- a/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt +++ b/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt @@ -116,15 +116,18 @@ class MyFirebaseMessagingService : FirebaseMessagingService() { Timber.d("sending SMS for message with ID [${message.id}]") return try { - // The trick here is to listen to the intent only on the last part val sentIntents = ArrayList() val deliveredIntents = ArrayList() for (i in 0 until parts.size) { var id = "${message.id}.$i" + + // Listen for 'delivered' and 'sent' intents only on the last part in the + // multipart SMS message if (i == parts.size -1) { id = message.id } + sentIntents.add(createPendingIntent(id, SmsManagerService.sentAction(id))) deliveredIntents.add(createPendingIntent(id, SmsManagerService.deliveredAction(id))) } diff --git a/android/app/src/main/java/com/httpsms/MainActivity.kt b/android/app/src/main/java/com/httpsms/MainActivity.kt index 1ac91c40..2275849b 100644 --- a/android/app/src/main/java/com/httpsms/MainActivity.kt +++ b/android/app/src/main/java/com/httpsms/MainActivity.kt @@ -7,6 +7,7 @@ import android.app.NotificationManager import android.content.Context import android.content.Intent import android.content.pm.PackageManager +import android.os.Build import android.os.Bundle import android.telephony.PhoneNumberUtils import android.view.View @@ -15,6 +16,8 @@ import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat import androidx.lifecycle.MutableLiveData import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.PeriodicWorkRequestBuilder @@ -26,6 +29,7 @@ import com.google.android.material.switchmaterial.SwitchMaterial import com.httpsms.services.StickyNotificationService import com.httpsms.worker.HeartbeatWorker import okhttp3.internal.format +import okhttp3.internal.notify import timber.log.Timber import java.time.Instant import java.time.ZoneId @@ -37,9 +41,6 @@ import java.util.concurrent.TimeUnit class MainActivity : AppCompatActivity() { - private val sentReceiver = SentReceiver() - private val deliveredReceiver = DeliveredReceiver() - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -224,7 +225,10 @@ class MainActivity : AppCompatActivity() { ) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( context, Manifest.permission.READ_PHONE_STATE - ) == PackageManager.PERMISSION_GRANTED + ) == PackageManager.PERMISSION_GRANTED && (Build.VERSION.SDK_INT < 33 || ActivityCompat.checkSelfPermission( + context, + Manifest.permission.POST_NOTIFICATIONS + ) == PackageManager.PERMISSION_GRANTED) ) { return true } @@ -266,16 +270,20 @@ class MainActivity : AppCompatActivity() { } } - requestPermissionLauncher.launch( - arrayOf( - Manifest.permission.SEND_SMS, - Manifest.permission.RECEIVE_SMS, - READ_PHONE_NUMBERS, - Manifest.permission.READ_SMS, - Manifest.permission.READ_PHONE_STATE - ) + var permissions = arrayOf( + Manifest.permission.SEND_SMS, + Manifest.permission.RECEIVE_SMS, + READ_PHONE_NUMBERS, + Manifest.permission.READ_SMS, + Manifest.permission.READ_PHONE_STATE ) + if(Build.VERSION.SDK_INT >= 33) { + permissions += Manifest.permission.POST_NOTIFICATIONS + } + + requestPermissionLauncher.launch(permissions) + Timber.d("creating permissions launcher") } @@ -304,6 +312,7 @@ class MainActivity : AppCompatActivity() { return@run } Toast.makeText(context, "Heartbeat Sent", Toast.LENGTH_SHORT).show() + setLastHeartbeatTimestamp(this) } } diff --git a/android/app/src/main/java/com/httpsms/services/StickyNotificationService.kt b/android/app/src/main/java/com/httpsms/services/StickyNotificationService.kt index 0adc893d..c47d7658 100644 --- a/android/app/src/main/java/com/httpsms/services/StickyNotificationService.kt +++ b/android/app/src/main/java/com/httpsms/services/StickyNotificationService.kt @@ -68,11 +68,11 @@ class StickyNotificationService: Service() { ) return builder - .setContentTitle("HTTP SMS") - .setContentText("Service running in background") + .setContentTitle("SMS Listener") + .setContentText("HTTP SMS is listening for sent and received SMS messages in the background.") .setContentIntent(pendingIntent) + .setOngoing(true) .setSmallIcon(R.drawable.ic_stat_name) - .setTicker("Ticker text") .build() } }