From 555b6ebea30b32391e8267e729b61bec2bcbb32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Tue, 18 Jul 2023 11:34:25 +0200 Subject: [PATCH 01/16] 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 --- .../smsmessenger/activities/MainActivity.kt | 1 + .../activities/SettingsActivity.kt | 43 ++++++++++++++++ .../smsmessenger/activities/ThreadActivity.kt | 11 +++-- .../smsmessenger/adapters/ThreadAdapter.kt | 9 ++-- .../databases/MessagesDatabase.kt | 17 +++++-- .../dialogs/DeleteConfirmationDialog.kt | 39 +++++++++++++++ .../smsmessenger/extensions/Context.kt | 30 ++++++++++++ .../smsmessenger/helpers/Config.kt | 8 +++ .../smsmessenger/helpers/Constants.kt | 2 + .../smsmessenger/interfaces/MessagesDao.kt | 44 ++++++++++++++--- .../smsmessenger/models/RecycleBinMessage.kt | 15 ++++++ app/src/main/res/layout/activity_settings.xml | 49 +++++++++++++++++++ .../res/layout/dialog_delete_confirmation.xml | 26 ++++++++++ 13 files changed, 274 insertions(+), 20 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/DeleteConfirmationDialog.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/RecycleBinMessage.kt create mode 100644 app/src/main/res/layout/dialog_delete_confirmation.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt index 5c6a1b5b..f9c558e6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -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) { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt index 38cc7388..ff0d5ffe 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt @@ -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 { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index 62e03a05..52c5acd1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -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) { + private fun deleteMessages(messagesToRemove: List, 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) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index 82da0e28..a68ac478 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -23,7 +23,6 @@ import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.target.Target import com.simplemobiletools.commons.adapters.MyRecyclerViewListAdapter -import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.SimpleContactsHelper import com.simplemobiletools.commons.helpers.ensureBackgroundThread @@ -33,6 +32,7 @@ import com.simplemobiletools.smsmessenger.activities.NewConversationActivity import com.simplemobiletools.smsmessenger.activities.SimpleActivity import com.simplemobiletools.smsmessenger.activities.ThreadActivity import com.simplemobiletools.smsmessenger.activities.VCardViewerActivity +import com.simplemobiletools.smsmessenger.dialogs.DeleteConfirmationDialog import com.simplemobiletools.smsmessenger.dialogs.MessageDetailsDialog import com.simplemobiletools.smsmessenger.dialogs.SelectTextDialog import com.simplemobiletools.smsmessenger.extensions.* @@ -58,7 +58,7 @@ class ThreadAdapter( activity: SimpleActivity, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit, - val deleteMessages: (messages: List) -> Unit + val deleteMessages: (messages: List, toRecycleBin: Boolean) -> Unit ) : MyRecyclerViewListAdapter(activity, recyclerView, ThreadItemDiffCallback(), itemClick) { private var fontSize = activity.getTextSize() @@ -206,11 +206,12 @@ class ThreadAdapter( val baseString = R.string.deletion_confirmation val question = String.format(resources.getString(baseString), items) - ConfirmationDialog(activity, question) { + DeleteConfirmationDialog(activity, question, activity.config.useRecycleBin) { skipRecycleBin -> ensureBackgroundThread { val messagesToRemove = getSelectedItems() if (messagesToRemove.isNotEmpty()) { - deleteMessages(messagesToRemove.filterIsInstance()) + val toRecycleBin = !skipRecycleBin && activity.config.useRecycleBin + deleteMessages(messagesToRemove.filterIsInstance(), toRecycleBin) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt index fca0754b..c91ebf43 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt @@ -12,12 +12,9 @@ import com.simplemobiletools.smsmessenger.interfaces.AttachmentsDao import com.simplemobiletools.smsmessenger.interfaces.ConversationsDao import com.simplemobiletools.smsmessenger.interfaces.MessageAttachmentsDao import com.simplemobiletools.smsmessenger.interfaces.MessagesDao -import com.simplemobiletools.smsmessenger.models.Attachment -import com.simplemobiletools.smsmessenger.models.Conversation -import com.simplemobiletools.smsmessenger.models.Message -import com.simplemobiletools.smsmessenger.models.MessageAttachment +import com.simplemobiletools.smsmessenger.models.* -@Database(entities = [Conversation::class, Attachment::class, MessageAttachment::class, Message::class], version = 7) +@Database(entities = [Conversation::class, Attachment::class, MessageAttachment::class, Message::class, RecycleBinMessage::class], version = 8) @TypeConverters(Converters::class) abstract class MessagesDatabase : RoomDatabase() { @@ -44,6 +41,7 @@ abstract class MessagesDatabase : RoomDatabase() { .addMigrations(MIGRATION_4_5) .addMigrations(MIGRATION_5_6) .addMigrations(MIGRATION_6_7) + .addMigrations(MIGRATION_7_8) .build() } } @@ -115,5 +113,14 @@ abstract class MessagesDatabase : RoomDatabase() { } } } + + private val MIGRATION_7_8 = object : Migration(7, 8) { + override fun migrate(database: SupportSQLiteDatabase) { + database.apply { + execSQL("CREATE TABLE IF NOT EXISTS `recycle_bin_messages` (`id` INTEGER PRIMARY KEY, `deleted_ts` INTEGER NOT NULL)") + execSQL("CREATE UNIQUE INDEX `index_recycle_bin_messages_id` ON `recycle_bin_messages` (`id`)") + } + } + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/DeleteConfirmationDialog.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/DeleteConfirmationDialog.kt new file mode 100644 index 00000000..f72a7513 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/DeleteConfirmationDialog.kt @@ -0,0 +1,39 @@ +package com.simplemobiletools.smsmessenger.dialogs + +import android.app.Activity +import androidx.appcompat.app.AlertDialog +import com.simplemobiletools.commons.extensions.beGoneIf +import com.simplemobiletools.commons.extensions.getAlertDialogBuilder +import com.simplemobiletools.commons.extensions.setupDialogStuff +import com.simplemobiletools.smsmessenger.R +import kotlinx.android.synthetic.main.dialog_delete_confirmation.view.delete_remember_title +import kotlinx.android.synthetic.main.dialog_delete_confirmation.view.skip_the_recycle_bin_checkbox + +class DeleteConfirmationDialog( + private val activity: Activity, + private val message: String, + private val showSkipRecycleBinOption: Boolean, + private val callback: (skipRecycleBin: Boolean) -> Unit +) { + + private var dialog: AlertDialog? = null + val view = activity.layoutInflater.inflate(R.layout.dialog_delete_confirmation, null)!! + + init { + view.delete_remember_title.text = message + view.skip_the_recycle_bin_checkbox.beGoneIf(!showSkipRecycleBinOption) + activity.getAlertDialogBuilder() + .setPositiveButton(R.string.yes) { _, _ -> dialogConfirmed() } + .setNegativeButton(R.string.no, null) + .apply { + activity.setupDialogStuff(view, this) { alertDialog -> + dialog = alertDialog + } + } + } + + private fun dialogConfirmed() { + dialog?.dismiss() + callback(view.skip_the_recycle_bin_checkbox.isChecked) + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index d07b3c8d..2c4a45c6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -641,6 +641,36 @@ fun Context.deleteConversation(threadId: Long) { messagesDB.deleteThreadMessages(threadId) } +fun Context.checkAndDeleteOldRecycleBinMessages(callback: (() -> Unit)? = null) { + if (config.useRecycleBin && config.lastRecycleBinCheck < System.currentTimeMillis() - DAY_SECONDS * 1000) { + config.lastRecycleBinCheck = System.currentTimeMillis() + ensureBackgroundThread { + try { + for (message in messagesDB.getOldRecycleBinMessages(System.currentTimeMillis() - MONTH_SECONDS * 1000L)) { + deleteMessage(message.id, message.isMMS) + } + callback?.invoke() + } catch (e: Exception) { + } + } + } +} + +fun Context.emptyMessagesRecycleBin() { + val messages = messagesDB.getAllRecycleBinMessages() + for (message in messages) { + deleteMessage(message.id, message.isMMS) + } +} + +fun Context.moveMessageToRecycleBin(id: Long) { + try { + messagesDB.insertRecycleBinEntry(RecycleBinMessage(id, System.currentTimeMillis())) + } catch (e: Exception) { + showErrorToast(e) + } +} + fun Context.deleteMessage(id: Long, isMMS: Boolean) { val uri = if (isMMS) Mms.CONTENT_URI else Sms.CONTENT_URI val selection = "${Sms._ID} = ?" diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Config.kt index 18859f76..88eb740a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Config.kt @@ -103,4 +103,12 @@ class Config(context: Context) : BaseConfig(context) { var keyboardHeight: Int get() = prefs.getInt(SOFT_KEYBOARD_HEIGHT, context.getDefaultKeyboardHeight()) set(keyboardHeight) = prefs.edit().putInt(SOFT_KEYBOARD_HEIGHT, keyboardHeight).apply() + + var useRecycleBin: Boolean + get() = prefs.getBoolean(USE_RECYCLE_BIN, false) + set(useRecycleBin) = prefs.edit().putBoolean(USE_RECYCLE_BIN, useRecycleBin).apply() + + var lastRecycleBinCheck: Long + get() = prefs.getLong(LAST_RECYCLE_BIN_CHECK, 0L) + set(lastRecycleBinCheck) = prefs.edit().putLong(LAST_RECYCLE_BIN_CHECK, lastRecycleBinCheck).apply() } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt index 3bade2ac..947cc219 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt @@ -40,6 +40,8 @@ const val SCHEDULED_MESSAGE_ID = "scheduled_message_id" const val SOFT_KEYBOARD_HEIGHT = "soft_keyboard_height" const val IS_MMS = "is_mms" const val MESSAGE_ID = "message_id" +const val USE_RECYCLE_BIN = "use_recycle_bin" +const val LAST_RECYCLE_BIN_CHECK = "last_recycle_bin_check" private const val PATH = "com.simplemobiletools.smsmessenger.action." const val MARK_AS_READ = PATH + "mark_as_read" diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt index 7036167b..9cb6fe68 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt @@ -1,9 +1,7 @@ package com.simplemobiletools.smsmessenger.interfaces -import androidx.room.Dao -import androidx.room.Insert -import androidx.room.OnConflictStrategy -import androidx.room.Query +import androidx.room.* +import com.simplemobiletools.smsmessenger.models.RecycleBinMessage import com.simplemobiletools.smsmessenger.models.Message @Dao @@ -11,6 +9,9 @@ interface MessagesDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertOrUpdate(message: Message) + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertRecycleBinEntry(recycleBinMessage: RecycleBinMessage) + @Insert(onConflict = OnConflictStrategy.IGNORE) fun insertOrIgnore(message: Message): Long @@ -20,15 +21,24 @@ interface MessagesDao { @Query("SELECT * FROM messages") fun getAll(): List - @Query("SELECT * FROM messages WHERE thread_id = :threadId") + @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL") + fun getAllRecycleBinMessages(): List + + @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND recycle_bin_messages.deleted_ts < :timestamp") + fun getOldRecycleBinMessages(timestamp: Long): List + + @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND thread_id = :threadId") fun getThreadMessages(threadId: Long): List - @Query("SELECT * FROM messages WHERE thread_id = :threadId AND is_scheduled = 1") + @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND thread_id = :threadId AND is_scheduled = 1") fun getScheduledThreadMessages(threadId: Long): List @Query("SELECT * FROM messages WHERE thread_id = :threadId AND id = :messageId AND is_scheduled = 1") fun getScheduledMessageWithId(threadId: Long, messageId: Long): Message + @Query("SELECT COUNT(*) FROM recycle_bin_messages") + fun getArchivedCount(): Int + @Query("SELECT * FROM messages WHERE body LIKE :text") fun getMessagesWithText(text: String): List @@ -44,11 +54,29 @@ interface MessagesDao { @Query("UPDATE messages SET status = :status WHERE id = :id") fun updateStatus(id: Long, status: Int): Int + @Transaction + fun delete(id: Long) { + deleteFromMessages(id) + deleteFromRecycleBin(id) + } + @Query("DELETE FROM messages WHERE id = :id") - fun delete(id: Long) + fun deleteFromMessages(id: Long) + + @Query("DELETE FROM recycle_bin_messages WHERE id = :id") + fun deleteFromRecycleBin(id: Long) + + @Transaction + fun deleteThreadMessages(threadId: Long) { + deleteThreadMessagesFromRecycleBin(threadId) + deleteAllThreadMessages(threadId) + } @Query("DELETE FROM messages WHERE thread_id = :threadId") - fun deleteThreadMessages(threadId: Long) + fun deleteAllThreadMessages(threadId: Long) + + @Query("DELETE FROM recycle_bin_messages WHERE id IN (SELECT id FROM messages WHERE thread_id = :threadId)") + fun deleteThreadMessagesFromRecycleBin(threadId: Long) @Query("DELETE FROM messages") fun deleteAll() diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/RecycleBinMessage.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/RecycleBinMessage.kt new file mode 100644 index 00000000..e8c1dbe6 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/RecycleBinMessage.kt @@ -0,0 +1,15 @@ +package com.simplemobiletools.smsmessenger.models + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.Index +import androidx.room.PrimaryKey + +@Entity( + tableName = "recycle_bin_messages", + indices = [(Index(value = ["id"], unique = true))] +) +data class RecycleBinMessage( + @PrimaryKey val id: Long, + @ColumnInfo(name = "deleted_ts") var deletedTS: Long +) diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 7f7f562e..65c9682b 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -361,6 +361,55 @@ android:id="@+id/settings_outgoing_messages_divider" layout="@layout/divider" /> + + + + + + + + + + + + + + + + + + + + + + + + + From d560720ac3967fdc278caf2f18983875814e06fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Tue, 18 Jul 2023 11:45:47 +0200 Subject: [PATCH 02/16] Fix index creation in the migration --- .../smsmessenger/databases/MessagesDatabase.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt index c91ebf43..1e9fd98b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt @@ -118,7 +118,7 @@ abstract class MessagesDatabase : RoomDatabase() { override fun migrate(database: SupportSQLiteDatabase) { database.apply { execSQL("CREATE TABLE IF NOT EXISTS `recycle_bin_messages` (`id` INTEGER PRIMARY KEY, `deleted_ts` INTEGER NOT NULL)") - execSQL("CREATE UNIQUE INDEX `index_recycle_bin_messages_id` ON `recycle_bin_messages` (`id`)") + execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_recycle_bin_messages_id` ON `recycle_bin_messages` (`id`)") } } } From b0141fe93d85819576e2e3b30a31b08855ddc990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Tue, 18 Jul 2023 15:19:30 +0200 Subject: [PATCH 03/16] Add recycle bin list similar to main conversations list --- app/src/main/AndroidManifest.xml | 7 + .../smsmessenger/activities/MainActivity.kt | 6 + .../RecycleBinConversationsActivity.kt | 154 ++++++++++++++++++ .../activities/SettingsActivity.kt | 4 +- .../interfaces/ConversationsDao.kt | 3 + .../activity_recycle_bin_conversations.xml | 83 ++++++++++ .../menu/cab_recycle_bin_conversations.xml | 22 +++ app/src/main/res/menu/menu_main.xml | 5 + app/src/main/res/menu/recycle_bin_menu.xml | 12 ++ 9 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt create mode 100644 app/src/main/res/layout/activity_recycle_bin_conversations.xml create mode 100644 app/src/main/res/menu/cab_recycle_bin_conversations.xml create mode 100644 app/src/main/res/menu/recycle_bin_menu.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aa49b1c0..c31ee1df 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -51,6 +51,13 @@ android:configChanges="orientation" android:exported="true" /> + + tryImportMessages() R.id.export_messages -> tryToExportMessages() R.id.more_apps_from_us -> launchMoreAppsFromUsIntent() + R.id.show_recycle_bin -> launchRecycleBin() R.id.settings -> launchSettings() R.id.about -> launchAbout() else -> return@setOnMenuItemClickListener false @@ -557,6 +558,11 @@ class MainActivity : SimpleActivity() { } } + private fun launchRecycleBin() { + hideKeyboard() + startActivity(Intent(applicationContext, RecycleBinConversationsActivity::class.java)) + } + private fun launchSettings() { hideKeyboard() startActivity(Intent(applicationContext, SettingsActivity::class.java)) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt new file mode 100644 index 00000000..cd13f825 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt @@ -0,0 +1,154 @@ +package com.simplemobiletools.smsmessenger.activities + +import android.annotation.SuppressLint +import android.content.Intent +import android.os.Bundle +import com.simplemobiletools.commons.dialogs.ConfirmationDialog +import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.* +import com.simplemobiletools.smsmessenger.R +import com.simplemobiletools.smsmessenger.adapters.ConversationsAdapter +import com.simplemobiletools.smsmessenger.extensions.* +import com.simplemobiletools.smsmessenger.helpers.* +import com.simplemobiletools.smsmessenger.models.Conversation +import com.simplemobiletools.smsmessenger.models.Events +import kotlinx.android.synthetic.main.activity_recycle_bin_conversations.* +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode + +class RecycleBinConversationsActivity : SimpleActivity() { + private var bus: EventBus? = null + + @SuppressLint("InlinedApi") + override fun onCreate(savedInstanceState: Bundle?) { + isMaterialActivity = true + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_recycle_bin_conversations) + setupOptionsMenu() + + updateMaterialActivityViews(recycle_bin_coordinator, conversations_list, useTransparentNavigation = true, useTopSearchMenu = false) + setupMaterialScrollListener(conversations_list, recycle_bin_toolbar) + + loadRecycleBinConversations() + } + + override fun onResume() { + super.onResume() + setupToolbar(recycle_bin_toolbar, NavigationIcon.Arrow) + updateMenuColors() + + loadRecycleBinConversations() + } + + override fun onDestroy() { + super.onDestroy() + bus?.unregister(this) + } + + private fun setupOptionsMenu() { + recycle_bin_toolbar.inflateMenu(R.menu.recycle_bin_menu) + + recycle_bin_toolbar.setOnMenuItemClickListener { menuItem -> + when (menuItem.itemId) { + R.id.empty_recycle_bin -> removeAll() + else -> return@setOnMenuItemClickListener false + } + return@setOnMenuItemClickListener true + } + } + + private fun updateMenuColors() { + updateStatusbarColor(getProperBackgroundColor()) + } + + private fun loadRecycleBinConversations() { + ensureBackgroundThread { + val conversations = try { + conversationsDB.getAllWithMessagesInRecycleBin().toMutableList() as ArrayList + } catch (e: Exception) { + ArrayList() + } + + runOnUiThread { + setupConversations(conversations) + } + } + + bus = EventBus.getDefault() + try { + bus!!.register(this) + } catch (e: Exception) { + } + } + + private fun removeAll() { + ConfirmationDialog(this, "", R.string.empty_recycle_bin_confirmation, R.string.yes, R.string.no) { + ensureBackgroundThread { + emptyMessagesRecycleBin() + loadRecycleBinConversations() + } + } + } + + private fun getOrCreateConversationsAdapter(): ConversationsAdapter { + var currAdapter = conversations_list.adapter + if (currAdapter == null) { + hideKeyboard() + currAdapter = ConversationsAdapter( + activity = this, + recyclerView = conversations_list, + onRefresh = { notifyDatasetChanged() }, + itemClick = { handleConversationClick(it) } + ) + + conversations_list.adapter = currAdapter + if (areSystemAnimationsEnabled) { + conversations_list.scheduleLayoutAnimation() + } + } + return currAdapter as ConversationsAdapter + } + + private fun setupConversations(conversations: ArrayList) { + val sortedConversations = conversations.sortedWith( + compareByDescending { config.pinnedConversations.contains(it.threadId.toString()) } + .thenByDescending { it.date } + ).toMutableList() as ArrayList + + showOrHidePlaceholder(conversations.isEmpty()) + + try { + getOrCreateConversationsAdapter().apply { + updateConversations(sortedConversations) + } + } catch (ignored: Exception) { + } + } + + private fun showOrHidePlaceholder(show: Boolean) { + conversations_fastscroller.beGoneIf(show) + no_conversations_placeholder.beVisibleIf(show) + no_conversations_placeholder.text = getString(R.string.no_conversations_found) + } + + @SuppressLint("NotifyDataSetChanged") + private fun notifyDatasetChanged() { + getOrCreateConversationsAdapter().notifyDataSetChanged() + } + + private fun handleConversationClick(any: Any) { + Intent(this, ThreadActivity::class.java).apply { + val conversation = any as Conversation + putExtra(THREAD_ID, conversation.threadId) + putExtra(THREAD_TITLE, conversation.title) + putExtra(WAS_PROTECTION_HANDLED, true) + startActivity(this) + } + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun refreshMessages(event: Events.RefreshMessages) { + loadRecycleBinConversations() + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt index ff0d5ffe..425865ee 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt @@ -293,7 +293,9 @@ class SettingsActivity : SimpleActivity() { toast(R.string.recycle_bin_empty) } else { ConfirmationDialog(this, "", R.string.empty_recycle_bin_confirmation, R.string.yes, R.string.no) { - emptyMessagesRecycleBin() + ensureBackgroundThread { + emptyMessagesRecycleBin() + } recycleBinMessages = 0 settings_empty_recycle_bin_size.text = resources.getQuantityString(R.plurals.delete_messages, recycleBinMessages, recycleBinMessages) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt index 0c8db25c..11d2e523 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt @@ -14,6 +14,9 @@ interface ConversationsDao { @Query("SELECT * FROM conversations") fun getAll(): List + @Query("SELECT * FROM conversations WHERE (SELECT COUNT(*) FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND messages.thread_id = conversations.thread_id) > 0") + fun getAllWithMessagesInRecycleBin(): List + @Query("SELECT * FROM conversations WHERE thread_id = :threadId") fun getConversationWithThreadId(threadId: Long): Conversation? diff --git a/app/src/main/res/layout/activity_recycle_bin_conversations.xml b/app/src/main/res/layout/activity_recycle_bin_conversations.xml new file mode 100644 index 00000000..b6ab593c --- /dev/null +++ b/app/src/main/res/layout/activity_recycle_bin_conversations.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/cab_recycle_bin_conversations.xml b/app/src/main/res/menu/cab_recycle_bin_conversations.xml new file mode 100644 index 00000000..8ff99d41 --- /dev/null +++ b/app/src/main/res/menu/cab_recycle_bin_conversations.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index d60f5871..0785b49b 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -13,6 +13,11 @@ android:showAsAction="never" android:title="@string/export_messages" app:showAsAction="never" /> + + + + From 372dbaeaa440bef090b15b92ef290ad4450a2a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 20 Jul 2023 14:12:38 +0200 Subject: [PATCH 04/16] Remove unusude useArchive property --- .../com/simplemobiletools/smsmessenger/helpers/Config.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Config.kt index 350a3956..88eb740a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Config.kt @@ -111,8 +111,4 @@ class Config(context: Context) : BaseConfig(context) { var lastRecycleBinCheck: Long get() = prefs.getLong(LAST_RECYCLE_BIN_CHECK, 0L) set(lastRecycleBinCheck) = prefs.edit().putLong(LAST_RECYCLE_BIN_CHECK, lastRecycleBinCheck).apply() - - var useArchive: Boolean - get() = prefs.getBoolean(USE_ARCHIVE, false) - set(useArchive) = prefs.edit().putBoolean(USE_ARCHIVE, useArchive).apply() } From 31be5d3d95b4ac36a5533ea8d96ca49b811373d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 20 Jul 2023 14:18:24 +0200 Subject: [PATCH 05/16] Remove empty recycle bin menu item if there are no recycle bin conversations --- .../activities/RecycleBinConversationsActivity.kt | 7 +++++++ .../smsmessenger/databases/MessagesDatabase.kt | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt index cd13f825..91a61bf4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt @@ -58,6 +58,12 @@ class RecycleBinConversationsActivity : SimpleActivity() { } } + private fun updateOptionsMenu(conversations: ArrayList) { + recycle_bin_toolbar.menu.apply { + findItem(R.id.empty_recycle_bin).isVisible = conversations.isNotEmpty() + } + } + private fun updateMenuColors() { updateStatusbarColor(getProperBackgroundColor()) } @@ -117,6 +123,7 @@ class RecycleBinConversationsActivity : SimpleActivity() { ).toMutableList() as ArrayList showOrHidePlaceholder(conversations.isEmpty()) + updateOptionsMenu(conversations) try { getOrCreateConversationsAdapter().apply { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt index 6ecddfc0..55b5c701 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt @@ -118,7 +118,7 @@ abstract class MessagesDatabase : RoomDatabase() { override fun migrate(database: SupportSQLiteDatabase) { database.apply { execSQL("ALTER TABLE conversations ADD COLUMN archived INTEGER NOT NULL DEFAULT 0") - execSQL("CREATE TABLE IF NOT EXISTS `recycle_bin_messages` (`id` INTEGER PRIMARY KEY, `deleted_ts` INTEGER NOT NULL)") + execSQL("CREATE TABLE IF NOT EXISTS `recycle_bin_messages` (`id` INTEGER NOT NULL PRIMARY KEY, `deleted_ts` INTEGER NOT NULL)") execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_recycle_bin_messages_id` ON `recycle_bin_messages` (`id`)") } } From 3f06b521bffb3c6603de1d7579fb19bf29e1b252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 20 Jul 2023 16:04:51 +0200 Subject: [PATCH 06/16] Add separate screen for recycle bin messages --- .../smsmessenger/activities/MainActivity.kt | 1 + .../RecycleBinConversationsActivity.kt | 8 +- .../smsmessenger/activities/ThreadActivity.kt | 78 ++++++++++--- .../RecycleBinConversationsAdapter.kt | 107 ++++++++++++++++++ .../smsmessenger/adapters/ThreadAdapter.kt | 36 +++++- .../smsmessenger/extensions/Context.kt | 19 ++++ .../smsmessenger/helpers/Constants.kt | 2 +- .../smsmessenger/interfaces/MessagesDao.kt | 3 + .../menu/cab_recycle_bin_conversations.xml | 2 +- app/src/main/res/menu/cab_thread.xml | 5 + app/src/main/res/menu/menu_thread.xml | 5 + 11 files changed, 239 insertions(+), 27 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/RecycleBinConversationsAdapter.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt index 74fff402..d1a5fad3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -191,6 +191,7 @@ class MainActivity : SimpleActivity() { private fun refreshMenuItems() { main_menu.getToolbar().menu.apply { findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(R.bool.hide_google_relations) + findItem(R.id.show_recycle_bin).isVisible = config.useRecycleBin } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt index 91a61bf4..a660dd00 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt @@ -8,6 +8,7 @@ import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.adapters.ConversationsAdapter +import com.simplemobiletools.smsmessenger.adapters.RecycleBinConversationsAdapter import com.simplemobiletools.smsmessenger.extensions.* import com.simplemobiletools.smsmessenger.helpers.* import com.simplemobiletools.smsmessenger.models.Conversation @@ -97,11 +98,11 @@ class RecycleBinConversationsActivity : SimpleActivity() { } } - private fun getOrCreateConversationsAdapter(): ConversationsAdapter { + private fun getOrCreateConversationsAdapter(): RecycleBinConversationsAdapter { var currAdapter = conversations_list.adapter if (currAdapter == null) { hideKeyboard() - currAdapter = ConversationsAdapter( + currAdapter = RecycleBinConversationsAdapter( activity = this, recyclerView = conversations_list, onRefresh = { notifyDatasetChanged() }, @@ -113,7 +114,7 @@ class RecycleBinConversationsActivity : SimpleActivity() { conversations_list.scheduleLayoutAnimation() } } - return currAdapter as ConversationsAdapter + return currAdapter as RecycleBinConversationsAdapter } private fun setupConversations(conversations: ArrayList) { @@ -150,6 +151,7 @@ class RecycleBinConversationsActivity : SimpleActivity() { putExtra(THREAD_ID, conversation.threadId) putExtra(THREAD_TITLE, conversation.title) putExtra(WAS_PROTECTION_HANDLED, true) + putExtra(IS_RECYCLE_BIN, true) startActivity(this) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index da1cac18..e9a1d924 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -105,6 +105,7 @@ class ThreadActivity : SimpleActivity() { private var allMessagesFetched = false private var oldestMessageDate = -1 private var wasProtectionHandled = false + private var isRecycleBin = false private var isScheduledMessage: Boolean = false private var scheduledMessage: Message? = null @@ -140,6 +141,7 @@ class ThreadActivity : SimpleActivity() { intent.getStringExtra(THREAD_TITLE)?.let { thread_toolbar.title = it } + isRecycleBin = intent.getBooleanExtra(IS_RECYCLE_BIN, false) wasProtectionHandled = intent.getBooleanExtra(WAS_PROTECTION_HANDLED, false) bus = EventBus.getDefault() @@ -163,6 +165,7 @@ class ThreadActivity : SimpleActivity() { setupAttachmentPickerView() setupKeyboardListener() hideAttachmentPicker() + maybeSetupRecycleBinView() } override fun onResume() { @@ -247,20 +250,21 @@ class ThreadActivity : SimpleActivity() { val firstPhoneNumber = participants.firstOrNull()?.phoneNumbers?.firstOrNull()?.value thread_toolbar.menu.apply { findItem(R.id.delete).isVisible = threadItems.isNotEmpty() - findItem(R.id.archive).isVisible = threadItems.isNotEmpty() && conversation?.isArchived == false - findItem(R.id.unarchive).isVisible = threadItems.isNotEmpty() && conversation?.isArchived == true - findItem(R.id.rename_conversation).isVisible = participants.size > 1 && conversation != null - findItem(R.id.conversation_details).isVisible = conversation != null + findItem(R.id.restore).isVisible = threadItems.isNotEmpty() && isRecycleBin + findItem(R.id.archive).isVisible = threadItems.isNotEmpty() && conversation?.isArchived == false && !isRecycleBin + findItem(R.id.unarchive).isVisible = threadItems.isNotEmpty() && conversation?.isArchived == true && !isRecycleBin + findItem(R.id.rename_conversation).isVisible = participants.size > 1 && conversation != null && !isRecycleBin + findItem(R.id.conversation_details).isVisible = conversation != null && !isRecycleBin findItem(R.id.block_number).title = addLockedLabelIfNeeded(R.string.block_number) - findItem(R.id.block_number).isVisible = isNougatPlus() - findItem(R.id.dial_number).isVisible = participants.size == 1 && !isSpecialNumber() - findItem(R.id.manage_people).isVisible = !isSpecialNumber() - findItem(R.id.mark_as_unread).isVisible = threadItems.isNotEmpty() + findItem(R.id.block_number).isVisible = isNougatPlus() && !isRecycleBin + findItem(R.id.dial_number).isVisible = participants.size == 1 && !isSpecialNumber() && !isRecycleBin + findItem(R.id.manage_people).isVisible = !isSpecialNumber() && !isRecycleBin + findItem(R.id.mark_as_unread).isVisible = threadItems.isNotEmpty() && !isRecycleBin // allow saving number in cases when we dont have it stored yet and it is a casual readable number findItem(R.id.add_number_to_contact).isVisible = participants.size == 1 && participants.first().name == firstPhoneNumber && firstPhoneNumber.any { it.isDigit() - } + } && !isRecycleBin } } @@ -273,6 +277,7 @@ class ThreadActivity : SimpleActivity() { when (menuItem.itemId) { R.id.block_number -> tryBlocking() R.id.delete -> askConfirmDelete() + R.id.restore -> askConfirmRestoreAll() R.id.archive -> archiveConversation() R.id.unarchive -> unarchiveConversation() R.id.rename_conversation -> renameConversation() @@ -306,7 +311,11 @@ class ThreadActivity : SimpleActivity() { private fun setupCachedMessages(callback: () -> Unit) { ensureBackgroundThread { messages = try { - messagesDB.getThreadMessages(threadId).toMutableList() as ArrayList + if (isRecycleBin) { + messagesDB.getThreadMessagesFromRecycleBin(threadId).toMutableList() as ArrayList + } else { + messagesDB.getThreadMessages(threadId).toMutableList() as ArrayList + } } catch (e: Exception) { ArrayList() } @@ -341,7 +350,10 @@ class ThreadActivity : SimpleActivity() { privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor) val cachedMessagesCode = messages.clone().hashCode() - messages = getMessages(threadId, true) + if (!isRecycleBin) { + val recycledMessages = messagesDB.getThreadMessagesFromRecycleBin(threadId).map { it.id } + messages = getMessages(threadId, true).filter { !recycledMessages.contains(it.id) }.toMutableList() as ArrayList + } val hasParticipantWithoutName = participants.any { contact -> contact.phoneNumbers.map { it.normalizedNumber }.contains(contact.name) @@ -389,8 +401,10 @@ class ThreadActivity : SimpleActivity() { participants.add(contact) } - messages.chunked(30).forEach { currentMessages -> - messagesDB.insertMessages(*currentMessages.toTypedArray()) + if (!isRecycleBin) { + messages.chunked(30).forEach { currentMessages -> + messagesDB.insertMessages(*currentMessages.toTypedArray()) + } } setupAttachmentSizes() @@ -409,7 +423,8 @@ class ThreadActivity : SimpleActivity() { activity = this, recyclerView = thread_messages_list, itemClick = { handleItemClick(it) }, - deleteMessages = { messages, toRecycleBin -> deleteMessages(messages, toRecycleBin) } + isRecycleBin = isRecycleBin, + deleteMessages = { messages, toRecycleBin, fromRecycleBin -> deleteMessages(messages, toRecycleBin, fromRecycleBin) } ) thread_messages_list.adapter = currAdapter @@ -496,7 +511,7 @@ class ThreadActivity : SimpleActivity() { } } - private fun deleteMessages(messagesToRemove: List, toRecycleBin: Boolean) { + private fun deleteMessages(messagesToRemove: List, toRecycleBin: Boolean, fromRecycleBin: Boolean) { val deletePosition = threadItems.indexOf(messagesToRemove.first()) messages.removeAll(messagesToRemove.toSet()) threadItems = getThreadItems() @@ -515,12 +530,13 @@ 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 { if (toRecycleBin) { moveMessageToRecycleBin(messageId) + } else if (fromRecycleBin) { + restoreMessageFromRecycleBin(messageId) } else { deleteMessage(messageId, message.isMMS) } @@ -792,7 +808,7 @@ class ThreadActivity : SimpleActivity() { } private fun maybeDisableShortCodeReply() { - if (isSpecialNumber()) { + if (isSpecialNumber() && !isRecycleBin) { thread_send_message_holder.beGone() reply_disabled_info_holder.beVisible() val textColor = getProperTextColor() @@ -922,7 +938,23 @@ class ThreadActivity : SimpleActivity() { val confirmationMessage = R.string.delete_whole_conversation_confirmation ConfirmationDialog(this, getString(confirmationMessage)) { ensureBackgroundThread { - deleteConversation(threadId) + if (isRecycleBin) { + emptyMessagesRecycleBinForConversation(threadId) + } else { + deleteConversation(threadId) + } + runOnUiThread { + refreshMessages() + finish() + } + } + } + } + + private fun askConfirmRestoreAll() { + ConfirmationDialog(this, "Restore all messages from this conversation?") { + ensureBackgroundThread { + restoreAllMessagesFromRecycleBinForConversation(threadId) runOnUiThread { refreshMessages() finish() @@ -1485,6 +1517,10 @@ class ThreadActivity : SimpleActivity() { @Subscribe(threadMode = ThreadMode.ASYNC) fun refreshMessages(event: Events.RefreshMessages) { + if (isRecycleBin) { + return + } + refreshedSinceSent = true allMessagesFetched = false oldestMessageDate = -1 @@ -1747,6 +1783,12 @@ class ThreadActivity : SimpleActivity() { animateAttachmentButton(rotation = -135f) } + private fun maybeSetupRecycleBinView() { + if (isRecycleBin) { + thread_send_message_holder.beGone() + } + } + private fun hideAttachmentPicker() { attachment_picker_divider.beGone() attachment_picker_holder.apply { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/RecycleBinConversationsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/RecycleBinConversationsAdapter.kt new file mode 100644 index 00000000..9f6505ca --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/RecycleBinConversationsAdapter.kt @@ -0,0 +1,107 @@ +package com.simplemobiletools.smsmessenger.adapters + +import android.view.Menu +import com.simplemobiletools.commons.dialogs.ConfirmationDialog +import com.simplemobiletools.commons.extensions.notificationManager +import com.simplemobiletools.commons.helpers.ensureBackgroundThread +import com.simplemobiletools.commons.views.MyRecyclerView +import com.simplemobiletools.smsmessenger.R +import com.simplemobiletools.smsmessenger.activities.SimpleActivity +import com.simplemobiletools.smsmessenger.extensions.deleteConversation +import com.simplemobiletools.smsmessenger.extensions.restoreAllMessagesFromRecycleBinForConversation +import com.simplemobiletools.smsmessenger.helpers.refreshMessages +import com.simplemobiletools.smsmessenger.models.Conversation + +class RecycleBinConversationsAdapter( + activity: SimpleActivity, recyclerView: MyRecyclerView, onRefresh: () -> Unit, itemClick: (Any) -> Unit +) : BaseConversationsAdapter(activity, recyclerView, onRefresh, itemClick) { + override fun getActionMenuId() = R.menu.cab_recycle_bin_conversations + + override fun prepareActionMode(menu: Menu) {} + + override fun actionItemPressed(id: Int) { + if (selectedKeys.isEmpty()) { + return + } + + when (id) { + R.id.cab_delete -> askConfirmDelete() + R.id.cab_restore -> askConfirmRestore() + R.id.cab_select_all -> selectAll() + } + } + + private fun askConfirmDelete() { + val itemsCnt = selectedKeys.size + val items = resources.getQuantityString(R.plurals.delete_conversations, itemsCnt, itemsCnt) + + val baseString = R.string.deletion_confirmation + val question = String.format(resources.getString(baseString), items) + + ConfirmationDialog(activity, question) { + ensureBackgroundThread { + deleteConversations() + } + } + } + + private fun deleteConversations() { + if (selectedKeys.isEmpty()) { + return + } + + val conversationsToRemove = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList + conversationsToRemove.forEach { + activity.deleteConversation(it.threadId) + activity.notificationManager.cancel(it.threadId.hashCode()) + } + + removeConversationsFromList(conversationsToRemove) + } + + private fun askConfirmRestore() { + val itemsCnt = selectedKeys.size + val items = resources.getQuantityString(R.plurals.delete_conversations, itemsCnt, itemsCnt) + + val question = String.format("Are you sure you want to restore %s?", items) + + ConfirmationDialog(activity, question) { + ensureBackgroundThread { + restoreConversations() + } + } + } + + private fun restoreConversations() { + if (selectedKeys.isEmpty()) { + return + } + + val conversationsToRemove = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList + conversationsToRemove.forEach { + activity.restoreAllMessagesFromRecycleBinForConversation(it.threadId) + } + + removeConversationsFromList(conversationsToRemove) + } + + private fun removeConversationsFromList(removedConversations: List) { + val newList = try { + currentList.toMutableList().apply { removeAll(removedConversations) } + } catch (ignored: Exception) { + currentList.toMutableList() + } + + activity.runOnUiThread { + if (newList.none { selectedKeys.contains(it.hashCode()) }) { + refreshMessages() + finishActMode() + } else { + submitList(newList) + if (newList.isEmpty()) { + refreshMessages() + } + } + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index a68ac478..606bdb76 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -23,6 +23,7 @@ import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.target.Target import com.simplemobiletools.commons.adapters.MyRecyclerViewListAdapter +import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.SimpleContactsHelper import com.simplemobiletools.commons.helpers.ensureBackgroundThread @@ -58,7 +59,8 @@ class ThreadAdapter( activity: SimpleActivity, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit, - val deleteMessages: (messages: List, toRecycleBin: Boolean) -> Unit + val isRecycleBin: Boolean, + val deleteMessages: (messages: List, toRecycleBin: Boolean, fromRecycleBin: Boolean) -> Unit ) : MyRecyclerViewListAdapter(activity, recyclerView, ThreadItemDiffCallback(), itemClick) { private var fontSize = activity.getTextSize() @@ -84,6 +86,7 @@ class ThreadAdapter( findItem(R.id.cab_forward_message).isVisible = isOneItemSelected findItem(R.id.cab_select_text).isVisible = isOneItemSelected && hasText findItem(R.id.cab_properties).isVisible = isOneItemSelected + findItem(R.id.cab_restore).isVisible = isRecycleBin } } @@ -99,6 +102,7 @@ class ThreadAdapter( R.id.cab_forward_message -> forwardMessage() R.id.cab_select_text -> selectText() R.id.cab_delete -> askConfirmDelete() + R.id.cab_restore -> askConfirmRestore() R.id.cab_select_all -> selectAll() R.id.cab_properties -> showMessageDetails() } @@ -206,12 +210,36 @@ class ThreadAdapter( val baseString = R.string.deletion_confirmation val question = String.format(resources.getString(baseString), items) - DeleteConfirmationDialog(activity, question, activity.config.useRecycleBin) { skipRecycleBin -> + DeleteConfirmationDialog(activity, question, activity.config.useRecycleBin && !isRecycleBin) { skipRecycleBin -> ensureBackgroundThread { val messagesToRemove = getSelectedItems() if (messagesToRemove.isNotEmpty()) { - val toRecycleBin = !skipRecycleBin && activity.config.useRecycleBin - deleteMessages(messagesToRemove.filterIsInstance(), toRecycleBin) + val toRecycleBin = !skipRecycleBin && activity.config.useRecycleBin && !isRecycleBin + deleteMessages(messagesToRemove.filterIsInstance(), toRecycleBin, false) + } + } + } + } + + private fun askConfirmRestore() { + val itemsCnt = selectedKeys.size + + // not sure how we can get UnknownFormatConversionException here, so show the error and hope that someone reports it + val items = try { + resources.getQuantityString(R.plurals.delete_messages, itemsCnt, itemsCnt) + } catch (e: Exception) { + activity.showErrorToast(e) + return + } + + val baseString = R.string.deletion_confirmation + val question = String.format("Are you sure you want to restore %s?", items) + + ConfirmationDialog(activity, question) { + ensureBackgroundThread { + val messagesToRestore = getSelectedItems() + if (messagesToRestore.isNotEmpty()) { + deleteMessages(messagesToRestore.filterIsInstance(), false, true) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index 0e04d519..de7d6855 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -679,6 +679,17 @@ fun Context.emptyMessagesRecycleBin() { } } +fun Context.emptyMessagesRecycleBinForConversation(threadId: Long) { + val messages = messagesDB.getThreadMessagesFromRecycleBin(threadId) + for (message in messages) { + deleteMessage(message.id, message.isMMS) + } +} + +fun Context.restoreAllMessagesFromRecycleBinForConversation(threadId: Long) { + messagesDB.deleteThreadMessagesFromRecycleBin(threadId) +} + fun Context.moveMessageToRecycleBin(id: Long) { try { messagesDB.insertRecycleBinEntry(RecycleBinMessage(id, System.currentTimeMillis())) @@ -687,6 +698,14 @@ fun Context.moveMessageToRecycleBin(id: Long) { } } +fun Context.restoreMessageFromRecycleBin(id: Long) { + try { + messagesDB.deleteFromRecycleBin(id) + } catch (e: Exception) { + showErrorToast(e) + } +} + fun Context.updateConversationArchivedStatus(threadId: Long, archived: Boolean) { val uri = Threads.CONTENT_URI val values = ContentValues().apply { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt index 859b555a..390ee5b6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt @@ -42,7 +42,7 @@ const val IS_MMS = "is_mms" const val MESSAGE_ID = "message_id" const val USE_RECYCLE_BIN = "use_recycle_bin" const val LAST_RECYCLE_BIN_CHECK = "last_recycle_bin_check" -const val USE_ARCHIVE = "use_archive" +const val IS_RECYCLE_BIN = "is_recycle_bin" private const val PATH = "com.simplemobiletools.smsmessenger.action." const val MARK_AS_READ = PATH + "mark_as_read" diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt index 9cb6fe68..f8bb9f38 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt @@ -30,6 +30,9 @@ interface MessagesDao { @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND thread_id = :threadId") fun getThreadMessages(threadId: Long): List + @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND thread_id = :threadId") + fun getThreadMessagesFromRecycleBin(threadId: Long): List + @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND thread_id = :threadId AND is_scheduled = 1") fun getScheduledThreadMessages(threadId: Long): List diff --git a/app/src/main/res/menu/cab_recycle_bin_conversations.xml b/app/src/main/res/menu/cab_recycle_bin_conversations.xml index 8ff99d41..2c9a90e5 100644 --- a/app/src/main/res/menu/cab_recycle_bin_conversations.xml +++ b/app/src/main/res/menu/cab_recycle_bin_conversations.xml @@ -12,7 +12,7 @@ + + Date: Thu, 20 Jul 2023 16:20:29 +0200 Subject: [PATCH 07/16] Update recycle bin related strings --- .../activities/RecycleBinConversationsActivity.kt | 2 +- .../smsmessenger/activities/SettingsActivity.kt | 2 +- .../smsmessenger/activities/ThreadActivity.kt | 2 +- .../adapters/RecycleBinConversationsAdapter.kt | 3 ++- .../smsmessenger/adapters/ThreadAdapter.kt | 4 ++-- app/src/main/res/layout/dialog_delete_confirmation.xml | 2 +- app/src/main/res/menu/cab_recycle_bin_conversations.xml | 2 +- app/src/main/res/menu/cab_thread.xml | 2 +- app/src/main/res/menu/menu_thread.xml | 2 +- app/src/main/res/values-ar/strings.xml | 7 +++++++ app/src/main/res/values-az/strings.xml | 7 +++++++ app/src/main/res/values-be/strings.xml | 7 +++++++ app/src/main/res/values-bg/strings.xml | 9 ++++++++- app/src/main/res/values-ca/strings.xml | 7 +++++++ app/src/main/res/values-cr/strings.xml | 7 +++++++ app/src/main/res/values-cs/strings.xml | 7 +++++++ app/src/main/res/values-da/strings.xml | 7 +++++++ app/src/main/res/values-de/strings.xml | 7 +++++++ app/src/main/res/values-el/strings.xml | 7 +++++++ app/src/main/res/values-eo/strings.xml | 7 +++++++ app/src/main/res/values-es/strings.xml | 7 +++++++ app/src/main/res/values-et/strings.xml | 7 +++++++ app/src/main/res/values-fi/strings.xml | 7 +++++++ app/src/main/res/values-fr/strings.xml | 7 +++++++ app/src/main/res/values-gl/strings.xml | 7 +++++++ app/src/main/res/values-hi/strings.xml | 7 +++++++ app/src/main/res/values-hr/strings.xml | 7 +++++++ app/src/main/res/values-hu/strings.xml | 7 +++++++ app/src/main/res/values-in/strings.xml | 7 +++++++ app/src/main/res/values-is/strings.xml | 7 +++++++ app/src/main/res/values-it/strings.xml | 7 +++++++ app/src/main/res/values-iw/strings.xml | 7 +++++++ app/src/main/res/values-ja/strings.xml | 7 +++++++ app/src/main/res/values-lt/strings.xml | 7 +++++++ app/src/main/res/values-lv/strings.xml | 7 +++++++ app/src/main/res/values-mk/strings.xml | 7 +++++++ app/src/main/res/values-ml/strings.xml | 7 +++++++ app/src/main/res/values-nb-rNO/strings.xml | 7 +++++++ app/src/main/res/values-nl/strings.xml | 7 +++++++ app/src/main/res/values-pa-rPK/strings.xml | 7 +++++++ app/src/main/res/values-pl/strings.xml | 7 +++++++ app/src/main/res/values-pt-rBR/strings.xml | 7 +++++++ app/src/main/res/values-pt/strings.xml | 7 +++++++ app/src/main/res/values-ro/strings.xml | 7 +++++++ app/src/main/res/values-ru/strings.xml | 7 +++++++ app/src/main/res/values-sk/strings.xml | 7 +++++++ app/src/main/res/values-sl/strings.xml | 7 +++++++ app/src/main/res/values-sr/strings.xml | 7 +++++++ app/src/main/res/values-sv/strings.xml | 7 +++++++ app/src/main/res/values-ta/strings.xml | 7 +++++++ app/src/main/res/values-th/strings.xml | 7 +++++++ app/src/main/res/values-tr/strings.xml | 7 +++++++ app/src/main/res/values-uk/strings.xml | 7 +++++++ app/src/main/res/values-zh-rCN/strings.xml | 7 +++++++ app/src/main/res/values-zh-rTW/strings.xml | 7 +++++++ app/src/main/res/values/strings.xml | 7 +++++++ 56 files changed, 341 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt index a660dd00..22429285 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/RecycleBinConversationsActivity.kt @@ -90,7 +90,7 @@ class RecycleBinConversationsActivity : SimpleActivity() { } private fun removeAll() { - ConfirmationDialog(this, "", R.string.empty_recycle_bin_confirmation, R.string.yes, R.string.no) { + ConfirmationDialog(this, "", R.string.empty_recycle_bin_messages_confirmation, R.string.yes, R.string.no) { ensureBackgroundThread { emptyMessagesRecycleBin() loadRecycleBinConversations() diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt index 425865ee..681555ea 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt @@ -292,7 +292,7 @@ class SettingsActivity : SimpleActivity() { if (recycleBinMessages == 0) { toast(R.string.recycle_bin_empty) } else { - ConfirmationDialog(this, "", R.string.empty_recycle_bin_confirmation, R.string.yes, R.string.no) { + ConfirmationDialog(this, "", R.string.empty_recycle_bin_messages_confirmation, R.string.yes, R.string.no) { ensureBackgroundThread { emptyMessagesRecycleBin() } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index e9a1d924..9e9e4ebd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -952,7 +952,7 @@ class ThreadActivity : SimpleActivity() { } private fun askConfirmRestoreAll() { - ConfirmationDialog(this, "Restore all messages from this conversation?") { + ConfirmationDialog(this, getString(R.string.restore_confirmation)) { ensureBackgroundThread { restoreAllMessagesFromRecycleBinForConversation(threadId) runOnUiThread { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/RecycleBinConversationsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/RecycleBinConversationsAdapter.kt index 9f6505ca..2f1c3542 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/RecycleBinConversationsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/RecycleBinConversationsAdapter.kt @@ -63,7 +63,8 @@ class RecycleBinConversationsAdapter( val itemsCnt = selectedKeys.size val items = resources.getQuantityString(R.plurals.delete_conversations, itemsCnt, itemsCnt) - val question = String.format("Are you sure you want to restore %s?", items) + val baseString = R.string.restore_confirmation + val question = String.format(resources.getString(baseString), items) ConfirmationDialog(activity, question) { ensureBackgroundThread { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index 606bdb76..cf311db0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -232,8 +232,8 @@ class ThreadAdapter( return } - val baseString = R.string.deletion_confirmation - val question = String.format("Are you sure you want to restore %s?", items) + val baseString = R.string.restore_confirmation + val question = String.format(resources.getString(baseString), items) ConfirmationDialog(activity, question) { ensureBackgroundThread { diff --git a/app/src/main/res/layout/dialog_delete_confirmation.xml b/app/src/main/res/layout/dialog_delete_confirmation.xml index 907a7430..61bd9904 100644 --- a/app/src/main/res/layout/dialog_delete_confirmation.xml +++ b/app/src/main/res/layout/dialog_delete_confirmation.xml @@ -21,6 +21,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/delete_remember_title" - android:text="@string/skip_the_recycle_bin" /> + android:text="@string/skip_the_recycle_bin_messages" /> diff --git a/app/src/main/res/menu/cab_recycle_bin_conversations.xml b/app/src/main/res/menu/cab_recycle_bin_conversations.xml index 2c9a90e5..80915403 100644 --- a/app/src/main/res/menu/cab_recycle_bin_conversations.xml +++ b/app/src/main/res/menu/cab_recycle_bin_conversations.xml @@ -12,7 +12,7 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly هل أنت متأكد أنك تريد حذف كافة رسائل هذه المحادثة؟ Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? محادثة %d diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index bd02cd1d..8c3e9fb3 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 8f90fdea..840a9f7b 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -69,9 +69,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Выдаліць усе паведамленні ў гэтай размове\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d размову diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index aed7a4c7..9fa471a1 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Сигурни ли сте, че искате да изтриете всички съобщения от този разговор\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d разговор @@ -128,4 +135,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index fbf7b9c0..bbb40a7a 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Confirmeu que voleu suprimir tots els missatges d\'aquesta conversa\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversa diff --git a/app/src/main/res/values-cr/strings.xml b/app/src/main/res/values-cr/strings.xml index bd02cd1d..8c3e9fb3 100644 --- a/app/src/main/res/values-cr/strings.xml +++ b/app/src/main/res/values-cr/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index c1b25ede..05b880aa 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -68,9 +68,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Opravdu chcete smazat všechny zprávy v této konverzaci\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d konverzace diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 74a7367a..c90fd5aa 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Er du sikker på, at du vil slette alle beskeder i denne samtale\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d samtale diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ee2b9d24..89214d4f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Sollen wirklich alle Nachrichten dieser Unterhaltung gelöscht werden\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d Unterhaltung diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 0a3b2638..6f7c82f1 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα μηνύματα αυτής της συνομιλίας; Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d συνομιλία diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 9471b0cf..c70c6696 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d konversacio diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0cb42d20..659eeb2d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -68,9 +68,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly ¿Estás seguro que quieres eliminar todos los mensajes en esta conversación\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversación diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index ebbf9b8f..90ce2405 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Kas oled kindel, et soovid kustutada kõik selle vestluse sõnumid\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d vestlus diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 50db49b9..05aa1ad4 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Haluatko varmasti poistaa kaikki tämän keskustelun viestit\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d keskustelu diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4b6d0866..edea80e5 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -68,9 +68,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Voulez-vous vraiment supprimer tous les messages de cette conversation \? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 55c2d34f..96155526 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Ten a certeza de que desexa eliminar todas as mensaxes desta conversa\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversa diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index bd02cd1d..8c3e9fb3 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 9ea37bbb..16c52fd5 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -68,9 +68,16 @@ Nema arhiviranih razgovora Arhiv je uspješno ispražnjen Jeste li ste sigurni da želite isprazniti arhiv? Svi arhivirani razgovori će biti obrisani. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Stvarno želiš izbrisati sve poruke ovog razgovora\? Stvarno želiš arhivirati %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d razgovor diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 561bc61c..c6441dbc 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Biztos, hogy törli az összes üzenetet ebből a beszélgetésből\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d beszélgetést diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index e828d21a..8ff3f89e 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -66,9 +66,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Apakah Anda yakin ingin menghapus semua pesan dari percakapan ini\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d percakapan diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 0c633ffb..7fd80f61 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index bcab8d2d..c41fb31b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -68,9 +68,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Vuoi davvero eliminare tutti i messaggi di questa conversazione\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversazione diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 2d69ad38..e6c197b4 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -69,9 +69,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly האם אתה בטוח שברצונך למחוק את כל ההודעות של השיחה הזו\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? שיחה %d diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 3bca3c5c..0d69eae4 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -66,9 +66,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly 本当にこの会話のすべてのメッセージを削除しますか? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d 件の会話 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index b39d4791..4c0b1327 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Ar tikrai norite ištrinti visas šio pokalbio žinutes\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d pokalbis diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 048f6e81..8fcce080 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -68,9 +68,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index bd02cd1d..8c3e9fb3 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index a2b65c0b..d1dbbd90 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly ഈ സംഭാഷണത്തിലെ എല്ലാ സന്ദേശങ്ങളും ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d സംഭാഷണം diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index bc53dedd..8487e33f 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Er du sikker på at du vil slette alle meldinger fra denne konversasjonen\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d konversasjon diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index fe31236d..bec2723e 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Alle berichten in dit gesprek verwijderen\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d gesprek diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml index 7003cda7..a69e4955 100644 --- a/app/src/main/res/values-pa-rPK/strings.xml +++ b/app/src/main/res/values-pa-rPK/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly تسیں پکے اے، سارے سنیہے مٹاؤ؟ Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index eabbbf34..d8fe63bc 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -69,9 +69,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Czy usunąć wszystkie wiadomości z tej rozmowy\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d rozmowę diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 83f82477..25715556 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -68,9 +68,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Tem certeza que quer deletar todas as mensagens dessa conversa\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversa diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index da820c9a..4c828243 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -68,9 +68,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Tem a certeza de que pretende apagar todas as mensagens desta conversa\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversa diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 50279ed5..1b7fa67d 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -68,9 +68,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Sunteți sigur că doriți să ștergeți toate mesajele din această conversație\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversaţie diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 842108cc..049ffe62 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -69,9 +69,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Удалить все сообщения в этой переписке\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d переписку diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 8cf9d7f6..f374c4c4 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -68,9 +68,16 @@ Nenašli sa žiadne archivované konverzácie Archív bol úspešne vyprázdnený Ste si istý, že chcete vyprázdniť archív? Všetky archivované konverzácie budú navždy odstránené. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Ste si istý, že chcete odstrániť všetky správy tejto konverzácie\? Ste si istý, že chcete archivovať %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d konverzáciu diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 3aed45a2..4cde63cf 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -69,9 +69,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Ste prepričani, da želite izbrisati vsa sporočila tega pogovora\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d pogovor diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 28dd969a..25d20bd9 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -68,9 +68,16 @@ Нема архивираних разговора Архива је успјешно испражнјена Да ли сте сигурни да желите да испразните архиву? Све архивиране поруке ће бити избрисане. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Да ли сте сигурни да желите да избришете све поруке ове конверзације\? Да ли сте сигурни да желите да архивирате %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d разговор diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 038dfed4..23c09c50 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Är du säker på att du vill ta bort alla meddelanden i konversationen\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d konversation diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 6a4da8d0..b7a3de38 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly இந்த உரையாடலின் அனைத்து செய்திகளையும் நிச்சயமாக நீக்க விரும்புகிறீர்களா\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d உரையாடல் diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 46511b66..299c2d4a 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -66,9 +66,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 9dfd7924..58ab1e6e 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Bu görüşmenin tüm mesajlarını silmek istediğinizden emin misiniz\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d görüşme diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e85d92fd..43ada27a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -69,9 +69,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Справді видалити всі повідомлення у цьому листуванні\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d листування diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index c01af643..94a07b05 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -66,9 +66,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly 您确定要删除此对话的所有消息吗\? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d 个对话 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 9b174550..221561a5 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -66,9 +66,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly 您確定要刪除此對話中的所有訊息嗎? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cb057590..73136a74 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -67,9 +67,16 @@ No archived conversations have been found The archive has been emptied successfully Are you sure you want to empty the archive? All archived conversations will be permanently lost. + + Restore + Restore all messages + Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation? Are you sure you want to archive %s? + Are you sure you want to restore all messages of this conversation? + Are you sure you want to restore %s? %d conversation From cc6e9358f6c5e85c5976ae003e61842484f72dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 20 Jul 2023 16:26:00 +0200 Subject: [PATCH 08/16] Ensure recycled messages don't reappear in threads --- .../simplemobiletools/smsmessenger/activities/ThreadActivity.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index 9e9e4ebd..bbb98cbf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -1543,6 +1543,8 @@ class ThreadActivity : SimpleActivity() { val scheduledMessages = messagesDB.getScheduledThreadMessages(threadId) .filterNot { it.isScheduled && it.millis() < System.currentTimeMillis() } addAll(scheduledMessages) + val recycledMessages = messagesDB.getThreadMessagesFromRecycleBin(threadId).toSet() + removeAll(recycledMessages) } messages.filter { !it.isScheduled && !it.isReceivedMessage() && it.id > lastMaxId }.forEach { latestMessage -> From bcb42d0ff58424357364329fda7d50badeee11e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 20 Jul 2023 16:34:05 +0200 Subject: [PATCH 09/16] Ensure recycle bin is ignored when disabled --- .../smsmessenger/activities/MainActivity.kt | 1 + .../smsmessenger/activities/ThreadActivity.kt | 23 +++++++++++++------ .../smsmessenger/interfaces/MessagesDao.kt | 5 +++- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt index d1a5fad3..0c5c567e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -85,6 +85,7 @@ class MainActivity : SimpleActivity() { override fun onResume() { super.onResume() updateMenuColors() + refreshMenuItems() getOrCreateConversationsAdapter().apply { if (storedTextColor != getProperTextColor()) { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index bbb98cbf..cc136d47 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -312,10 +312,14 @@ class ThreadActivity : SimpleActivity() { ensureBackgroundThread { messages = try { if (isRecycleBin) { - messagesDB.getThreadMessagesFromRecycleBin(threadId).toMutableList() as ArrayList + messagesDB.getThreadMessagesFromRecycleBin(threadId) } else { - messagesDB.getThreadMessages(threadId).toMutableList() as ArrayList - } + if (config.useRecycleBin) { + messagesDB.getNonRecycledThreadMessages(threadId) + } else { + messagesDB.getThreadMessages(threadId) + } + }.toMutableList() as ArrayList } catch (e: Exception) { ArrayList() } @@ -351,8 +355,11 @@ class ThreadActivity : SimpleActivity() { val cachedMessagesCode = messages.clone().hashCode() if (!isRecycleBin) { - val recycledMessages = messagesDB.getThreadMessagesFromRecycleBin(threadId).map { it.id } - messages = getMessages(threadId, true).filter { !recycledMessages.contains(it.id) }.toMutableList() as ArrayList + messages = getMessages(threadId, true) + if (config.useRecycleBin) { + val recycledMessages = messagesDB.getThreadMessagesFromRecycleBin(threadId).map { it.id } + messages = messages.filter { !recycledMessages.contains(it.id) }.toMutableList() as ArrayList + } } val hasParticipantWithoutName = participants.any { contact -> @@ -1543,8 +1550,10 @@ class ThreadActivity : SimpleActivity() { val scheduledMessages = messagesDB.getScheduledThreadMessages(threadId) .filterNot { it.isScheduled && it.millis() < System.currentTimeMillis() } addAll(scheduledMessages) - val recycledMessages = messagesDB.getThreadMessagesFromRecycleBin(threadId).toSet() - removeAll(recycledMessages) + if (config.useRecycleBin) { + val recycledMessages = messagesDB.getThreadMessagesFromRecycleBin(threadId).toSet() + removeAll(recycledMessages) + } } messages.filter { !it.isScheduled && !it.isReceivedMessage() && it.id > lastMaxId }.forEach { latestMessage -> diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt index f8bb9f38..3287ab64 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt @@ -27,9 +27,12 @@ interface MessagesDao { @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND recycle_bin_messages.deleted_ts < :timestamp") fun getOldRecycleBinMessages(timestamp: Long): List - @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND thread_id = :threadId") + @Query("SELECT * FROM messages WHERE thread_id = :threadId") fun getThreadMessages(threadId: Long): List + @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND thread_id = :threadId") + fun getNonRecycledThreadMessages(threadId: Long): List + @Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND thread_id = :threadId") fun getThreadMessagesFromRecycleBin(threadId: Long): List From 0a195960536372d9f4f55fa40968dc4086626573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Mon, 24 Jul 2023 14:49:01 +0200 Subject: [PATCH 10/16] Update string for show recycle bin menu option --- app/src/main/res/menu/menu_main.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 08974671..d7cf36cf 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -6,7 +6,7 @@ Date: Tue, 25 Jul 2023 08:08:38 +0200 Subject: [PATCH 11/16] Use capital R in recycle bin for consistency --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-az/strings.xml | 2 +- app/src/main/res/values-be/strings.xml | 2 +- app/src/main/res/values-bg/strings.xml | 2 +- app/src/main/res/values-ca/strings.xml | 2 +- app/src/main/res/values-cr/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-da/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-eo/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-et/strings.xml | 2 +- app/src/main/res/values-fi/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-gl/strings.xml | 2 +- app/src/main/res/values-hi/strings.xml | 2 +- app/src/main/res/values-hr/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 2 +- app/src/main/res/values-is/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-iw/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-lt/strings.xml | 2 +- app/src/main/res/values-lv/strings.xml | 2 +- app/src/main/res/values-mk/strings.xml | 2 +- app/src/main/res/values-ml/strings.xml | 2 +- app/src/main/res/values-nb-rNO/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-pa-rPK/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ro/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-sl/strings.xml | 2 +- app/src/main/res/values-sr/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-ta/strings.xml | 2 +- app/src/main/res/values-th/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 47 files changed, 47 insertions(+), 47 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 4c5a3406..91ce932b 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -74,7 +74,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly هل أنت متأكد أنك تريد حذف كافة رسائل هذه المحادثة؟ diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 8c3e9fb3..127c919c 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 840a9f7b..ce65f7bb 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -72,7 +72,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Выдаліць усе паведамленні ў гэтай размове\? diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 9fa471a1..ceb2fbad 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Сигурни ли сте, че искате да изтриете всички съобщения от този разговор\? diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index cad1defa..f033a4ee 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Confirmeu que voleu suprimir tots els missatges d\'aquesta conversa\? diff --git a/app/src/main/res/values-cr/strings.xml b/app/src/main/res/values-cr/strings.xml index 8c3e9fb3..127c919c 100644 --- a/app/src/main/res/values-cr/strings.xml +++ b/app/src/main/res/values-cr/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 05b880aa..26e59c1c 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Opravdu chcete smazat všechny zprávy v této konverzaci\? diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index c90fd5aa..0132705d 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Er du sikker på, at du vil slette alle beskeder i denne samtale\? diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index afb1bbc9..8bace036 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Sollen wirklich alle Nachrichten dieser Unterhaltung gelöscht werden\? diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 96ec7e33..c65f272a 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα μηνύματα αυτής της συνομιλίας; diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index c70c6696..92590242 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 659eeb2d..f40d133b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly ¿Estás seguro que quieres eliminar todos los mensajes en esta conversación\? diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index be705cd8..5c5bb2c5 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Kas oled kindel, et soovid kustutada kõik selle vestluse sõnumid\? diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 05aa1ad4..4915c82d 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Haluatko varmasti poistaa kaikki tämän keskustelun viestit\? diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index edea80e5..d5238a29 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Voulez-vous vraiment supprimer tous les messages de cette conversation \? diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 96155526..c234ab52 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Ten a certeza de que desexa eliminar todas as mensaxes desta conversa\? diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 8c3e9fb3..127c919c 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 16c52fd5..27f311a9 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Stvarno želiš izbrisati sve poruke ovog razgovora\? diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index c6441dbc..3b7b431a 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Biztos, hogy törli az összes üzenetet ebből a beszélgetésből\? diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 8ff3f89e..3b2f6d81 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -69,7 +69,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Apakah Anda yakin ingin menghapus semua pesan dari percakapan ini\? diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 7fd80f61..59f1a2d0 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c41fb31b..c0cc6c00 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Vuoi davvero eliminare tutti i messaggi di questa conversazione\? diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index e6c197b4..03266073 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -72,7 +72,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly האם אתה בטוח שברצונך למחוק את כל ההודעות של השיחה הזו\? diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 0d69eae4..5850378a 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -69,7 +69,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly 本当にこの会話のすべてのメッセージを削除しますか? diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 4c0b1327..b0e5553b 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Ar tikrai norite ištrinti visas šio pokalbio žinutes\? diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 8fcce080..ab93481a 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 8c3e9fb3..127c919c 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index d1dbbd90..b0d9ab8b 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly ഈ സംഭാഷണത്തിലെ എല്ലാ സന്ദേശങ്ങളും ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ\? diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 8487e33f..1878d6b6 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Er du sikker på at du vil slette alle meldinger fra denne konversasjonen\? diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 66907d44..5a9f79e1 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Alle berichten in dit gesprek verwijderen\? diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml index a69e4955..4b31393b 100644 --- a/app/src/main/res/values-pa-rPK/strings.xml +++ b/app/src/main/res/values-pa-rPK/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly تسیں پکے اے، سارے سنیہے مٹاؤ؟ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index f4f184af..f9220f44 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -72,7 +72,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Czy usunąć wszystkie wiadomości z tej rozmowy\? diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 25715556..8dfed8f3 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Tem certeza que quer deletar todas as mensagens dessa conversa\? diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 87c0cf0c..edcffa5a 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Tem a certeza de que pretende apagar todas as mensagens desta conversa\? diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 1b7fa67d..c9c67e74 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Sunteți sigur că doriți să ștergeți toate mesajele din această conversație\? diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index aef48f67..c1ec88df 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -72,7 +72,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Удалить все сообщения в этой переписке\? diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index f374c4c4..9093c5e0 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Ste si istý, že chcete odstrániť všetky správy tejto konverzácie\? diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 4cde63cf..03bb8e60 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -72,7 +72,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Ste prepričani, da želite izbrisati vsa sporočila tega pogovora\? diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 25d20bd9..40e1adee 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -71,7 +71,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Да ли сте сигурни да желите да избришете све поруке ове конверзације\? diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 50faf3d8..191c6c60 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Är du säker på att du vill ta bort alla meddelanden i konversationen\? diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index b7a3de38..23f7c822 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly இந்த உரையாடலின் அனைத்து செய்திகளையும் நிச்சயமாக நீக்க விரும்புகிறீர்களா\? diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 299c2d4a..9bb49374 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -69,7 +69,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation\? diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 10ab6db1..ebe56539 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Bu görüşmenin tüm mesajlarını silmek istediğinizden emin misiniz\? diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 43ada27a..7e98ea27 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -72,7 +72,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Справді видалити всі повідомлення у цьому листуванні\? diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 01e0bb43..1947b36c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -69,7 +69,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly 您确定要删除此对话的所有消息吗\? diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 221561a5..136da6ab 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -69,7 +69,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly 您確定要刪除此對話中的所有訊息嗎? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 73136a74..730ed6ab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -70,7 +70,7 @@ Restore Restore all messages - Are you sure you want to empty the recycle bin? The messages will be permanently lost. + Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. Skip the Recycle Bin, delete messages directly Are you sure you want to delete all messages of this conversation? From 0ec0b89ceab54bc33df3cf0116fa995215f4bf33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Tue, 25 Jul 2023 08:13:34 +0200 Subject: [PATCH 12/16] Add Croatian strings for recycle-bin --- app/src/main/res/values-hr/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 27f311a9..cb85ea64 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -69,15 +69,15 @@ Arhiv je uspješno ispražnjen Jeste li ste sigurni da želite isprazniti arhiv? Svi arhivirani razgovori će biti obrisani. - Restore - Restore all messages - Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. - Skip the Recycle Bin, delete messages directly + Vrati + Vrati sve poruke + Stvarno želiš isprazniti koš za smeće? Poruke će biti trajno izgubljene. + Preskoči koš za smeće, izbriši poruke odmah Stvarno želiš izbrisati sve poruke ovog razgovora\? Stvarno želiš arhivirati %s? - Are you sure you want to restore all messages of this conversation? - Are you sure you want to restore %s? + Stvarno želiš vratiti sve poruke iz ovog razgovora? + Stvarno želiš vratiti %s? %d razgovor From 3cb3e24e2c8b04dfd098facbcce9c9b542936024 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Tue, 25 Jul 2023 08:16:48 +0200 Subject: [PATCH 13/16] Add Serbian recycle-bin strings --- app/src/main/res/values-sr/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 40e1adee..3af12aeb 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -69,15 +69,15 @@ Архива је успјешно испражнјена Да ли сте сигурни да желите да испразните архиву? Све архивиране поруке ће бити избрисане. - Restore - Restore all messages - Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. - Skip the Recycle Bin, delete messages directly + Врати + Врати све поруке + Да ли сте сигурни да желите испразнити канту за отпазке? Поруке ће бити трајно обрисане. + Прескочи канту за отпатке, обриши поруке директно Да ли сте сигурни да желите да избришете све поруке ове конверзације\? Да ли сте сигурни да желите да архивирате %s? - Are you sure you want to restore all messages of this conversation? - Are you sure you want to restore %s? + Да ли сте сигурни да желите да вратите све поруке ове конверзације? + Да ли сте сигурни да желите да вратите %s? %d разговор From 24756285ccec3fafcc8c62629acfd0963f33ca28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Tue, 25 Jul 2023 14:54:32 +0200 Subject: [PATCH 14/16] Use recycle bin string for deletion when recycle bin is active --- .../smsmessenger/adapters/ThreadAdapter.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index cf311db0..67fae1e3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -207,7 +207,11 @@ class ThreadAdapter( return } - val baseString = R.string.deletion_confirmation + val baseString = if (activity.config.useRecycleBin && !isRecycleBin) { + R.string.move_to_recycle_bin_confirmation + } else { + R.string.deletion_confirmation + } val question = String.format(resources.getString(baseString), items) DeleteConfirmationDialog(activity, question, activity.config.useRecycleBin && !isRecycleBin) { skipRecycleBin -> From b85661eb4d91298dc43bb67031558be3d0f5ec2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Tue, 25 Jul 2023 15:38:24 +0200 Subject: [PATCH 15/16] Always calculate snippet when reading conversations This ensures that correct snippet is displayed, because of moving messages to recycle bin. This must be done for conversations in recycle bin as well as regular conversations, because both can be affected, depending on which messages are moved to recycle bin. --- .../interfaces/ConversationsDao.kt | 25 ++++++++++++++----- .../models/ConversationWithSnippetOverride.kt | 16 ++++++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ConversationWithSnippetOverride.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt index 271cc83b..e5e1259a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt @@ -2,20 +2,33 @@ package com.simplemobiletools.smsmessenger.interfaces import androidx.room.* import com.simplemobiletools.smsmessenger.models.Conversation +import com.simplemobiletools.smsmessenger.models.ConversationWithSnippetOverride @Dao interface ConversationsDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertOrUpdate(conversation: Conversation): Long - @Query("SELECT * FROM conversations WHERE archived = 0") - fun getNonArchived(): List + @Query("SELECT (SELECT body FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND messages.thread_id = conversations.thread_id ORDER BY messages.date DESC LIMIT 1) as new_snippet, * FROM conversations WHERE archived = 0") + fun getNonArchivedWithLatestSnippet(): List - @Query("SELECT * FROM conversations WHERE archived = 1") - fun getAllArchived(): List + fun getNonArchived(): List { + return getNonArchivedWithLatestSnippet().map { it.toConversation() } + } - @Query("SELECT * FROM conversations WHERE (SELECT COUNT(*) FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND messages.thread_id = conversations.thread_id) > 0") - fun getAllWithMessagesInRecycleBin(): List + @Query("SELECT (SELECT body FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND messages.thread_id = conversations.thread_id ORDER BY messages.date DESC LIMIT 1) as new_snippet, * FROM conversations WHERE archived = 1") + fun getAllArchivedWithLatestSnippet(): List + + fun getAllArchived(): List { + return getAllArchivedWithLatestSnippet().map { it.toConversation() } + } + + @Query("SELECT (SELECT body FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND messages.thread_id = conversations.thread_id ORDER BY messages.date DESC LIMIT 1) as new_snippet, * FROM conversations WHERE (SELECT COUNT(*) FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND messages.thread_id = conversations.thread_id) > 0") + fun getAllWithMessagesInRecycleBinWithLatestSnippet(): List + + fun getAllWithMessagesInRecycleBin(): List { + return getAllWithMessagesInRecycleBinWithLatestSnippet().map { it.toConversation() } + } @Query("SELECT * FROM conversations WHERE thread_id = :threadId") fun getConversationWithThreadId(threadId: Long): Conversation? diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ConversationWithSnippetOverride.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ConversationWithSnippetOverride.kt new file mode 100644 index 00000000..ede5e4e5 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ConversationWithSnippetOverride.kt @@ -0,0 +1,16 @@ +package com.simplemobiletools.smsmessenger.models + +import androidx.room.ColumnInfo +import androidx.room.Embedded + +data class ConversationWithSnippetOverride( + @ColumnInfo(name = "new_snippet") val snippet: String?, + @Embedded val conversation: Conversation +) { + fun toConversation() = + if (snippet == null) { + conversation + } else { + conversation.copy(snippet = snippet) + } +} From c3ed0dfddf5d685c6e96ba3ceb27792011b7e36d Mon Sep 17 00:00:00 2001 From: Tibor Kaputa Date: Tue, 25 Jul 2023 16:00:02 +0200 Subject: [PATCH 16/16] updating the slovak strings --- app/src/main/res/values-sk/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 9093c5e0..e7dbfe21 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -69,15 +69,15 @@ Archív bol úspešne vyprázdnený Ste si istý, že chcete vyprázdniť archív? Všetky archivované konverzácie budú navždy odstránené. - Restore - Restore all messages - Are you sure you want to empty the Recycle Bin? The messages will be permanently lost. - Skip the Recycle Bin, delete messages directly + Obnoviť + Obnoviť všetky správy + Ste si istý, že chcete vysypať odpadkový kôš? Správy budú navždy stratené. + Vynechať odpadkový kôš, priamo vymazať správy Ste si istý, že chcete odstrániť všetky správy tejto konverzácie\? Ste si istý, že chcete archivovať %s? - Are you sure you want to restore all messages of this conversation? - Are you sure you want to restore %s? + Ste si istý, že chcete obnoviť všetky správy tejto konverzácie? + Ste si istý, že chcete obnoviť %s? %d konverzáciu