@@ -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