Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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<PendingIntent>()
val deliveredIntents = ArrayList<PendingIntent>()

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)))
}
Expand Down
33 changes: 21 additions & 12 deletions android/app/src/main/java/com/httpsms/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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)

Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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")
}

Expand Down Expand Up @@ -304,6 +312,7 @@ class MainActivity : AppCompatActivity() {
return@run
}
Toast.makeText(context, "Heartbeat Sent", Toast.LENGTH_SHORT).show()

setLastHeartbeatTimestamp(this)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
}