From 05718aa6c8f3394744c44e51507762cd2055275c Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 21 Sep 2024 17:11:13 -0700 Subject: [PATCH] Share code for sending messages --- .../traccar/gateway/GatewayMessagingService.kt | 11 +---------- .../kotlin/org/traccar/gateway/GatewayServer.kt | 8 ++++---- .../kotlin/org/traccar/gateway/GatewayService.kt | 5 ++--- .../org/traccar/gateway/GatewayServiceUtil.kt | 15 +++++++++++++++ 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/app/src/traccar/kotlin/org/traccar/gateway/GatewayMessagingService.kt b/app/src/traccar/kotlin/org/traccar/gateway/GatewayMessagingService.kt index 2d881ee88..adead4428 100644 --- a/app/src/traccar/kotlin/org/traccar/gateway/GatewayMessagingService.kt +++ b/app/src/traccar/kotlin/org/traccar/gateway/GatewayMessagingService.kt @@ -3,8 +3,6 @@ package org.traccar.gateway import android.annotation.SuppressLint import android.os.Handler import android.os.Looper -import android.telephony.SmsManager -import android.telephony.SubscriptionManager import android.widget.Toast import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.RemoteMessage @@ -21,14 +19,7 @@ class GatewayMessagingService : FirebaseMessagingService() { val slot = remoteMessage.data["slot"]?.toInt() if (phone != null && message != null) { try { - val smsManager = if (slot != null) { - val subscriptionManager = getSystemService(SubscriptionManager::class.java) - val subscriptionInfo = subscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(slot) - SmsManager.getSmsManagerForSubscriptionId(subscriptionInfo.subscriptionId) - } else { - SmsManager.getDefault() - } - smsManager.sendTextMessage(phone, null, message, null, null) + GatewayServiceUtil.sendMessage(this, phone, message, slot) } catch (e: Exception) { handler.post { Toast.makeText(this, e.message, Toast.LENGTH_LONG).show() diff --git a/app/src/traccar/kotlin/org/traccar/gateway/GatewayServer.kt b/app/src/traccar/kotlin/org/traccar/gateway/GatewayServer.kt index 837a8db30..8dd0261cc 100644 --- a/app/src/traccar/kotlin/org/traccar/gateway/GatewayServer.kt +++ b/app/src/traccar/kotlin/org/traccar/gateway/GatewayServer.kt @@ -15,7 +15,7 @@ class GatewayServer( ) : Server(port) { interface Handler { - fun onSendMessage(phone: String, message: String, saveMessage: Boolean): String? + fun onSendMessage(phone: String, message: String, slot: Int?): String? } init { @@ -50,7 +50,7 @@ class GatewayServer( var phone: String? = null var message: String? = null - var saveMessage = false + var slot: Int? = null val reader = JsonReader(request.reader) reader.beginObject() @@ -58,12 +58,12 @@ class GatewayServer( when (reader.nextName()) { "to" -> phone = reader.nextString() "message" -> message = reader.nextString() - "saveMessage" -> saveMessage = reader.nextBoolean() + "slot" -> slot = reader.nextInt() } } val result = if (phone != null && message != null) { - handler.onSendMessage(phone, message, saveMessage) + handler.onSendMessage(phone, message, slot) } else { "Missing phone or message" } diff --git a/app/src/traccar/kotlin/org/traccar/gateway/GatewayService.kt b/app/src/traccar/kotlin/org/traccar/gateway/GatewayService.kt index 82db2660f..d9440f2d0 100644 --- a/app/src/traccar/kotlin/org/traccar/gateway/GatewayService.kt +++ b/app/src/traccar/kotlin/org/traccar/gateway/GatewayService.kt @@ -9,7 +9,6 @@ import android.content.pm.ServiceInfo import android.os.Build import android.os.IBinder import android.preference.PreferenceManager -import android.telephony.SmsManager import android.widget.Toast import androidx.core.app.NotificationCompat import com.simplemobiletools.smsmessenger.R @@ -76,9 +75,9 @@ class GatewayService : Service(), GatewayServer.Handler { return null } - override fun onSendMessage(phone: String, message: String, saveMessage: Boolean): String? { + override fun onSendMessage(phone: String, message: String, slot: Int?): String? { return try { - SmsManager.getDefault().sendTextMessage(phone, null, message, null, null) + GatewayServiceUtil.sendMessage(this, phone, message, slot) null } catch (e: Exception) { Toast.makeText(this, e.message, Toast.LENGTH_LONG).show() diff --git a/app/src/traccar/kotlin/org/traccar/gateway/GatewayServiceUtil.kt b/app/src/traccar/kotlin/org/traccar/gateway/GatewayServiceUtil.kt index 17d73f583..ea82d0539 100644 --- a/app/src/traccar/kotlin/org/traccar/gateway/GatewayServiceUtil.kt +++ b/app/src/traccar/kotlin/org/traccar/gateway/GatewayServiceUtil.kt @@ -1,7 +1,10 @@ package org.traccar.gateway +import android.annotation.SuppressLint import android.app.ActivityManager import android.content.Context +import android.telephony.SmsManager +import android.telephony.SubscriptionManager @Suppress("DEPRECATION") object GatewayServiceUtil { @@ -16,4 +19,16 @@ object GatewayServiceUtil { return false } + @SuppressLint("MissingPermission") + fun sendMessage(context: Context, phone: String, message: String, slot: Int?) { + val smsManager = if (slot != null) { + val subscriptionManager = context.getSystemService(SubscriptionManager::class.java) + val subscriptionInfo = subscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(slot) + SmsManager.getSmsManagerForSubscriptionId(subscriptionInfo.subscriptionId) + } else { + SmsManager.getDefault() + } + smsManager.sendTextMessage(phone, null, message, null, null) + } + }