feat: add option to keep conversations archived (#501)

* feat: add option to keep conversations archived

Refs: https://github.com/FossifyOrg/Messages/issues/334

* fix: archive/unarchive when mms is received

Previously, conversations weren't unarchived for new MMS messages.

* docs: update changelog
This commit is contained in:
Naveen Singh 2025-09-01 01:15:01 +05:30 committed by GitHub
parent cfc16dd886
commit cf839e99df
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 59 additions and 2 deletions

View file

@ -120,6 +120,7 @@ class SettingsActivity : SimpleActivity() {
setupEnableDeliveryReports()
setupSendLongMessageAsMMS()
setupGroupMessageAsMMS()
setupKeepConversationsArchived()
setupLockScreenVisibility()
setupMMSFileSizeLimit()
setupUseRecycleBin()
@ -310,6 +311,14 @@ class SettingsActivity : SimpleActivity() {
}
}
private fun setupKeepConversationsArchived() = binding.apply {
settingsKeepConversationsArchived.isChecked = config.keepConversationsArchived
settingsKeepConversationsArchivedHolder.setOnClickListener {
settingsKeepConversationsArchived.toggle()
config.keepConversationsArchived = settingsKeepConversationsArchived.isChecked
}
}
private fun setupLockScreenVisibility() = binding.apply {
settingsLockScreenVisibility.text = getLockScreenVisibilityText()
settingsLockScreenVisibilityHolder.setOnClickListener {

View file

@ -141,6 +141,7 @@ import org.fossify.messages.extensions.renameConversation
import org.fossify.messages.extensions.restoreAllMessagesFromRecycleBinForConversation
import org.fossify.messages.extensions.restoreMessageFromRecycleBin
import org.fossify.messages.extensions.saveSmsDraft
import org.fossify.messages.extensions.shouldUnarchive
import org.fossify.messages.extensions.showWithAnimation
import org.fossify.messages.extensions.subscriptionManagerCompat
import org.fossify.messages.extensions.toArrayList
@ -1640,7 +1641,9 @@ class ThreadActivity : SimpleActivity() {
}
}
messagesDB.insertOrUpdate(message)
updateConversationArchivedStatus(message.threadId, false)
if (shouldUnarchive()) {
updateConversationArchivedStatus(message.threadId, false)
}
}
// show selected contacts, properly split to new lines when appropriate

View file

@ -1330,3 +1330,7 @@ fun Context.clearExpiredScheduledMessages(threadId: Long, messagesToDelete: List
fun Context.getDefaultKeyboardHeight(): Int {
return resources.getDimensionPixelSize(R.dimen.default_keyboard_height)
}
fun Context.shouldUnarchive(): Boolean {
return config.isArchiveAvailable && !config.keepConversationsArchived
}

View file

@ -143,4 +143,9 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getString(LAST_BLOCKED_KEYWORD_EXPORT_PATH, "")!!
set(lastBlockedNumbersExportPath) = prefs.edit()
.putString(LAST_BLOCKED_KEYWORD_EXPORT_PATH, lastBlockedNumbersExportPath).apply()
var keepConversationsArchived: Boolean
get() = prefs.getBoolean(KEEP_CONVERSATIONS_ARCHIVED, false)
set(keepConversationsArchived) = prefs.edit()
.putBoolean(KEEP_CONVERSATIONS_ARCHIVED, keepConversationsArchived).apply()
}

View file

@ -47,6 +47,7 @@ const val IS_RECYCLE_BIN = "is_recycle_bin"
const val IS_ARCHIVE_AVAILABLE = "is_archive_available"
const val CUSTOM_NOTIFICATIONS = "custom_notifications"
const val IS_LAUNCHED_FROM_SHORTCUT = "is_launched_from_shortcut"
const val KEEP_CONVERSATIONS_ARCHIVED = "keep_conversations_archived"
private const val PATH = "org.fossify.org.fossify.messages.action."
const val MARK_AS_READ = PATH + "mark_as_read"

View file

@ -17,7 +17,9 @@ import org.fossify.messages.R
import org.fossify.messages.extensions.getConversations
import org.fossify.messages.extensions.getLatestMMS
import org.fossify.messages.extensions.insertOrUpdateConversation
import org.fossify.messages.extensions.shouldUnarchive
import org.fossify.messages.extensions.showReceivedMessageNotification
import org.fossify.messages.extensions.updateConversationArchivedStatus
import org.fossify.messages.helpers.ReceiverUtils.isMessageFilteredOut
import org.fossify.messages.helpers.refreshMessages
import org.fossify.messages.models.Message
@ -88,6 +90,9 @@ class MmsReceiver : MmsReceivedReceiver() {
val conversation = context.getConversations(mms.threadId).firstOrNull()
?: return@ensureBackgroundThread
context.insertOrUpdateConversation(conversation)
if (context.shouldUnarchive()) {
context.updateConversationArchivedStatus(mms.threadId, false)
}
refreshMessages()
}
}

View file

@ -108,7 +108,7 @@ class SmsReceiver : BroadcastReceiver() {
subscriptionId
)
context.messagesDB.insertOrUpdate(message)
if (context.config.isArchiveAvailable) {
if (context.shouldUnarchive()) {
context.updateConversationArchivedStatus(threadId, false)
}
refreshMessages()