Update contact list stype to show indices

This commit is contained in:
moezbhatti
2019-09-29 17:43:51 -04:00
committed by Moez Bhatti
parent 1e5f8485f2
commit a8efaa19be
4 changed files with 70 additions and 81 deletions
@@ -20,10 +20,12 @@ package com.moez.QKSMS.feature.compose
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import com.moez.QKSMS.R
import com.moez.QKSMS.common.base.QkAdapter
import com.moez.QKSMS.common.base.QkViewHolder
import com.moez.QKSMS.common.util.extensions.forwardTouches
import com.moez.QKSMS.common.util.extensions.setVisible
import com.moez.QKSMS.model.Contact
import io.reactivex.subjects.PublishSubject
@@ -42,32 +44,34 @@ class ContactAdapter @Inject constructor() : QkAdapter<Contact>() {
val view = layoutInflater.inflate(R.layout.contact_list_item, parent, false)
view.addresses.setRecycledViewPool(numbersViewPool)
view.addresses.adapter = PhoneNumberAdapter()
view.addresses.forwardTouches(view)
return QkViewHolder(view).apply {
view.primary.setOnClickListener {
view.setOnClickListener {
val contact = getItem(adapterPosition)
contactSelected.onNext(copyContact(contact, 0))
}
view.addresses.adapter = PhoneNumberAdapter { contact, index ->
contactSelected.onNext(copyContact(contact, index + 1))
contactSelected.onNext(contact)
}
}
}
override fun onBindViewHolder(holder: QkViewHolder, position: Int) {
val prevContact = if (position > 0) getItem(position - 1) else null
val contact = getItem(position)
val view = holder.containerView
view.index.text = if (contact.name[0].isLetter()) contact.name[0].toString() else "#"
view.index.isVisible = prevContact == null ||
(contact.name[0].isLetter() && contact.name[0] != prevContact.name[0]) ||
(!contact.name[0].isLetter() && prevContact.name[0].isLetter())
view.avatar.setContact(contact)
view.name.text = contact.name
view.name.setVisible(view.name.text.isNotEmpty())
view.address.text = contact.numbers.firstOrNull()?.address ?: ""
view.type.text = contact.numbers.firstOrNull()?.type ?: ""
val adapter = view.addresses.adapter as PhoneNumberAdapter
adapter.contact = contact
adapter.data = contact.numbers.drop(Math.min(contact.numbers.size, 1))
adapter.data = contact.numbers
}
/**
@@ -80,8 +84,4 @@ class ContactAdapter @Inject constructor() : QkAdapter<Contact>() {
numbers.add(contact.numbers[numberIndex])
}
override fun areItemsTheSame(old: Contact, new: Contact): Boolean {
return old.lookupKey == new.lookupKey
}
}
}
@@ -25,11 +25,9 @@ import com.moez.QKSMS.common.base.QkAdapter
import com.moez.QKSMS.common.base.QkViewHolder
import com.moez.QKSMS.model.Contact
import com.moez.QKSMS.model.PhoneNumber
import kotlinx.android.synthetic.main.contact_list_item.view.*
import kotlinx.android.synthetic.main.contact_number_list_item.view.*
class PhoneNumberAdapter(
private val numberClicked: (Contact, Int) -> Unit
) : QkAdapter<PhoneNumber>() {
class PhoneNumberAdapter : QkAdapter<PhoneNumber>() {
lateinit var contact: Contact
@@ -43,10 +41,6 @@ class PhoneNumberAdapter(
val number = getItem(position)
val view = holder.containerView
// Setting this in onCreateViewHolder causes a crash sometimes. [contact] returns the
// contact from a different row, I'm not sure why
view.setOnClickListener { numberClicked(contact, position) }
view.address.text = number.address
view.type.text = number.type
}
@@ -21,16 +21,45 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<com.moez.QKSMS.common.widget.QkTextView
android:id="@+id/index"
android:layout_width="24dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:gravity="center_horizontal"
android:maxLength="1"
android:textStyle="bold"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@id/avatar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/avatar"
app:textColor="theme"
app:textSize="primary"
tools:text="M"
tools:visibility="visible" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="12dp"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@id/avatar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/avatar" />
<com.moez.QKSMS.common.widget.AvatarView
android:id="@+id/avatar"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginStart="24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintStart_toEndOf="@id/icon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0" />
@@ -41,59 +70,24 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toTopOf="@id/address"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/addresses"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="@id/avatar"
app:layout_constraintTop_toTopOf="@id/avatar"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
tools:text="Moez Bhatti" />
<com.moez.QKSMS.common.widget.QkTextView
android:id="@+id/address"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="16dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:textColor="?android:attr/textColorSecondary"
app:layout_constraintBottom_toBottomOf="@id/avatar"
app:layout_constraintEnd_toStartOf="@id/type"
app:layout_constraintStart_toEndOf="@id/avatar"
app:layout_constraintTop_toBottomOf="@id/name"
app:textSize="secondary"
tools:text="(123) 456-7890"
tools:textColor="@color/textSecondary" />
<com.moez.QKSMS.common.widget.QkTextView
android:id="@+id/type"
style="@style/TextSecondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:gravity="center_vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/address"
tools:text="Mobile"
tools:textColor="@color/textTertiary" />
<View
android:id="@+id/primary"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="?attr/selectableItemBackground" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/addresses"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintEnd_toEndOf="@id/type"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/name"
app:layout_constraintTop_toBottomOf="@id/address"
app:layout_constraintTop_toBottomOf="@id/name"
tools:listitem="@layout/contact_number_list_item" />
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -22,26 +22,27 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground">
android:paddingTop="2dp">
<com.moez.QKSMS.common.widget.QkTextView
android:id="@+id/type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textColor="?android:attr/textColorTertiary"
android:textStyle="bold"
app:textSize="secondary"
tools:text="Mobile" />
<com.moez.QKSMS.common.widget.QkTextView
android:id="@+id/address"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:textColor="?android:attr/textColorSecondary"
android:textColor="?android:attr/textColorTertiary"
app:textSize="secondary"
tools:text="(123) 456-7890"
tools:textColor="@color/textSecondary" />
<com.moez.QKSMS.common.widget.QkTextView
android:id="@+id/type"
style="@style/TextSecondary"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:gravity="center_vertical"
tools:text="Mobile"
tools:textColor="@color/textTertiary" />
tools:text="(123) 456-7890" />
</LinearLayout>