mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
allow selecting only 1 contact at the selection activity
This commit is contained in:
@ -65,7 +65,6 @@
|
|||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.ContactActivity"
|
android:name=".activities.ContactActivity"
|
||||||
android:label="@string/new_contact"
|
|
||||||
android:parentActivityName=".activities.MainActivity">
|
android:parentActivityName=".activities.MainActivity">
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
@ -77,7 +76,7 @@
|
|||||||
<data android:mimeType="vnd.android.cursor.item/raw_contact"/>
|
<data android:mimeType="vnd.android.cursor.item/raw_contact"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<intent-filter android:label="@string/edit_contact">
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.EDIT"/>
|
<action android:name="android.intent.action.EDIT"/>
|
||||||
<category android:name="android.intent.category.DEFAULT"/>
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
|
||||||
@ -92,7 +91,7 @@
|
|||||||
android:mimeType="vnd.android.cursor.item/raw_contact"/>
|
android:mimeType="vnd.android.cursor.item/raw_contact"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<intent-filter android:label="@string/new_contact">
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.INSERT"/>
|
<action android:name="android.intent.action.INSERT"/>
|
||||||
<category android:name="android.intent.category.DEFAULT"/>
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
|
||||||
@ -101,7 +100,7 @@
|
|||||||
<data android:mimeType="vnd.android.cursor.dir/raw_contact"/>
|
<data android:mimeType="vnd.android.cursor.dir/raw_contact"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<intent-filter android:label="@string/edit_contact">
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.VIEW"/>
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
<category android:name="android.intent.category.DEFAULT"/>
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
|
||||||
@ -110,7 +109,7 @@
|
|||||||
<data android:mimeType="vnd.android.cursor.item/group"/>
|
<data android:mimeType="vnd.android.cursor.item/group"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<intent-filter android:label="@string/edit_contact">
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.VIEW"/>
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
<category android:name="android.intent.category.DEFAULT"/>
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
|
||||||
|
@ -4,8 +4,6 @@ import android.content.Intent
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.provider.ContactsContract
|
import android.provider.ContactsContract
|
||||||
import android.view.Menu
|
|
||||||
import android.view.MenuItem
|
|
||||||
import com.simplemobiletools.commons.extensions.appLaunched
|
import com.simplemobiletools.commons.extensions.appLaunched
|
||||||
import com.simplemobiletools.commons.extensions.baseConfig
|
import com.simplemobiletools.commons.extensions.baseConfig
|
||||||
import com.simplemobiletools.commons.extensions.isActivityDestroyed
|
import com.simplemobiletools.commons.extensions.isActivityDestroyed
|
||||||
@ -20,9 +18,6 @@ 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 skipFavorites = false
|
|
||||||
private var allowMultiple = false
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.layout_select_contact)
|
setContentView(R.layout.layout_select_contact)
|
||||||
@ -45,28 +40,7 @@ class SelectContactActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
|
||||||
menuInflater.inflate(R.menu.menu_select_contact, menu)
|
|
||||||
menu.findItem(R.id.confirm).isVisible = allowMultiple
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
||||||
when (item.itemId) {
|
|
||||||
R.id.confirm -> confirmSelection()
|
|
||||||
else -> return super.onOptionsItemSelected(item)
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun initContacts() {
|
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 {
|
ContactsHelper(this).getContacts {
|
||||||
var contacts = it
|
var contacts = it
|
||||||
if (isActivityDestroyed()) {
|
if (isActivityDestroyed()) {
|
||||||
@ -78,16 +52,13 @@ class SelectContactActivity : SimpleActivity() {
|
|||||||
contacts = contacts.filter { contactSources.contains(it.source) } as ArrayList<Contact>
|
contacts = contacts.filter { contactSources.contains(it.source) } as ArrayList<Contact>
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skipFavorites) {
|
|
||||||
val favorites = config.favorites
|
|
||||||
contacts = contacts.filter { !favorites.contains(it.id.toString()) } as ArrayList<Contact>
|
|
||||||
}
|
|
||||||
|
|
||||||
Contact.sorting = config.sorting
|
Contact.sorting = config.sorting
|
||||||
contacts.sort()
|
contacts.sort()
|
||||||
|
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
select_contact_list.adapter = SelectContactsAdapter(this, contacts, HashSet())
|
select_contact_list.adapter = SelectContactsAdapter(this, contacts, HashSet(), false) {
|
||||||
|
confirmSelection(it)
|
||||||
|
}
|
||||||
select_contact_fastscroller.allowBubbleDisplay = baseConfig.showInfoBubble
|
select_contact_fastscroller.allowBubbleDisplay = baseConfig.showInfoBubble
|
||||||
select_contact_fastscroller.setViews(select_contact_list) {
|
select_contact_fastscroller.setViews(select_contact_list) {
|
||||||
select_contact_fastscroller.updateBubbleText(contacts[it].getBubbleText())
|
select_contact_fastscroller.updateBubbleText(contacts[it].getBubbleText())
|
||||||
@ -96,9 +67,8 @@ class SelectContactActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun confirmSelection() {
|
private fun confirmSelection(contact: Contact) {
|
||||||
val selectedItems = (select_contact_list.adapter as SelectContactsAdapter).getSelectedItemsSet()
|
val lookupKey = ContactsHelper(this).getContactLookupKey(contact.id.toString())
|
||||||
val lookupKey = ContactsHelper(this).getContactLookupKey(selectedItems.first())
|
|
||||||
val lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
|
val lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
|
||||||
|
|
||||||
Intent().apply {
|
Intent().apply {
|
||||||
|
@ -10,6 +10,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
|
|||||||
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.bumptech.glide.signature.ObjectKey
|
import com.bumptech.glide.signature.ObjectKey
|
||||||
|
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||||
import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor
|
import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor
|
||||||
import com.simplemobiletools.commons.interfaces.MyAdapterListener
|
import com.simplemobiletools.commons.interfaces.MyAdapterListener
|
||||||
import com.simplemobiletools.contacts.R
|
import com.simplemobiletools.contacts.R
|
||||||
@ -20,8 +21,8 @@ import com.simplemobiletools.contacts.models.Contact
|
|||||||
import kotlinx.android.synthetic.main.item_add_favorite_with_number.view.*
|
import kotlinx.android.synthetic.main.item_add_favorite_with_number.view.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class SelectContactsAdapter(val activity: SimpleActivity, val contacts: List<Contact>, val selectedContacts: Set<String>)
|
class SelectContactsAdapter(val activity: SimpleActivity, val contacts: List<Contact>, val selectedContacts: Set<String>, val allowPickMultiple: Boolean,
|
||||||
: RecyclerView.Adapter<SelectContactsAdapter.ViewHolder>() {
|
val itemClick: ((Contact) -> Unit)? = null) : RecyclerView.Adapter<SelectContactsAdapter.ViewHolder>() {
|
||||||
private val itemViews = SparseArray<View>()
|
private val itemViews = SparseArray<View>()
|
||||||
private val selectedPositions = HashSet<Int>()
|
private val selectedPositions = HashSet<Int>()
|
||||||
private val config = activity.config
|
private val config = activity.config
|
||||||
@ -68,7 +69,7 @@ class SelectContactsAdapter(val activity: SimpleActivity, val contacts: List<Con
|
|||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
||||||
val view = activity.layoutInflater.inflate(itemLayout, parent, false)
|
val view = activity.layoutInflater.inflate(itemLayout, parent, false)
|
||||||
return ViewHolder(view, adapterListener, activity)
|
return ViewHolder(view, adapterListener, activity, allowPickMultiple, itemClick)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||||
@ -79,9 +80,11 @@ class SelectContactsAdapter(val activity: SimpleActivity, val contacts: List<Con
|
|||||||
|
|
||||||
override fun getItemCount() = contacts.size
|
override fun getItemCount() = contacts.size
|
||||||
|
|
||||||
class ViewHolder(view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity) : RecyclerView.ViewHolder(view) {
|
class ViewHolder(view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity, val showCheckbox: Boolean,
|
||||||
|
val itemClick: ((Contact) -> Unit)?) : RecyclerView.ViewHolder(view) {
|
||||||
fun bindView(contact: Contact, startNameWithSurname: Boolean, contactDrawable: Drawable, config: Config): View {
|
fun bindView(contact: Contact, startNameWithSurname: Boolean, contactDrawable: Drawable, config: Config): View {
|
||||||
itemView.apply {
|
itemView.apply {
|
||||||
|
contact_checkbox.beVisibleIf(showCheckbox)
|
||||||
contact_checkbox.setColors(config.textColor, config.primaryColor, config.backgroundColor)
|
contact_checkbox.setColors(config.textColor, config.primaryColor, config.backgroundColor)
|
||||||
val textColor = config.textColor
|
val textColor = config.textColor
|
||||||
|
|
||||||
@ -89,7 +92,13 @@ class SelectContactsAdapter(val activity: SimpleActivity, val contacts: List<Con
|
|||||||
contact_name.setTextColor(textColor)
|
contact_name.setTextColor(textColor)
|
||||||
contact_number?.text = contact.phoneNumbers.firstOrNull()?.value ?: ""
|
contact_number?.text = contact.phoneNumbers.firstOrNull()?.value ?: ""
|
||||||
contact_number?.setTextColor(textColor)
|
contact_number?.setTextColor(textColor)
|
||||||
contact_frame.setOnClickListener { viewClicked(!contact_checkbox.isChecked) }
|
contact_frame.setOnClickListener {
|
||||||
|
if (itemClick != null) {
|
||||||
|
itemClick.invoke(contact)
|
||||||
|
} else {
|
||||||
|
viewClicked(!contact_checkbox.isChecked)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (contact.photoUri.isNotEmpty()) {
|
if (contact.photoUri.isNotEmpty()) {
|
||||||
val options = RequestOptions()
|
val options = RequestOptions()
|
||||||
|
@ -33,7 +33,7 @@ class AddFavoritesDialog(val activity: SimpleActivity, val callback: () -> Unit)
|
|||||||
|
|
||||||
activity.runOnUiThread {
|
activity.runOnUiThread {
|
||||||
view.apply {
|
view.apply {
|
||||||
select_contact_list.adapter = SelectContactsAdapter(activity, allContacts, config.favorites)
|
select_contact_list.adapter = SelectContactsAdapter(activity, allContacts, config.favorites, true)
|
||||||
select_contact_fastscroller.allowBubbleDisplay = activity.baseConfig.showInfoBubble
|
select_contact_fastscroller.allowBubbleDisplay = activity.baseConfig.showInfoBubble
|
||||||
select_contact_fastscroller.setViews(select_contact_list) {
|
select_contact_fastscroller.setViews(select_contact_list) {
|
||||||
select_contact_fastscroller.updateBubbleText(allContacts[it].getBubbleText())
|
select_contact_fastscroller.updateBubbleText(allContacts[it].getBubbleText())
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<menu
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
|
||||||
<item
|
|
||||||
android:id="@+id/confirm"
|
|
||||||
android:icon="@drawable/ic_check"
|
|
||||||
android:title="@string/confirm_selection"
|
|
||||||
app:showAsAction="ifRoom"/>
|
|
||||||
</menu>
|
|
Reference in New Issue
Block a user