Merge pull request #700 from esensar/feature/451-recycle-bin

Add support for recycle bin for messages
This commit is contained in:
Tibor Kaputa
2023-07-25 16:00:47 +02:00
committed by GitHub
71 changed files with 1186 additions and 55 deletions

View File

@@ -51,6 +51,13 @@
android:configChanges="orientation"
android:exported="true" />
<activity
android:name=".activities.RecycleBinConversationsActivity"
android:configChanges="orientation"
android:exported="true"
android:label="@string/recycle_bin"
android:parentActivityName=".activities.MainActivity" />
<activity
android:name=".activities.ArchivedConversationsActivity"
android:configChanges="orientation"

View File

@@ -53,6 +53,7 @@ class MainActivity : SimpleActivity() {
updateMaterialActivityViews(main_coordinator, conversations_list, useTransparentNavigation = true, useTopSearchMenu = true)
if (savedInstanceState == null) {
checkAndDeleteOldRecycleBinMessages()
handleAppPasswordProtection {
wasProtectionHandled = it
if (it) {
@@ -73,6 +74,7 @@ class MainActivity : SimpleActivity() {
override fun onResume() {
super.onResume()
updateMenuColors()
refreshMenuItems()
getOrCreateConversationsAdapter().apply {
if (storedTextColor != getProperTextColor()) {
@@ -164,6 +166,7 @@ class MainActivity : SimpleActivity() {
main_menu.getToolbar().setOnMenuItemClickListener { menuItem ->
when (menuItem.itemId) {
R.id.more_apps_from_us -> launchMoreAppsFromUsIntent()
R.id.show_recycle_bin -> launchRecycleBin()
R.id.show_archived -> launchArchivedConversations()
R.id.settings -> launchSettings()
R.id.about -> launchAbout()
@@ -176,6 +179,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
}
}
@@ -548,6 +552,11 @@ class MainActivity : SimpleActivity() {
}
}
private fun launchRecycleBin() {
hideKeyboard()
startActivity(Intent(applicationContext, RecycleBinConversationsActivity::class.java))
}
private fun launchArchivedConversations() {
hideKeyboard()
startActivity(Intent(applicationContext, ArchivedConversationsActivity::class.java))

View File

@@ -0,0 +1,163 @@
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.adapters.RecycleBinConversationsAdapter
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 updateOptionsMenu(conversations: ArrayList<Conversation>) {
recycle_bin_toolbar.menu.apply {
findItem(R.id.empty_recycle_bin).isVisible = conversations.isNotEmpty()
}
}
private fun updateMenuColors() {
updateStatusbarColor(getProperBackgroundColor())
}
private fun loadRecycleBinConversations() {
ensureBackgroundThread {
val conversations = try {
conversationsDB.getAllWithMessagesInRecycleBin().toMutableList() as ArrayList<Conversation>
} 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_messages_confirmation, R.string.yes, R.string.no) {
ensureBackgroundThread {
emptyMessagesRecycleBin()
loadRecycleBinConversations()
}
}
}
private fun getOrCreateConversationsAdapter(): RecycleBinConversationsAdapter {
var currAdapter = conversations_list.adapter
if (currAdapter == null) {
hideKeyboard()
currAdapter = RecycleBinConversationsAdapter(
activity = this,
recyclerView = conversations_list,
onRefresh = { notifyDatasetChanged() },
itemClick = { handleConversationClick(it) }
)
conversations_list.adapter = currAdapter
if (areSystemAnimationsEnabled) {
conversations_list.scheduleLayoutAnimation()
}
}
return currAdapter as RecycleBinConversationsAdapter
}
private fun setupConversations(conversations: ArrayList<Conversation>) {
val sortedConversations = conversations.sortedWith(
compareByDescending<Conversation> { config.pinnedConversations.contains(it.threadId.toString()) }
.thenByDescending { it.date }
).toMutableList() as ArrayList<Conversation>
showOrHidePlaceholder(conversations.isEmpty())
updateOptionsMenu(conversations)
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)
putExtra(IS_RECYCLE_BIN, true)
startActivity(this)
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun refreshMessages(event: Events.RefreshMessages) {
loadRecycleBinConversations()
}
}

View File

@@ -14,6 +14,8 @@ import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.smsmessenger.R
import com.simplemobiletools.smsmessenger.dialogs.ExportMessagesDialog
import com.simplemobiletools.smsmessenger.extensions.config
import com.simplemobiletools.smsmessenger.extensions.emptyMessagesRecycleBin
import com.simplemobiletools.smsmessenger.extensions.messagesDB
import com.simplemobiletools.smsmessenger.helpers.*
import com.simplemobiletools.smsmessenger.models.*
import kotlinx.android.synthetic.main.activity_settings.*
@@ -24,6 +26,7 @@ import kotlin.system.exitProcess
class SettingsActivity : SimpleActivity() {
private var blockedNumbersAtPause = -1
private var recycleBinMessages = 0
private val messagesFileType = "application/json"
private val messageImportFileTypes = listOf("application/json", "application/xml", "text/xml")
@@ -57,6 +60,8 @@ class SettingsActivity : SimpleActivity() {
setupGroupMessageAsMMS()
setupLockScreenVisibility()
setupMMSFileSizeLimit()
setupUseRecycleBin()
setupEmptyRecycleBin()
setupAppPasswordProtection()
setupMessagesExport()
setupMessagesImport()
@@ -71,6 +76,7 @@ class SettingsActivity : SimpleActivity() {
settings_general_settings_label,
settings_outgoing_messages_label,
settings_notifications_label,
settings_recycle_bin_label,
settings_security_label,
settings_migrating_label
).forEach {
@@ -321,6 +327,45 @@ 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_messages_confirmation, R.string.yes, R.string.no) {
ensureBackgroundThread {
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 {

View File

@@ -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 messageToResend: Long? = null
@@ -141,6 +142,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()
@@ -164,6 +166,7 @@ class ThreadActivity : SimpleActivity() {
setupAttachmentPickerView()
setupKeyboardListener()
hideAttachmentPicker()
maybeSetupRecycleBinView()
}
override fun onResume() {
@@ -248,20 +251,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
}
}
@@ -274,6 +278,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()
@@ -308,7 +313,15 @@ class ThreadActivity : SimpleActivity() {
private fun setupCachedMessages(callback: () -> Unit) {
ensureBackgroundThread {
messages = try {
messagesDB.getThreadMessages(threadId).toMutableList() as ArrayList<Message>
if (isRecycleBin) {
messagesDB.getThreadMessagesFromRecycleBin(threadId)
} else {
if (config.useRecycleBin) {
messagesDB.getNonRecycledThreadMessages(threadId)
} else {
messagesDB.getThreadMessages(threadId)
}
}.toMutableList() as ArrayList<Message>
} catch (e: Exception) {
ArrayList()
}
@@ -343,7 +356,13 @@ class ThreadActivity : SimpleActivity() {
privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor)
val cachedMessagesCode = messages.clone().hashCode()
messages = getMessages(threadId, true)
if (!isRecycleBin) {
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<Message>
}
}
val hasParticipantWithoutName = participants.any { contact ->
contact.phoneNumbers.map { it.normalizedNumber }.contains(contact.name)
@@ -391,8 +410,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()
@@ -411,7 +432,8 @@ class ThreadActivity : SimpleActivity() {
activity = this,
recyclerView = thread_messages_list,
itemClick = { handleItemClick(it) },
deleteMessages = { deleteMessages(it) }
isRecycleBin = isRecycleBin,
deleteMessages = { messages, toRecycleBin, fromRecycleBin -> deleteMessages(messages, toRecycleBin, fromRecycleBin) }
)
thread_messages_list.adapter = currAdapter
@@ -501,7 +523,7 @@ class ThreadActivity : SimpleActivity() {
}
}
private fun deleteMessages(messagesToRemove: List<Message>) {
private fun deleteMessages(messagesToRemove: List<Message>, toRecycleBin: Boolean, fromRecycleBin: Boolean) {
val deletePosition = threadItems.indexOf(messagesToRemove.first())
messages.removeAll(messagesToRemove.toSet())
threadItems = getThreadItems()
@@ -523,7 +545,13 @@ class ThreadActivity : SimpleActivity() {
deleteScheduledMessage(messageId)
cancelScheduleSendPendingIntent(messageId)
} else {
deleteMessage(messageId, message.isMMS)
if (toRecycleBin) {
moveMessageToRecycleBin(messageId)
} else if (fromRecycleBin) {
restoreMessageFromRecycleBin(messageId)
} else {
deleteMessage(messageId, message.isMMS)
}
}
}
updateLastConversationMessage(threadId)
@@ -793,7 +821,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()
@@ -923,7 +951,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, getString(R.string.restore_confirmation)) {
ensureBackgroundThread {
restoreAllMessagesFromRecycleBinForConversation(threadId)
runOnUiThread {
refreshMessages()
finish()
@@ -1486,6 +1530,10 @@ class ThreadActivity : SimpleActivity() {
@Subscribe(threadMode = ThreadMode.ASYNC)
fun refreshMessages(event: Events.RefreshMessages) {
if (isRecycleBin) {
return
}
refreshedSinceSent = true
allMessagesFetched = false
oldestMessageDate = -1
@@ -1508,6 +1556,10 @@ class ThreadActivity : SimpleActivity() {
val scheduledMessages = messagesDB.getScheduledThreadMessages(threadId)
.filterNot { it.isScheduled && it.millis() < System.currentTimeMillis() }
addAll(scheduledMessages)
if (config.useRecycleBin) {
val recycledMessages = messagesDB.getThreadMessagesFromRecycleBin(threadId).toSet()
removeAll(recycledMessages)
}
}
messages.filter { !it.isScheduled && !it.isReceivedMessage() && it.id > lastMaxId }.forEach { latestMessage ->
@@ -1748,6 +1800,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 {

View File

@@ -0,0 +1,108 @@
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<Conversation>
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 baseString = R.string.restore_confirmation
val question = String.format(resources.getString(baseString), items)
ConfirmationDialog(activity, question) {
ensureBackgroundThread {
restoreConversations()
}
}
}
private fun restoreConversations() {
if (selectedKeys.isEmpty()) {
return
}
val conversationsToRemove = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList<Conversation>
conversationsToRemove.forEach {
activity.restoreAllMessagesFromRecycleBinForConversation(it.threadId)
}
removeConversationsFromList(conversationsToRemove)
}
private fun removeConversationsFromList(removedConversations: List<Conversation>) {
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()
}
}
}
}
}

View File

@@ -33,6 +33,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 +59,8 @@ class ThreadAdapter(
activity: SimpleActivity,
recyclerView: MyRecyclerView,
itemClick: (Any) -> Unit,
val deleteMessages: (messages: List<Message>) -> Unit
val isRecycleBin: Boolean,
val deleteMessages: (messages: List<Message>, toRecycleBin: Boolean, fromRecycleBin: Boolean) -> Unit
) : MyRecyclerViewListAdapter<ThreadItem>(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()
}
@@ -203,14 +207,43 @@ 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 ->
ensureBackgroundThread {
val messagesToRemove = getSelectedItems()
if (messagesToRemove.isNotEmpty()) {
val toRecycleBin = !skipRecycleBin && activity.config.useRecycleBin && !isRecycleBin
deleteMessages(messagesToRemove.filterIsInstance<Message>(), 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.restore_confirmation
val question = String.format(resources.getString(baseString), items)
ConfirmationDialog(activity, question) {
ensureBackgroundThread {
val messagesToRemove = getSelectedItems()
if (messagesToRemove.isNotEmpty()) {
deleteMessages(messagesToRemove.filterIsInstance<Message>())
val messagesToRestore = getSelectedItems()
if (messagesToRestore.isNotEmpty()) {
deleteMessages(messagesToRestore.filterIsInstance<Message>(), false, true)
}
}
}

View File

@@ -14,7 +14,7 @@ import com.simplemobiletools.smsmessenger.interfaces.MessageAttachmentsDao
import com.simplemobiletools.smsmessenger.interfaces.MessagesDao
import com.simplemobiletools.smsmessenger.models.*
@Database(entities = [Conversation::class, Attachment::class, MessageAttachment::class, Message::class], version = 8)
@Database(entities = [Conversation::class, Attachment::class, MessageAttachment::class, Message::class, RecycleBinMessage::class], version = 8)
@TypeConverters(Converters::class)
abstract class MessagesDatabase : RoomDatabase() {
@@ -118,6 +118,8 @@ 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 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`)")
}
}
}

View File

@@ -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)
}
}

View File

@@ -657,6 +657,55 @@ 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.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()))
} catch (e: Exception) {
showErrorToast(e)
}
}
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 {

View File

@@ -104,11 +104,11 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getInt(SOFT_KEYBOARD_HEIGHT, context.getDefaultKeyboardHeight())
set(keyboardHeight) = prefs.edit().putInt(SOFT_KEYBOARD_HEIGHT, keyboardHeight).apply()
var useArchive: Boolean
get() = prefs.getBoolean(USE_ARCHIVE, false)
set(useArchive) = prefs.edit().putBoolean(USE_ARCHIVE, useArchive).apply()
var useRecycleBin: Boolean
get() = prefs.getBoolean(USE_RECYCLE_BIN, false)
set(useRecycleBin) = prefs.edit().putBoolean(USE_RECYCLE_BIN, useRecycleBin).apply()
var lastArchiveCheck: Long
get() = prefs.getLong(LAST_ARCHIVE_CHECK, 0L)
set(lastArchiveCheck) = prefs.edit().putLong(LAST_ARCHIVE_CHECK, lastArchiveCheck).apply()
var lastRecycleBinCheck: Long
get() = prefs.getLong(LAST_RECYCLE_BIN_CHECK, 0L)
set(lastRecycleBinCheck) = prefs.edit().putLong(LAST_RECYCLE_BIN_CHECK, lastRecycleBinCheck).apply()
}

View File

@@ -40,8 +40,9 @@ 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_ARCHIVE = "use_archive"
const val LAST_ARCHIVE_CHECK = "last_archive_check"
const val USE_RECYCLE_BIN = "use_recycle_bin"
const val LAST_RECYCLE_BIN_CHECK = "last_recycle_bin_check"
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"

View File

@@ -2,17 +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<Conversation>
@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<ConversationWithSnippetOverride>
@Query("SELECT * FROM conversations WHERE archived = 1")
fun getAllArchived(): List<Conversation>
fun getNonArchived(): List<Conversation> {
return getNonArchivedWithLatestSnippet().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 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<ConversationWithSnippetOverride>
fun getAllArchived(): List<Conversation> {
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<ConversationWithSnippetOverride>
fun getAllWithMessagesInRecycleBin(): List<Conversation> {
return getAllWithMessagesInRecycleBinWithLatestSnippet().map { it.toConversation() }
}
@Query("SELECT * FROM conversations WHERE thread_id = :threadId")
fun getConversationWithThreadId(threadId: Long): Conversation?

View File

@@ -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,30 @@ interface MessagesDao {
@Query("SELECT * FROM messages")
fun getAll(): List<Message>
@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<Message>
@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<Message>
@Query("SELECT * FROM messages WHERE thread_id = :threadId")
fun getThreadMessages(threadId: Long): List<Message>
@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")
fun getNonRecycledThreadMessages(threadId: Long): List<Message>
@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<Message>
@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<Message>
@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<Message>
@@ -44,11 +60,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()

View File

@@ -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)
}
}

View File

@@ -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
)

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/recycle_bin_coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/recycle_bin_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:title="@string/recycle_bin"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
<RelativeLayout
android:id="@+id/recycle_bin_nested_scrollview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="?attr/actionBarSize"
android:fillViewport="true"
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/recycle_bin_coordinator_wrapper"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/recycle_bin_holder"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/conversations_progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:indeterminate="true"
android:visibility="gone"
app:hideAnimationBehavior="outward"
app:showAnimationBehavior="inward"
app:showDelay="250"
tools:visibility="visible" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/no_conversations_placeholder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/bigger_margin"
android:alpha="0.8"
android:gravity="center"
android:paddingLeft="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin"
android:text="@string/no_conversations_found"
android:textSize="@dimen/bigger_text_size"
android:textStyle="italic"
android:visibility="gone" />
<com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
android:id="@+id/conversations_fastscroller"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/conversations_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:layoutAnimation="@anim/layout_animation"
android:overScrollMode="ifContentScrolls"
android:scrollbars="none"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
</com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -361,6 +361,55 @@
android:id="@+id/settings_outgoing_messages_divider"
layout="@layout/divider" />
<TextView
android:id="@+id/settings_recycle_bin_label"
style="@style/SettingsSectionLabelStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/recycle_bin" />
<RelativeLayout
android:id="@+id/settings_use_recycle_bin_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_use_recycle_bin"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/move_items_into_recycle_bin" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_empty_recycle_bin_holder"
style="@style/SettingsHolderTextViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_empty_recycle_bin_label"
style="@style/SettingsTextLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/empty_recycle_bin" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_empty_recycle_bin_size"
style="@style/SettingsTextValueStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_empty_recycle_bin_label"
tools:text="0 B" />
</RelativeLayout>
<include
android:id="@+id/settings_recycle_bin_divider"
layout="@layout/divider" />
<TextView
android:id="@+id/settings_security_label"
style="@style/SettingsSectionLabelStyle"

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/delete_remember_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/big_margin"
android:paddingTop="@dimen/big_margin"
android:paddingRight="@dimen/big_margin">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/delete_remember_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/small_margin"
android:paddingBottom="@dimen/activity_margin"
android:text="@string/delete_whole_conversation_confirmation"
android:textSize="@dimen/bigger_text_size" />
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/skip_the_recycle_bin_checkbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/delete_remember_title"
android:text="@string/skip_the_recycle_bin_messages" />
</RelativeLayout>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="AppCompatResource,AlwaysShowAction">
<item
android:id="@+id/cab_delete"
android:icon="@drawable/ic_delete_vector"
android:showAsAction="always"
android:title="@string/delete"
app:showAsAction="always" />
<item
android:id="@+id/cab_restore"
android:showAsAction="never"
android:title="@string/restore_all_messages"
app:showAsAction="never" />
<item
android:id="@+id/cab_select_all"
android:icon="@drawable/ic_select_all_vector"
android:title="@string/select_all"
app:showAsAction="ifRoom" />
</menu>

View File

@@ -31,6 +31,11 @@
android:icon="@drawable/ic_info_vector"
android:title="@string/properties"
app:showAsAction="ifRoom" />
<item
android:id="@+id/cab_restore"
android:showAsAction="never"
android:title="@string/restore"
app:showAsAction="never" />
<item
android:id="@+id/cab_forward_message"
android:showAsAction="never"

View File

@@ -3,6 +3,11 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="AppCompatResource,AlwaysShowAction">
<item
android:id="@+id/show_recycle_bin"
android:showAsAction="never"
android:title="@string/show_the_recycle_bin"
app:showAsAction="never" />
<item
android:id="@+id/show_archived"
android:showAsAction="never"

View File

@@ -47,6 +47,11 @@
android:showAsAction="never"
android:title="@string/block_number"
app:showAsAction="never" />
<item
android:id="@+id/restore"
android:showAsAction="never"
android:title="@string/restore_all_messages"
app:showAsAction="never" />
<item
android:id="@+id/mark_as_unread"
android:showAsAction="never"

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:ignore="AppCompatResource">
<item
android:id="@+id/empty_recycle_bin"
android:icon="@drawable/ic_delete_vector"
android:showAsAction="ifRoom"
android:title="@string/empty_recycle_bin"
app:showAsAction="ifRoom" />
</menu>

View File

@@ -71,9 +71,16 @@
<string name="no_archived_conversations">لم يتم العثور على محادثات مؤرشفة</string>
<string name="archive_emptied_successfully">تم إفراغ الأرشيف بنجاح</string>
<string name="empty_archive_confirmation">هل أنت متأكد من أنك تريد إفراغ الأرشيف؟ ستفقد جميع المحادثات المؤرشفة نهائيا.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">هل أنت متأكد أنك تريد حذف كافة رسائل هذه المحادثة؟</string>
<string name="archive_confirmation">هل أنت متأكد من أنك تريد أرشفة %s؟</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="zero">محادثة %d</item>
@@ -140,4 +147,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>
</resources>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversation</item>

View File

@@ -69,9 +69,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Выдаліць усе паведамленні ў гэтай размове\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d размову</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Сигурни ли сте, че искате да изтриете всички съобщения от този разговор\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d разговор</item>
@@ -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
-->
</resources>
</resources>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No s\'ha trobat cap conversa arxivada</string>
<string name="archive_emptied_successfully">L\'arxiu s\'ha buidat correctament</string>
<string name="empty_archive_confirmation">Segur que voleu buidar l\'arxiu\? Totes les converses arxivades es perdran permanentment.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Confirmeu que voleu suprimir tots els missatges d\'aquesta conversa\?</string>
<string name="archive_confirmation">Segur que voleu arxivar %s\?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversa</item>
@@ -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
-->
</resources>
</resources>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversation</item>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Opravdu chcete smazat všechny zprávy v této konverzaci\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d konverzace</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Er du sikker på, at du vil slette alle beskeder i denne samtale\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d samtale</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">Es wurden keine archivierten Unterhaltungen gefunden</string>
<string name="archive_emptied_successfully">Das Archiv wurde erfolgreich geleert</string>
<string name="empty_archive_confirmation">Das Archiv wirklich leeren\? Alle archivierten Unterhaltungen sind dann unwiederbringlich gelöscht.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Sollen wirklich alle Nachrichten dieser Unterhaltung gelöscht werden\?</string>
<string name="archive_confirmation">%s wirklich archivieren\?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d Unterhaltung</item>
@@ -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
-->
</resources>
</resources>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">Δεν βρέθηκαν αρχειοθετημένες συνομιλίες</string>
<string name="archive_emptied_successfully">Το αρχείο άδειασε με επιτυχία</string>
<string name="empty_archive_confirmation">Είστε σίγουροι ότι θέλετε να αδειάσετε το αρχείο; Όλες οι αρχειοθετημένες συνομιλίες θα χαθούν οριστικά.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα μηνύματα αυτής της συνομιλίας;</string>
<string name="archive_confirmation">Σίγουρα θέλετε να αρχειοθετήσετε %s;</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d συνομιλία</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d konversacio</item>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">¿Estás seguro que quieres eliminar todos los mensajes en esta conversación\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversación</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">Arhiveeritud vestlusi ei leidu</string>
<string name="archive_emptied_successfully">Arhiiv on edukalt tühjendatud</string>
<string name="empty_archive_confirmation">Kas kindlasti soovid arhiivi tühjendada\? Kõik arhiveeritud vestlused lähevad jäädavalt kaotsi.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Kas oled kindel, et soovid kustutada kõik selle vestluse sõnumid\?</string>
<string name="archive_confirmation">Kas sa oled kindel, et soovid lisada „%s“ arhiivi\?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d vestlus</item>
@@ -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
-->
</resources>
</resources>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Haluatko varmasti poistaa kaikki tämän keskustelun viestit\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d keskustelu</item>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Voulez-vous vraiment supprimer tous les messages de cette conversation \?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversation</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Ten a certeza de que desexa eliminar todas as mensaxes desta conversa\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversa</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversation</item>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">Nema arhiviranih razgovora</string>
<string name="archive_emptied_successfully">Arhiv je uspješno ispražnjen</string>
<string name="empty_archive_confirmation">Jeste li ste sigurni da želite isprazniti arhiv? Svi arhivirani razgovori će biti obrisani.</string>
<!-- Recycle bin -->
<string name="restore">Vrati</string>
<string name="restore_all_messages">Vrati sve poruke</string>
<string name="empty_recycle_bin_messages_confirmation">Stvarno želiš isprazniti koš za smeće? Poruke će biti trajno izgubljene.</string>
<string name="skip_the_recycle_bin_messages">Preskoči koš za smeće, izbriši poruke odmah</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Stvarno želiš izbrisati sve poruke ovog razgovora\?</string>
<string name="archive_confirmation">Stvarno želiš arhivirati %s?</string>
<string name="restore_whole_conversation_confirmation">Stvarno želiš vratiti sve poruke iz ovog razgovora?</string>
<string name="restore_confirmation">Stvarno želiš vratiti %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d razgovor</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Biztos, hogy törli az összes üzenetet ebből a beszélgetésből\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d beszélgetést</item>

View File

@@ -66,9 +66,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Apakah Anda yakin ingin menghapus semua pesan dari percakapan ini\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="other">%d percakapan</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversation</item>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Vuoi davvero eliminare tutti i messaggi di questa conversazione\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversazione</item>

View File

@@ -69,9 +69,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">האם אתה בטוח שברצונך למחוק את כל ההודעות של השיחה הזו\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">שיחה %d</item>

View File

@@ -66,9 +66,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">本当にこの会話のすべてのメッセージを削除しますか?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="other">%d 件の会話</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Ar tikrai norite ištrinti visas šio pokalbio žinutes\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d pokalbis</item>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="zero">%d conversation</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversation</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">ഈ സംഭാഷണത്തിലെ എല്ലാ സന്ദേശങ്ങളും ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d സംഭാഷണം</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Er du sikker på at du vil slette alle meldinger fra denne konversasjonen\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d konversasjon</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">Geen gearchiveerde gesprekken gevonden</string>
<string name="archive_emptied_successfully">Archief is gewist</string>
<string name="empty_archive_confirmation">Het archief wissen\? Alle gearchiveerde gesprekken zullen permanent verwijderd worden.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Alle berichten in dit gesprek verwijderen\?</string>
<string name="archive_confirmation">%s archiveren\?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d gesprek</item>
@@ -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
-->
</resources>
</resources>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">تسیں پکے اے، سارے سنیہے مٹاؤ؟</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversation</item>

View File

@@ -69,9 +69,16 @@
<string name="no_archived_conversations">Nie znaleziono zarchiwizowanych rozmów</string>
<string name="archive_emptied_successfully">Archiwum zostało opróżnione</string>
<string name="empty_archive_confirmation">Czy opróżnić archiwum\? Wszystkie zarchiwizowane rozmowy zostaną utracone bezpowrotnie.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Czy usunąć wszystkie wiadomości z tej rozmowy\?</string>
<string name="archive_confirmation">Czy zarchiwizować %s\?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d rozmowę</item>
@@ -134,4 +141,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>
</resources>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Tem certeza que quer deletar todas as mensagens dessa conversa\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversa</item>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">Não existem conversas arquivadas</string>
<string name="archive_emptied_successfully">O arquivo foi limpo com sucesso</string>
<string name="empty_archive_confirmation">Tem a certeza de que pretende limpar o arquivo\? Todas as conversas arquivadas serão eliminadas.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Tem a certeza de que pretende apagar todas as mensagens desta conversa\?</string>
<string name="archive_confirmation">Tem a certeza de que pretende arquivar %s\?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversa</item>
@@ -131,4 +138,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>
</resources>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Sunteți sigur că doriți să ștergeți toate mesajele din această conversație\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversaţie</item>

View File

@@ -69,9 +69,16 @@
<string name="no_archived_conversations">Нет архивных переписок</string>
<string name="archive_emptied_successfully">Архив успешно очищен</string>
<string name="empty_archive_confirmation">Очистить архив\? Все архивные переписки будут безвозвратно потеряны.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Удалить все сообщения в этой переписке\?</string>
<string name="archive_confirmation">Архивировать %s\?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d переписку</item>
@@ -134,4 +141,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>
</resources>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">Nenašli sa žiadne archivované konverzácie</string>
<string name="archive_emptied_successfully">Archív bol úspešne vyprázdnený</string>
<string name="empty_archive_confirmation">Ste si istý, že chcete vyprázdniť archív? Všetky archivované konverzácie budú navždy odstránené.</string>
<!-- Recycle bin -->
<string name="restore">Obnoviť</string>
<string name="restore_all_messages">Obnoviť všetky správy</string>
<string name="empty_recycle_bin_messages_confirmation">Ste si istý, že chcete vysypať odpadkový kôš? Správy budú navždy stratené.</string>
<string name="skip_the_recycle_bin_messages">Vynechať odpadkový kôš, priamo vymazať správy</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Ste si istý, že chcete odstrániť všetky správy tejto konverzácie\?</string>
<string name="archive_confirmation">Ste si istý, že chcete archivovať %s?</string>
<string name="restore_whole_conversation_confirmation">Ste si istý, že chcete obnoviť všetky správy tejto konverzácie?</string>
<string name="restore_confirmation">Ste si istý, že chcete obnoviť %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d konverzáciu</item>

View File

@@ -69,9 +69,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Ste prepričani, da želite izbrisati vsa sporočila tega pogovora\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d pogovor</item>

View File

@@ -68,9 +68,16 @@
<string name="no_archived_conversations">Нема архивираних разговора</string>
<string name="archive_emptied_successfully">Архива је успјешно испражнјена</string>
<string name="empty_archive_confirmation">Да ли сте сигурни да желите да испразните архиву? Све архивиране поруке ће бити избрисане.</string>
<!-- Recycle bin -->
<string name="restore">Врати</string>
<string name="restore_all_messages">Врати све поруке</string>
<string name="empty_recycle_bin_messages_confirmation">Да ли сте сигурни да желите испразнити канту за отпазке? Поруке ће бити трајно обрисане.</string>
<string name="skip_the_recycle_bin_messages">Прескочи канту за отпатке, обриши поруке директно</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Да ли сте сигурни да желите да избришете све поруке ове конверзације\?</string>
<string name="archive_confirmation">Да ли сте сигурни да желите да архивирате %s?</string>
<string name="restore_whole_conversation_confirmation">Да ли сте сигурни да желите да вратите све поруке ове конверзације?</string>
<string name="restore_confirmation">Да ли сте сигурни да желите да вратите %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d разговор</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">Inga arkiverade konversationer hittades</string>
<string name="archive_emptied_successfully">Arkivet har tömts</string>
<string name="empty_archive_confirmation">Är du säker på att du vill tömma arkivet\? Alla arkiverade konversationer tas bort permanent.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Är du säker på att du vill ta bort alla meddelanden i konversationen\?</string>
<string name="archive_confirmation">Är du säker på att du vill arkivera %s\?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d konversation</item>
@@ -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
-->
</resources>
</resources>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">இந்த உரையாடலின் அனைத்து செய்திகளையும் நிச்சயமாக நீக்க விரும்புகிறீர்களா\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d உரையாடல்</item>

View File

@@ -66,9 +66,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="other">%d conversation</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">Arşivlenen görüşme bulunamadı</string>
<string name="archive_emptied_successfully">Arşiv başarıyla boşaltıldı</string>
<string name="empty_archive_confirmation">Arşivi boşaltmak istediğinizden emin misiniz\? Arşivlenen tüm görüşmeler kalıcı olarak kaybolacak.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Bu görüşmenin tüm mesajlarını silmek istediğinizden emin misiniz\?</string>
<string name="archive_confirmation">%s arşivlemek istediğinizden emin misiniz\?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d görüşme</item>
@@ -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
-->
</resources>
</resources>

View File

@@ -69,9 +69,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Справді видалити всі повідомлення у цьому листуванні\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d листування</item>

View File

@@ -66,9 +66,16 @@
<string name="no_archived_conversations">尚未找到已归档对话</string>
<string name="archive_emptied_successfully">已成功清空归档</string>
<string name="empty_archive_confirmation">你确定要清空归档吗?所有已归档对话将永久丢失。</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">您确定要删除此对话的所有消息吗\?</string>
<string name="archive_confirmation">你确定要归档 %s 吗?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="other">%d 个对话</item>
@@ -125,4 +132,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>
</resources>

View File

@@ -66,9 +66,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">您確定要刪除此對話中的所有訊息嗎?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="other">%d conversation</item>

View File

@@ -67,9 +67,16 @@
<string name="no_archived_conversations">No archived conversations have been found</string>
<string name="archive_emptied_successfully">The archive has been emptied successfully</string>
<string name="empty_archive_confirmation">Are you sure you want to empty the archive? All archived conversations will be permanently lost.</string>
<!-- Recycle bin -->
<string name="restore">Restore</string>
<string name="restore_all_messages">Restore all messages</string>
<string name="empty_recycle_bin_messages_confirmation">Are you sure you want to empty the Recycle Bin? The messages will be permanently lost.</string>
<string name="skip_the_recycle_bin_messages">Skip the Recycle Bin, delete messages directly</string>
<!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<string name="restore_whole_conversation_confirmation">Are you sure you want to restore all messages of this conversation?</string>
<string name="restore_confirmation">Are you sure you want to restore %s?</string>
<!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations">
<item quantity="one">%d conversation</item>