sms-translate/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/VCardViewerActivity.kt
2022-08-29 03:19:50 +05:30

81 lines
2.9 KiB
Kotlin

package com.simplemobiletools.smsmessenger.activities
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import com.simplemobiletools.commons.extensions.normalizePhoneNumber
import com.simplemobiletools.commons.helpers.NavigationIcon
import com.simplemobiletools.smsmessenger.R
import com.simplemobiletools.smsmessenger.adapters.VCardViewerAdapter
import com.simplemobiletools.smsmessenger.extensions.dialNumber
import com.simplemobiletools.smsmessenger.extensions.sendMail
import com.simplemobiletools.smsmessenger.helpers.EXTRA_VCARD_URI
import com.simplemobiletools.smsmessenger.helpers.parseVCardFromUri
import com.simplemobiletools.smsmessenger.models.VCardPropertyWrapper
import com.simplemobiletools.smsmessenger.models.VCardWrapper
import ezvcard.VCard
import ezvcard.property.Email
import ezvcard.property.Telephone
import kotlinx.android.synthetic.main.activity_vcard_viewer.*
class VCardViewerActivity : SimpleActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_vcard_viewer)
val vCardUri = intent.getParcelableExtra(EXTRA_VCARD_URI) as? Uri
if (vCardUri != null) {
setupOptionsMenu(vCardUri)
parseVCardFromUri(this, vCardUri) {
runOnUiThread {
setupContactsList(it)
}
}
}
}
override fun onResume() {
super.onResume()
setupToolbar(vcard_toolbar, NavigationIcon.Arrow)
}
private fun setupOptionsMenu(vCardUri: Uri) {
vcard_toolbar.setOnMenuItemClickListener { menuItem ->
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<VCard>) {
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<VCard>): List<VCardWrapper> {
return vCards.map { VCardWrapper(it) }
}
}