Implement archive functionality using system API
This commit is contained in:
parent
4d13fa1079
commit
857a4f0b93
17 changed files with 127 additions and 218 deletions
|
|
@ -238,7 +238,8 @@ fun Context.getConversations(threadId: Long? = null, privateContacts: ArrayList<
|
|||
Threads.SNIPPET,
|
||||
Threads.DATE,
|
||||
Threads.READ,
|
||||
Threads.RECIPIENT_IDS
|
||||
Threads.RECIPIENT_IDS,
|
||||
Threads.ARCHIVED
|
||||
)
|
||||
|
||||
var selection = "${Threads.MESSAGE_COUNT} > ?"
|
||||
|
|
@ -277,7 +278,8 @@ fun Context.getConversations(threadId: Long? = null, privateContacts: ArrayList<
|
|||
val photoUri = if (phoneNumbers.size == 1) simpleContactHelper.getPhotoUriFromPhoneNumber(phoneNumbers.first()) else ""
|
||||
val isGroupConversation = phoneNumbers.size > 1
|
||||
val read = cursor.getIntValue(Threads.READ) == 1
|
||||
val conversation = Conversation(id, snippet, date.toInt(), read, title, photoUri, isGroupConversation, phoneNumbers.first())
|
||||
val archived = cursor.getIntValue(Threads.ARCHIVED) == 1
|
||||
val conversation = Conversation(id, snippet, date.toInt(), read, title, photoUri, isGroupConversation, phoneNumbers.first(), isArchived = archived)
|
||||
conversations.add(conversation)
|
||||
}
|
||||
|
||||
|
|
@ -581,21 +583,6 @@ fun Context.insertNewSMS(address: String, subject: String, body: String, date: L
|
|||
}
|
||||
}
|
||||
|
||||
fun Context.checkAndDeleteOldArchivedConversations(callback: (() -> Unit)? = null) {
|
||||
if (config.useArchive && config.lastArchiveCheck < System.currentTimeMillis() - DAY_SECONDS * 1000) {
|
||||
config.lastArchiveCheck = System.currentTimeMillis()
|
||||
ensureBackgroundThread {
|
||||
try {
|
||||
for (conversation in conversationsDB.getOldArchived(System.currentTimeMillis() - MONTH_SECONDS * 1000L)) {
|
||||
deleteConversation(conversation.threadId)
|
||||
}
|
||||
callback?.invoke()
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.removeAllArchivedConversations(callback: (() -> Unit)? = null) {
|
||||
ensureBackgroundThread {
|
||||
try {
|
||||
|
|
@ -631,13 +618,19 @@ fun Context.deleteConversation(threadId: Long) {
|
|||
messagesDB.deleteThreadMessages(threadId)
|
||||
}
|
||||
|
||||
fun Context.moveConversationToRecycleBin(threadId: Long) {
|
||||
conversationsDB.archiveConversation(
|
||||
ArchivedConversation(
|
||||
threadId = threadId,
|
||||
deletedTs = System.currentTimeMillis()
|
||||
)
|
||||
)
|
||||
fun Context.updateConversationArchivedStatus(threadId: Long, archived: Boolean) {
|
||||
val uri = Threads.CONTENT_URI
|
||||
val values = ContentValues().apply {
|
||||
put(Threads.ARCHIVED, archived)
|
||||
}
|
||||
val selection = "${Threads._ID} = ?"
|
||||
val selectionArgs = arrayOf(threadId.toString())
|
||||
contentResolver.update(uri, values, selection, selectionArgs)
|
||||
if (archived) {
|
||||
conversationsDB.moveToArchive(threadId)
|
||||
} else {
|
||||
conversationsDB.unarchive(threadId)
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.deleteMessage(id: Long, isMMS: Boolean) {
|
||||
|
|
@ -968,7 +961,8 @@ fun Context.createTemporaryThread(message: Message, threadId: Long = generateRan
|
|||
isGroupConversation = addresses.size > 1,
|
||||
phoneNumber = addresses.first(),
|
||||
isScheduled = true,
|
||||
usesCustomTitle = cachedConv?.usesCustomTitle == true
|
||||
usesCustomTitle = cachedConv?.usesCustomTitle == true,
|
||||
isArchived = false
|
||||
)
|
||||
try {
|
||||
conversationsDB.insertOrUpdate(conversation)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue