fix #91, properly handle third party intent with Phone mimetype

This commit is contained in:
tibbi
2018-03-21 21:23:12 +01:00
parent 0ae8c8a98f
commit 418e9de54f
2 changed files with 24 additions and 12 deletions

View File

@ -23,7 +23,7 @@ import com.simplemobiletools.contacts.models.Contact
import kotlinx.android.synthetic.main.layout_select_contact.* import kotlinx.android.synthetic.main.layout_select_contact.*
class SelectContactActivity : SimpleActivity() { class SelectContactActivity : SimpleActivity() {
private var isGetEmailIntent = false private var specialMimeType: String? = null
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -34,7 +34,11 @@ class SelectContactActivity : SimpleActivity() {
if (it) { if (it) {
handlePermission(PERMISSION_WRITE_CONTACTS) { handlePermission(PERMISSION_WRITE_CONTACTS) {
if (it) { if (it) {
isGetEmailIntent = intent.data == ContactsContract.CommonDataKinds.Email.CONTENT_URI specialMimeType = when (intent.data) {
ContactsContract.CommonDataKinds.Email.CONTENT_URI -> ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE
ContactsContract.CommonDataKinds.Phone.CONTENT_URI -> ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
else -> null
}
initContacts() initContacts()
} else { } else {
toast(R.string.no_contacts_permission) toast(R.string.no_contacts_permission)
@ -81,8 +85,13 @@ class SelectContactActivity : SimpleActivity() {
} }
var contacts = it.filter { var contacts = it.filter {
if (isGetEmailIntent) { if (specialMimeType != null) {
(it.source != SMT_PRIVATE && it.emails.isNotEmpty()) val hasRequiredValues = when (specialMimeType) {
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE -> it.emails.isNotEmpty()
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE -> it.phoneNumbers.isNotEmpty()
else -> true
}
it.source != SMT_PRIVATE && hasRequiredValues
} else { } else {
true true
} }
@ -119,12 +128,15 @@ class SelectContactActivity : SimpleActivity() {
} }
private fun getResultUri(contact: Contact): Uri { private fun getResultUri(contact: Contact): Uri {
return if (isGetEmailIntent) { return when {
val emailID = ContactsHelper(this).getContactDataId(contact.id.toString()) specialMimeType != null -> {
Uri.withAppendedPath(ContactsContract.Data.CONTENT_URI, emailID) val contactId = ContactsHelper(this).getContactMimeTypeId(contact.id.toString(), specialMimeType!!)
} else { Uri.withAppendedPath(ContactsContract.Data.CONTENT_URI, contactId)
val lookupKey = ContactsHelper(this).getContactLookupKey(contact.id.toString()) }
Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey) else -> {
val lookupKey = ContactsHelper(this).getContactLookupKey(contact.id.toString())
Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
}
} }
} }
} }

View File

@ -980,11 +980,11 @@ class ContactsHelper(val activity: BaseSimpleActivity) {
return "" return ""
} }
fun getContactDataId(contactId: String): String { fun getContactMimeTypeId(contactId: String, mimeType: String): String {
val uri = ContactsContract.Data.CONTENT_URI val uri = ContactsContract.Data.CONTENT_URI
val projection = arrayOf(ContactsContract.Data._ID, ContactsContract.Data.RAW_CONTACT_ID, ContactsContract.Data.MIMETYPE) val projection = arrayOf(ContactsContract.Data._ID, ContactsContract.Data.RAW_CONTACT_ID, ContactsContract.Data.MIMETYPE)
val selection = "${ContactsContract.Data.MIMETYPE} = ? AND ${ContactsContract.Data.RAW_CONTACT_ID} = ?" val selection = "${ContactsContract.Data.MIMETYPE} = ? AND ${ContactsContract.Data.RAW_CONTACT_ID} = ?"
val selectionArgs = arrayOf(CommonDataKinds.Email.CONTENT_ITEM_TYPE, contactId) val selectionArgs = arrayOf(mimeType, contactId)
var cursor: Cursor? = null var cursor: Cursor? = null
try { try {