Add support for recycle bin for messages
This adds support for moving messages to recycle bin instead of deleting them right away. The feature is not active by default. This closes #451
This commit is contained in:
parent
53aa4495a0
commit
555b6ebea3
13 changed files with 274 additions and 20 deletions
|
|
@ -64,6 +64,7 @@ class MainActivity : SimpleActivity() {
|
|||
updateMaterialActivityViews(main_coordinator, conversations_list, useTransparentNavigation = true, useTopSearchMenu = true)
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
checkAndDeleteOldRecycleBinMessages()
|
||||
handleAppPasswordProtection {
|
||||
wasProtectionHandled = it
|
||||
if (it) {
|
||||
|
|
|
|||
|
|
@ -11,12 +11,15 @@ import com.simplemobiletools.commons.helpers.*
|
|||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import com.simplemobiletools.smsmessenger.R
|
||||
import com.simplemobiletools.smsmessenger.extensions.config
|
||||
import com.simplemobiletools.smsmessenger.extensions.emptyMessagesRecycleBin
|
||||
import com.simplemobiletools.smsmessenger.extensions.messagesDB
|
||||
import com.simplemobiletools.smsmessenger.helpers.*
|
||||
import kotlinx.android.synthetic.main.activity_settings.*
|
||||
import java.util.*
|
||||
|
||||
class SettingsActivity : SimpleActivity() {
|
||||
private var blockedNumbersAtPause = -1
|
||||
private var recycleBinMessages = 0
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
|
|
@ -48,6 +51,8 @@ class SettingsActivity : SimpleActivity() {
|
|||
setupGroupMessageAsMMS()
|
||||
setupLockScreenVisibility()
|
||||
setupMMSFileSizeLimit()
|
||||
setupUseRecycleBin()
|
||||
setupEmptyRecycleBin()
|
||||
setupAppPasswordProtection()
|
||||
updateTextColors(settings_nested_scrollview)
|
||||
|
||||
|
|
@ -60,6 +65,7 @@ class SettingsActivity : SimpleActivity() {
|
|||
settings_general_settings_label,
|
||||
settings_outgoing_messages_label,
|
||||
settings_notifications_label,
|
||||
settings_recycle_bin_label,
|
||||
settings_security_label
|
||||
).forEach {
|
||||
it.setTextColor(getProperPrimaryColor())
|
||||
|
|
@ -259,6 +265,43 @@ class SettingsActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun setupUseRecycleBin() {
|
||||
updateRecycleBinButtons()
|
||||
settings_use_recycle_bin.isChecked = config.useRecycleBin
|
||||
settings_use_recycle_bin_holder.setOnClickListener {
|
||||
settings_use_recycle_bin.toggle()
|
||||
config.useRecycleBin = settings_use_recycle_bin.isChecked
|
||||
updateRecycleBinButtons()
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateRecycleBinButtons() {
|
||||
settings_empty_recycle_bin_holder.beVisibleIf(config.useRecycleBin)
|
||||
}
|
||||
|
||||
private fun setupEmptyRecycleBin() {
|
||||
ensureBackgroundThread {
|
||||
recycleBinMessages = messagesDB.getArchivedCount()
|
||||
runOnUiThread {
|
||||
settings_empty_recycle_bin_size.text =
|
||||
resources.getQuantityString(R.plurals.delete_messages, recycleBinMessages, recycleBinMessages)
|
||||
}
|
||||
}
|
||||
|
||||
settings_empty_recycle_bin_holder.setOnClickListener {
|
||||
if (recycleBinMessages == 0) {
|
||||
toast(R.string.recycle_bin_empty)
|
||||
} else {
|
||||
ConfirmationDialog(this, "", R.string.empty_recycle_bin_confirmation, R.string.yes, R.string.no) {
|
||||
emptyMessagesRecycleBin()
|
||||
recycleBinMessages = 0
|
||||
settings_empty_recycle_bin_size.text =
|
||||
resources.getQuantityString(R.plurals.delete_messages, recycleBinMessages, recycleBinMessages)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupAppPasswordProtection() {
|
||||
settings_app_password_protection.isChecked = config.isAppPasswordProtectionOn
|
||||
settings_app_password_protection_holder.setOnClickListener {
|
||||
|
|
|
|||
|
|
@ -402,7 +402,7 @@ class ThreadActivity : SimpleActivity() {
|
|||
activity = this,
|
||||
recyclerView = thread_messages_list,
|
||||
itemClick = { handleItemClick(it) },
|
||||
deleteMessages = { deleteMessages(it) }
|
||||
deleteMessages = { messages, toRecycleBin -> deleteMessages(messages, toRecycleBin) }
|
||||
)
|
||||
|
||||
thread_messages_list.adapter = currAdapter
|
||||
|
|
@ -489,7 +489,7 @@ class ThreadActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun deleteMessages(messagesToRemove: List<Message>) {
|
||||
private fun deleteMessages(messagesToRemove: List<Message>, toRecycleBin: Boolean) {
|
||||
val deletePosition = threadItems.indexOf(messagesToRemove.first())
|
||||
messages.removeAll(messagesToRemove.toSet())
|
||||
threadItems = getThreadItems()
|
||||
|
|
@ -508,10 +508,15 @@ class ThreadActivity : SimpleActivity() {
|
|||
messagesToRemove.forEach { message ->
|
||||
val messageId = message.id
|
||||
if (message.isScheduled) {
|
||||
// TODO: Moving scheduled messages to recycle bin maybe doesn't make sense
|
||||
deleteScheduledMessage(messageId)
|
||||
cancelScheduleSendPendingIntent(messageId)
|
||||
} else {
|
||||
deleteMessage(messageId, message.isMMS)
|
||||
if (toRecycleBin) {
|
||||
moveMessageToRecycleBin(messageId)
|
||||
} else {
|
||||
deleteMessage(messageId, message.isMMS)
|
||||
}
|
||||
}
|
||||
}
|
||||
updateLastConversationMessage(threadId)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue