Skip to content

Commit 1e7bda7

Browse files
committed
refactor: centralize SmsManager fallback logic for EmergencyNumber NPE
1 parent da36572 commit 1e7bda7

1 file changed

Lines changed: 23 additions & 19 deletions

File tree

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

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,31 +45,41 @@ class SmsManagerService {
4545
}
4646

4747
fun sendMultipartMessage(context: Context, contact: String, parts: ArrayList<String>, sim: String, sendIntents: ArrayList<PendingIntent>, deliveryIntents: ArrayList<PendingIntent>) {
48-
try {
49-
getSmsManager(context, sim).sendMultipartTextMessage(contact, null, parts, sendIntents, deliveryIntents)
50-
} catch (e: NullPointerException) {
51-
if (e.message?.contains("EmergencyNumber.getNumber()") == true) {
52-
Timber.w(e, "Caught EmergencyNumber NPE, falling back to default SmsManager")
53-
getDefaultSmsManager(context).sendMultipartTextMessage(contact, null, parts, sendIntents, deliveryIntents)
54-
} else {
55-
throw e
56-
}
48+
runSmsAction(context, sim) { smsManager ->
49+
smsManager.sendMultipartTextMessage(contact, null, parts, sendIntents, deliveryIntents)
50+
}
51+
}
52+
53+
fun sendTextMessage(context: Context, contact: String, content: String, sim: String, sentIntent: PendingIntent, deliveryIntent: PendingIntent) {
54+
runSmsAction(context, sim) { smsManager ->
55+
smsManager.sendTextMessage(contact, null, content, sentIntent, deliveryIntent)
56+
}
57+
}
58+
59+
// Wrapper for the smsManager's sendMultimediaMessage
60+
fun sendMultimediaMessage(context: Context, pduUri: android.net.Uri, sim: String, sentIntent: PendingIntent) {
61+
runSmsAction(context, sim) { smsManager ->
62+
smsManager.sendMultimediaMessage(context, pduUri, null, null, sentIntent)
5763
}
5864
}
5965

60-
fun sendTextMessage(context: Context, contact: String, content: String, sim: String, sentIntent:PendingIntent, deliveryIntent: PendingIntent) {
66+
private fun runSmsAction(context: Context, sim: String, action: (SmsManager) -> Unit) {
6167
try {
62-
getSmsManager(context, sim).sendTextMessage(contact, null, content, sentIntent, deliveryIntent)
68+
action(getSmsManager(context, sim))
6369
} catch (e: NullPointerException) {
64-
if (e.message?.contains("EmergencyNumber.getNumber()") == true) {
70+
if (e.isEmergencyNumberBug()) {
6571
Timber.w(e, "Caught EmergencyNumber NPE, falling back to default SmsManager")
66-
getDefaultSmsManager(context).sendTextMessage(contact, null, content, sentIntent, deliveryIntent)
72+
action(getDefaultSmsManager(context))
6773
} else {
6874
throw e
6975
}
7076
}
7177
}
7278

79+
private fun Throwable.isEmergencyNumberBug(): Boolean {
80+
return this is NullPointerException && this.message?.contains("EmergencyNumber.getNumber()") == true
81+
}
82+
7383
@Suppress("DEPRECATION")
7484
private fun getDefaultSmsManager(context: Context): SmsManager {
7585
return if (Build.VERSION.SDK_INT >= 31) {
@@ -109,10 +119,4 @@ class SmsManagerService {
109119
context.getSystemService(SmsManager::class.java).createForSubscriptionId(subscriptionId)
110120
}
111121
}
112-
113-
// Wrapper for the smsManager's sendMultimediaMessage
114-
fun sendMultimediaMessage(context: Context, pduUri: android.net.Uri, sim: String, sentIntent: PendingIntent) {
115-
val smsManager = getSmsManager(context, sim)
116-
smsManager.sendMultimediaMessage(context, pduUri, null, null, sentIntent)
117-
}
118122
}

0 commit comments

Comments
 (0)