mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
fix #91, properly handle third party intent with Phone mimetype
This commit is contained in:
@ -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)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
val lookupKey = ContactsHelper(this).getContactLookupKey(contact.id.toString())
|
val lookupKey = ContactsHelper(this).getContactLookupKey(contact.id.toString())
|
||||||
Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
|
Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -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 {
|
||||||
|
Reference in New Issue
Block a user