diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2083a624..90bf4437 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
confirmSelection()
+ else -> return super.onOptionsItemSelected(item)
+ }
+ return true
+ }
+
+ private fun initContacts() {
+ skipFavorites = intent.getBooleanExtra("extraSkipFavorites", false)
+ allowMultiple = intent.getBooleanExtra("isPickMultiContactsWithoutProfile", false)
+ if (allowMultiple) {
+ title = getString(R.string.select_contacts)
+ invalidateOptionsMenu()
+ }
+
+ ContactsHelper(this).getContacts {
+ var contacts = it
+ if (isActivityDestroyed()) {
+ return@getContacts
+ }
+
+ val contactSources = config.displayContactSources
+ if (!config.showAllContacts()) {
+ contacts = contacts.filter { contactSources.contains(it.source) } as ArrayList
+ }
+
+ if (skipFavorites) {
+ val favorites = config.favorites
+ contacts = contacts.filter { !favorites.contains(it.id.toString()) } as ArrayList
+ }
+
+ Contact.sorting = config.sorting
+ contacts.sort()
+
+ runOnUiThread {
+ select_contact_list.adapter = SelectContactsAdapter(this, contacts, HashSet())
+ select_contact_fastscroller.allowBubbleDisplay = baseConfig.showInfoBubble
+ select_contact_fastscroller.setViews(select_contact_list) {
+ select_contact_fastscroller.updateBubbleText(contacts[it].getBubbleText())
+ }
+ }
+ }
+ }
+
+ private fun confirmSelection() {
+ val selectedItems = (select_contact_list.adapter as SelectContactsAdapter).getSelectedItemsSet()
+ val lookupKey = ContactsHelper(this).getContactLookupKey(selectedItems.first())
+ val lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
+
+ Intent().apply {
+ data = lookupUri
+ addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ setResult(RESULT_OK, this)
+ }
+ finish()
+ }
+}
diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/AddFavoritesAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/SelectContactsAdapter.kt
similarity index 96%
rename from app/src/main/kotlin/com/simplemobiletools/contacts/adapters/AddFavoritesAdapter.kt
rename to app/src/main/kotlin/com/simplemobiletools/contacts/adapters/SelectContactsAdapter.kt
index 6b40c0dd..badf877d 100644
--- a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/AddFavoritesAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/SelectContactsAdapter.kt
@@ -20,8 +20,8 @@ import com.simplemobiletools.contacts.models.Contact
import kotlinx.android.synthetic.main.item_add_favorite_with_number.view.*
import java.util.*
-class AddFavoritesAdapter(val activity: SimpleActivity, val contacts: List, val selectedContacts: Set)
- : RecyclerView.Adapter() {
+class SelectContactsAdapter(val activity: SimpleActivity, val contacts: List, val selectedContacts: Set)
+ : RecyclerView.Adapter() {
private val itemViews = SparseArray()
private val selectedPositions = HashSet()
private val config = activity.config
diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/AddFavoritesDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/AddFavoritesDialog.kt
index 0cb45e42..7cb1c661 100644
--- a/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/AddFavoritesDialog.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/AddFavoritesDialog.kt
@@ -5,37 +5,38 @@ import com.simplemobiletools.commons.extensions.baseConfig
import com.simplemobiletools.commons.extensions.setupDialogStuff
import com.simplemobiletools.contacts.R
import com.simplemobiletools.contacts.activities.SimpleActivity
-import com.simplemobiletools.contacts.adapters.AddFavoritesAdapter
+import com.simplemobiletools.contacts.adapters.SelectContactsAdapter
import com.simplemobiletools.contacts.extensions.config
import com.simplemobiletools.contacts.helpers.ContactsHelper
import com.simplemobiletools.contacts.models.Contact
-import kotlinx.android.synthetic.main.dialog_add_favorites.view.*
+import kotlinx.android.synthetic.main.layout_select_contact.view.*
import java.util.HashSet
import kotlin.collections.ArrayList
class AddFavoritesDialog(val activity: SimpleActivity, val callback: () -> Unit) {
private var dialog: AlertDialog? = null
- private var view = activity.layoutInflater.inflate(R.layout.dialog_add_favorites, null)
+ private var view = activity.layoutInflater.inflate(R.layout.layout_select_contact, null)
private val config = activity.config
private var allContacts = ArrayList()
init {
ContactsHelper(activity).getContacts {
allContacts = it
- Contact.sorting = config.sorting
- allContacts.sort()
val contactSources = config.displayContactSources
if (!activity.config.showAllContacts()) {
allContacts = allContacts.filter { contactSources.contains(it.source) } as ArrayList
}
+ Contact.sorting = config.sorting
+ allContacts.sort()
+
activity.runOnUiThread {
view.apply {
- add_favorites_list.adapter = AddFavoritesAdapter(activity, allContacts, config.favorites)
- add_favorites_fastscroller.allowBubbleDisplay = activity.baseConfig.showInfoBubble
- add_favorites_fastscroller.setViews(add_favorites_list) {
- add_favorites_fastscroller.updateBubbleText(allContacts[it].getBubbleText())
+ select_contact_list.adapter = SelectContactsAdapter(activity, allContacts, config.favorites)
+ select_contact_fastscroller.allowBubbleDisplay = activity.baseConfig.showInfoBubble
+ select_contact_fastscroller.setViews(select_contact_list) {
+ select_contact_fastscroller.updateBubbleText(allContacts[it].getBubbleText())
}
}
}
@@ -52,7 +53,7 @@ class AddFavoritesDialog(val activity: SimpleActivity, val callback: () -> Unit)
private fun dialogConfirmed() {
val allDisplayedIDs = ArrayList()
allContacts.mapTo(allDisplayedIDs, { it.id.toString() })
- val selectedItems = (view.add_favorites_list.adapter as AddFavoritesAdapter).getSelectedItemsSet()
+ val selectedItems = (view.select_contact_list.adapter as SelectContactsAdapter).getSelectedItemsSet()
config.addFavorites(selectedItems)
allDisplayedIDs.removeAll(selectedItems)
diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt
index 11cf1a24..6d8f9f7d 100644
--- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt
@@ -521,6 +521,25 @@ class ContactsHelper(val activity: BaseSimpleActivity) {
}
}
+ fun getContactLookupKey(contactId: String): String {
+ val uri = ContactsContract.Data.CONTENT_URI
+ val projection = arrayOf(ContactsContract.Data.CONTACT_ID, ContactsContract.Data.LOOKUP_KEY)
+ val selection = "${ContactsContract.Data.MIMETYPE} = ? AND ${ContactsContract.Data.RAW_CONTACT_ID} = ?"
+ val selectionArgs = arrayOf(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, contactId)
+ var cursor: Cursor? = null
+ try {
+ cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
+ if (cursor?.moveToFirst() == true) {
+ val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID)
+ val lookupKey = cursor.getStringValue(ContactsContract.Data.LOOKUP_KEY)
+ return "$lookupKey/$id"
+ }
+ } finally {
+ cursor?.close()
+ }
+ return ""
+ }
+
fun deleteContact(contact: Contact) = deleteContacts(arrayListOf(contact))
fun deleteContacts(contacts: ArrayList) {
diff --git a/app/src/main/res/layout/dialog_add_favorites.xml b/app/src/main/res/layout/layout_select_contact.xml
similarity index 76%
rename from app/src/main/res/layout/dialog_add_favorites.xml
rename to app/src/main/res/layout/layout_select_contact.xml
index ca66a80e..f904d1d1 100644
--- a/app/src/main/res/layout/dialog_add_favorites.xml
+++ b/app/src/main/res/layout/layout_select_contact.xml
@@ -2,25 +2,26 @@
diff --git a/app/src/main/res/menu/menu_select_contact.xml b/app/src/main/res/menu/menu_select_contact.xml
new file mode 100644
index 00000000..f33e03eb
--- /dev/null
+++ b/app/src/main/res/menu/menu_select_contact.xml
@@ -0,0 +1,10 @@
+
+