forked from upstream-mirrors/quik
Retry sending failed MMS
This commit is contained in:
@@ -39,7 +39,7 @@ class SendSmsReceiver : BroadcastReceiver() {
|
||||
?.let(messageRepo::getMessage)
|
||||
?.let { message ->
|
||||
val result = goAsync()
|
||||
retrySending.execute(message) { result.finish() }
|
||||
retrySending.execute(message.id) { result.finish() }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@ import android.webkit.MimeTypeMap
|
||||
import androidx.core.content.contentValuesOf
|
||||
import com.google.android.mms.ContentType
|
||||
import com.google.android.mms.MMSPart
|
||||
import com.google.android.mms.pdu_alt.MultimediaMessagePdu
|
||||
import com.google.android.mms.pdu_alt.PduPersister
|
||||
import com.klinker.android.send_message.SmsManagerFactory
|
||||
import com.klinker.android.send_message.StripAccents
|
||||
import com.klinker.android.send_message.Transaction
|
||||
@@ -330,8 +332,7 @@ class MessageRepositoryImpl @Inject constructor(
|
||||
.map { attachment -> attachment.vCard.toByteArray() }
|
||||
.map { vCard -> MMSPart("contact", ContentType.TEXT_VCARD, vCard) }
|
||||
|
||||
val transaction = Transaction(context)
|
||||
transaction.sendNewMessage(subId, threadId, addresses.map(phoneNumberUtils::normalizeNumber), parts, null)
|
||||
Transaction(context).sendNewMessage(subId, threadId, addresses, parts, null, null)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -370,6 +371,25 @@ class MessageRepositoryImpl @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
override fun resendMms(message: Message) {
|
||||
val subId = message.subId
|
||||
val threadId = message.threadId
|
||||
val pdu = tryOrNull {
|
||||
PduPersister.getPduPersister(context).load(message.getUri()) as MultimediaMessagePdu
|
||||
} ?: return
|
||||
|
||||
val addresses = pdu.to.map { it.string }.filter { it.isNotBlank() }
|
||||
val parts = message.parts.mapNotNull { part ->
|
||||
val bytes = tryOrNull {
|
||||
context.contentResolver.openInputStream(part.getUri())?.use { inputStream -> inputStream.readBytes() }
|
||||
} ?: return@mapNotNull null
|
||||
|
||||
MMSPart(part.name.orEmpty(), part.type, bytes)
|
||||
}
|
||||
|
||||
Transaction(context).sendNewMessage(subId, threadId, addresses, parts, message.subject, message.getUri())
|
||||
}
|
||||
|
||||
override fun cancelDelayedSms(id: Long) {
|
||||
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
||||
alarmManager.cancel(getIntentForDelayedSms(id))
|
||||
@@ -489,12 +509,17 @@ class MessageRepositoryImpl @Inject constructor(
|
||||
message?.let {
|
||||
// Update the message in realm
|
||||
realm.executeTransaction {
|
||||
message.boxId = Telephony.Sms.MESSAGE_TYPE_OUTBOX
|
||||
message.boxId = when (message.isSms()) {
|
||||
true -> Telephony.Sms.MESSAGE_TYPE_OUTBOX
|
||||
false -> Telephony.Mms.MESSAGE_BOX_OUTBOX
|
||||
}
|
||||
}
|
||||
|
||||
// Update the message in the native ContentProvider
|
||||
val values = ContentValues()
|
||||
values.put(Telephony.Sms.TYPE, Telephony.Sms.MESSAGE_TYPE_OUTBOX)
|
||||
val values = when (message.isSms()) {
|
||||
true -> contentValuesOf(Telephony.Sms.TYPE to Telephony.Sms.MESSAGE_TYPE_OUTBOX)
|
||||
false -> contentValuesOf(Telephony.Mms.MESSAGE_BOX to Telephony.Mms.MESSAGE_BOX_OUTBOX)
|
||||
}
|
||||
context.contentResolver.update(message.getUri(), values, null, null)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user