From 35c3565fa169d3ec98a8283a2645c5001cab6793 Mon Sep 17 00:00:00 2001 From: timbze Date: Wed, 15 Dec 2021 17:40:34 -0600 Subject: [PATCH 1/4] Use Qksms send funtionality so messages are saved and text > 160 length is taken care of --- .../java/com/moez/QKSMS/feature/gateway/GatewayService.kt | 7 ++++++- .../src/main/java/com/moez/QKSMS/injection/AppComponent.kt | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayService.kt b/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayService.kt index 9f5d2c63e..dd431810d 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayService.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayService.kt @@ -12,6 +12,9 @@ import android.widget.Toast import androidx.core.app.NotificationCompat import com.moez.QKSMS.R import com.moez.QKSMS.common.util.NotificationManagerImpl +import com.moez.QKSMS.injection.appComponent +import com.moez.QKSMS.interactor.SendMessage +import javax.inject.Inject class GatewayService : Service(), GatewayServer.Handler { @@ -21,6 +24,7 @@ class GatewayService : Service(), GatewayServer.Handler { } private lateinit var gatewayServer: GatewayServer + @Inject lateinit var sendMessage: SendMessage private fun createNotification(context: Context): Notification { val intent = Intent(this, GatewayActivity::class.java) @@ -36,6 +40,7 @@ class GatewayService : Service(), GatewayServer.Handler { @Suppress("DEPRECATION") override fun onCreate() { + appComponent.inject(this) val key = PreferenceManager .getDefaultSharedPreferences(this) .getString(GatewayViewModel.PREFERENCE_KEY, null) @@ -58,7 +63,7 @@ class GatewayService : Service(), GatewayServer.Handler { override fun onSendMessage(phone: String, message: String): String? { return try { - SmsManager.getDefault().sendTextMessage(phone, null, message, null, null) + sendMessage.execute(SendMessage.Params(-1, 0L, listOf(phone), message)) null } catch (e: Exception) { Toast.makeText(this, e.message, Toast.LENGTH_LONG).show() diff --git a/presentation/src/main/java/com/moez/QKSMS/injection/AppComponent.kt b/presentation/src/main/java/com/moez/QKSMS/injection/AppComponent.kt index a1208c9b5..c61b81b9a 100644 --- a/presentation/src/main/java/com/moez/QKSMS/injection/AppComponent.kt +++ b/presentation/src/main/java/com/moez/QKSMS/injection/AppComponent.kt @@ -35,6 +35,7 @@ import com.moez.QKSMS.feature.blocking.messages.BlockedMessagesController import com.moez.QKSMS.feature.blocking.numbers.BlockedNumbersController import com.moez.QKSMS.feature.compose.editing.DetailedChipView import com.moez.QKSMS.feature.conversationinfo.injection.ConversationInfoComponent +import com.moez.QKSMS.feature.gateway.GatewayService import com.moez.QKSMS.feature.settings.SettingsController import com.moez.QKSMS.feature.settings.about.AboutController import com.moez.QKSMS.feature.settings.swipe.SwipeActionsController @@ -73,6 +74,7 @@ interface AppComponent { fun inject(dialog: QkDialog) fun inject(service: WidgetAdapter) + fun inject(service: GatewayService) /** * This can't use AndroidInjection, or else it will crash on pre-marshmallow devices From 7c845ce13d8ee0f4191a9bbed4000f960bb50099 Mon Sep 17 00:00:00 2001 From: timbze Date: Thu, 16 Dec 2021 10:32:01 -0600 Subject: [PATCH 2/4] Allow setting if message should save through API, false by default --- .../QKSMS/repository/MessageRepositoryImpl.kt | 29 ++++++++++++------- .../com/moez/QKSMS/interactor/SendMessage.kt | 5 ++-- .../QKSMS/repository/MessageRepository.kt | 8 +++-- .../QKSMS/feature/gateway/GatewayServer.kt | 6 ++-- .../QKSMS/feature/gateway/GatewayService.kt | 4 +-- 5 files changed, 33 insertions(+), 19 deletions(-) diff --git a/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt b/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt index a5438d346..abcab95f3 100644 --- a/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt +++ b/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt @@ -299,8 +299,10 @@ class MessageRepositoryImpl @Inject constructor( addresses: List, body: String, attachments: List, - delay: Int + delay: Int, + saveSentMessage: Boolean ) { + val saveMessage = delay > 0 || saveSentMessage val signedBody = when { prefs.signature.get().isEmpty() -> body body.isNotEmpty() -> body + '\n' + prefs.signature.get() @@ -323,7 +325,7 @@ class MessageRepositoryImpl @Inject constructor( if (addresses.size == 1 && attachments.isEmpty() && !forceMms) { // SMS if (delay > 0) { // With delay val sendTime = System.currentTimeMillis() + delay - val message = insertSentSms(subId, threadId, addresses.first(), strippedBody, sendTime) + val message = insertSentSms(subId, threadId, addresses.first(), strippedBody, sendTime, saveMessage) val intent = getIntentForDelayedSms(message.id) @@ -334,7 +336,7 @@ class MessageRepositoryImpl @Inject constructor( alarmManager.setExact(AlarmManager.RTC_WAKEUP, sendTime, intent) } } else { // No delay - val message = insertSentSms(subId, threadId, addresses.first(), strippedBody, now()) + val message = insertSentSms(subId, threadId, addresses.first(), strippedBody, now(), saveMessage) sendSms(message) } } else { // MMS @@ -444,15 +446,19 @@ class MessageRepositoryImpl @Inject constructor( ?: arrayListOf() val sentIntents = parts.map { - val intent = Intent(context, SmsSentReceiver::class.java).putExtra("id", message.id) - PendingIntent.getBroadcast(context, message.id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT) + if (message.id <= 0) null else { + val intent = Intent(context, SmsSentReceiver::class.java).putExtra("id", message.id) + PendingIntent.getBroadcast(context, message.id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT) + } } val deliveredIntents = parts.map { - val intent = Intent(context, SmsDeliveredReceiver::class.java).putExtra("id", message.id) - val pendingIntent = PendingIntent - .getBroadcast(context, message.id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT) - if (prefs.delivery.get()) pendingIntent else null + if (message.id <= 0) null else { + val intent = Intent(context, SmsDeliveredReceiver::class.java).putExtra("id", message.id) + val pendingIntent = PendingIntent + .getBroadcast(context, message.id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT) + if (prefs.delivery.get()) pendingIntent else null + } } try { @@ -498,8 +504,7 @@ class MessageRepositoryImpl @Inject constructor( return PendingIntent.getBroadcast(context, id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT) } - override fun insertSentSms(subId: Int, threadId: Long, address: String, body: String, date: Long): Message { - + override fun insertSentSms(subId: Int, threadId: Long, address: String, body: String, date: Long, saveMessage: Boolean): Message { // Insert the message to Realm val message = Message().apply { this.threadId = threadId @@ -514,6 +519,8 @@ class MessageRepositoryImpl @Inject constructor( read = true seen = true } + if (!saveMessage) return message + val realm = Realm.getDefaultInstance() var managedMessage: Message? = null realm.executeTransaction { managedMessage = realm.copyToRealmOrUpdate(message) } diff --git a/domain/src/main/java/com/moez/QKSMS/interactor/SendMessage.kt b/domain/src/main/java/com/moez/QKSMS/interactor/SendMessage.kt index 6018670dc..2a0a36508 100644 --- a/domain/src/main/java/com/moez/QKSMS/interactor/SendMessage.kt +++ b/domain/src/main/java/com/moez/QKSMS/interactor/SendMessage.kt @@ -40,7 +40,8 @@ class SendMessage @Inject constructor( val addresses: List, val body: String, val attachments: List = listOf(), - val delay: Int = 0 + val delay: Int = 0, + val saveSentMessage: Boolean = true ) override fun buildObservable(params: Params): Flowable<*> = Flowable.just(Unit) @@ -52,7 +53,7 @@ class SendMessage @Inject constructor( else -> params.threadId } messageRepo.sendMessage(params.subId, threadId, params.addresses, params.body, params.attachments, - params.delay) + params.delay, params.saveSentMessage) } .mapNotNull { // If the threadId wasn't provided, then it's probably because it doesn't exist in Realm. diff --git a/domain/src/main/java/com/moez/QKSMS/repository/MessageRepository.kt b/domain/src/main/java/com/moez/QKSMS/repository/MessageRepository.kt index a3ef7c19f..ea77b1d0d 100644 --- a/domain/src/main/java/com/moez/QKSMS/repository/MessageRepository.kt +++ b/domain/src/main/java/com/moez/QKSMS/repository/MessageRepository.kt @@ -62,13 +62,17 @@ interface MessageRepository { fun markUnread(vararg threadIds: Long) + /** + * @param saveSentMessage True by default. Will always be taken as true if delay is greater than 0 + */ fun sendMessage( subId: Int, threadId: Long, addresses: List, body: String, attachments: List, - delay: Int = 0 + delay: Int = 0, + saveSentMessage: Boolean = true ) /** @@ -83,7 +87,7 @@ interface MessageRepository { */ fun cancelDelayedSms(id: Long) - fun insertSentSms(subId: Int, threadId: Long, address: String, body: String, date: Long): Message + fun insertSentSms(subId: Int, threadId: Long, address: String, body: String, date: Long, saveMessage: Boolean): Message fun insertReceivedSms(subId: Int, address: String, body: String, sentTime: Long): Message diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayServer.kt b/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayServer.kt index 5bbbc8b3d..eacdf860c 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayServer.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayServer.kt @@ -15,7 +15,7 @@ class GatewayServer( ) : Server(port) { interface Handler { - fun onSendMessage(phone: String, message: String): String? + fun onSendMessage(phone: String, message: String, saveMessage: Boolean): String? } init { @@ -50,6 +50,7 @@ class GatewayServer( var phone: String? = null var message: String? = null + var saveMessage = false val reader = JsonReader(request.reader) reader.beginObject() @@ -57,11 +58,12 @@ class GatewayServer( when (reader.nextName()) { "to" -> phone = reader.nextString() "message" -> message = reader.nextString() + "saveMessage" -> saveMessage = reader.nextBoolean() } } val result = if (phone != null && message != null) { - handler.onSendMessage(phone, message) + handler.onSendMessage(phone, message, saveMessage) } else { "Missing phone or message" } diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayService.kt b/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayService.kt index dd431810d..8d02be8d9 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayService.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayService.kt @@ -61,9 +61,9 @@ class GatewayService : Service(), GatewayServer.Handler { return null } - override fun onSendMessage(phone: String, message: String): String? { + override fun onSendMessage(phone: String, message: String, saveMessage: Boolean): String? { return try { - sendMessage.execute(SendMessage.Params(-1, 0L, listOf(phone), message)) + sendMessage.execute(SendMessage.Params(-1, 0L, listOf(phone), message, saveSentMessage = saveMessage)) null } catch (e: Exception) { Toast.makeText(this, e.message, Toast.LENGTH_LONG).show() From 966cffe93cbb521d6a46261038ebc64cbd4a3df0 Mon Sep 17 00:00:00 2001 From: timbze Date: Thu, 16 Dec 2021 13:07:16 -0600 Subject: [PATCH 3/4] Align code per review request --- .../main/java/com/moez/QKSMS/feature/gateway/GatewayServer.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayServer.kt b/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayServer.kt index eacdf860c..a784ad6d4 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayServer.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/gateway/GatewayServer.kt @@ -56,8 +56,8 @@ class GatewayServer( reader.beginObject() while (reader.hasNext()) { when (reader.nextName()) { - "to" -> phone = reader.nextString() - "message" -> message = reader.nextString() + "to" -> phone = reader.nextString() + "message" -> message = reader.nextString() "saveMessage" -> saveMessage = reader.nextBoolean() } } From 2f94c39873a212207847af9f3810b6b97ebb4b97 Mon Sep 17 00:00:00 2001 From: timbze Date: Thu, 16 Dec 2021 13:29:42 -0600 Subject: [PATCH 4/4] Move parameters around per review request --- .../com/moez/QKSMS/repository/MessageRepositoryImpl.kt | 4 ++-- .../src/main/java/com/moez/QKSMS/interactor/SendMessage.kt | 4 ++-- .../java/com/moez/QKSMS/repository/MessageRepository.kt | 7 ++----- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt b/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt index abcab95f3..ff2d7f3d2 100644 --- a/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt +++ b/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt @@ -294,13 +294,13 @@ class MessageRepositoryImpl @Inject constructor( } override fun sendMessage( + saveSentMessage: Boolean, subId: Int, threadId: Long, addresses: List, body: String, attachments: List, - delay: Int, - saveSentMessage: Boolean + delay: Int ) { val saveMessage = delay > 0 || saveSentMessage val signedBody = when { diff --git a/domain/src/main/java/com/moez/QKSMS/interactor/SendMessage.kt b/domain/src/main/java/com/moez/QKSMS/interactor/SendMessage.kt index 2a0a36508..1e02ae5e8 100644 --- a/domain/src/main/java/com/moez/QKSMS/interactor/SendMessage.kt +++ b/domain/src/main/java/com/moez/QKSMS/interactor/SendMessage.kt @@ -52,8 +52,8 @@ class SendMessage @Inject constructor( 0L -> TelephonyCompat.getOrCreateThreadId(context, params.addresses.toSet()) else -> params.threadId } - messageRepo.sendMessage(params.subId, threadId, params.addresses, params.body, params.attachments, - params.delay, params.saveSentMessage) + messageRepo.sendMessage(params.saveSentMessage, params.subId, threadId, params.addresses, params.body, params.attachments, + params.delay) } .mapNotNull { // If the threadId wasn't provided, then it's probably because it doesn't exist in Realm. diff --git a/domain/src/main/java/com/moez/QKSMS/repository/MessageRepository.kt b/domain/src/main/java/com/moez/QKSMS/repository/MessageRepository.kt index ea77b1d0d..08a76ff71 100644 --- a/domain/src/main/java/com/moez/QKSMS/repository/MessageRepository.kt +++ b/domain/src/main/java/com/moez/QKSMS/repository/MessageRepository.kt @@ -62,17 +62,14 @@ interface MessageRepository { fun markUnread(vararg threadIds: Long) - /** - * @param saveSentMessage True by default. Will always be taken as true if delay is greater than 0 - */ fun sendMessage( + saveSentMessage: Boolean, subId: Int, threadId: Long, addresses: List, body: String, attachments: List, - delay: Int = 0, - saveSentMessage: Boolean = true + delay: Int = 0 ) /**