Loading presentation/src/main/java/com/moez/QKSMS/feature/compose/ContactAdapter.kt +14 −14 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 } /** Loading @@ -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 } } presentation/src/main/java/com/moez/QKSMS/feature/compose/PhoneNumberAdapter.kt +2 −8 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 } Loading presentation/src/main/res/layout/contact_list_item.xml +39 −45 Original line number Diff line number Diff line Loading @@ -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" /> Loading @@ -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> No newline at end of file presentation/src/main/res/layout/contact_number_list_item.xml +15 −14 Original line number Diff line number Diff line Loading @@ -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/address" android:layout_width="0dp" android:layout_height="40dp" android:layout_weight="1" android:id="@+id/type" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorTertiary" android:textStyle="bold" app:textSize="secondary" tools:text="(123) 456-7890" tools:textColor="@color/textSecondary" /> tools:text="Mobile" /> <com.moez.QKSMS.common.widget.QkTextView android:id="@+id/type" style="@style/TextSecondary" android:layout_width="wrap_content" android:layout_height="40dp" android:id="@+id/address" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_weight="1" android:gravity="center_vertical" tools:text="Mobile" tools:textColor="@color/textTertiary" /> android:textColor="?android:attr/textColorTertiary" app:textSize="secondary" tools:text="(123) 456-7890" /> </LinearLayout> No newline at end of file Loading
presentation/src/main/java/com/moez/QKSMS/feature/compose/ContactAdapter.kt +14 −14 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 } /** Loading @@ -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 } }
presentation/src/main/java/com/moez/QKSMS/feature/compose/PhoneNumberAdapter.kt +2 −8 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 } Loading
presentation/src/main/res/layout/contact_list_item.xml +39 −45 Original line number Diff line number Diff line Loading @@ -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" /> Loading @@ -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> No newline at end of file
presentation/src/main/res/layout/contact_number_list_item.xml +15 −14 Original line number Diff line number Diff line Loading @@ -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/address" android:layout_width="0dp" android:layout_height="40dp" android:layout_weight="1" android:id="@+id/type" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorTertiary" android:textStyle="bold" app:textSize="secondary" tools:text="(123) 456-7890" tools:textColor="@color/textSecondary" /> tools:text="Mobile" /> <com.moez.QKSMS.common.widget.QkTextView android:id="@+id/type" style="@style/TextSecondary" android:layout_width="wrap_content" android:layout_height="40dp" android:id="@+id/address" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_weight="1" android:gravity="center_vertical" tools:text="Mobile" tools:textColor="@color/textTertiary" /> android:textColor="?android:attr/textColorTertiary" app:textSize="secondary" tools:text="(123) 456-7890" /> </LinearLayout> No newline at end of file