Handle conversations with scheduled messages only
This commit is contained in:
parent
f837790948
commit
ee8130c767
11 changed files with 171 additions and 36 deletions
|
|
@ -118,8 +118,12 @@ fun Context.getMessages(threadId: Long, getImageResolutions: Boolean, dateFrom:
|
|||
messages.addAll(getMMS(threadId, getImageResolutions, sortOrder))
|
||||
|
||||
if (includeScheduledMessages) {
|
||||
val scheduledMessages = messagesDB.getScheduledThreadMessages(threadId)
|
||||
messages.addAll(scheduledMessages)
|
||||
try {
|
||||
val scheduledMessages = messagesDB.getScheduledThreadMessages(threadId)
|
||||
messages.addAll(scheduledMessages)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
messages = messages
|
||||
|
|
@ -580,7 +584,11 @@ fun Context.deleteConversation(threadId: Long) {
|
|||
}
|
||||
|
||||
uri = Mms.CONTENT_URI
|
||||
contentResolver.delete(uri, selection, selectionArgs)
|
||||
try {
|
||||
contentResolver.delete(uri, selection, selectionArgs)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
conversationsDB.deleteThreadId(threadId)
|
||||
messagesDB.deleteThreadMessages(threadId)
|
||||
|
|
@ -598,6 +606,14 @@ fun Context.deleteMessage(id: Long, isMMS: Boolean) {
|
|||
}
|
||||
}
|
||||
|
||||
fun Context.deleteScheduledMessage(messageId: Long) {
|
||||
try {
|
||||
messagesDB.delete(messageId)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.markMessageRead(id: Long, isMMS: Boolean) {
|
||||
val uri = if (isMMS) Mms.CONTENT_URI else Sms.CONTENT_URI
|
||||
val contentValues = ContentValues().apply {
|
||||
|
|
@ -1001,3 +1017,51 @@ fun Context.subscriptionManagerCompat(): SubscriptionManager {
|
|||
SubscriptionManager.from(this)
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.createTemporaryThread(message: Message, threadId: Long = generateRandomId()) {
|
||||
val simpleContactHelper = SimpleContactsHelper(this)
|
||||
val addresses = message.participants.getAddresses()
|
||||
val photoUri = if (addresses.size == 1) simpleContactHelper.getPhotoUriFromPhoneNumber(addresses.first()) else ""
|
||||
|
||||
val conversation = Conversation(
|
||||
threadId = threadId,
|
||||
snippet = message.body,
|
||||
date = message.date,
|
||||
read = true,
|
||||
title = message.participants.getThreadTitle(),
|
||||
photoUri = photoUri,
|
||||
isGroupConversation = addresses.size > 1,
|
||||
phoneNumber = addresses.first(),
|
||||
isScheduled = true
|
||||
)
|
||||
try {
|
||||
conversationsDB.insertOrUpdate(conversation)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.updateScheduledMessagesThreadId(messages: List<Message>, newThreadId: Long) {
|
||||
val scheduledMessages = messages.map { it.copy(threadId = newThreadId) }.toTypedArray()
|
||||
messagesDB.insertMessages(*scheduledMessages)
|
||||
}
|
||||
|
||||
fun Context.clearExpiredScheduledMessages(threadId: Long, messagesToDelete: List<Message>? = null) {
|
||||
val messages = messagesToDelete ?: messagesDB.getScheduledThreadMessages(threadId)
|
||||
|
||||
try {
|
||||
messages.filter { it.isScheduled && it.millis() < System.currentTimeMillis() }.forEach { msg ->
|
||||
messagesDB.delete(msg.id)
|
||||
}
|
||||
if (messages.filterNot { it.isScheduled && it.millis() < System.currentTimeMillis() }.isEmpty()) {
|
||||
// delete empty temporary thread
|
||||
val conversation = conversationsDB.getConversationWithThreadId(threadId)
|
||||
if (conversation != null && conversation.isScheduled) {
|
||||
conversationsDB.deleteThreadId(threadId)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue