From d6f71619cf0d5da867f70a431bf2940e4ac9f8e0 Mon Sep 17 00:00:00 2001 From: Naveen Date: Tue, 4 Oct 2022 01:10:20 +0530 Subject: [PATCH] Add options to edit, delete, and send the message now --- .../smsmessenger/activities/ThreadActivity.kt | 48 ++++++++++++++----- .../smsmessenger/extensions/Context.kt | 1 + .../smsmessenger/helpers/Messaging.kt | 19 +++++++- 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index b44473b6..cf92dbab 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -75,6 +75,10 @@ class ThreadActivity : SimpleActivity() { private val TYPE_TAKE_PHOTO = 12 private val TYPE_CHOOSE_PHOTO = 13 + private val TYPE_EDIT = 14 + private val TYPE_SEND = 15 + private val TYPE_DELETE = 16 + private var threadId = 0L private var currentSIMCardIndex = 0 private var isActivityVisible = false @@ -977,6 +981,7 @@ class ThreadActivity : SimpleActivity() { } clearCurrentMessage() hideScheduleSendUi() + scheduledMessage = null if (!refreshedSinceSent) { refreshMessages() @@ -1213,26 +1218,49 @@ class ThreadActivity : SimpleActivity() { } private fun showScheduledMessageInfo(message: Message) { - // todo: maybe show options to edit, delete, and send the message now - editScheduledMessage(message) + val items = arrayListOf( + RadioItem(TYPE_EDIT, getString(R.string.update_message)), + RadioItem(TYPE_SEND, getString(R.string.send_now)), + RadioItem(TYPE_DELETE, getString(R.string.delete)) + ) + RadioGroupDialog(this, items) { + when (it as Int) { + TYPE_DELETE -> cancelScheduledMessageAndRefresh(message.id) + TYPE_EDIT -> editScheduledMessage(message) + TYPE_SEND -> { + extractAttachments(message) + sendNormalMessage(message.body, message.subscriptionId) + cancelScheduledMessageAndRefresh(message.id) + } + } + } } - private fun editScheduledMessage(message: Message) { - scheduledMessage = message - clearCurrentMessage() - thread_type_message.setText(message.body) - + private fun extractAttachments(message: Message) { val messageAttachment = message.attachment if (messageAttachment != null) { for (attachment in messageAttachment.attachments) { addAttachment(attachment.getUri()) } } + } + private fun editScheduledMessage(message: Message) { + scheduledMessage = message + clearCurrentMessage() + thread_type_message.setText(message.body) + extractAttachments(message) scheduledDateTime = DateTime(message.millis()) showScheduleSendUi() } + private fun cancelScheduledMessageAndRefresh(messageId: Long) { + ensureBackgroundThread { + deleteScheduledMessage(messageId) + refreshMessages() + } + } + private fun launchScheduleSendDialog(originalDt: DateTime? = null) { ScheduleSendDialog(this, originalDt) { newDt -> if (newDt != null) { @@ -1259,10 +1287,8 @@ class ThreadActivity : SimpleActivity() { setOnClickListener { hideScheduleSendUi() if (scheduledMessage != null) { - ensureBackgroundThread { - deleteScheduledMessage(scheduledMessage!!.id) - refreshMessages() - } + cancelScheduledMessageAndRefresh(scheduledMessage!!.id) + scheduledMessage = null } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index 25ffe9f6..b95f2af1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -609,6 +609,7 @@ fun Context.deleteMessage(id: Long, isMMS: Boolean) { fun Context.deleteScheduledMessage(messageId: Long) { try { messagesDB.delete(messageId) + cancelScheduleSendPendingIntent(messageId) } catch (e: Exception) { showErrorToast(e) } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Messaging.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Messaging.kt index b893fc11..fb048c6c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Messaging.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Messaging.kt @@ -67,7 +67,7 @@ fun Context.sendMessage(text: String, addresses: List, subscriptionId: I } } -fun Context.scheduleMessage(message: Message) { +fun Context.getScheduleSendPendingIntent(message: Message): PendingIntent { val intent = Intent(this, ScheduledMessageReceiver::class.java) intent.putExtra(THREAD_ID, message.threadId) intent.putExtra(SCHEDULED_MESSAGE_ID, message.id) @@ -76,13 +76,28 @@ fun Context.scheduleMessage(message: Message) { if (isMarshmallowPlus()) { flags = flags or PendingIntent.FLAG_IMMUTABLE } - val pendingIntent = PendingIntent.getBroadcast(this, message.id.toInt(), intent, flags) + + return PendingIntent.getBroadcast(this, message.id.toInt(), intent, flags) +} + +fun Context.scheduleMessage(message: Message) { + val pendingIntent = getScheduleSendPendingIntent(message) val triggerAtMillis = message.millis() val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager AlarmManagerCompat.setExactAndAllowWhileIdle(alarmManager, AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent) } +fun Context.cancelScheduleSendPendingIntent(messageId: Long) { + val intent = Intent(this, ScheduledMessageReceiver::class.java) + var flags = PendingIntent.FLAG_UPDATE_CURRENT + if (isMarshmallowPlus()) { + flags = flags or PendingIntent.FLAG_IMMUTABLE + } + + PendingIntent.getBroadcast(this, messageId.toInt(), intent, flags).cancel() +} + fun Context.isLongMmsMessage(text: String): Boolean { val settings = getSendMessageSettings() return Utils.getNumPages(settings, text) > settings.sendLongAsMmsAfter