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_TAKE_PHOTO = 12
|
||||||
private val TYPE_CHOOSE_PHOTO = 13
|
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 threadId = 0L
|
||||||
private var currentSIMCardIndex = 0
|
private var currentSIMCardIndex = 0
|
||||||
private var isActivityVisible = false
|
private var isActivityVisible = false
|
||||||
@@ -977,6 +981,7 @@ class ThreadActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
clearCurrentMessage()
|
clearCurrentMessage()
|
||||||
hideScheduleSendUi()
|
hideScheduleSendUi()
|
||||||
|
scheduledMessage = null
|
||||||
|
|
||||||
if (!refreshedSinceSent) {
|
if (!refreshedSinceSent) {
|
||||||
refreshMessages()
|
refreshMessages()
|
||||||
@@ -1213,26 +1218,49 @@ class ThreadActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun showScheduledMessageInfo(message: Message) {
|
private fun showScheduledMessageInfo(message: Message) {
|
||||||
// todo: maybe show options to edit, delete, and send the message now
|
val items = arrayListOf(
|
||||||
editScheduledMessage(message)
|
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) {
|
private fun extractAttachments(message: Message) {
|
||||||
scheduledMessage = message
|
|
||||||
clearCurrentMessage()
|
|
||||||
thread_type_message.setText(message.body)
|
|
||||||
|
|
||||||
val messageAttachment = message.attachment
|
val messageAttachment = message.attachment
|
||||||
if (messageAttachment != null) {
|
if (messageAttachment != null) {
|
||||||
for (attachment in messageAttachment.attachments) {
|
for (attachment in messageAttachment.attachments) {
|
||||||
addAttachment(attachment.getUri())
|
addAttachment(attachment.getUri())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun editScheduledMessage(message: Message) {
|
||||||
|
scheduledMessage = message
|
||||||
|
clearCurrentMessage()
|
||||||
|
thread_type_message.setText(message.body)
|
||||||
|
extractAttachments(message)
|
||||||
scheduledDateTime = DateTime(message.millis())
|
scheduledDateTime = DateTime(message.millis())
|
||||||
showScheduleSendUi()
|
showScheduleSendUi()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun cancelScheduledMessageAndRefresh(messageId: Long) {
|
||||||
|
ensureBackgroundThread {
|
||||||
|
deleteScheduledMessage(messageId)
|
||||||
|
refreshMessages()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun launchScheduleSendDialog(originalDt: DateTime? = null) {
|
private fun launchScheduleSendDialog(originalDt: DateTime? = null) {
|
||||||
ScheduleSendDialog(this, originalDt) { newDt ->
|
ScheduleSendDialog(this, originalDt) { newDt ->
|
||||||
if (newDt != null) {
|
if (newDt != null) {
|
||||||
@@ -1259,10 +1287,8 @@ class ThreadActivity : SimpleActivity() {
|
|||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
hideScheduleSendUi()
|
hideScheduleSendUi()
|
||||||
if (scheduledMessage != null) {
|
if (scheduledMessage != null) {
|
||||||
ensureBackgroundThread {
|
cancelScheduledMessageAndRefresh(scheduledMessage!!.id)
|
||||||
deleteScheduledMessage(scheduledMessage!!.id)
|
scheduledMessage = null
|
||||||
refreshMessages()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -609,6 +609,7 @@ fun Context.deleteMessage(id: Long, isMMS: Boolean) {
|
|||||||
fun Context.deleteScheduledMessage(messageId: Long) {
|
fun Context.deleteScheduledMessage(messageId: Long) {
|
||||||
try {
|
try {
|
||||||
messagesDB.delete(messageId)
|
messagesDB.delete(messageId)
|
||||||
|
cancelScheduleSendPendingIntent(messageId)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
showErrorToast(e)
|
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)
|
val intent = Intent(this, ScheduledMessageReceiver::class.java)
|
||||||
intent.putExtra(THREAD_ID, message.threadId)
|
intent.putExtra(THREAD_ID, message.threadId)
|
||||||
intent.putExtra(SCHEDULED_MESSAGE_ID, message.id)
|
intent.putExtra(SCHEDULED_MESSAGE_ID, message.id)
|
||||||
@@ -76,13 +76,28 @@ fun Context.scheduleMessage(message: Message) {
|
|||||||
if (isMarshmallowPlus()) {
|
if (isMarshmallowPlus()) {
|
||||||
flags = flags or PendingIntent.FLAG_IMMUTABLE
|
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 triggerAtMillis = message.millis()
|
||||||
|
|
||||||
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
||||||
AlarmManagerCompat.setExactAndAllowWhileIdle(alarmManager, AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent)
|
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 {
|
fun Context.isLongMmsMessage(text: String): Boolean {
|
||||||
val settings = getSendMessageSettings()
|
val settings = getSendMessageSettings()
|
||||||
return Utils.getNumPages(settings, text) > settings.sendLongAsMmsAfter
|
return Utils.getNumPages(settings, text) > settings.sendLongAsMmsAfter
|
||||||
|
Reference in New Issue
Block a user