Skip to content

Commit 8df8cf3

Browse files
committed
Allow selecting which SIM to use to send messages NdoleStudio#130
1 parent 95f3f52 commit 8df8cf3

3 files changed

Lines changed: 27 additions & 9 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
131131
sentIntents.add(createPendingIntent(id, SmsManagerService.sentAction(id)))
132132
deliveredIntents.add(createPendingIntent(id, SmsManagerService.deliveredAction(id)))
133133
}
134-
SmsManagerService().sendMultipartMessage(this.applicationContext,message.contact, parts, sentIntents, deliveredIntents)
134+
SmsManagerService().sendMultipartMessage(this.applicationContext,message.contact, parts, message.sim, sentIntents, deliveredIntents)
135135
Timber.d("sent SMS for message with ID [${message.id}] in [${parts.size}] parts")
136136
Result.success()
137137
} catch (e: Exception) {
@@ -185,7 +185,7 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
185185
private fun sendMessage(message: Message, sentIntent: PendingIntent, deliveredIntent: PendingIntent) {
186186
Timber.d("sending SMS for message with ID [${message.id}]")
187187
try {
188-
SmsManagerService().sendTextMessage(this.applicationContext,message.contact, message.content, sentIntent, deliveredIntent)
188+
SmsManagerService().sendTextMessage(this.applicationContext,message.contact, message.content, message.sim, sentIntent, deliveredIntent)
189189
} catch (e: Exception) {
190190
Timber.e(e)
191191
Timber.d("could not send SMS for message with ID [${message.id}]")

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ data class ResponseMessage (
2222
data class Message (
2323
val contact: String,
2424
val content: String,
25+
val sim: String,
2526

2627
@Json(name = "created_at")
2728
val createdAt: String,

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

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.httpsms
22

3+
import android.annotation.SuppressLint
34
import android.app.PendingIntent
45
import android.content.Context
56
import android.os.Build
67
import android.telephony.SmsManager
8+
import android.telephony.SubscriptionManager
79

810

911
class SmsManagerService {
@@ -24,20 +26,35 @@ class SmsManagerService {
2426
return getSmsManager(context).divideMessage(content)
2527
}
2628

27-
fun sendMultipartMessage(context: Context, contact: String, parts: ArrayList<String>, sendIntents: ArrayList<PendingIntent>, deliveryIntents: ArrayList<PendingIntent>) {
28-
getSmsManager(context).sendMultipartTextMessage(contact, null, parts, sendIntents, deliveryIntents)
29+
fun sendMultipartMessage(context: Context, contact: String, parts: ArrayList<String>, sim: String, sendIntents: ArrayList<PendingIntent>, deliveryIntents: ArrayList<PendingIntent>) {
30+
getSmsManager(context, sim).sendMultipartTextMessage(contact, null, parts, sendIntents, deliveryIntents)
2931
}
3032

31-
fun sendTextMessage(context: Context, contact: String, content: String, sentIntent:PendingIntent, deliveryIntent: PendingIntent) {
32-
getSmsManager(context).sendTextMessage(contact, null, content, sentIntent, deliveryIntent)
33+
fun sendTextMessage(context: Context, contact: String, content: String, sim: String, sentIntent:PendingIntent, deliveryIntent: PendingIntent) {
34+
getSmsManager(context, sim).sendTextMessage(contact, null, content, sentIntent, deliveryIntent)
3335
}
3436

3537
@Suppress("DEPRECATION")
36-
private fun getSmsManager(context: Context): SmsManager {
38+
@SuppressLint("MissingPermission")
39+
private fun getSmsManager(context: Context, sim: String = "DEFAULT"): SmsManager {
40+
val localSubscriptionManager: SubscriptionManager = if (Build.VERSION.SDK_INT < 31) {
41+
SubscriptionManager.from(context)
42+
} else {
43+
context.getSystemService(SubscriptionManager::class.java)
44+
}
45+
46+
val subscriptionId = if (sim == "ISMS" && localSubscriptionManager.activeSubscriptionInfoList.size > 0) {
47+
localSubscriptionManager.activeSubscriptionInfoList[0].subscriptionId
48+
} else if (sim == "ISMS2" && localSubscriptionManager.activeSubscriptionInfoList.size > 1) {
49+
localSubscriptionManager.activeSubscriptionInfoList[1].subscriptionId
50+
} else{
51+
SubscriptionManager.getDefaultSmsSubscriptionId()
52+
}
53+
3754
return if (Build.VERSION.SDK_INT < 31) {
38-
SmsManager.getDefault()
55+
SmsManager.getSmsManagerForSubscriptionId(subscriptionId)
3956
} else {
40-
context.getSystemService(SmsManager::class.java)
57+
context.getSystemService(SmsManager::class.java).createForSubscriptionId(subscriptionId)
4158
}
4259
}
4360
}

0 commit comments

Comments
 (0)