fix #269, add placeholders at SelectContact activity

This commit is contained in:
tibbi
2018-10-27 18:24:16 +02:00
parent c8bf2a496e
commit 4f130fe402
6 changed files with 82 additions and 22 deletions

View File

@ -6,8 +6,7 @@ import android.os.Bundle
import android.provider.ContactsContract import android.provider.ContactsContract
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import com.simplemobiletools.commons.extensions.baseConfig import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS
import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.R
@ -28,6 +27,7 @@ class SelectContactActivity : SimpleActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_select_contact) setContentView(R.layout.activity_select_contact)
setupPlaceholders()
handlePermission(PERMISSION_READ_CONTACTS) { handlePermission(PERMISSION_READ_CONTACTS) {
if (it) { if (it) {
@ -104,8 +104,11 @@ class SelectContactActivity : SimpleActivity() {
contacts.sort() contacts.sort()
runOnUiThread { runOnUiThread {
select_contact_list.adapter = SelectContactsAdapter(this, contacts, ArrayList(), false) { updatePlaceholderVisibility(contacts)
SelectContactsAdapter(this, contacts, ArrayList(), false, select_contact_list) {
confirmSelection(it) confirmSelection(it)
}.apply {
select_contact_list.adapter = this
} }
select_contact_fastscroller.allowBubbleDisplay = baseConfig.showInfoBubble select_contact_fastscroller.allowBubbleDisplay = baseConfig.showInfoBubble
@ -131,9 +134,29 @@ class SelectContactActivity : SimpleActivity() {
val contactId = ContactsHelper(this).getContactMimeTypeId(contact.id.toString(), specialMimeType!!) val contactId = ContactsHelper(this).getContactMimeTypeId(contact.id.toString(), specialMimeType!!)
Uri.withAppendedPath(ContactsContract.Data.CONTENT_URI, contactId) Uri.withAppendedPath(ContactsContract.Data.CONTENT_URI, contactId)
} }
else -> { else -> getContactPublicUri(contact)
getContactPublicUri(contact) }
}
private fun setupPlaceholders() {
select_contact_placeholder.setTextColor(config.textColor)
select_contact_placeholder_2.setTextColor(getAdjustedPrimaryColor())
select_contact_placeholder_2.underlineText()
select_contact_placeholder_2.setOnClickListener {
FilterContactSourcesDialog(this) {
initContacts()
} }
} }
} }
private fun updatePlaceholderVisibility(contacts: ArrayList<Contact>) {
select_contact_list.beVisibleIf(contacts.isNotEmpty())
select_contact_placeholder_2.beVisibleIf(contacts.isEmpty())
select_contact_placeholder.beVisibleIf(contacts.isEmpty())
select_contact_placeholder.setText(when (specialMimeType) {
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE -> R.string.no_contacts_with_emails
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE -> R.string.no_contacts_with_phone_numbers
else -> R.string.no_contacts_found
})
}
} }

View File

