From f07abeb54c9d49c6beb6cc0e78831fe0470518de Mon Sep 17 00:00:00 2001 From: Naveen Date: Mon, 29 Aug 2022 03:19:50 +0530 Subject: [PATCH] Add vCard attachment preview --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 6 + .../activities/VCardViewerActivity.kt | 81 +++++++ .../smsmessenger/adapters/ThreadAdapter.kt | 223 +++++++++++------- .../adapters/VCardViewerAdapter.kt | 138 +++++++++++ .../smsmessenger/extensions/Activity.kt | 16 ++ .../smsmessenger/extensions/Date.kt | 8 + .../smsmessenger/extensions/String.kt | 5 + .../smsmessenger/helpers/Constants.kt | 1 + .../smsmessenger/helpers/VCardParser.kt | 15 ++ .../smsmessenger/models/VCard.kt | 54 +++++ app/src/main/res/drawable/ic_collapse_up.xml | 3 + app/src/main/res/drawable/ic_expand_down.xml | 3 + .../main/res/layout/activity_vcard_viewer.xml | 35 +++ .../main/res/layout/item_attachment_vcard.xml | 55 +++++ .../main/res/layout/item_vcard_contact.xml | 58 +++++ .../layout/item_vcard_contact_property.xml | 46 ++++ app/src/main/res/menu/menu_vcard.xml | 9 + app/src/main/res/values-ar/strings.xml | 16 +- app/src/main/res/values-az/strings.xml | 16 +- app/src/main/res/values-be/strings.xml | 16 +- app/src/main/res/values-bg/strings.xml | 16 +- app/src/main/res/values-ca/strings.xml | 16 +- app/src/main/res/values-cs/strings.xml | 16 +- app/src/main/res/values-da/strings.xml | 16 +- app/src/main/res/values-de/strings.xml | 16 +- app/src/main/res/values-el/strings.xml | 16 +- app/src/main/res/values-eo/strings.xml | 16 +- app/src/main/res/values-es/strings.xml | 16 +- app/src/main/res/values-et/strings.xml | 16 +- app/src/main/res/values-fi/strings.xml | 16 +- app/src/main/res/values-fr/strings.xml | 16 +- app/src/main/res/values-gl/strings.xml | 16 +- app/src/main/res/values-hr/strings.xml | 16 +- app/src/main/res/values-hu/strings.xml | 16 +- app/src/main/res/values-in/strings.xml | 16 +- app/src/main/res/values-it/strings.xml | 16 +- app/src/main/res/values-iw/strings.xml | 16 +- app/src/main/res/values-ja/strings.xml | 16 +- app/src/main/res/values-lt/strings.xml | 16 +- app/src/main/res/values-ml/strings.xml | 16 +- app/src/main/res/values-nb-rNO/strings.xml | 16 +- app/src/main/res/values-nl/strings.xml | 16 +- app/src/main/res/values-pl/strings.xml | 16 +- app/src/main/res/values-pt-rBR/strings.xml | 16 +- app/src/main/res/values-pt/strings.xml | 16 +- app/src/main/res/values-ro/strings.xml | 16 +- app/src/main/res/values-ru/strings.xml | 16 +- app/src/main/res/values-sk/strings.xml | 16 +- app/src/main/res/values-sv/strings.xml | 16 +- app/src/main/res/values-ta/strings.xml | 16 +- app/src/main/res/values-th/strings.xml | 16 +- app/src/main/res/values-tr/strings.xml | 16 +- app/src/main/res/values-uk/strings.xml | 16 +- app/src/main/res/values-zh-rCN/strings.xml | 16 +- app/src/main/res/values-zh-rTW/strings.xml | 16 +- app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/strings.xml | 14 ++ 58 files changed, 1263 insertions(+), 117 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/VCardViewerActivity.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/VCardViewerAdapter.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Date.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/VCardParser.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/VCard.kt create mode 100644 app/src/main/res/drawable/ic_collapse_up.xml create mode 100644 app/src/main/res/drawable/ic_expand_down.xml create mode 100644 app/src/main/res/layout/activity_vcard_viewer.xml create mode 100644 app/src/main/res/layout/item_attachment_vcard.xml create mode 100644 app/src/main/res/layout/item_vcard_contact.xml create mode 100644 app/src/main/res/layout/item_vcard_contact_property.xml create mode 100644 app/src/main/res/menu/menu_vcard.xml diff --git a/app/build.gradle b/app/build.gradle index 0917db47..2df2b061 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -69,6 +69,7 @@ dependencies { implementation 'com.github.tibbi:android-smsmms:4cdacdb701' implementation "me.leolin:ShortcutBadger:1.1.22" implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' + implementation 'com.googlecode.ez-vcard:ez-vcard:0.11.3' kapt "androidx.room:room-compiler:2.4.3" implementation "androidx.room:room-runtime:2.4.3" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e253980e..c25e7105 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -135,6 +135,12 @@ android:label="@string/blocked_numbers" android:parentActivityName=".activities.SettingsActivity" /> + + + when (menuItem.itemId) { + R.id.add_contact -> { + val intent = Intent(Intent.ACTION_VIEW).apply { + val mimetype = contentResolver.getType(vCardUri) + setDataAndType(vCardUri, mimetype?.lowercase()) + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + } + startActivity(intent) + } + else -> return@setOnMenuItemClickListener false + } + return@setOnMenuItemClickListener true + } + } + + private fun setupContactsList(vCards: List) { + val items = prepareData(vCards) + val adapter = VCardViewerAdapter(this, items.toMutableList()) { item -> + val property = item as? VCardPropertyWrapper + if (property != null) { + handleClick(item) + } + } + contacts_list.adapter = adapter + } + + private fun handleClick(property: VCardPropertyWrapper) { + when (property.property) { + is Telephone -> dialNumber(property.value.normalizePhoneNumber()) + is Email -> sendMail(property.value) + } + } + + private fun prepareData(vCards: List): List { + return vCards.map { VCardWrapper(it) } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index 75c31e54..9c59d4ee 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -32,13 +32,13 @@ import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.activities.NewConversationActivity import com.simplemobiletools.smsmessenger.activities.SimpleActivity import com.simplemobiletools.smsmessenger.activities.ThreadActivity +import com.simplemobiletools.smsmessenger.activities.VCardViewerActivity import com.simplemobiletools.smsmessenger.dialogs.SelectTextDialog -import com.simplemobiletools.smsmessenger.extensions.deleteMessage -import com.simplemobiletools.smsmessenger.extensions.getContactFromAddress -import com.simplemobiletools.smsmessenger.extensions.updateLastConversationMessage +import com.simplemobiletools.smsmessenger.extensions.* import com.simplemobiletools.smsmessenger.helpers.* import com.simplemobiletools.smsmessenger.models.* import kotlinx.android.synthetic.main.item_attachment_image.view.* +import kotlinx.android.synthetic.main.item_attachment_vcard.view.* import kotlinx.android.synthetic.main.item_received_message.view.* import kotlinx.android.synthetic.main.item_received_unknown_attachment.view.* import kotlinx.android.synthetic.main.item_sent_unknown_attachment.view.* @@ -290,102 +290,167 @@ class ThreadAdapter( if (message.attachment?.attachments?.isNotEmpty() == true) { for (attachment in message.attachment.attachments) { val mimetype = attachment.mimetype - val uri = attachment.getUri() - if (mimetype.startsWith("image/") || mimetype.startsWith("video/")) { - val imageView = layoutInflater.inflate(R.layout.item_attachment_image, null) - thread_mesage_attachments_holder.addView(imageView) + if (mimetype.isImageMimeType() || mimetype.startsWith("video/")) { + setupImageView(holder, view, message, attachment) + } else if (mimetype.isVCardMimeType()) { + setupVCardView(holder, view, message, attachment) + } else { + setupFileView(holder, view, message, attachment) + } - val placeholderDrawable = ColorDrawable(Color.TRANSPARENT) - val isTallImage = attachment.height > attachment.width - val transformation = if (isTallImage) CenterCrop() else FitCenter() - val options = RequestOptions() - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) - .placeholder(placeholderDrawable) - .transform(transformation) + thread_message_play_outline.beVisibleIf(mimetype.startsWith("video/")) + } + } + } + } - var builder = Glide.with(context) - .load(uri) - .transition(DrawableTransitionOptions.withCrossFade()) - .apply(options) - .listener(object : RequestListener { - override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean): Boolean { - thread_message_play_outline.beGone() - thread_mesage_attachments_holder.removeView(imageView) - return false - } + private fun setupImageView(holder: ViewHolder, parent: View, message: Message, attachment: Attachment) { + val mimetype = attachment.mimetype + val uri = attachment.getUri() + parent.apply { + val imageView = layoutInflater.inflate(R.layout.item_attachment_image, null) + thread_mesage_attachments_holder.addView(imageView) - override fun onResourceReady(dr: Drawable?, a: Any?, t: Target?, d: DataSource?, i: Boolean) = - false - }) + val placeholderDrawable = ColorDrawable(Color.TRANSPARENT) + val isTallImage = attachment.height > attachment.width + val transformation = if (isTallImage) CenterCrop() else FitCenter() + val options = RequestOptions() + .diskCacheStrategy(DiskCacheStrategy.RESOURCE) + .placeholder(placeholderDrawable) + .transform(transformation) - builder = if (isTallImage) { - builder.override(attachment.width, attachment.width) + var builder = Glide.with(context) + .load(uri) + .transition(DrawableTransitionOptions.withCrossFade()) + .apply(options) + .listener(object : RequestListener { + override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean): Boolean { + thread_message_play_outline.beGone() + thread_mesage_attachments_holder.removeView(imageView) + return false + } + + override fun onResourceReady(dr: Drawable?, a: Any?, t: Target?, d: DataSource?, i: Boolean) = + false + }) + + builder = if (isTallImage) { + builder.override(attachment.width, attachment.width) + } else { + builder.override(attachment.width, attachment.height) + } + + builder.into(imageView.attachment_image) + imageView.attachment_image.setOnClickListener { + if (actModeCallback.isSelectable) { + holder.viewClicked(message) + } else { + launchViewIntent(uri, mimetype, attachment.filename) + } + } + imageView.setOnLongClickListener { + holder.viewLongClicked() + true + } + } + } + + private fun setupVCardView(holder: ViewHolder, parent: View, message: Message, attachment: Attachment) { + val uri = attachment.getUri() + parent.apply { + val vCardView = layoutInflater.inflate(R.layout.item_attachment_vcard, null).apply { + background.applyColorFilter(backgroundColor.getContrastColor()) + vcard_title.setTextColor(textColor) + vcard_subtitle.setTextColor(textColor) + vcard_view_contact.setTextColor(context.getLinkTextColor()) + } + thread_mesage_attachments_holder.addView(vCardView) + + parseVCardFromUri(context, uri) { vCards -> + val title = vCards.first().formattedName.value + val imageIcon = SimpleContactsHelper(context).getContactLetterIcon(title) + activity.runOnUiThread { + vCardView.apply { + vcard_title.text = title + vcard_photo.setImageBitmap(imageIcon) + + if (vCards.size > 1) { + vcard_subtitle.beVisible() + val quantity = vCards.size - 1 + vcard_subtitle.text = resources.getQuantityString(R.plurals.and_other_contacts, quantity, quantity) } else { - builder.override(attachment.width, attachment.height) + vcard_subtitle.beGone() } + vcard_view_contact.text = resources.getQuantityString(R.plurals.view_contact, vCards.size) - builder.into(imageView.attachment_image) - imageView.attachment_image.setOnClickListener { + setOnClickListener { + if (actModeCallback.isSelectable) { + holder.viewClicked(message) + } else { + val intent = Intent(context, VCardViewerActivity::class.java).also { + it.putExtra(EXTRA_VCARD_URI, uri) + } + context.startActivity(intent) + } + } + setOnLongClickListener { + holder.viewLongClicked() + true + } + } + } + } + } + } + + private fun setupFileView(holder: ViewHolder, parent: View, message: Message, attachment: Attachment) { + val mimetype = attachment.mimetype + val uri = attachment.getUri() + parent.apply { + if (message.isReceivedMessage()) { + val attachmentView = layoutInflater.inflate(R.layout.item_received_unknown_attachment, null).apply { + thread_received_attachment_label.apply { + if (attachment.filename.isNotEmpty()) { + thread_received_attachment_label.text = attachment.filename + } + setTextColor(textColor) + setOnClickListener { if (actModeCallback.isSelectable) { holder.viewClicked(message) } else { launchViewIntent(uri, mimetype, attachment.filename) } } - imageView.setOnLongClickListener { + setOnLongClickListener { holder.viewLongClicked() true } - } else { - if (message.isReceivedMessage()) { - val attachmentView = layoutInflater.inflate(R.layout.item_received_unknown_attachment, null).apply { - thread_received_attachment_label.apply { - if (attachment.filename.isNotEmpty()) { - thread_received_attachment_label.text = attachment.filename - } - setTextColor(textColor) - setOnClickListener { - if (actModeCallback.isSelectable) { - holder.viewClicked(message) - } else { - launchViewIntent(uri, mimetype, attachment.filename) - } - } - setOnLongClickListener { - holder.viewLongClicked() - true - } - } + } + } + thread_mesage_attachments_holder.addView(attachmentView) + } else { + val background = context.getProperPrimaryColor() + val attachmentView = layoutInflater.inflate(R.layout.item_sent_unknown_attachment, null).apply { + thread_sent_attachment_label.apply { + this.background.applyColorFilter(background) + setTextColor(background.getContrastColor()) + if (attachment.filename.isNotEmpty()) { + thread_sent_attachment_label.text = attachment.filename + } + setOnClickListener { + if (actModeCallback.isSelectable) { + holder.viewClicked(message) + } else { + launchViewIntent(uri, mimetype, attachment.filename) } - thread_mesage_attachments_holder.addView(attachmentView) - } else { - val background = context.getProperPrimaryColor() - val attachmentView = layoutInflater.inflate(R.layout.item_sent_unknown_attachment, null).apply { - thread_sent_attachment_label.apply { - this.background.applyColorFilter(background) - setTextColor(background.getContrastColor()) - if (attachment.filename.isNotEmpty()) { - thread_sent_attachment_label.text = attachment.filename - } - setOnClickListener { - if (actModeCallback.isSelectable) { - holder.viewClicked(message) - } else { - launchViewIntent(uri, mimetype, attachment.filename) - } - } - setOnLongClickListener { - holder.viewLongClicked() - true - } - } - } - thread_mesage_attachments_holder.addView(attachmentView) + } + setOnLongClickListener { + holder.viewLongClicked() + true } } - - thread_message_play_outline.beVisibleIf(mimetype.startsWith("video/")) } + thread_mesage_attachments_holder.addView(attachmentView) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/VCardViewerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/VCardViewerAdapter.kt new file mode 100644 index 00000000..b094f517 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/VCardViewerAdapter.kt @@ -0,0 +1,138 @@ +package com.simplemobiletools.smsmessenger.adapters + +import android.util.TypedValue +import android.view.View +import android.view.ViewGroup +import androidx.core.graphics.drawable.toDrawable +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions +import com.bumptech.glide.request.RequestOptions +import com.simplemobiletools.commons.extensions.getProperTextColor +import com.simplemobiletools.commons.extensions.getTextSize +import com.simplemobiletools.commons.extensions.onGlobalLayout +import com.simplemobiletools.commons.helpers.SimpleContactsHelper +import com.simplemobiletools.smsmessenger.R +import com.simplemobiletools.smsmessenger.activities.SimpleActivity +import com.simplemobiletools.smsmessenger.models.VCardPropertyWrapper +import com.simplemobiletools.smsmessenger.models.VCardWrapper +import kotlinx.android.synthetic.main.item_vcard_contact.view.* +import kotlinx.android.synthetic.main.item_vcard_contact_property.view.* + +class VCardViewerAdapter( + private val activity: SimpleActivity, private var items: MutableList, private val itemClick: (Any) -> Unit +) : RecyclerView.Adapter() { + + private var fontSize = activity.getTextSize() + private var textColor = activity.getProperTextColor() + private val layoutInflater = activity.layoutInflater + + override fun getItemCount() = items.size + + override fun getItemViewType(position: Int): Int { + return when (val item = items[position]) { + is VCardWrapper -> R.layout.item_vcard_contact + is VCardPropertyWrapper -> R.layout.item_vcard_contact_property + else -> throw IllegalArgumentException("Unexpected type: ${item::class.simpleName}") + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VCardViewHolder { + val view = layoutInflater.inflate(viewType, parent, false) + return VCardViewHolder(view) + } + + override fun onBindViewHolder(holder: VCardViewerAdapter.VCardViewHolder, position: Int) { + val item = items[position] + val itemView = holder.bindView() + when (item) { + is VCardWrapper -> setupVCardView(itemView, item) + is VCardPropertyWrapper -> setupVCardPropertyView(itemView, item) + else -> throw IllegalArgumentException("Unexpected type: ${item::class.simpleName}") + } + } + + private fun setupVCardView(view: View, item: VCardWrapper) { + val name = item.vCard.formattedName.value + view.apply { + item_contact_name.apply { + text = name + setTextColor(textColor) + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 1.2f) + } + item_contact_image.apply { + val photo = item.vCard.photos.firstOrNull() + val placeholder = SimpleContactsHelper(context).getContactLetterIcon(name).toDrawable(resources) + val roundingRadius = resources.getDimensionPixelSize(R.dimen.big_margin) + val transformation = RoundedCorners(roundingRadius) + val options = RequestOptions() + .diskCacheStrategy(DiskCacheStrategy.RESOURCE) + .placeholder(placeholder) + .transform(transformation) + Glide.with(this) + .load(photo?.data ?: photo?.url) + .apply(options) + .transition(DrawableTransitionOptions.withCrossFade()) + .into(this) + } + setOnClickListener { + expandOrCollapseRow(view, item) + } + onGlobalLayout { + if (items.size == 1) { + expandOrCollapseRow(view, item) + } + } + } + } + + private fun setupVCardPropertyView(view: View, property: VCardPropertyWrapper) { + view.apply { + item_vcard_property_title.apply { + text = property.value + setTextColor(textColor) + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 1.2f) + } + item_vcard_property_subtitle.apply { + text = property.type + setTextColor(textColor) + } + view.setOnClickListener { + itemClick(property) + } + } + } + + private fun expandOrCollapseRow(view: View, item: VCardWrapper) { + val properties = item.getVCardProperties(context = activity) + if (item.expanded) { + collapseRow(view, properties, item) + } else { + expandRow(view, properties, item) + } + } + + private fun expandRow(view: View, properties: List, vCardWrapper: VCardWrapper) { + vCardWrapper.expanded = true + val nextPosition = items.indexOf(vCardWrapper) + 1 + items.addAll(nextPosition, properties) + notifyItemRangeInserted(nextPosition, properties.size) + view.expand_collapse_icon.setImageResource(R.drawable.ic_collapse_up) + } + + private fun collapseRow(view: View, properties: List, vCardWrapper: VCardWrapper) { + vCardWrapper.expanded = false + val nextPosition = items.indexOf(vCardWrapper) + 1 + repeat(properties.size) { + items.removeAt(nextPosition) + } + notifyItemRangeRemoved(nextPosition, properties.size) + view.expand_collapse_icon.setImageResource(R.drawable.ic_expand_down) + } + + inner class VCardViewHolder(view: View) : RecyclerView.ViewHolder(view) { + fun bindView() = itemView + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Activity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Activity.kt index 1d165091..e6200b49 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Activity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Activity.kt @@ -24,3 +24,19 @@ fun Activity.dialNumber(phoneNumber: String, callback: (() -> Unit)? = null) { } } } + +fun Activity.sendMail(email: String) { + hideKeyboard() + Intent(Intent.ACTION_SENDTO).apply { + data = Uri.parse("mailto:") + putExtra(Intent.EXTRA_EMAIL, email) + + try { + startActivity(this) + } catch (e: ActivityNotFoundException) { + toast(R.string.no_app_found) + } catch (e: Exception) { + showErrorToast(e) + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Date.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Date.kt new file mode 100644 index 00000000..7cde1a5b --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Date.kt @@ -0,0 +1,8 @@ +package com.simplemobiletools.smsmessenger.extensions + +import android.text.format.DateFormat +import java.util.* + +fun Date.format(pattern: String): String { + return DateFormat.format(pattern, this).toString() +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/String.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/String.kt index acdf0bb9..89fb0f03 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/String.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/String.kt @@ -14,3 +14,8 @@ fun String.getExtensionFromMimeType(): String { fun String.isImageMimeType(): Boolean { return lowercase().startsWith("image") } + +fun String.isVCardMimeType(): Boolean { + val lowercase = lowercase() + return lowercase.endsWith("x-vcard") || lowercase.endsWith("vcard") +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt index 21a85a95..973e56bc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt @@ -28,6 +28,7 @@ const val EXPORT_FILE_EXT = ".json" const val IMPORT_SMS = "import_sms" const val IMPORT_MMS = "import_mms" const val WAS_DB_CLEARED = "was_db_cleared_2" +const val EXTRA_VCARD_URI = "vcard" private const val PATH = "com.simplemobiletools.smsmessenger.action." const val MARK_AS_READ = PATH + "mark_as_read" diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/VCardParser.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/VCardParser.kt new file mode 100644 index 00000000..e01217bf --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/VCardParser.kt @@ -0,0 +1,15 @@ +package com.simplemobiletools.smsmessenger.helpers + +import android.content.Context +import android.net.Uri +import com.simplemobiletools.commons.helpers.ensureBackgroundThread +import ezvcard.Ezvcard +import ezvcard.VCard + +fun parseVCardFromUri(context: Context, uri: Uri, callback: (vCards: List) -> Unit) { + ensureBackgroundThread { + val inputStream = context.contentResolver.openInputStream(uri) + val vCards = Ezvcard.parse(inputStream).all() + callback(vCards) + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/VCard.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/VCard.kt new file mode 100644 index 00000000..667ee8dd --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/VCard.kt @@ -0,0 +1,54 @@ +package com.simplemobiletools.smsmessenger.models + +import android.content.Context +import com.simplemobiletools.commons.extensions.normalizePhoneNumber +import com.simplemobiletools.smsmessenger.R +import com.simplemobiletools.smsmessenger.extensions.config +import com.simplemobiletools.smsmessenger.extensions.format +import ezvcard.VCard +import ezvcard.property.* + +private val displayedPropertyClasses = arrayOf( + Telephone::class.java, Email::class.java, Organization::class.java, Birthday::class.java, Anniversary::class.java, Note::class.java +) + +data class VCardWrapper(val vCard: VCard, var expanded: Boolean = false) { + + fun getVCardProperties(context: Context): List { + return vCard.properties + .filter { displayedPropertyClasses.contains(it::class.java) } + .map { VCardPropertyWrapper.from(context, it) } + } +} + +data class VCardPropertyWrapper(val value: String, val type: String, val property: VCardProperty) { + + companion object { + private const val CELL = "CELL" + private const val HOME = "HOME" + private const val WORK = "WORK" + + private fun VCardProperty.getPropertyTypeString(context: Context): String { + return when (parameters.type) { + CELL -> context.getString(R.string.mobile) + HOME -> context.getString(R.string.home) + WORK -> context.getString(R.string.work) + else -> "" + } + } + + fun from(context: Context, property: VCardProperty): VCardPropertyWrapper { + return property.run { + when (this) { + is Telephone -> VCardPropertyWrapper(text.normalizePhoneNumber(), getPropertyTypeString(context), property) + is Email -> VCardPropertyWrapper(value, getPropertyTypeString(context), property) + is Organization -> VCardPropertyWrapper(values.joinToString(), context.getString(R.string.work), property) + is Birthday -> VCardPropertyWrapper(date.format(context.config.dateFormat), context.getString(R.string.birthday), property) + is Anniversary -> VCardPropertyWrapper(date.format(context.config.dateFormat), context.getString(R.string.anniversary), property) + is Note -> VCardPropertyWrapper(value, context.getString(R.string.notes), property) + else -> VCardPropertyWrapper("", "", property) + } + } + } + } +} diff --git a/app/src/main/res/drawable/ic_collapse_up.xml b/app/src/main/res/drawable/ic_collapse_up.xml new file mode 100644 index 00000000..fca0e627 --- /dev/null +++ b/app/src/main/res/drawable/ic_collapse_up.xml @@ -0,0 +1,3 @@ + + + diff --git a/app/src/main/res/drawable/ic_expand_down.xml b/app/src/main/res/drawable/ic_expand_down.xml new file mode 100644 index 00000000..1506c3b0 --- /dev/null +++ b/app/src/main/res/drawable/ic_expand_down.xml @@ -0,0 +1,3 @@ + + + diff --git a/app/src/main/res/layout/activity_vcard_viewer.xml b/app/src/main/res/layout/activity_vcard_viewer.xml new file mode 100644 index 00000000..3f28d896 --- /dev/null +++ b/app/src/main/res/layout/activity_vcard_viewer.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_attachment_vcard.xml b/app/src/main/res/layout/item_attachment_vcard.xml new file mode 100644 index 00000000..7d553efe --- /dev/null +++ b/app/src/main/res/layout/item_attachment_vcard.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_vcard_contact.xml b/app/src/main/res/layout/item_vcard_contact.xml new file mode 100644 index 00000000..10770498 --- /dev/null +++ b/app/src/main/res/layout/item_vcard_contact.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_vcard_contact_property.xml b/app/src/main/res/layout/item_vcard_contact_property.xml new file mode 100644 index 00000000..1b1789b5 --- /dev/null +++ b/app/src/main/res/layout/item_vcard_contact_property.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + diff --git a/app/src/main/res/menu/menu_vcard.xml b/app/src/main/res/menu/menu_vcard.xml new file mode 100644 index 00000000..57556649 --- /dev/null +++ b/app/src/main/res/menu/menu_vcard.xml @@ -0,0 +1,9 @@ + + + + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 4c3e6fc2..ae5d0cd5 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -20,6 +20,20 @@ ازالة التثبيت اعادة ارسال غير قادر على ضغط الصورة إلى الحجم المحدد + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact محادثة جديدة إضافة جهة اتصال أو رقم … @@ -79,4 +93,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 06a7ea86..e58cfeca 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -20,6 +20,20 @@ Unpin Forward Unable to compress image to selected size + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact New conversation Add Contact or Number… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 9c6cfad5..e385f684 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -20,6 +20,20 @@ Адмацаваць Пераслаць Немагчыма сціснуць выяву да выбранага памеру + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Новая размова Дадаць кантакт альбо нумар… @@ -75,4 +89,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index f14a1840..5474bf48 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -20,6 +20,20 @@ Откачване Препращане Невъзможно е да се компресира изображението до избрания размер + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Нов разговор Добавете контакт или номер… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 1f76b105..6e54fcb4 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -20,6 +20,20 @@ No fixis Reenvia No s\'ha pogut comprimir la imatge a la mida seleccionada + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Conversa nova Afegeix un contacte o número… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index ccccfcaf..50a1ba34 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -20,6 +20,20 @@ Odepnout Přeposlat Nepodařilo se komprimovat obrázek na požadovanou velikost + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nová konverzace Přidejte kontakt nebo číslo… @@ -73,4 +87,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 4bff71f6..d13896dc 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -20,6 +20,20 @@ Frigør Fremad Billedet kan ikke komprimeres til den valgte størrelse + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Ny Samtale Tilføj kontakt eller nummer… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7412f4e3..cc395d80 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -20,6 +20,20 @@ Losheften Weiterleiten Bild kann nicht auf ausgewählte Größe komprimiert werden + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Neuer Chat Kontakt oder Nummer hinzufügen … @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index a4de4eb9..806d5789 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -20,6 +20,20 @@ Ξεκαρφίτσωμα Προώθηση Αδυναμία συμπίεσης εικόνας στο επιλεγμένο μέγεθος + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Νέα συνομιλία Προσθήκη επαφής ή αριθμού… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index da1e085b..11b4d9d3 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -20,6 +20,20 @@ Depingli Forward Unable to compress image to selected size + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact New conversation Add Contact or Number… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b3d85c2e..be42cd44 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -20,6 +20,20 @@ Desanclar Reenviar Incapaz de comprimir la imagen al tamaño seleccionado + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nueva conversación Escribe contacto o número… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 5e1c0a1d..fcfa1c96 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -20,6 +20,20 @@ Eemalda kinnitus Edasta Pildi muutmine valitud suurusesse ei õnnestu + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Uus vestlus Add Contact or Number… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 5124ec80..b0f2db22 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -20,6 +20,20 @@ Unpin Forward Unable to compress image to selected size + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Uusi keskustelu Lisää yhteystieto tai numero… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 220d7eb5..7f5141b2 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -20,6 +20,20 @@ Désépingler Transférer Impossible de compresser l\'image à la taille sélectionnée + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nouvelle conversation Ajouter un contact ou un numéro… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 15aedaec..be1d6610 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -20,6 +20,20 @@ Unpin Forward Unable to compress image to selected size + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nova conversa Engadir contacto ou número… @@ -71,4 +85,4 @@ Non atopaches algunhas cadeas? Hai máis en https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 895b3665..7b2b97d9 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -20,6 +20,20 @@ Otkvači Proslijedi Isključi za komprimiranje slike na odabranu veličinu + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nova konverzacija Dodaj kontakt ili broj … @@ -73,4 +87,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 6af63212..6305f64a 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -20,6 +20,20 @@ Kitűzés megszüntetése Továbbítás Nem lehet tömöríteni a képet a kiválasztott méretre + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Új beszélgetés Névjegy vagy szám hozzáadása… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 6e9afd42..50ebbd79 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -20,6 +20,20 @@ Unpin Forward Unable to compress image to selected size + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Percakapan baru Tambahkan Kontak atau Nomor… @@ -69,4 +83,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 06721ecc..a06f7092 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -20,6 +20,20 @@ Rimuovi Inoltra Impossibile comprimere l\'immagine alla dimensione selezionata + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nuova conversazione Inserisci contatto o numero… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index ba2ca917..36066ed0 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -20,6 +20,20 @@ בטל הצמדה התקדם לא ניתן לדחוס תמונה לגודל שנבחר + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact שיחה חדשה הוסף איש קשר או מספר… @@ -75,4 +89,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 01451200..92b2b7f2 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -20,6 +20,20 @@ 固定を外す 転送 選択したサイズに画像を圧縮できません + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact 新しい会話 連絡先や電話番号を追加… @@ -69,4 +83,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index c653512d..da31d743 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -20,6 +20,20 @@ Atjunkite Pirmyn Nepavyksta suspausti vaizdo iki pasirinkto dydžio + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Naujas pokalbis Pridėti kontaktą arba numerį… @@ -73,4 +87,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 975d3015..bbcc2c6c 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -20,6 +20,20 @@ Unpin Forward Unable to compress image to selected size + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact പുതിയ സംഭാഷണം കോൺടാക്റ്റ് അല്ലെങ്കിൽ നമ്പർ ചേർക്കുക… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index d066aa15..bda2cfa6 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -20,6 +20,20 @@ Løsne Videresend Unable to compress image to selected size + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Ny samtale Legg til kontakt eller nummer … @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 37e9242e..1b13480f 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -20,6 +20,20 @@ Losmaken Doorsturen Kon de afbeelding niet comprimeren naar de gekozen grootte + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nieuw gesprek Contact of nummer toevoegen… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 816a4603..09c540bf 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -20,6 +20,20 @@ Odepnij Przekaż dalej Nie udało się skompresować obrazu do wybranego rozmiaru + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nowa rozmowa Dodaj kontakt lub numer… @@ -75,4 +89,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 2006873b..df1ac35a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -20,6 +20,20 @@ Desfixar Encaminhar Não pôde comprimir imagem ao tamanho selecionado + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nova conversa Adicionar contato ou número… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 59a87c38..b1aaae75 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -20,6 +20,20 @@ Desafixar Reencaminhar Incapaz de comprimir imagem no tamanho selecionado + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nova conversa Adicionar contacto ou número… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index e2b584ab..5665927e 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -20,6 +20,20 @@ Elimină fixarea Redirecţionare Nu se poate comprima imaginea la dimensiunea selectată + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Conversaţie nouă Adaugă contact sau număr de telefon… @@ -73,4 +87,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 153a9c03..a8de9863 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -20,6 +20,20 @@ Открепить Переслать Невозможно сжать изображение до выбранного размера + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Новая переписка Добавить контакт или номер… @@ -75,4 +89,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index d536ebce..d15f212c 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -20,6 +20,20 @@ Odopnúť Preposlať Nepodarilo sa zmenšiť obrázok na požadovanú veľkosť + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Nová konverzácia Pridať kontakt alebo číslo… @@ -73,4 +87,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 8cefe0ed..3ddda925 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -20,6 +20,20 @@ Lossa Vidarebefordra Det gick inte att komprimera bilden till den valda storleken + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Ny konversation Lägg till kontakt eller nummer… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 989088d0..beaff84e 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -20,6 +20,20 @@ பின் நீக்கு முன்னோக்கி Unable to compress image to selected size + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact புதிய உரையாடல் தொடர்பு அல்லது எண்ணைச் சேர்க்கவும்… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 0c422d3b..ae34f530 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -20,6 +20,20 @@ Unpin Forward Unable to compress image to selected size + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact New conversation Add Contact or Number… @@ -69,4 +83,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a13d1214..ec02b0cf 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -20,6 +20,20 @@ Sabitlemeyi kaldır İlet Resim seçilen boyuta sıkıştırılamıyor + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Yeni görüşme Kişi veya Numara Ekle… @@ -71,4 +85,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 4252edbe..c2aded9c 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -20,6 +20,20 @@ Відкріпити Переслати Не вдається стиснути зображення до вибраного розміру + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact Нове листування Додати контакт аба номер… @@ -75,4 +89,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f16f5033..727f3372 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -20,6 +20,20 @@ 取消固定 转发 无法将图像压缩到选定的大小 + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact 新的对话 添加联系人或者号码… @@ -69,4 +83,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 670239ce..4bc6f929 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -20,6 +20,20 @@ 取消釘選 轉傳 無法將圖片壓縮至指定大小 + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact 新對話 新增聯絡對象或電話號碼…… @@ -69,4 +83,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 5411875a..4db2905d 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -6,4 +6,5 @@ 60dp 24dp 15dp + 56dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ce1f6df3..f595439e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -20,6 +20,20 @@ Unpin Forward Unable to compress image to selected size + + + View contact + View contacts + + + and %d other + and %d others + + Contact info + Notes + Anniversary + Birthday + Add contact New conversation Add Contact or Number…