sms-translate/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/VCard.kt
2022-08-29 16:32:04 +05:30

75 lines
3.2 KiB
Kotlin

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, val fullName: String?, val properties: List<VCardPropertyWrapper>, var expanded: Boolean = false) {
companion object {
private fun VCard.extractFullName(): String? {
var fullName = formattedName?.value
if (fullName.isNullOrEmpty()) {
val structured = structuredName
val given = structured?.given
val family = structured.family
fullName = if (family != null) {
given?.plus(" ")?.plus(family)
} else {
given
}
}
return fullName
}
fun from(context: Context, vCard: VCard): VCardWrapper {
val properties = vCard.properties
.filter { displayedPropertyClasses.contains(it::class.java) }
.map { VCardPropertyWrapper.from(context, it) }
.distinctBy { it.value }
val fullName = vCard.extractFullName()
return VCardWrapper(vCard, fullName, properties, expanded = false)
}
}
}
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)
}
}
}
}
}