Merge branch 'master' into feature/451-recycle-bin
This commit is contained in:
commit
b29d664dc4
|
@ -63,7 +63,7 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.github.SimpleMobileTools:Simple-Commons:b4cc381943'
|
||||
implementation 'com.github.SimpleMobileTools:Simple-Commons:8814cd2d4b'
|
||||
implementation 'org.greenrobot:eventbus:3.3.1'
|
||||
implementation 'com.github.tibbi:IndicatorFastScroll:4524cd0b61'
|
||||
implementation 'com.github.tibbi:android-smsmms:5657799572'
|
||||
|
@ -72,7 +72,7 @@ dependencies {
|
|||
implementation 'com.googlecode.ez-vcard:ez-vcard:0.11.3'
|
||||
implementation 'androidx.lifecycle:lifecycle-process:2.5.1'
|
||||
|
||||
kapt "androidx.room:room-compiler:2.5.1"
|
||||
implementation "androidx.room:room-runtime:2.5.1"
|
||||
annotationProcessor "androidx.room:room-compiler:2.5.1"
|
||||
kapt "androidx.room:room-compiler:2.5.2"
|
||||
implementation "androidx.room:room-runtime:2.5.2"
|
||||
annotationProcessor "androidx.room:room-compiler:2.5.2"
|
||||
}
|
||||
|
|
|
@ -58,6 +58,13 @@
|
|||
android:label="@string/recycle_bin"
|
||||
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
|
||||
android:name=".activities.ThreadActivity"
|
||||
android:configChanges="orientation"
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
|
@ -179,6 +179,7 @@ class MainActivity : SimpleActivity() {
|
|||
R.id.export_messages -> tryToExportMessages()
|
||||
R.id.more_apps_from_us -> launchMoreAppsFromUsIntent()
|
||||
R.id.show_recycle_bin -> launchRecycleBin()
|
||||
R.id.show_archived -> launchArchivedConversations()
|
||||
R.id.settings -> launchSettings()
|
||||
R.id.about -> launchAbout()
|
||||
else -> return@setOnMenuItemClickListener false
|
||||
|
@ -253,7 +254,10 @@ class MainActivity : SimpleActivity() {
|
|||
handlePermission(PERMISSION_READ_CONTACTS) {
|
||||
handleNotificationPermission { 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() {
|
||||
ensureBackgroundThread {
|
||||
val conversations = try {
|
||||
conversationsDB.getAll().toMutableList() as ArrayList<Conversation>
|
||||
conversationsDB.getNonArchived().toMutableList() as ArrayList<Conversation>
|
||||
} catch (e: Exception) {
|
||||
ArrayList()
|
||||
}
|
||||
|
||||
val archived = try {
|
||||
conversationsDB.getAllArchived()
|
||||
} catch (e: Exception) {
|
||||
listOf()
|
||||
}
|
||||
|
||||
updateUnreadCountBadge(conversations)
|
||||
runOnUiThread {
|
||||
setupConversations(conversations, cached = true)
|
||||
getNewConversations(conversations)
|
||||
getNewConversations((conversations + archived).toMutableList() as ArrayList<Conversation>)
|
||||
}
|
||||
conversations.forEach {
|
||||
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 {
|
||||
setupConversations(allConversations)
|
||||
}
|
||||
|
@ -563,6 +573,11 @@ class MainActivity : SimpleActivity() {
|
|||
startActivity(Intent(applicationContext, RecycleBinConversationsActivity::class.java))
|
||||
}
|
||||
|
||||
private fun launchArchivedConversations() {
|
||||
hideKeyboard()
|
||||
startActivity(Intent(applicationContext, ArchivedConversationsActivity::class.java))
|
||||
}
|
||||
|
||||
private fun launchSettings() {
|
||||
hideKeyboard()
|
||||
startActivity(Intent(applicationContext, SettingsActivity::class.java))
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.simplemobiletools.smsmessenger.activities
|
|||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.app.AlarmManager
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Intent
|
||||
import android.content.res.ColorStateList
|
||||
|
@ -44,6 +45,7 @@ import com.google.gson.Gson
|
|||
import com.google.gson.reflect.TypeToken
|
||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||
import com.simplemobiletools.commons.dialogs.FeatureLockedDialog
|
||||
import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog
|
||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
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.SimpleContact
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
import com.simplemobiletools.smsmessenger.BuildConfig
|
||||
import com.simplemobiletools.smsmessenger.R
|
||||
import com.simplemobiletools.smsmessenger.adapters.AttachmentsAdapter
|
||||
import com.simplemobiletools.smsmessenger.adapters.AutoCompleteTextViewAdapter
|
||||
|
@ -244,6 +247,8 @@ class ThreadActivity : SimpleActivity() {
|
|||
val firstPhoneNumber = participants.firstOrNull()?.phoneNumbers?.firstOrNull()?.value
|
||||
thread_toolbar.menu.apply {
|
||||
findItem(R.id.delete).isVisible = threadItems.isNotEmpty()
|
||||
findItem(R.id.archive).isVisible = threadItems.isNotEmpty() && conversation?.isArchived == false
|
||||
findItem(R.id.unarchive).isVisible = threadItems.isNotEmpty() && conversation?.isArchived == true
|
||||
findItem(R.id.rename_conversation).isVisible = participants.size > 1 && conversation != null
|
||||
findItem(R.id.conversation_details).isVisible = conversation != null
|
||||
findItem(R.id.block_number).title = addLockedLabelIfNeeded(R.string.block_number)
|
||||
|
@ -268,6 +273,8 @@ class ThreadActivity : SimpleActivity() {
|
|||
when (menuItem.itemId) {
|
||||
R.id.block_number -> tryBlocking()
|
||||
R.id.delete -> askConfirmDelete()
|
||||
R.id.archive -> archiveConversation()
|
||||
R.id.unarchive -> unarchiveConversation()
|
||||
R.id.rename_conversation -> renameConversation()
|
||||
R.id.conversation_details -> showConversationDetails()
|
||||
R.id.add_number_to_contact -> addNumberToContact()
|
||||
|
@ -715,6 +722,25 @@ class ThreadActivity : SimpleActivity() {
|
|||
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() {
|
||||
messages.filter { it.attachment != null }.forEach { message ->
|
||||
message.attachment!!.attachments.forEach {
|
||||
|
@ -893,7 +919,8 @@ class ThreadActivity : SimpleActivity() {
|
|||
}
|
||||
|
||||
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 {
|
||||
deleteConversation(threadId)
|
||||
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() {
|
||||
val phoneNumber = participants.first().phoneNumbers.first().normalizedNumber
|
||||
dialNumber(phoneNumber)
|
||||
|
@ -1126,7 +1173,7 @@ class ThreadActivity : SimpleActivity() {
|
|||
contacts = arrayListOf(contact),
|
||||
showExportingToast = false,
|
||||
) {
|
||||
if (it == VcfExporter.ExportResult.EXPORT_OK) {
|
||||
if (it == ExportResult.EXPORT_OK) {
|
||||
val vCardUri = getMyFileUri(outputFile)
|
||||
runOnUiThread {
|
||||
addAttachment(vCardUri)
|
||||
|
@ -1332,6 +1379,7 @@ class ThreadActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
messagesDB.insertOrUpdate(message)
|
||||
updateConversationArchivedStatus(message.threadId, false)
|
||||
}
|
||||
|
||||
// show selected contacts, properly split to new lines when appropriate
|
||||
|
@ -1534,10 +1582,12 @@ class ThreadActivity : SimpleActivity() {
|
|||
}
|
||||
|
||||
private fun launchScheduleSendDialog(originalDateTime: DateTime? = null) {
|
||||
ScheduleMessageDialog(this, originalDateTime) { newDateTime ->
|
||||
if (newDateTime != null) {
|
||||
scheduledDateTime = newDateTime
|
||||
showScheduleMessageDialog()
|
||||
askForExactAlarmPermissionIfNeeded {
|
||||
ScheduleMessageDialog(this, originalDateTime) { newDateTime ->
|
||||
if (newDateTime != null) {
|
||||
scheduledDateTime = newDateTime
|
||||
showScheduleMessageDialog()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,24 +1,12 @@
|
|||
package com.simplemobiletools.smsmessenger.adapters
|
||||
|
||||
import android.content.Intent
|
||||
import android.graphics.Typeface
|
||||
import android.os.Parcelable
|
||||
import android.text.TextUtils
|
||||
import android.util.TypedValue
|
||||
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.FeatureLockedDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.KEY_PHONE
|
||||
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.helpers.isNougatPlus
|
||||
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.messaging.isShortCodeWithLetters
|
||||
import com.simplemobiletools.smsmessenger.models.Conversation
|
||||
import kotlinx.android.synthetic.main.item_conversation.view.*
|
||||
|
||||
class ConversationsAdapter(
|
||||
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()
|
||||
})
|
||||
}
|
||||
|
||||
) : BaseConversationsAdapter(activity, recyclerView, onRefresh, itemClick) {
|
||||
override fun getActionMenuId() = R.menu.cab_conversations
|
||||
|
||||
override fun prepareActionMode(menu: Menu) {
|
||||
|
@ -86,6 +53,7 @@ class ConversationsAdapter(
|
|||
R.id.cab_dial_number -> dialNumber()
|
||||
R.id.cab_copy_number -> copyNumberToClipboard()
|
||||
R.id.cab_delete -> askConfirmDelete()
|
||||
R.id.cab_archive -> askConfirmArchive()
|
||||
R.id.cab_rename_conversation -> renameConversation(getSelectedItems().first())
|
||||
R.id.cab_mark_as_read -> markAsRead()
|
||||
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() {
|
||||
if (activity.isOrWasThankYouInstalled()) {
|
||||
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() {
|
||||
if (selectedKeys.isEmpty()) {
|
||||
return
|
||||
|
@ -276,8 +257,6 @@ class ConversationsAdapter(
|
|||
}
|
||||
}
|
||||
|
||||
private fun getSelectedItems() = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList<Conversation>
|
||||
|
||||
private fun pinConversation(pin: Boolean) {
|
||||
val conversations = getSelectedItems()
|
||||
if (conversations.isEmpty()) {
|
||||
|
@ -303,113 +282,10 @@ class ConversationsAdapter(
|
|||
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() {
|
||||
activity.runOnUiThread {
|
||||
refreshMessages()
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -117,6 +117,7 @@ abstract class MessagesDatabase : RoomDatabase() {
|
|||
private val MIGRATION_7_8 = object : Migration(7, 8) {
|
||||
override fun migrate(database: SupportSQLiteDatabase) {
|
||||
database.apply {
|
||||
execSQL("ALTER TABLE conversations ADD COLUMN archived INTEGER NOT NULL DEFAULT 0")
|
||||
execSQL("CREATE TABLE IF NOT EXISTS `recycle_bin_messages` (`id` INTEGER PRIMARY KEY, `deleted_ts` INTEGER NOT NULL)")
|
||||
execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_recycle_bin_messages_id` ON `recycle_bin_messages` (`id`)")
|
||||
}
|
||||
|
|
|
@ -268,7 +268,8 @@ fun Context.getConversations(threadId: Long? = null, privateContacts: ArrayList<
|
|||
Threads.SNIPPET,
|
||||
Threads.DATE,
|
||||
Threads.READ,
|
||||
Threads.RECIPIENT_IDS
|
||||
Threads.RECIPIENT_IDS,
|
||||
Threads.ARCHIVED
|
||||
)
|
||||
|
||||
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 isGroupConversation = phoneNumbers.size > 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)
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
var uri = Sms.CONTENT_URI
|
||||
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) {
|
||||
val uri = if (isMMS) Mms.CONTENT_URI else Sms.CONTENT_URI
|
||||
val selection = "${Sms._ID} = ?"
|
||||
|
@ -999,7 +1030,8 @@ fun Context.createTemporaryThread(message: Message, threadId: Long = generateRan
|
|||
isGroupConversation = addresses.size > 1,
|
||||
phoneNumber = addresses.first(),
|
||||
isScheduled = true,
|
||||
usesCustomTitle = cachedConv?.usesCustomTitle == true
|
||||
usesCustomTitle = cachedConv?.usesCustomTitle == true,
|
||||
isArchived = false
|
||||
)
|
||||
try {
|
||||
conversationsDB.insertOrUpdate(conversation)
|
||||
|
|
|
@ -111,4 +111,8 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
var lastRecycleBinCheck: Long
|
||||
get() = prefs.getLong(LAST_RECYCLE_BIN_CHECK, 0L)
|
||||
set(lastRecycleBinCheck) = prefs.edit().putLong(LAST_RECYCLE_BIN_CHECK, lastRecycleBinCheck).apply()
|
||||
|
||||
var useArchive: Boolean
|
||||
get() = prefs.getBoolean(USE_ARCHIVE, false)
|
||||
set(useArchive) = prefs.edit().putBoolean(USE_ARCHIVE, useArchive).apply()
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ const val IS_MMS = "is_mms"
|
|||
const val MESSAGE_ID = "message_id"
|
||||
const val USE_RECYCLE_BIN = "use_recycle_bin"
|
||||
const val LAST_RECYCLE_BIN_CHECK = "last_recycle_bin_check"
|
||||
const val USE_ARCHIVE = "use_archive"
|
||||
|
||||
private const val PATH = "com.simplemobiletools.smsmessenger.action."
|
||||
const val MARK_AS_READ = PATH + "mark_as_read"
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
package com.simplemobiletools.smsmessenger.interfaces
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import androidx.room.*
|
||||
import com.simplemobiletools.smsmessenger.models.Conversation
|
||||
|
||||
@Dao
|
||||
|
@ -11,8 +8,11 @@ interface ConversationsDao {
|
|||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
fun insertOrUpdate(conversation: Conversation): Long
|
||||
|
||||
@Query("SELECT * FROM conversations")
|
||||
fun getAll(): List<Conversation>
|
||||
@Query("SELECT * FROM conversations WHERE archived = 0")
|
||||
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")
|
||||
fun getAllWithMessagesInRecycleBin(): List<Conversation>
|
||||
|
@ -32,6 +32,12 @@ interface ConversationsDao {
|
|||
@Query("UPDATE conversations SET read = 0 WHERE thread_id = :threadId")
|
||||
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")
|
||||
fun deleteThreadId(threadId: Long)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
|
@ -16,7 +16,8 @@ data class Conversation(
|
|||
@ColumnInfo(name = "is_group_conversation") var isGroupConversation: Boolean,
|
||||
@ColumnInfo(name = "phone_number") var phoneNumber: String,
|
||||
@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 {
|
||||
|
|
|
@ -113,6 +113,7 @@ class SmsReceiver : BroadcastReceiver() {
|
|||
subscriptionId
|
||||
)
|
||||
context.messagesDB.insertOrUpdate(message)
|
||||
context.updateConversationArchivedStatus(threadId, false)
|
||||
refreshMessages()
|
||||
context.showReceivedMessageNotification(newMessageId, address, body, threadId, bitmap)
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -26,6 +26,12 @@
|
|||
android:icon="@drawable/ic_minus_circle_vector"
|
||||
android:title="@string/block_number"
|
||||
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
|
||||
android:id="@+id/cab_copy_number"
|
||||
android:showAsAction="never"
|
||||
|
|
|
@ -18,6 +18,11 @@
|
|||
android:showAsAction="never"
|
||||
android:title="Show recycle bin"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/show_archived"
|
||||
android:showAsAction="never"
|
||||
android:title="@string/show_archived_conversations"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/settings"
|
||||
android:icon="@drawable/ic_settings_cog_vector"
|
||||
|
|
|
@ -23,6 +23,16 @@
|
|||
android:icon="@drawable/ic_edit_vector"
|
||||
android:title="@string/rename_conversation"
|
||||
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
|
||||
android:id="@+id/conversation_details"
|
||||
android:icon="@drawable/ic_info_vector"
|
||||
|
|
|
@ -62,8 +62,18 @@
|
|||
<string name="mark_as_read">ضع إشارة مقروء</string>
|
||||
<string name="mark_as_unread">وضع علامة كغير مقروءة</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="zero">محادثة %d</item>
|
||||
|
@ -130,4 +140,4 @@
|
|||
Haven't found some strings? There's more at
|
||||
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Mark as Read</string>
|
||||
<string name="mark_as_unread">Mark as Unread</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversation</item>
|
||||
|
|
|
@ -60,8 +60,18 @@
|
|||
<string name="mark_as_read">Прачытана</string>
|
||||
<string name="mark_as_unread">Не прачытана</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d размову</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Отбележи като прочетено</string>
|
||||
<string name="mark_as_unread">Отбележи като непрочетено</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d разговор</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Marca com a llegit</string>
|
||||
<string name="mark_as_unread">Marcar com no llegit</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversa</item>
|
||||
|
@ -118,4 +128,4 @@
|
|||
Haven't found some strings? There's more at
|
||||
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Mark as Read</string>
|
||||
<string name="mark_as_unread">Mark as Unread</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversation</item>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<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="me">Mé</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d konverzace</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Marker som læst</string>
|
||||
<string name="mark_as_unread">Marker som ulæst</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d samtale</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Als gelesen markieren</string>
|
||||
<string name="mark_as_unread">Als ungelesen markieren</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d Unterhaltung</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Σήμανση ως Αναγνωσμένο</string>
|
||||
<string name="mark_as_unread">Σήμανση ως Μη Αναγνωσμένο</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d συνομιλία</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Marki kiel legitan</string>
|
||||
<string name="mark_as_unread">Marki kiel nelegitan</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d konversacio</item>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<string name="mark_as_read">Marcar como leído</string>
|
||||
<string name="mark_as_unread">Marcar como no leído</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversación</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Märgi loetuks</string>
|
||||
<string name="mark_as_unread">Märgi mitteloetuks</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d vestlus</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Merkitse luetuksi</string>
|
||||
<string name="mark_as_unread">Merkitse lukemattomaksi</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d keskustelu</item>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<string name="mark_as_read">Marquer comme lu</string>
|
||||
<string name="mark_as_unread">Marquer comme non lu</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversation</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Marcar como lida</string>
|
||||
<string name="mark_as_unread">Marcar como non lida</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversa</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Mark as Read</string>
|
||||
<string name="mark_as_unread">Mark as Unread</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversation</item>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<string name="mark_as_read">Označi kao pročitano</string>
|
||||
<string name="mark_as_unread">Označi kao nepročitano</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d razgovor</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Megjelölés olvasottként</string>
|
||||
<string name="mark_as_unread">Megjelölés olvasatlanként</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d beszélgetést</item>
|
||||
|
|
|
@ -57,8 +57,18 @@
|
|||
<string name="mark_as_read">Tandai sebagai Dibaca</string>
|
||||
<string name="mark_as_unread">Tandai sebagai Belum dibaca</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="other">%d percakapan</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Mark as Read</string>
|
||||
<string name="mark_as_unread">Mark as Unread</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversation</item>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<string name="mark_as_read">Letto</string>
|
||||
<string name="mark_as_unread">Non letto</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversazione</item>
|
||||
|
|
|
@ -60,8 +60,18 @@
|
|||
<string name="mark_as_read">סמן כנקרא</string>
|
||||
<string name="mark_as_unread">סמן כלא נקרא</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">שיחה %d</item>
|
||||
|
|
|
@ -57,8 +57,18 @@
|
|||
<string name="mark_as_read">既読にする</string>
|
||||
<string name="mark_as_unread">未読にする</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="other">%d 件の会話</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="new_message">Nauja žinutė</string>
|
||||
<string name="mark_as_read">Pažymėti kaip perskaitytą</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d pokalbis</item>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<string name="mark_as_read">Mark as Read</string>
|
||||
<string name="mark_as_unread">Mark as Unread</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="zero">%d conversation</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Mark as Read</string>
|
||||
<string name="mark_as_unread">Mark as Unread</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversation</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">വായിച്ചതായി അടയാളപ്പെടുത്തുക</string>
|
||||
<string name="mark_as_unread">വായിച്ചിട്ടില്ലെന്ന് അടയാളപ്പെടുത്തുക</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d സംഭാഷണം</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Marker som lest</string>
|
||||
<string name="mark_as_unread">Marker som ulest</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d konversasjon</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Als gelezen markeren</string>
|
||||
<string name="mark_as_unread">Als ongelezen markeren</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d gesprek</item>
|
||||
|
@ -118,4 +128,4 @@
|
|||
Haven't found some strings? There's more at
|
||||
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">پرھے وجوں چنھت کرو</string>
|
||||
<string name="mark_as_unread">نا پڑھے وجوں چنھت کرو</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversation</item>
|
||||
|
|
|
@ -60,8 +60,18 @@
|
|||
<string name="mark_as_read">Oznacz jako przeczytane</string>
|
||||
<string name="mark_as_unread">Oznacz jako nieprzeczytane</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d rozmowę</item>
|
||||
|
@ -124,4 +134,4 @@
|
|||
Haven't found some strings? There's more at
|
||||
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<string name="mark_as_read">Marcar como Lida</string>
|
||||
<string name="mark_as_unread">Marcar como Não Lida</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversa</item>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<string name="mark_as_read">Marcar como lida</string>
|
||||
<string name="mark_as_unread">Marcar como não lida</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversa</item>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<string name="mark_as_read">Marchează ca citit</string>
|
||||
<string name="mark_as_unread">Marchează ca necitit</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversaţie</item>
|
||||
|
|
|
@ -60,8 +60,18 @@
|
|||
<string name="mark_as_read">Прочитано</string>
|
||||
<string name="mark_as_unread">Не прочитано</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d переписку</item>
|
||||
|
@ -124,4 +134,4 @@
|
|||
Haven't found some strings? There's more at
|
||||
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<string name="mark_as_read">Označiť ako prečítané</string>
|
||||
<string name="mark_as_unread">Označiť ako neprečítané</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d konverzáciu</item>
|
||||
|
|
|
@ -60,8 +60,18 @@
|
|||
<string name="mark_as_read">Označi kot prebrano</string>
|
||||
<string name="mark_as_unread">Označi kot neprebrano</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d pogovor</item>
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
<string name="mark_as_read">Означи као прочитано</string>
|
||||
<string name="mark_as_unread">Означи као непрочитанo</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 -->
|
||||
<string name="delete_whole_conversation_confirmation">Да ли сте сигурни да желите да избришете све поруке ове конверзације\?</string>
|
||||
<string name="archive_confirmation">Да ли сте сигурни да желите да архивирате %s?</string>
|
||||
<!-- Are you sure you want to delete 5 conversations? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d разговор</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Markera som läst</string>
|
||||
<string name="mark_as_unread">Markera som oläst</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d konversation</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">படித்ததாக குறியிடு</string>
|
||||
<string name="mark_as_unread">படிக்காததாக குறியிடு</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d உரையாடல்</item>
|
||||
|
|
|
@ -57,8 +57,18 @@
|
|||
<string name="mark_as_read">Mark as Read</string>
|
||||
<string name="mark_as_unread">Mark as Unread</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="other">%d conversation</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Okundu olarak işaretle</string>
|
||||
<string name="mark_as_unread">Okunmadı olarak işaretle</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d görüşme</item>
|
||||
|
@ -118,4 +128,4 @@
|
|||
Haven't found some strings? There's more at
|
||||
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -60,8 +60,18 @@
|
|||
<string name="mark_as_read">Прочитано</string>
|
||||
<string name="mark_as_unread">Не прочитано</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d листування</item>
|
||||
|
|
|
@ -57,8 +57,18 @@
|
|||
<string name="mark_as_read">标记为已读</string>
|
||||
<string name="mark_as_unread">标记为未读</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="other">%d 个对话</item>
|
||||
|
@ -115,4 +125,4 @@
|
|||
Haven't found some strings? There's more at
|
||||
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -57,8 +57,18 @@
|
|||
<string name="mark_as_read">標為已讀</string>
|
||||
<string name="mark_as_unread">標為未讀</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="other">%d conversation</item>
|
||||
|
|
|
@ -58,8 +58,18 @@
|
|||
<string name="mark_as_read">Mark as Read</string>
|
||||
<string name="mark_as_unread">Mark as Unread</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 -->
|
||||
<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? -->
|
||||
<plurals name="delete_conversations">
|
||||
<item quantity="one">%d conversation</item>
|
||||
|
|
Loading…
Reference in New Issue