@ -4,6 +4,7 @@ import android.graphics.drawable.Drawable
import android.util.SparseArray import android.util.SparseArray
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
@ -13,6 +14,7 @@ import com.bumptech.glide.signature.ObjectKey
import com.simplemobiletools.commons.extensions.beVisibleIf import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor
import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor
import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.R
import com.simplemobiletools.contacts.activities.SimpleActivity import com.simplemobiletools.contacts.activities.SimpleActivity
import com.simplemobiletools.contacts.extensions.config import com.simplemobiletools.contacts.extensions.config
@ -22,7 +24,7 @@ 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>, private val selectedContacts: ArrayList<Contact>, private val allowPickMultiple: Boolean, class SelectContactsAdapter(val activity: SimpleActivity, val contacts: List<Contact>, private val selectedContacts: ArrayList<Contact>, private val allowPickMultiple: Boolean,
private val itemClick: ((Contact) -> Unit)? = null) : RecyclerView.Adapter<SelectContactsAdapter.ViewHolder>() { private val recyclerView: MyRecyclerView, private 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
@ -36,10 +38,19 @@ class SelectContactsAdapter(val activity: SimpleActivity, val contacts: List<Con
init { init {
contacts.forEachIndexed { index, contact -> contacts.forEachIndexed { index, contact ->
if (selectedContacts.map { it.id }.contains(contact.id)) { if (selectedContacts.asSequence().map { it.id }.contains(contact.id)) {
selectedPositions.add(index) selectedPositions.add(index)
} }
} }
if (recyclerView.itemDecorationCount > 0) {
recyclerView.removeItemDecorationAt(0)
}
DividerItemDecoration(activity, DividerItemDecoration.VERTICAL).apply {
setDrawable(activity.resources.getDrawable(R.drawable.divider))
recyclerView.addItemDecoration(this)
}
} }
private fun toggleItemSelection(select: Boolean, pos: Int) { private fun toggleItemSelection(select: Boolean, pos: Int) {

View File

@ -33,7 +33,7 @@ class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayL
activity.runOnUiThread { activity.runOnUiThread {
view.apply { view.apply {
select_contact_list.adapter = SelectContactsAdapter(activity, allContacts, initiallySelectedContacts, true) select_contact_list.adapter = SelectContactsAdapter(activity, allContacts, initiallySelectedContacts, true, select_contact_list)
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())

View File

@ -26,13 +26,13 @@
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/group_contacts_placeholder_2" android:id="@+id/group_contacts_placeholder_2"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/group_contacts_placeholder" android:layout_below="@+id/group_contacts_placeholder"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:background="?attr/selectableItemBackground"
android:gravity="center" android:gravity="center"
android:paddingBottom="@dimen/medium_margin" android:padding="@dimen/activity_margin"
android:paddingTop="@dimen/medium_margin"
android:text="@string/add_contacts" android:text="@string/add_contacts"
android:textSize="@dimen/bigger_text_size" android:textSize="@dimen/bigger_text_size"
android:visibility="gone"/> android:visibility="gone"/>
@ -51,8 +51,8 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:paddingLeft="@dimen/normal_margin" android:paddingStart="@dimen/normal_margin"
android:paddingStart="@dimen/normal_margin"> android:paddingLeft="@dimen/normal_margin">
<include layout="@layout/fastscroller_handle_vertical"/> <include layout="@layout/fastscroller_handle_vertical"/>

View File

@ -6,6 +6,32 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/select_contact_placeholder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/activity_margin"
android:gravity="center"
android:paddingLeft="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin"
android:text="@string/no_contacts_found"
android:textSize="@dimen/bigger_text_size"
android:visibility="gone"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/select_contact_placeholder_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/select_contact_placeholder"
android:layout_centerHorizontal="true"
android:background="?attr/selectableItemBackground"
android:gravity="center"
android:padding="@dimen/activity_margin"
android:text="@string/change_filter"
android:textSize="@dimen/bigger_text_size"
android:visibility="gone"/>
<com.simplemobiletools.commons.views.MyRecyclerView <com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/select_contact_list" android:id="@+id/select_contact_list"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -18,12 +44,12 @@
android:id="@+id/select_contact_fastscroller" android:id="@+id/select_contact_fastscroller"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignTop="@+id/select_contact_list"
android:layout_alignBottom="@+id/select_contact_list" android:layout_alignBottom="@+id/select_contact_list"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_alignTop="@+id/select_contact_list" android:paddingStart="@dimen/normal_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin">
android:paddingStart="@dimen/normal_margin">
<include layout="@layout/fastscroller_handle_vertical"/> <include layout="@layout/fastscroller_handle_vertical"/>

View File

@ -17,19 +17,19 @@
android:gravity="center" android:gravity="center"
android:paddingLeft="@dimen/activity_margin" android:paddingLeft="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin" android:paddingRight="@dimen/activity_margin"
android:text="@string/no_items_found" android:text="@string/no_contacts_found"
android:textSize="@dimen/bigger_text_size" android:textSize="@dimen/bigger_text_size"
android:visibility="gone"/> android:visibility="gone"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/fragment_placeholder_2" android:id="@+id/fragment_placeholder_2"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/fragment_placeholder" android:layout_below="@+id/fragment_placeholder"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:background="?attr/selectableItemBackground"
android:gravity="center" android:gravity="center"
android:paddingBottom="@dimen/medium_margin" android:padding="@dimen/activity_margin"
android:paddingTop="@dimen/medium_margin"
android:text="@string/change_filter" android:text="@string/change_filter"
android:textSize="@dimen/bigger_text_size" android:textSize="@dimen/bigger_text_size"
android:visibility="gone"/> android:visibility="gone"/>
@ -48,8 +48,8 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:paddingLeft="@dimen/normal_margin" android:paddingStart="@dimen/normal_margin"
android:paddingStart="@dimen/normal_margin"> android:paddingLeft="@dimen/normal_margin">
<include layout="@layout/fastscroller_handle_vertical"/> <include layout="@layout/fastscroller_handle_vertical"/>