Merge branch 'master' into feature/451-recycle-bin

This commit is contained in:
Ensar Sarajčić 2023-07-20 14:12:20 +02:00
commit b29d664dc4
71 changed files with 1263 additions and 201 deletions

View File

@ -63,7 +63,7 @@ android {
} }
dependencies { dependencies {
implementation 'com.github.SimpleMobileTools:Simple-Commons:b4cc381943' implementation 'com.github.SimpleMobileTools:Simple-Commons:8814cd2d4b'
implementation 'org.greenrobot:eventbus:3.3.1' implementation 'org.greenrobot:eventbus:3.3.1'
implementation 'com.github.tibbi:IndicatorFastScroll:4524cd0b61' implementation 'com.github.tibbi:IndicatorFastScroll:4524cd0b61'
implementation 'com.github.tibbi:android-smsmms:5657799572' implementation 'com.github.tibbi:android-smsmms:5657799572'
@ -72,7 +72,7 @@ dependencies {
implementation 'com.googlecode.ez-vcard:ez-vcard:0.11.3' implementation 'com.googlecode.ez-vcard:ez-vcard:0.11.3'
implementation 'androidx.lifecycle:lifecycle-process:2.5.1' implementation 'androidx.lifecycle:lifecycle-process:2.5.1'
kapt "androidx.room:room-compiler:2.5.1" kapt "androidx.room:room-compiler:2.5.2"
implementation "androidx.room:room-runtime:2.5.1" implementation "androidx.room:room-runtime:2.5.2"
annotationProcessor "androidx.room:room-compiler:2.5.1" annotationProcessor "androidx.room:room-compiler:2.5.2"
} }

View File

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

View File

@ -0,0 +1,160 @@
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.ArchivedConversationsAdapter
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_archived_conversations.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class ArchivedConversationsActivity : SimpleActivity() {
private var bus: EventBus? = null
@SuppressLint("InlinedApi")
override fun onCreate(savedInstanceState: Bundle?) {
isMaterialActivity = true
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_archived_conversations)
setupOptionsMenu()
updateMaterialActivityViews(archive_coordinator, conversations_list, useTransparentNavigation = true, useTopSearchMenu = false)
setupMaterialScrollListener(conversations_list, archive_toolbar)
loadArchivedConversations()
}
override fun onResume() {
super.onResume()
setupToolbar(archive_toolbar, NavigationIcon.Arrow)
updateMenuColors()
loadArchivedConversations()
}
override fun onDestroy() {
super.onDestroy()
bus?.unregister(this)
}
private fun setupOptionsMenu() {
archive_toolbar.inflateMenu(R.menu.archive_menu)
archive_toolbar.setOnMenuItemClickListener { menuItem ->
when (menuItem.itemId) {
R.id.empty_archive -> removeAll()
else -> return@setOnMenuItemClickListener false
}
return@setOnMenuItemClickListener true
}
}
private fun updateOptionsMenu(conversations: ArrayList<Conversation>) {
archive_toolbar.menu.apply {
findItem(R.id.empty_archive).isVisible = conversations.isNotEmpty()
}
}
private fun updateMenuColors() {
updateStatusbarColor(getProperBackgroundColor())
}
private fun loadArchivedConversations() {
ensureBackgroundThread {
val conversations = try {
conversationsDB.getAllArchived().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_archive_confirmation, R.string.yes, R.string.no) {
removeAllArchivedConversations {
loadArchivedConversations()
}
}
}
private fun getOrCreateConversationsAdapter(): ArchivedConversationsAdapter {
var currAdapter = conversations_list.adapter
if (currAdapter == null) {
hideKeyboard()
currAdapter = ArchivedConversationsAdapter(
activity = this,
recyclerView = conversations_list,
onRefresh = { notifyDatasetChanged() },
itemClick = { handleConversationClick(it) }
)
conversations_list.adapter = currAdapter
if (areSystemAnimationsEnabled) {
conversations_list.scheduleLayoutAnimation()
}
}
return currAdapter as ArchivedConversationsAdapter
}
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_archived_conversations)
}
@SuppressLint("NotifyDataSetChanged")
private fun notifyDatasetChanged() {
getOrCreateConversationsAdapter().notifyDataSetChanged()
}
private fun handleConversationClick(any: Any) {
Intent(this, ThreadActivity::class.java).apply {
val conversation = any as Conversation
putExtra(THREAD_ID, conversation.threadId)
putExtra(THREAD_TITLE, conversation.title)
putExtra(WAS_PROTECTION_HANDLED, true)
startActivity(this)
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun refreshMessages(event: Events.RefreshMessages) {
loadArchivedConversations()
}
}

View File

@ -179,6 +179,7 @@ class MainActivity : SimpleActivity() {
R.id.export_messages -> tryToExportMessages() R.id.export_messages -> tryToExportMessages()
R.id.more_apps_from_us -> launchMoreAppsFromUsIntent() R.id.more_apps_from_us -> launchMoreAppsFromUsIntent()
R.id.show_recycle_bin -> launchRecycleBin() R.id.show_recycle_bin -> launchRecycleBin()
R.id.show_archived -> launchArchivedConversations()
R.id.settings -> launchSettings() R.id.settings -> launchSettings()
R.id.about -> launchAbout() R.id.about -> launchAbout()
else -> return@setOnMenuItemClickListener false else -> return@setOnMenuItemClickListener false
@ -253,7 +254,10 @@ class MainActivity : SimpleActivity() {
handlePermission(PERMISSION_READ_CONTACTS) { handlePermission(PERMISSION_READ_CONTACTS) {
handleNotificationPermission { granted -> handleNotificationPermission { granted ->
if (!granted) { if (!granted) {
PermissionRequiredDialog(this, R.string.allow_notifications_incoming_messages) PermissionRequiredDialog(
activity = this,
textId = R.string.allow_notifications_incoming_messages,
positiveActionCallback = { openNotificationSettings() })
} }
} }
@ -291,15 +295,21 @@ class MainActivity : SimpleActivity() {
private fun getCachedConversations() { private fun getCachedConversations() {
ensureBackgroundThread { ensureBackgroundThread {
val conversations = try { val conversations = try {
conversationsDB.getAll().toMutableList() as ArrayList<Conversation> conversationsDB.getNonArchived().toMutableList() as ArrayList<Conversation>
} catch (e: Exception) { } catch (e: Exception) {
ArrayList() ArrayList()
} }
val archived = try {
conversationsDB.getAllArchived()
} catch (e: Exception) {
listOf()
}
updateUnreadCountBadge(conversations) updateUnreadCountBadge(conversations)
runOnUiThread { runOnUiThread {
setupConversations(conversations, cached = true) setupConversations(conversations, cached = true)
getNewConversations(conversations) getNewConversations((conversations + archived).toMutableList() as ArrayList<Conversation>)
} }
conversations.forEach { conversations.forEach {
clearExpiredScheduledMessages(it.threadId) clearExpiredScheduledMessages(it.threadId)
@ -353,7 +363,7 @@ class MainActivity : SimpleActivity() {
} }
} }
val allConversations = conversationsDB.getAll() as ArrayList<Conversation> val allConversations = conversationsDB.getNonArchived() as ArrayList<Conversation>
runOnUiThread { runOnUiThread {
setupConversations(allConversations) setupConversations(allConversations)
} }
@ -563,6 +573,11 @@ class MainActivity : SimpleActivity() {
startActivity(Intent(applicationContext, RecycleBinConversationsActivity::class.java)) startActivity(Intent(applicationContext, RecycleBinConversationsActivity::class.java))
} }
private fun launchArchivedConversations() {
hideKeyboard()
startActivity(Intent(applicationContext, ArchivedConversationsActivity::class.java))
}
private fun launchSettings() { private fun launchSettings() {
hideKeyboard() hideKeyboard()
startActivity(Intent(applicationContext, SettingsActivity::class.java)) startActivity(Intent(applicationContext, SettingsActivity::class.java))

View File

@ -2,6 +2,7 @@ package com.simplemobiletools.smsmessenger.activities
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.app.AlarmManager
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
import android.content.Intent import android.content.Intent
import android.content.res.ColorStateList import android.content.res.ColorStateList
@ -44,6 +45,7 @@ import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.FeatureLockedDialog import com.simplemobiletools.commons.dialogs.FeatureLockedDialog
import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog
import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.*
@ -51,6 +53,7 @@ import com.simplemobiletools.commons.models.PhoneNumber
import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.commons.models.SimpleContact
import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.smsmessenger.BuildConfig
import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.R
import com.simplemobiletools.smsmessenger.adapters.AttachmentsAdapter import com.simplemobiletools.smsmessenger.adapters.AttachmentsAdapter
import com.simplemobiletools.smsmessenger.adapters.AutoCompleteTextViewAdapter import com.simplemobiletools.smsmessenger.adapters.AutoCompleteTextViewAdapter
@ -244,6 +247,8 @@ class ThreadActivity : SimpleActivity() {
val firstPhoneNumber = participants.firstOrNull()?.phoneNumbers?.firstOrNull()?.value val firstPhoneNumber = participants.firstOrNull()?.phoneNumbers?.firstOrNull()?.value
thread_toolbar.menu.apply { thread_toolbar.menu.apply {
findItem(R.id.delete).isVisible = threadItems.isNotEmpty() 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.rename_conversation).isVisible = participants.size > 1 && conversation != null
findItem(R.id.conversation_details).isVisible = conversation != null findItem(R.id.conversation_details).isVisible = conversation != null
findItem(R.id.block_number).title = addLockedLabelIfNeeded(R.string.block_number) findItem(R.id.block_number).title = addLockedLabelIfNeeded(R.string.block_number)
@ -268,6 +273,8 @@ class ThreadActivity : SimpleActivity() {
when (menuItem.itemId) { when (menuItem.itemId) {
R.id.block_number -> tryBlocking() R.id.block_number -> tryBlocking()
R.id.delete -> askConfirmDelete() R.id.delete -> askConfirmDelete()
R.id.archive -> archiveConversation()
R.id.unarchive -> unarchiveConversation()
R.id.rename_conversation -> renameConversation() R.id.rename_conversation -> renameConversation()
R.id.conversation_details -> showConversationDetails() R.id.conversation_details -> showConversationDetails()
R.id.add_number_to_contact -> addNumberToContact() R.id.add_number_to_contact -> addNumberToContact()
@ -715,6 +722,25 @@ class ThreadActivity : SimpleActivity() {
setupScheduleSendUi() setupScheduleSendUi()
} }
private fun askForExactAlarmPermissionIfNeeded(callback: () -> Unit = {}) {
if (isSPlus()) {
val alarmManager: AlarmManager = getSystemService(ALARM_SERVICE) as AlarmManager
if (alarmManager.canScheduleExactAlarms()) {
callback()
} else {
PermissionRequiredDialog(
activity = this,
textId = R.string.allow_alarm_scheduled_messages,
positiveActionCallback = {
openRequestExactAlarmSettings(BuildConfig.APPLICATION_ID)
},
)
}
} else {
callback()
}
}
private fun setupAttachmentSizes() { private fun setupAttachmentSizes() {
messages.filter { it.attachment != null }.forEach { message -> messages.filter { it.attachment != null }.forEach { message ->
message.attachment!!.attachments.forEach { message.attachment!!.attachments.forEach {
@ -893,7 +919,8 @@ class ThreadActivity : SimpleActivity() {
} }
private fun askConfirmDelete() { private fun askConfirmDelete() {
ConfirmationDialog(this, getString(R.string.delete_whole_conversation_confirmation)) { val confirmationMessage = R.string.delete_whole_conversation_confirmation
ConfirmationDialog(this, getString(confirmationMessage)) {
ensureBackgroundThread { ensureBackgroundThread {
deleteConversation(threadId) deleteConversation(threadId)
runOnUiThread { runOnUiThread {
@ -904,6 +931,26 @@ class ThreadActivity : SimpleActivity() {
} }
} }
private fun archiveConversation() {
ensureBackgroundThread {
updateConversationArchivedStatus(threadId, true)
runOnUiThread {
refreshMessages()
finish()
}
}
}
private fun unarchiveConversation() {
ensureBackgroundThread {
updateConversationArchivedStatus(threadId, false)
runOnUiThread {
refreshMessages()
finish()
}
}
}
private fun dialNumber() { private fun dialNumber() {
val phoneNumber = participants.first().phoneNumbers.first().normalizedNumber val phoneNumber = participants.first().phoneNumbers.first().normalizedNumber
dialNumber(phoneNumber) dialNumber(phoneNumber)
@ -1126,7 +1173,7 @@ class ThreadActivity : SimpleActivity() {
contacts = arrayListOf(contact), contacts = arrayListOf(contact),
showExportingToast = false, showExportingToast = false,
) { ) {
if (it == VcfExporter.ExportResult.EXPORT_OK) { if (it == ExportResult.EXPORT_OK) {
val vCardUri = getMyFileUri(outputFile) val vCardUri = getMyFileUri(outputFile)
runOnUiThread { runOnUiThread {
addAttachment(vCardUri) addAttachment(vCardUri)
@ -1332,6 +1379,7 @@ class ThreadActivity : SimpleActivity() {
} }
} }
messagesDB.insertOrUpdate(message) messagesDB.insertOrUpdate(message)
updateConversationArchivedStatus(message.threadId, false)
} }
// show selected contacts, properly split to new lines when appropriate // show selected contacts, properly split to new lines when appropriate
@ -1534,10 +1582,12 @@ class ThreadActivity : SimpleActivity() {
} }
private fun launchScheduleSendDialog(originalDateTime: DateTime? = null) { private fun launchScheduleSendDialog(originalDateTime: DateTime? = null) {
ScheduleMessageDialog(this, originalDateTime) { newDateTime -> askForExactAlarmPermissionIfNeeded {
if (newDateTime != null) { ScheduleMessageDialog(this, originalDateTime) { newDateTime ->
scheduledDateTime = newDateTime if (newDateTime != null) {
showScheduleMessageDialog() scheduledDateTime = newDateTime
showScheduleMessageDialog()
}
} }
} }
} }

View File

@ -0,0 +1,96 @@
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.updateConversationArchivedStatus
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
import com.simplemobiletools.smsmessenger.models.Conversation
class ArchivedConversationsAdapter(
activity: SimpleActivity, recyclerView: MyRecyclerView, onRefresh: () -> Unit, itemClick: (Any) -> Unit
) : BaseConversationsAdapter(activity, recyclerView, onRefresh, itemClick) {
override fun getActionMenuId() = R.menu.cab_archived_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_unarchive -> unarchiveConversation()
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 unarchiveConversation() {
if (selectedKeys.isEmpty()) {
return
}
ensureBackgroundThread {
val conversationsToUnarchive = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList<Conversation>
conversationsToUnarchive.forEach {
activity.updateConversationArchivedStatus(it.threadId, false)
}
removeConversationsFromList(conversationsToUnarchive)
}
}
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

@ -0,0 +1,183 @@
package com.simplemobiletools.smsmessenger.adapters
import android.graphics.Typeface
import android.os.Parcelable
import android.util.TypedValue
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
import com.simplemobiletools.commons.adapters.MyRecyclerViewListAdapter
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
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.*
import com.simplemobiletools.smsmessenger.models.Conversation
import kotlinx.android.synthetic.main.item_conversation.view.*
@Suppress("LeakingThis")
abstract class BaseConversationsAdapter(
activity: SimpleActivity, recyclerView: MyRecyclerView, onRefresh: () -> Unit, itemClick: (Any) -> Unit
) : MyRecyclerViewListAdapter<Conversation>(activity, recyclerView, ConversationDiffCallback(), itemClick, onRefresh),
RecyclerViewFastScroller.OnPopupTextUpdate {
private var fontSize = activity.getTextSize()
private var drafts = HashMap<Long, String?>()
private var recyclerViewState: Parcelable? = null
init {
setupDragListener(true)
ensureBackgroundThread {
fetchDrafts(drafts)
}
setHasStableIds(true)
registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onChanged() = restoreRecyclerViewState()
override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) = restoreRecyclerViewState()
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) = restoreRecyclerViewState()
})
}
fun updateFontSize() {
fontSize = activity.getTextSize()
notifyDataSetChanged()
}
fun updateConversations(newConversations: ArrayList<Conversation>, commitCallback: (() -> Unit)? = null) {
saveRecyclerViewState()
submitList(newConversations.toList(), commitCallback)
}
fun updateDrafts() {
ensureBackgroundThread {
val newDrafts = HashMap<Long, String?>()
fetchDrafts(newDrafts)
if (drafts.hashCode() != newDrafts.hashCode()) {
drafts = newDrafts
activity.runOnUiThread {
notifyDataSetChanged()
}
}
}
}
override fun getSelectableItemCount() = itemCount
protected fun getSelectedItems() = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList<Conversation>
override fun getIsItemSelectable(position: Int) = true
override fun getItemSelectionKey(position: Int) = currentList.getOrNull(position)?.hashCode()
override fun getItemKeyPosition(key: Int) = currentList.indexOfFirst { it.hashCode() == key }
override fun onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_conversation, parent)
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val conversation = getItem(position)
holder.bindView(conversation, allowSingleClick = true, allowLongClick = true) { itemView, _ ->
setupView(itemView, conversation)
}
bindViewHolder(holder)
}
override fun getItemId(position: Int) = getItem(position).threadId
override fun onViewRecycled(holder: ViewHolder) {
super.onViewRecycled(holder)
if (!activity.isDestroyed && !activity.isFinishing) {
Glide.with(activity).clear(holder.itemView.conversation_image)
}
}
private fun fetchDrafts(drafts: HashMap<Long, String?>) {
drafts.clear()
for ((threadId, draft) in activity.getAllDrafts()) {
drafts[threadId] = draft
}
}
private fun setupView(view: View, conversation: Conversation) {
view.apply {
setupViewBackground(activity)
val smsDraft = drafts[conversation.threadId]
draft_indicator.beVisibleIf(smsDraft != null)
draft_indicator.setTextColor(properPrimaryColor)
pin_indicator.beVisibleIf(activity.config.pinnedConversations.contains(conversation.threadId.toString()))
pin_indicator.applyColorFilter(textColor)
conversation_frame.isSelected = selectedKeys.contains(conversation.hashCode())
conversation_address.apply {
text = conversation.title
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 1.2f)
}
conversation_body_short.apply {
text = smsDraft ?: conversation.snippet
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.9f)
}
conversation_date.apply {
text = conversation.date.formatDateOrTime(context, true, false)
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.8f)
}
val style = if (conversation.read) {
conversation_body_short.alpha = 0.7f
if (conversation.isScheduled) Typeface.ITALIC else Typeface.NORMAL
} else {
conversation_body_short.alpha = 1f
if (conversation.isScheduled) Typeface.BOLD_ITALIC else Typeface.BOLD
}
conversation_address.setTypeface(null, style)
conversation_body_short.setTypeface(null, style)
arrayListOf<TextView>(conversation_address, conversation_body_short, conversation_date).forEach {
it.setTextColor(textColor)
}
// at group conversations we use an icon as the placeholder, not any letter
val placeholder = if (conversation.isGroupConversation) {
SimpleContactsHelper(context).getColoredGroupIcon(conversation.title)
} else {
null
}
SimpleContactsHelper(context).loadContactImage(conversation.photoUri, conversation_image, conversation.title, placeholder)
}
}
override fun onChange(position: Int) = currentList.getOrNull(position)?.title ?: ""
private fun saveRecyclerViewState() {
recyclerViewState = recyclerView.layoutManager?.onSaveInstanceState()
}
private fun restoreRecyclerViewState() {
recyclerView.layoutManager?.onRestoreInstanceState(recyclerViewState)
}
private class ConversationDiffCallback : DiffUtil.ItemCallback<Conversation>() {
override fun areItemsTheSame(oldItem: Conversation, newItem: Conversation): Boolean {
return Conversation.areItemsTheSame(oldItem, newItem)
}
override fun areContentsTheSame(oldItem: Conversation, newItem: Conversation): Boolean {
return Conversation.areContentsTheSame(oldItem, newItem)
}
}
}

View File

@ -1,24 +1,12 @@
package com.simplemobiletools.smsmessenger.adapters package com.simplemobiletools.smsmessenger.adapters
import android.content.Intent import android.content.Intent
import android.graphics.Typeface
import android.os.Parcelable
import android.text.TextUtils import android.text.TextUtils
import android.util.TypedValue
import android.view.Menu import android.view.Menu
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
import com.simplemobiletools.commons.adapters.MyRecyclerViewListAdapter
import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.FeatureLockedDialog import com.simplemobiletools.commons.dialogs.FeatureLockedDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.KEY_PHONE import com.simplemobiletools.commons.helpers.KEY_PHONE
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.helpers.isNougatPlus import com.simplemobiletools.commons.helpers.isNougatPlus
import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.commons.views.MyRecyclerView
@ -29,31 +17,10 @@ import com.simplemobiletools.smsmessenger.extensions.*
import com.simplemobiletools.smsmessenger.helpers.refreshMessages import com.simplemobiletools.smsmessenger.helpers.refreshMessages
import com.simplemobiletools.smsmessenger.messaging.isShortCodeWithLetters import com.simplemobiletools.smsmessenger.messaging.isShortCodeWithLetters
import com.simplemobiletools.smsmessenger.models.Conversation import com.simplemobiletools.smsmessenger.models.Conversation
import kotlinx.android.synthetic.main.item_conversation.view.*
class ConversationsAdapter( class ConversationsAdapter(
activity: SimpleActivity, recyclerView: MyRecyclerView, onRefresh: () -> Unit, itemClick: (Any) -> Unit activity: SimpleActivity, recyclerView: MyRecyclerView, onRefresh: () -> Unit, itemClick: (Any) -> Unit
) : MyRecyclerViewListAdapter<Conversation>(activity, recyclerView, ConversationDiffCallback(), itemClick, onRefresh), ) : BaseConversationsAdapter(activity, recyclerView, onRefresh, itemClick) {
RecyclerViewFastScroller.OnPopupTextUpdate {
private var fontSize = activity.getTextSize()
private var drafts = HashMap<Long, String?>()
private var recyclerViewState: Parcelable? = null
init {
setupDragListener(true)
ensureBackgroundThread {
fetchDrafts(drafts)
}
setHasStableIds(true)
registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onChanged() = restoreRecyclerViewState()
override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) = restoreRecyclerViewState()
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) = restoreRecyclerViewState()
})
}
override fun getActionMenuId() = R.menu.cab_conversations override fun getActionMenuId() = R.menu.cab_conversations
override fun prepareActionMode(menu: Menu) { override fun prepareActionMode(menu: Menu) {
@ -86,6 +53,7 @@ class ConversationsAdapter(
R.id.cab_dial_number -> dialNumber() R.id.cab_dial_number -> dialNumber()
R.id.cab_copy_number -> copyNumberToClipboard() R.id.cab_copy_number -> copyNumberToClipboard()
R.id.cab_delete -> askConfirmDelete() R.id.cab_delete -> askConfirmDelete()
R.id.cab_archive -> askConfirmArchive()
R.id.cab_rename_conversation -> renameConversation(getSelectedItems().first()) R.id.cab_rename_conversation -> renameConversation(getSelectedItems().first())
R.id.cab_mark_as_read -> markAsRead() R.id.cab_mark_as_read -> markAsRead()
R.id.cab_mark_as_unread -> markAsUnread() R.id.cab_mark_as_unread -> markAsUnread()
@ -95,37 +63,6 @@ class ConversationsAdapter(
} }
} }
override fun getSelectableItemCount() = itemCount
override fun getIsItemSelectable(position: Int) = true
override fun getItemSelectionKey(position: Int) = currentList.getOrNull(position)?.hashCode()
override fun getItemKeyPosition(key: Int) = currentList.indexOfFirst { it.hashCode() == key }
override fun onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_conversation, parent)
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val conversation = getItem(position)
holder.bindView(conversation, allowSingleClick = true, allowLongClick = true) { itemView, _ ->
setupView(itemView, conversation)
}
bindViewHolder(holder)
}
override fun getItemId(position: Int) = getItem(position).threadId
override fun onViewRecycled(holder: ViewHolder) {
super.onViewRecycled(holder)
if (!activity.isDestroyed && !activity.isFinishing) {
Glide.with(activity).clear(holder.itemView.conversation_image)
}
}
private fun tryBlocking() { private fun tryBlocking() {
if (activity.isOrWasThankYouInstalled()) { if (activity.isOrWasThankYouInstalled()) {
askConfirmBlock() askConfirmBlock()
@ -191,6 +128,50 @@ class ConversationsAdapter(
} }
} }
private fun askConfirmArchive() {
val itemsCnt = selectedKeys.size
val items = resources.getQuantityString(R.plurals.delete_conversations, itemsCnt, itemsCnt)
val baseString = R.string.archive_confirmation
val question = String.format(resources.getString(baseString), items)
ConfirmationDialog(activity, question) {
ensureBackgroundThread {
archiveConversations()
}
}
}
private fun archiveConversations() {
if (selectedKeys.isEmpty()) {
return
}
val conversationsToRemove = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList<Conversation>
conversationsToRemove.forEach {
activity.updateConversationArchivedStatus(it.threadId, true)
activity.notificationManager.cancel(it.threadId.hashCode())
}
val newList = try {
currentList.toMutableList().apply { removeAll(conversationsToRemove) }
} catch (ignored: Exception) {
currentList.toMutableList()
}
activity.runOnUiThread {
if (newList.none { selectedKeys.contains(it.hashCode()) }) {
refreshMessages()
finishActMode()
} else {
submitList(newList)
if (newList.isEmpty()) {
refreshMessages()
}
}
}
}
private fun deleteConversations() { private fun deleteConversations() {
if (selectedKeys.isEmpty()) { if (selectedKeys.isEmpty()) {
return return
@ -276,8 +257,6 @@ class ConversationsAdapter(
} }
} }
private fun getSelectedItems() = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList<Conversation>
private fun pinConversation(pin: Boolean) { private fun pinConversation(pin: Boolean) {
val conversations = getSelectedItems() val conversations = getSelectedItems()
if (conversations.isEmpty()) { if (conversations.isEmpty()) {
@ -303,113 +282,10 @@ class ConversationsAdapter(
menu.findItem(R.id.cab_unpin_conversation).isVisible = selectedConversations.any { pinnedConversations.contains(it.threadId.toString()) } menu.findItem(R.id.cab_unpin_conversation).isVisible = selectedConversations.any { pinnedConversations.contains(it.threadId.toString()) }
} }
private fun fetchDrafts(drafts: HashMap<Long, String?>) {
drafts.clear()
for ((threadId, draft) in activity.getAllDrafts()) {
drafts[threadId] = draft
}
}
fun updateFontSize() {
fontSize = activity.getTextSize()
notifyDataSetChanged()
}
fun updateConversations(newConversations: ArrayList<Conversation>, commitCallback: (() -> Unit)? = null) {
saveRecyclerViewState()
submitList(newConversations.toList(), commitCallback)
}
fun updateDrafts() {
ensureBackgroundThread {
val newDrafts = HashMap<Long, String?>()
fetchDrafts(newDrafts)
if (drafts.hashCode() != newDrafts.hashCode()) {
drafts = newDrafts
activity.runOnUiThread {
notifyDataSetChanged()
}
}
}
}
private fun setupView(view: View, conversation: Conversation) {
view.apply {
setupViewBackground(activity)
val smsDraft = drafts[conversation.threadId]
draft_indicator.beVisibleIf(smsDraft != null)
draft_indicator.setTextColor(properPrimaryColor)
pin_indicator.beVisibleIf(activity.config.pinnedConversations.contains(conversation.threadId.toString()))
pin_indicator.applyColorFilter(textColor)
conversation_frame.isSelected = selectedKeys.contains(conversation.hashCode())
conversation_address.apply {
text = conversation.title
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 1.2f)
}
conversation_body_short.apply {
text = smsDraft ?: conversation.snippet
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.9f)
}
conversation_date.apply {
text = conversation.date.formatDateOrTime(context, true, false)
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.8f)
}
val style = if (conversation.read) {
conversation_body_short.alpha = 0.7f
if (conversation.isScheduled) Typeface.ITALIC else Typeface.NORMAL
} else {
conversation_body_short.alpha = 1f
if (conversation.isScheduled) Typeface.BOLD_ITALIC else Typeface.BOLD
}
conversation_address.setTypeface(null, style)
conversation_body_short.setTypeface(null, style)
arrayListOf<TextView>(conversation_address, conversation_body_short, conversation_date).forEach {
it.setTextColor(textColor)
}
// at group conversations we use an icon as the placeholder, not any letter
val placeholder = if (conversation.isGroupConversation) {
SimpleContactsHelper(context).getColoredGroupIcon(conversation.title)
} else {
null
}
SimpleContactsHelper(context).loadContactImage(conversation.photoUri, conversation_image, conversation.title, placeholder)
}
}
override fun onChange(position: Int) = currentList.getOrNull(position)?.title ?: ""
private fun refreshConversations() { private fun refreshConversations() {
activity.runOnUiThread { activity.runOnUiThread {
refreshMessages() refreshMessages()
finishActMode() finishActMode()
} }
} }
private fun saveRecyclerViewState() {
recyclerViewState = recyclerView.layoutManager?.onSaveInstanceState()
}
private fun restoreRecyclerViewState() {
recyclerView.layoutManager?.onRestoreInstanceState(recyclerViewState)
}
private class ConversationDiffCallback : DiffUtil.ItemCallback<Conversation>() {
override fun areItemsTheSame(oldItem: Conversation, newItem: Conversation): Boolean {
return Conversation.areItemsTheSame(oldItem, newItem)
}
override fun areContentsTheSame(oldItem: Conversation, newItem: Conversation): Boolean {
return Conversation.areContentsTheSame(oldItem, newItem)
}
}
} }

View File

@ -117,6 +117,7 @@ abstract class MessagesDatabase : RoomDatabase() {
private val MIGRATION_7_8 = object : Migration(7, 8) { private val MIGRATION_7_8 = object : Migration(7, 8) {
override fun migrate(database: SupportSQLiteDatabase) { override fun migrate(database: SupportSQLiteDatabase) {
database.apply { database.apply {
execSQL("ALTER TABLE conversations ADD COLUMN archived INTEGER NOT NULL DEFAULT 0")
execSQL("CREATE TABLE IF NOT EXISTS `recycle_bin_messages` (`id` INTEGER PRIMARY KEY, `deleted_ts` INTEGER NOT NULL)") execSQL("CREATE TABLE IF NOT EXISTS `recycle_bin_messages` (`id` INTEGER PRIMARY KEY, `deleted_ts` INTEGER NOT NULL)")
execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_recycle_bin_messages_id` ON `recycle_bin_messages` (`id`)") execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_recycle_bin_messages_id` ON `recycle_bin_messages` (`id`)")
} }

View File

@ -268,7 +268,8 @@ fun Context.getConversations(threadId: Long? = null, privateContacts: ArrayList<
Threads.SNIPPET, Threads.SNIPPET,
Threads.DATE, Threads.DATE,
Threads.READ, Threads.READ,
Threads.RECIPIENT_IDS Threads.RECIPIENT_IDS,
Threads.ARCHIVED
) )
var selection = "${Threads.MESSAGE_COUNT} > ?" var selection = "${Threads.MESSAGE_COUNT} > ?"
@ -307,7 +308,8 @@ fun Context.getConversations(threadId: Long? = null, privateContacts: ArrayList<
val photoUri = if (phoneNumbers.size == 1) simpleContactHelper.getPhotoUriFromPhoneNumber(phoneNumbers.first()) else "" val photoUri = if (phoneNumbers.size == 1) simpleContactHelper.getPhotoUriFromPhoneNumber(phoneNumbers.first()) else ""
val isGroupConversation = phoneNumbers.size > 1 val isGroupConversation = phoneNumbers.size > 1
val read = cursor.getIntValue(Threads.READ) == 1 val read = cursor.getIntValue(Threads.READ) == 1
val conversation = Conversation(id, snippet, date.toInt(), read, title, photoUri, isGroupConversation, phoneNumbers.first()) val archived = cursor.getIntValue(Threads.ARCHIVED) == 1
val conversation = Conversation(id, snippet, date.toInt(), read, title, photoUri, isGroupConversation, phoneNumbers.first(), isArchived = archived)
conversations.add(conversation) conversations.add(conversation)
} }
@ -620,6 +622,20 @@ fun Context.insertNewSMS(
} }
} }
fun Context.removeAllArchivedConversations(callback: (() -> Unit)? = null) {
ensureBackgroundThread {
try {
for (conversation in conversationsDB.getAllArchived()) {
deleteConversation(conversation.threadId)
}
toast(R.string.archive_emptied_successfully)
callback?.invoke()
} catch (e: Exception) {
toast(R.string.unknown_error_occurred)
}
}
}
fun Context.deleteConversation(threadId: Long) { fun Context.deleteConversation(threadId: Long) {
var uri = Sms.CONTENT_URI var uri = Sms.CONTENT_URI
val selection = "${Sms.THREAD_ID} = ?" val selection = "${Sms.THREAD_ID} = ?"
@ -671,6 +687,21 @@ fun Context.moveMessageToRecycleBin(id: Long) {
} }
} }
fun Context.updateConversationArchivedStatus(threadId: Long, archived: Boolean) {
val uri = Threads.CONTENT_URI
val values = ContentValues().apply {
put(Threads.ARCHIVED, archived)
}
val selection = "${Threads._ID} = ?"
val selectionArgs = arrayOf(threadId.toString())
contentResolver.update(uri, values, selection, selectionArgs)
if (archived) {
conversationsDB.moveToArchive(threadId)
} else {
conversationsDB.unarchive(threadId)
}
}
fun Context.deleteMessage(id: Long, isMMS: Boolean) { fun Context.deleteMessage(id: Long, isMMS: Boolean) {
val uri = if (isMMS) Mms.CONTENT_URI else Sms.CONTENT_URI val uri = if (isMMS) Mms.CONTENT_URI else Sms.CONTENT_URI
val selection = "${Sms._ID} = ?" val selection = "${Sms._ID} = ?"
@ -999,7 +1030,8 @@ fun Context.createTemporaryThread(message: Message, threadId: Long = generateRan
isGroupConversation = addresses.size > 1, isGroupConversation = addresses.size > 1,
phoneNumber = addresses.first(), phoneNumber = addresses.first(),
isScheduled = true, isScheduled = true,
usesCustomTitle = cachedConv?.usesCustomTitle == true usesCustomTitle = cachedConv?.usesCustomTitle == true,
isArchived = false
) )
try { try {
conversationsDB.insertOrUpdate(conversation) conversationsDB.insertOrUpdate(conversation)

View File

@ -111,4 +111,8 @@ class Config(context: Context) : BaseConfig(context) {
var lastRecycleBinCheck: Long var lastRecycleBinCheck: Long
get() = prefs.getLong(LAST_RECYCLE_BIN_CHECK, 0L) get() = prefs.getLong(LAST_RECYCLE_BIN_CHECK, 0L)
set(lastRecycleBinCheck) = prefs.edit().putLong(LAST_RECYCLE_BIN_CHECK, lastRecycleBinCheck).apply() set(lastRecycleBinCheck) = prefs.edit().putLong(LAST_RECYCLE_BIN_CHECK, lastRecycleBinCheck).apply()
var useArchive: Boolean
get() = prefs.getBoolean(USE_ARCHIVE, false)
set(useArchive) = prefs.edit().putBoolean(USE_ARCHIVE, useArchive).apply()
} }

View File

@ -42,6 +42,7 @@ const val IS_MMS = "is_mms"
const val MESSAGE_ID = "message_id" const val MESSAGE_ID = "message_id"
const val USE_RECYCLE_BIN = "use_recycle_bin" const val USE_RECYCLE_BIN = "use_recycle_bin"
const val LAST_RECYCLE_BIN_CHECK = "last_recycle_bin_check" const val LAST_RECYCLE_BIN_CHECK = "last_recycle_bin_check"
const val USE_ARCHIVE = "use_archive"
private const val PATH = "com.simplemobiletools.smsmessenger.action." private const val PATH = "com.simplemobiletools.smsmessenger.action."
const val MARK_AS_READ = PATH + "mark_as_read" const val MARK_AS_READ = PATH + "mark_as_read"

View File

@ -1,9 +1,6 @@
package com.simplemobiletools.smsmessenger.interfaces package com.simplemobiletools.smsmessenger.interfaces
import androidx.room.Dao import androidx.room.*
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.simplemobiletools.smsmessenger.models.Conversation import com.simplemobiletools.smsmessenger.models.Conversation
@Dao @Dao
@ -11,8 +8,11 @@ interface ConversationsDao {
@Insert(onConflict = OnConflictStrategy.REPLACE) @Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertOrUpdate(conversation: Conversation): Long fun insertOrUpdate(conversation: Conversation): Long
@Query("SELECT * FROM conversations") @Query("SELECT * FROM conversations WHERE archived = 0")
fun getAll(): List<Conversation> fun getNonArchived(): List<Conversation>
@Query("SELECT * FROM conversations WHERE archived = 1")
fun getAllArchived(): List<Conversation>
@Query("SELECT * FROM conversations WHERE (SELECT COUNT(*) FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND messages.thread_id = conversations.thread_id) > 0") @Query("SELECT * FROM conversations WHERE (SELECT COUNT(*) FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND messages.thread_id = conversations.thread_id) > 0")
fun getAllWithMessagesInRecycleBin(): List<Conversation> fun getAllWithMessagesInRecycleBin(): List<Conversation>
@ -32,6 +32,12 @@ interface ConversationsDao {
@Query("UPDATE conversations SET read = 0 WHERE thread_id = :threadId") @Query("UPDATE conversations SET read = 0 WHERE thread_id = :threadId")
fun markUnread(threadId: Long) fun markUnread(threadId: Long)
@Query("UPDATE conversations SET archived = 1 WHERE thread_id = :threadId")
fun moveToArchive(threadId: Long)
@Query("UPDATE conversations SET archived = 0 WHERE thread_id = :threadId")
fun unarchive(threadId: Long)
@Query("DELETE FROM conversations WHERE thread_id = :threadId") @Query("DELETE FROM conversations WHERE thread_id = :threadId")
fun deleteThreadId(threadId: Long) fun deleteThreadId(threadId: Long)
} }

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 = "archived_conversations",
indices = [(Index(value = ["thread_id"], unique = true))]
)
data class ArchivedConversation(
@PrimaryKey @ColumnInfo(name = "thread_id") var threadId: Long,
@ColumnInfo(name = "deleted_ts") var deletedTs: Long
)

View File

@ -16,7 +16,8 @@ data class Conversation(
@ColumnInfo(name = "is_group_conversation") var isGroupConversation: Boolean, @ColumnInfo(name = "is_group_conversation") var isGroupConversation: Boolean,
@ColumnInfo(name = "phone_number") var phoneNumber: String, @ColumnInfo(name = "phone_number") var phoneNumber: String,
@ColumnInfo(name = "is_scheduled") var isScheduled: Boolean = false, @ColumnInfo(name = "is_scheduled") var isScheduled: Boolean = false,
@ColumnInfo(name = "uses_custom_title") var usesCustomTitle: Boolean = false @ColumnInfo(name = "uses_custom_title") var usesCustomTitle: Boolean = false,
@ColumnInfo(name = "archived") var isArchived: Boolean = false
) { ) {
companion object { companion object {

View File

@ -113,6 +113,7 @@ class SmsReceiver : BroadcastReceiver() {
subscriptionId subscriptionId
) )
context.messagesDB.insertOrUpdate(message) context.messagesDB.insertOrUpdate(message)
context.updateConversationArchivedStatus(threadId, false)
refreshMessages() refreshMessages()
context.showReceivedMessageNotification(newMessageId, address, body, threadId, bitmap) context.showReceivedMessageNotification(newMessageId, address, body, threadId, bitmap)
} }

View File

@ -0,0 +1,3 @@
<vector android:height="24dp" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector android:height="24dp" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20.55,5.22l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6C5.53,3 5.12,3.21 4.85,3.55L3.46,5.22C3.17,5.57 3,6.01 3,6.5V19c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5C21,6.01 20.83,5.57 20.55,5.22zM12,9.5l5.5,5.5H14v2h-4v-2H6.5L12,9.5zM5.12,5l0.82,-1h12l0.93,1H5.12z"/>
</vector>

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/archive_coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/archive_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:title="@string/archived_conversations"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
<RelativeLayout
android:id="@+id/archive_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/archive_coordinator_wrapper"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/archive_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_archived_conversations"
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

@ -0,0 +1,11 @@
<?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/empty_archive"
android:showAsAction="never"
android:title="@string/empty_archive"
app:showAsAction="never" />
</menu>

View File

@ -0,0 +1,23 @@
<?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_unarchive"
android:icon="@drawable/ic_unarchive_vector"
android:showAsAction="ifRoom"
android:title="@string/unarchive"
app:showAsAction="ifRoom" />
<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

@ -26,6 +26,12 @@
android:icon="@drawable/ic_minus_circle_vector" android:icon="@drawable/ic_minus_circle_vector"
android:title="@string/block_number" android:title="@string/block_number"
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />
<item
android:id="@+id/cab_archive"
android:icon="@drawable/ic_archive_vector"
android:showAsAction="ifRoom"
android:title="@string/archive"
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/cab_copy_number" android:id="@+id/cab_copy_number"
android:showAsAction="never" android:showAsAction="never"

View File

@ -18,6 +18,11 @@
android:showAsAction="never" android:showAsAction="never"
android:title="Show recycle bin" android:title="Show recycle bin"
app:showAsAction="never" /> app:showAsAction="never" />
<item
android:id="@+id/show_archived"
android:showAsAction="never"
android:title="@string/show_archived_conversations"
app:showAsAction="never" />
<item <item
android:id="@+id/settings" android:id="@+id/settings"
android:icon="@drawable/ic_settings_cog_vector" android:icon="@drawable/ic_settings_cog_vector"

View File

@ -23,6 +23,16 @@
android:icon="@drawable/ic_edit_vector" android:icon="@drawable/ic_edit_vector"
android:title="@string/rename_conversation" android:title="@string/rename_conversation"
app:showAsAction="always" /> app:showAsAction="always" />
<item
android:id="@+id/archive"
android:icon="@drawable/ic_archive_vector"
android:title="@string/archive"
app:showAsAction="ifRoom" />
<item
android:id="@+id/unarchive"
android:icon="@drawable/ic_unarchive_vector"
android:title="@string/unarchive"
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/conversation_details" android:id="@+id/conversation_details"
android:icon="@drawable/ic_info_vector" android:icon="@drawable/ic_info_vector"

View File

@ -62,8 +62,18 @@
<string name="mark_as_read">ضع إشارة مقروء</string> <string name="mark_as_read">ضع إشارة مقروء</string>
<string name="mark_as_unread">وضع علامة كغير مقروءة</string> <string name="mark_as_unread">وضع علامة كغير مقروءة</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">هل أنت متأكد أنك تريد حذف كافة رسائل هذه المحادثة؟</string> <string name="delete_whole_conversation_confirmation">هل أنت متأكد أنك تريد حذف كافة رسائل هذه المحادثة؟</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="zero">محادثة %d</item> <item quantity="zero">محادثة %d</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Mark as Read</string> <string name="mark_as_read">Mark as Read</string>
<string name="mark_as_unread">Mark as Unread</string> <string name="mark_as_unread">Mark as Unread</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversation</item> <item quantity="one">%d conversation</item>

View File

@ -60,8 +60,18 @@
<string name="mark_as_read">Прачытана</string> <string name="mark_as_read">Прачытана</string>
<string name="mark_as_unread">Не прачытана</string> <string name="mark_as_unread">Не прачытана</string>
<string name="me">Я</string> <string name="me">Я</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Выдаліць усе паведамленні ў гэтай размове\?</string> <string name="delete_whole_conversation_confirmation">Выдаліць усе паведамленні ў гэтай размове\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d размову</item> <item quantity="one">%d размову</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Отбележи като прочетено</string> <string name="mark_as_read">Отбележи като прочетено</string>
<string name="mark_as_unread">Отбележи като непрочетено</string> <string name="mark_as_unread">Отбележи като непрочетено</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Сигурни ли сте, че искате да изтриете всички съобщения от този разговор\?</string> <string name="delete_whole_conversation_confirmation">Сигурни ли сте, че искате да изтриете всички съобщения от този разговор\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d разговор</item> <item quantity="one">%d разговор</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Marca com a llegit</string> <string name="mark_as_read">Marca com a llegit</string>
<string name="mark_as_unread">Marcar com no llegit</string> <string name="mark_as_unread">Marcar com no llegit</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Confirmeu que voleu suprimir tots els missatges d\'aquesta conversa\?</string> <string name="delete_whole_conversation_confirmation">Confirmeu que voleu suprimir tots els missatges d\'aquesta conversa\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversa</item> <item quantity="one">%d conversa</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Mark as Read</string> <string name="mark_as_read">Mark as Read</string>
<string name="mark_as_unread">Mark as Unread</string> <string name="mark_as_unread">Mark as Unread</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversation</item> <item quantity="one">%d conversation</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Označit jako přečtené</string> <string name="mark_as_read">Označit jako přečtené</string>
<string name="mark_as_unread">Označit jako nepřečtené</string> <string name="mark_as_unread">Označit jako nepřečtené</string>
<string name="me"></string> <string name="me"></string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Opravdu chcete smazat všechny zprávy v této konverzaci\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d konverzace</item> <item quantity="one">%d konverzace</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Marker som læst</string> <string name="mark_as_read">Marker som læst</string>
<string name="mark_as_unread">Marker som ulæst</string> <string name="mark_as_unread">Marker som ulæst</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Er du sikker på, at du vil slette alle beskeder i denne samtale\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d samtale</item> <item quantity="one">%d samtale</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Als gelesen markieren</string> <string name="mark_as_read">Als gelesen markieren</string>
<string name="mark_as_unread">Als ungelesen markieren</string> <string name="mark_as_unread">Als ungelesen markieren</string>
<string name="me">Ich</string> <string name="me">Ich</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Sollen wirklich alle Nachrichten dieser Unterhaltung gelöscht werden\?</string> <string name="delete_whole_conversation_confirmation">Sollen wirklich alle Nachrichten dieser Unterhaltung gelöscht werden\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d Unterhaltung</item> <item quantity="one">%d Unterhaltung</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Σήμανση ως Αναγνωσμένο</string> <string name="mark_as_read">Σήμανση ως Αναγνωσμένο</string>
<string name="mark_as_unread">Σήμανση ως Μη Αναγνωσμένο</string> <string name="mark_as_unread">Σήμανση ως Μη Αναγνωσμένο</string>
<string name="me">Εγώ</string> <string name="me">Εγώ</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα μηνύματα αυτής της συνομιλίας;</string> <string name="delete_whole_conversation_confirmation">Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα μηνύματα αυτής της συνομιλίας;</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d συνομιλία</item> <item quantity="one">%d συνομιλία</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Marki kiel legitan</string> <string name="mark_as_read">Marki kiel legitan</string>
<string name="mark_as_unread">Marki kiel nelegitan</string> <string name="mark_as_unread">Marki kiel nelegitan</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d konversacio</item> <item quantity="one">%d konversacio</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Marcar como leído</string> <string name="mark_as_read">Marcar como leído</string>
<string name="mark_as_unread">Marcar como no leído</string> <string name="mark_as_unread">Marcar como no leído</string>
<string name="me">Yo</string> <string name="me">Yo</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">¿Estás seguro que quieres eliminar todos los mensajes en esta conversación\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversación</item> <item quantity="one">%d conversación</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Märgi loetuks</string> <string name="mark_as_read">Märgi loetuks</string>
<string name="mark_as_unread">Märgi mitteloetuks</string> <string name="mark_as_unread">Märgi mitteloetuks</string>
<string name="me">Mina</string> <string name="me">Mina</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Kas oled kindel, et soovid kustutada kõik selle vestluse sõnumid\?</string> <string name="delete_whole_conversation_confirmation">Kas oled kindel, et soovid kustutada kõik selle vestluse sõnumid\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d vestlus</item> <item quantity="one">%d vestlus</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Merkitse luetuksi</string> <string name="mark_as_read">Merkitse luetuksi</string>
<string name="mark_as_unread">Merkitse lukemattomaksi</string> <string name="mark_as_unread">Merkitse lukemattomaksi</string>
<string name="me">Minä</string> <string name="me">Minä</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Haluatko varmasti poistaa kaikki tämän keskustelun viestit\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d keskustelu</item> <item quantity="one">%d keskustelu</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Marquer comme lu</string> <string name="mark_as_read">Marquer comme lu</string>
<string name="mark_as_unread">Marquer comme non lu</string> <string name="mark_as_unread">Marquer comme non lu</string>
<string name="me">Moi</string> <string name="me">Moi</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Voulez-vous vraiment supprimer tous les messages de cette conversation \?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversation</item> <item quantity="one">%d conversation</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Marcar como lida</string> <string name="mark_as_read">Marcar como lida</string>
<string name="mark_as_unread">Marcar como non lida</string> <string name="mark_as_unread">Marcar como non lida</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Ten a certeza de que desexa eliminar todas as mensaxes desta conversa\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversa</item> <item quantity="one">%d conversa</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Mark as Read</string> <string name="mark_as_read">Mark as Read</string>
<string name="mark_as_unread">Mark as Unread</string> <string name="mark_as_unread">Mark as Unread</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversation</item> <item quantity="one">%d conversation</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Označi kao pročitano</string> <string name="mark_as_read">Označi kao pročitano</string>
<string name="mark_as_unread">Označi kao nepročitano</string> <string name="mark_as_unread">Označi kao nepročitano</string>
<string name="me">Ja</string> <string name="me">Ja</string>
<!-- Archive -->
<string name="unarchive">Vrati iz arhiva</string>
<string name="empty_archive">Izbriši sve arhivirane razgovore</string>
<string name="archived_conversations">Arhiv</string>
<string name="show_archived_conversations">Prikaži arhivirane razgovore</string>
<string name="archive">Arhiviraj</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Stvarno želiš izbrisati sve poruke ovog razgovora\?</string> <string name="delete_whole_conversation_confirmation">Stvarno želiš izbrisati sve poruke ovog razgovora\?</string>
<string name="archive_confirmation">Stvarno želiš arhivirati %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d razgovor</item> <item quantity="one">%d razgovor</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Megjelölés olvasottként</string> <string name="mark_as_read">Megjelölés olvasottként</string>
<string name="mark_as_unread">Megjelölés olvasatlanként</string> <string name="mark_as_unread">Megjelölés olvasatlanként</string>
<string name="me">Nekem</string> <string name="me">Nekem</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- 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="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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d beszélgetést</item> <item quantity="one">%d beszélgetést</item>

View File

@ -57,8 +57,18 @@
<string name="mark_as_read">Tandai sebagai Dibaca</string> <string name="mark_as_read">Tandai sebagai Dibaca</string>
<string name="mark_as_unread">Tandai sebagai Belum dibaca</string> <string name="mark_as_unread">Tandai sebagai Belum dibaca</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Apakah Anda yakin ingin menghapus semua pesan dari percakapan ini\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="other">%d percakapan</item> <item quantity="other">%d percakapan</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Mark as Read</string> <string name="mark_as_read">Mark as Read</string>
<string name="mark_as_unread">Mark as Unread</string> <string name="mark_as_unread">Mark as Unread</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversation</item> <item quantity="one">%d conversation</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Letto</string> <string name="mark_as_read">Letto</string>
<string name="mark_as_unread">Non letto</string> <string name="mark_as_unread">Non letto</string>
<string name="me">Io</string> <string name="me">Io</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Vuoi davvero eliminare tutti i messaggi di questa conversazione\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversazione</item> <item quantity="one">%d conversazione</item>

View File

@ -60,8 +60,18 @@
<string name="mark_as_read">סמן כנקרא</string> <string name="mark_as_read">סמן כנקרא</string>
<string name="mark_as_unread">סמן כלא נקרא</string> <string name="mark_as_unread">סמן כלא נקרא</string>
<string name="me">אני</string> <string name="me">אני</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">האם אתה בטוח שברצונך למחוק את כל ההודעות של השיחה הזו\?</string> <string name="delete_whole_conversation_confirmation">האם אתה בטוח שברצונך למחוק את כל ההודעות של השיחה הזו\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">שיחה %d</item> <item quantity="one">שיחה %d</item>

View File

@ -57,8 +57,18 @@
<string name="mark_as_read">既読にする</string> <string name="mark_as_read">既読にする</string>
<string name="mark_as_unread">未読にする</string> <string name="mark_as_unread">未読にする</string>
<string name="me">自分</string> <string name="me">自分</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">本当にこの会話のすべてのメッセージを削除しますか?</string> <string name="delete_whole_conversation_confirmation">本当にこの会話のすべてのメッセージを削除しますか?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="other">%d 件の会話</item> <item quantity="other">%d 件の会話</item>

View File

@ -58,8 +58,18 @@
<string name="new_message">Nauja žinutė</string> <string name="new_message">Nauja žinutė</string>
<string name="mark_as_read">Pažymėti kaip perskaitytą</string> <string name="mark_as_read">Pažymėti kaip perskaitytą</string>
<string name="mark_as_unread">Pažymėti kaip neskaitytą</string> <string name="mark_as_unread">Pažymėti kaip neskaitytą</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Ar tikrai norite ištrinti visas šio pokalbio žinutes\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d pokalbis</item> <item quantity="one">%d pokalbis</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Mark as Read</string> <string name="mark_as_read">Mark as Read</string>
<string name="mark_as_unread">Mark as Unread</string> <string name="mark_as_unread">Mark as Unread</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="zero">%d conversation</item> <item quantity="zero">%d conversation</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Mark as Read</string> <string name="mark_as_read">Mark as Read</string>
<string name="mark_as_unread">Mark as Unread</string> <string name="mark_as_unread">Mark as Unread</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversation</item> <item quantity="one">%d conversation</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">വായിച്ചതായി അടയാളപ്പെടുത്തുക</string> <string name="mark_as_read">വായിച്ചതായി അടയാളപ്പെടുത്തുക</string>
<string name="mark_as_unread">വായിച്ചിട്ടില്ലെന്ന് അടയാളപ്പെടുത്തുക</string> <string name="mark_as_unread">വായിച്ചിട്ടില്ലെന്ന് അടയാളപ്പെടുത്തുക</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">ഈ സംഭാഷണത്തിലെ എല്ലാ സന്ദേശങ്ങളും ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ\?</string> <string name="delete_whole_conversation_confirmation">ഈ സംഭാഷണത്തിലെ എല്ലാ സന്ദേശങ്ങളും ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d സംഭാഷണം</item> <item quantity="one">%d സംഭാഷണം</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Marker som lest</string> <string name="mark_as_read">Marker som lest</string>
<string name="mark_as_unread">Marker som ulest</string> <string name="mark_as_unread">Marker som ulest</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Er du sikker på at du vil slette alle meldinger fra denne konversasjonen\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d konversasjon</item> <item quantity="one">%d konversasjon</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Als gelezen markeren</string> <string name="mark_as_read">Als gelezen markeren</string>
<string name="mark_as_unread">Als ongelezen markeren</string> <string name="mark_as_unread">Als ongelezen markeren</string>
<string name="me">Ik</string> <string name="me">Ik</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Alle berichten in dit gesprek verwijderen\?</string> <string name="delete_whole_conversation_confirmation">Alle berichten in dit gesprek verwijderen\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d gesprek</item> <item quantity="one">%d gesprek</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">پرھے وجوں چنھت کرو</string> <string name="mark_as_read">پرھے وجوں چنھت کرو</string>
<string name="mark_as_unread">نا پڑھے وجوں چنھت کرو</string> <string name="mark_as_unread">نا پڑھے وجوں چنھت کرو</string>
<string name="me">میں</string> <string name="me">میں</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">تسیں پکے اے، سارے سنیہے مٹاؤ؟</string> <string name="delete_whole_conversation_confirmation">تسیں پکے اے، سارے سنیہے مٹاؤ؟</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversation</item> <item quantity="one">%d conversation</item>

View File

@ -60,8 +60,18 @@
<string name="mark_as_read">Oznacz jako przeczytane</string> <string name="mark_as_read">Oznacz jako przeczytane</string>
<string name="mark_as_unread">Oznacz jako nieprzeczytane</string> <string name="mark_as_unread">Oznacz jako nieprzeczytane</string>
<string name="me">Ja</string> <string name="me">Ja</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Czy usunąć wszystkie wiadomości z tej rozmowy\?</string> <string name="delete_whole_conversation_confirmation">Czy usunąć wszystkie wiadomości z tej rozmowy\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d rozmowę</item> <item quantity="one">%d rozmowę</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Marcar como Lida</string> <string name="mark_as_read">Marcar como Lida</string>
<string name="mark_as_unread">Marcar como Não Lida</string> <string name="mark_as_unread">Marcar como Não Lida</string>
<string name="me">Eu</string> <string name="me">Eu</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Tem certeza que quer deletar todas as mensagens dessa conversa\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversa</item> <item quantity="one">%d conversa</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Marcar como lida</string> <string name="mark_as_read">Marcar como lida</string>
<string name="mark_as_unread">Marcar como não lida</string> <string name="mark_as_unread">Marcar como não lida</string>
<string name="me">Eu</string> <string name="me">Eu</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Tem a certeza de que pretende apagar todas as mensagens desta conversa\?</string> <string name="delete_whole_conversation_confirmation">Tem a certeza de que pretende apagar todas as mensagens desta conversa\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversa</item> <item quantity="one">%d conversa</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Marchează ca citit</string> <string name="mark_as_read">Marchează ca citit</string>
<string name="mark_as_unread">Marchează ca necitit</string> <string name="mark_as_unread">Marchează ca necitit</string>
<string name="me">Eu</string> <string name="me">Eu</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- 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="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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversaţie</item> <item quantity="one">%d conversaţie</item>

View File

@ -60,8 +60,18 @@
<string name="mark_as_read">Прочитано</string> <string name="mark_as_read">Прочитано</string>
<string name="mark_as_unread">Не прочитано</string> <string name="mark_as_unread">Не прочитано</string>
<string name="me">Я</string> <string name="me">Я</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Удалить все сообщения в этой переписке\?</string> <string name="delete_whole_conversation_confirmation">Удалить все сообщения в этой переписке\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d переписку</item> <item quantity="one">%d переписку</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Označiť ako prečítané</string> <string name="mark_as_read">Označiť ako prečítané</string>
<string name="mark_as_unread">Označiť ako neprečítané</string> <string name="mark_as_unread">Označiť ako neprečítané</string>
<string name="me">Ja</string> <string name="me">Ja</string>
<!-- Archive -->
<string name="unarchive">Zrušiť archiváciu</string>
<string name="empty_archive">Vymazať všetky archivované konverzácie</string>
<string name="archived_conversations">Archív</string>
<string name="show_archived_conversations">Zobraziť archivované konverzácie</string>
<string name="archive">Archivovať</string>
<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>
<!-- Confirmation dialog --> <!-- 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="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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d konverzáciu</item> <item quantity="one">%d konverzáciu</item>

View File

@ -60,8 +60,18 @@
<string name="mark_as_read">Označi kot prebrano</string> <string name="mark_as_read">Označi kot prebrano</string>
<string name="mark_as_unread">Označi kot neprebrano</string> <string name="mark_as_unread">Označi kot neprebrano</string>
<string name="me">Jaz</string> <string name="me">Jaz</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Ste prepričani, da želite izbrisati vsa sporočila tega pogovora\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d pogovor</item> <item quantity="one">%d pogovor</item>

View File

@ -59,8 +59,18 @@
<string name="mark_as_read">Означи као прочитано</string> <string name="mark_as_read">Означи као прочитано</string>
<string name="mark_as_unread">Означи као непрочитанo</string> <string name="mark_as_unread">Означи као непрочитанo</string>
<string name="me">Ja</string> <string name="me">Ja</string>
<!-- Archive -->
<string name="unarchive">Врати из архиве</string>
<string name="empty_archive">Обриши све архивиране конверзације</string>
<string name="archived_conversations">Архива</string>
<string name="show_archived_conversations">Прикажи архивиране конверзације</string>
<string name="archive">Архивирај</string>
<string name="no_archived_conversations">Нема архивираних разговора</string>
<string name="archive_emptied_successfully">Архива је успјешно испражнјена</string>
<string name="empty_archive_confirmation">Да ли сте сигурни да желите да испразните архиву? Све архивиране поруке ће бити избрисане.</string>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Да ли сте сигурни да желите да избришете све поруке ове конверзације\?</string> <string name="delete_whole_conversation_confirmation">Да ли сте сигурни да желите да избришете све поруке ове конверзације\?</string>
<string name="archive_confirmation">Да ли сте сигурни да желите да архивирате %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d разговор</item> <item quantity="one">%d разговор</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Markera som läst</string> <string name="mark_as_read">Markera som läst</string>
<string name="mark_as_unread">Markera som oläst</string> <string name="mark_as_unread">Markera som oläst</string>
<string name="me">Jag</string> <string name="me">Jag</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- 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="delete_whole_conversation_confirmation">Är du säker på att du vill ta bort alla meddelanden i konversationen\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d konversation</item> <item quantity="one">%d konversation</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">படித்ததாக குறியிடு</string> <string name="mark_as_read">படித்ததாக குறியிடு</string>
<string name="mark_as_unread">படிக்காததாக குறியிடு</string> <string name="mark_as_unread">படிக்காததாக குறியிடு</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">இந்த உரையாடலின் அனைத்து செய்திகளையும் நிச்சயமாக நீக்க விரும்புகிறீர்களா\?</string> <string name="delete_whole_conversation_confirmation">இந்த உரையாடலின் அனைத்து செய்திகளையும் நிச்சயமாக நீக்க விரும்புகிறீர்களா\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d உரையாடல்</item> <item quantity="one">%d உரையாடல்</item>

View File

@ -57,8 +57,18 @@
<string name="mark_as_read">Mark as Read</string> <string name="mark_as_read">Mark as Read</string>
<string name="mark_as_unread">Mark as Unread</string> <string name="mark_as_unread">Mark as Unread</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation\?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="other">%d conversation</item> <item quantity="other">%d conversation</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Okundu olarak işaretle</string> <string name="mark_as_read">Okundu olarak işaretle</string>
<string name="mark_as_unread">Okunmadı olarak işaretle</string> <string name="mark_as_unread">Okunmadı olarak işaretle</string>
<string name="me">Ben</string> <string name="me">Ben</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Bu görüşmenin tüm mesajlarını silmek istediğinizden emin misiniz\?</string> <string name="delete_whole_conversation_confirmation">Bu görüşmenin tüm mesajlarını silmek istediğinizden emin misiniz\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d görüşme</item> <item quantity="one">%d görüşme</item>

View File

@ -60,8 +60,18 @@
<string name="mark_as_read">Прочитано</string> <string name="mark_as_read">Прочитано</string>
<string name="mark_as_unread">Не прочитано</string> <string name="mark_as_unread">Не прочитано</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Справді видалити всі повідомлення у цьому листуванні\?</string> <string name="delete_whole_conversation_confirmation">Справді видалити всі повідомлення у цьому листуванні\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d листування</item> <item quantity="one">%d листування</item>

View File

@ -57,8 +57,18 @@
<string name="mark_as_read">标记为已读</string> <string name="mark_as_read">标记为已读</string>
<string name="mark_as_unread">标记为未读</string> <string name="mark_as_unread">标记为未读</string>
<string name="me">自己</string> <string name="me">自己</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">您确定要删除此对话的所有消息吗\?</string> <string name="delete_whole_conversation_confirmation">您确定要删除此对话的所有消息吗\?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="other">%d 个对话</item> <item quantity="other">%d 个对话</item>

View File

@ -57,8 +57,18 @@
<string name="mark_as_read">標為已讀</string> <string name="mark_as_read">標為已讀</string>
<string name="mark_as_unread">標為未讀</string> <string name="mark_as_unread">標為未讀</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">您確定要刪除此對話中的所有訊息嗎?</string> <string name="delete_whole_conversation_confirmation">您確定要刪除此對話中的所有訊息嗎?</string>
<string name="archive_confirmation">Are you sure you want to archive %s?</string>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="other">%d conversation</item> <item quantity="other">%d conversation</item>

View File

@ -58,8 +58,18 @@
<string name="mark_as_read">Mark as Read</string> <string name="mark_as_read">Mark as Read</string>
<string name="mark_as_unread">Mark as Unread</string> <string name="mark_as_unread">Mark as Unread</string>
<string name="me">Me</string> <string name="me">Me</string>
<!-- Archive -->
<string name="unarchive">Unarchive</string>
<string name="empty_archive">Delete all archived conversations</string>
<string name="archived_conversations">Archive</string>
<string name="show_archived_conversations">Show archived conversations</string>
<string name="archive">Archive</string>
<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>
<!-- Confirmation dialog --> <!-- Confirmation dialog -->
<string name="delete_whole_conversation_confirmation">Are you sure you want to delete all messages of this conversation?</string> <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>
<!-- Are you sure you want to delete 5 conversations? --> <!-- Are you sure you want to delete 5 conversations? -->
<plurals name="delete_conversations"> <plurals name="delete_conversations">
<item quantity="one">%d conversation</item> <item quantity="one">%d conversation</item>