Add options to edit, delete, and send the message now

This commit is contained in:
Naveen
2022-10-04 01:10:20 +05:30
parent 5bfd4c5b3b
commit d6f71619cf
3 changed files with 55 additions and 13 deletions

View File

@@ -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
}
}
}

View File

@@ -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)
}

View File

@@ -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