mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-06-05 21:49:22 +02:00
Add options to edit, delete, and send the message now
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
|
@@ -67,7 +67,7 @@ fun Context.sendMessage(text: String, addresses: List<String>, 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
|
||||
|
Reference in New Issue
Block a user