61 lines
2.5 KiB
Kotlin
61 lines
2.5 KiB
Kotlin
package com.simplemobiletools.smsmessenger.receivers
|
|
|
|
import android.content.BroadcastReceiver
|
|
import android.content.Context
|
|
import android.content.Intent
|
|
import android.os.Handler
|
|
import android.os.Looper
|
|
import android.os.PowerManager
|
|
import com.simplemobiletools.commons.extensions.showErrorToast
|
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
|
import com.simplemobiletools.smsmessenger.extensions.conversationsDB
|
|
import com.simplemobiletools.smsmessenger.extensions.deleteScheduledMessage
|
|
import com.simplemobiletools.smsmessenger.extensions.getAddresses
|
|
import com.simplemobiletools.smsmessenger.extensions.messagesDB
|
|
import com.simplemobiletools.smsmessenger.helpers.SCHEDULED_MESSAGE_ID
|
|
import com.simplemobiletools.smsmessenger.helpers.THREAD_ID
|
|
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
|
|
import com.simplemobiletools.smsmessenger.messaging.sendMessageCompat
|
|
|
|
class ScheduledMessageReceiver : BroadcastReceiver() {
|
|
|
|
override fun onReceive(context: Context, intent: Intent) {
|
|
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
|
|
val wakelock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "simple.messenger:scheduled.message.receiver")
|
|
wakelock.acquire(3000)
|
|
|
|
|
|
ensureBackgroundThread {
|
|
handleIntent(context, intent)
|
|
}
|
|
}
|
|
|
|
private fun handleIntent(context: Context, intent: Intent) {
|
|
val threadId = intent.getLongExtra(THREAD_ID, 0L)
|
|
val messageId = intent.getLongExtra(SCHEDULED_MESSAGE_ID, 0L)
|
|
val message = try {
|
|
context.messagesDB.getScheduledMessageWithId(threadId, messageId)
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
return
|
|
}
|
|
|
|
val addresses = message.participants.getAddresses()
|
|
val attachments = message.attachment?.attachments ?: emptyList()
|
|
|
|
try {
|
|
Handler(Looper.getMainLooper()).post {
|
|
context.sendMessageCompat(message.body, addresses, message.subscriptionId, attachments)
|
|
}
|
|
|
|
// delete temporary conversation and message as it's already persisted to the telephony db now
|
|
context.deleteScheduledMessage(messageId)
|
|
context.conversationsDB.deleteThreadId(messageId)
|
|
refreshMessages()
|
|
} catch (e: Exception) {
|
|
context.showErrorToast(e)
|
|
} catch (e: Error) {
|
|
context.showErrorToast(e.localizedMessage ?: context.getString(com.simplemobiletools.commons.R.string.unknown_error_occurred))
|
|
}
|
|
}
|
|
}
|