Move as much as possible code from onBindViewHolder to onCreateViewHolder

This commit is contained in:
Sylvain Berfini 2023-11-08 02:43:03 +01:00
parent 115ce8148a
commit 76b41b693b
15 changed files with 152 additions and 178 deletions

View file

@ -826,7 +826,7 @@ class NotificationsManager @MainThread constructor(private val context: Context)
context,
context.getString(R.string.notification_channel_chat_id)
)
.setSmallIcon(R.drawable.chat_text)
.setSmallIcon(R.drawable.chat_teardrop_text)
.setAutoCancel(true)
.setLargeIcon(largeIcon)
.setColor(AppUtils.getColor(R.color.orange_main_500))

View file

@ -52,7 +52,22 @@ class CallsListAdapter(private val viewLifecycleOwner: LifecycleOwner) :
parent,
false
)
return ViewHolder(binding)
val viewHolder = ViewHolder(binding)
binding.apply {
lifecycleOwner = viewLifecycleOwner
setOnClickListener {
callClickedEvent.value = Event(model!!)
}
setOnLongClickListener {
selectedAdapterPosition = viewHolder.bindingAdapterPosition
root.isSelected = true
callLongClickedEvent.value = Event(model!!)
true
}
}
return viewHolder
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
@ -72,21 +87,8 @@ class CallsListAdapter(private val viewLifecycleOwner: LifecycleOwner) :
with(binding) {
model = callModel
lifecycleOwner = viewLifecycleOwner
binding.root.isSelected = bindingAdapterPosition == selectedAdapterPosition
binding.setOnClickListener {
callClickedEvent.value = Event(callModel)
}
binding.setOnLongClickListener {
selectedAdapterPosition = bindingAdapterPosition
binding.root.isSelected = true
callLongClickedEvent.value = Event(callModel)
true
}
executePendingBindings()
}
}

View file

@ -33,7 +33,6 @@ import org.linphone.ui.call.model.ConferenceParticipantModel
class ConferenceParticipantsListAdapter(private val viewLifecycleOwner: LifecycleOwner) :
ListAdapter<ConferenceParticipantModel, RecyclerView.ViewHolder>(ParticipantDiffCallback()) {
var selectedAdapterPosition = -1
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val binding: CallConferenceParticipantListCellBinding = DataBindingUtil.inflate(
@ -42,6 +41,7 @@ class ConferenceParticipantsListAdapter(private val viewLifecycleOwner: Lifecycl
parent,
false
)
binding.lifecycleOwner = viewLifecycleOwner
return ViewHolder(binding)
}
@ -49,11 +49,6 @@ class ConferenceParticipantsListAdapter(private val viewLifecycleOwner: Lifecycl
(holder as ViewHolder).bind(getItem(position))
}
fun resetSelection() {
notifyItemChanged(selectedAdapterPosition)
selectedAdapterPosition = -1
}
inner class ViewHolder(
val binding: CallConferenceParticipantListCellBinding
) : RecyclerView.ViewHolder(binding.root) {
@ -62,10 +57,6 @@ class ConferenceParticipantsListAdapter(private val viewLifecycleOwner: Lifecycl
with(binding) {
model = participantModel
lifecycleOwner = viewLifecycleOwner
binding.root.isSelected = bindingAdapterPosition == selectedAdapterPosition
executePendingBindings()
}
}

View file

@ -25,6 +25,7 @@ class ChatMessageBottomSheetAdapter(
parent,
false
)
binding.lifecycleOwner = viewLifecycleOwner
return ViewHolder(binding)
}
@ -39,9 +40,6 @@ class ChatMessageBottomSheetAdapter(
fun bind(bottomSheetModel: ChatMessageBottomSheetParticipantModel) {
with(binding) {
model = bottomSheetModel
lifecycleOwner = viewLifecycleOwner
executePendingBindings()
}
}

View file

@ -84,7 +84,25 @@ class ConversationEventAdapter : ListAdapter<EventLogModel, RecyclerView.ViewHol
parent,
false
)
return IncomingBubbleViewHolder(binding)
val viewHolder = IncomingBubbleViewHolder(binding)
binding.apply {
setOnLongClickListener {
chatMessageLongPressEvent.value = Event(model!!)
true
}
setShowDeliveryInfoClickListener {
showDeliveryForChatMessageModelEvent.value = Event(model!!)
}
setShowReactionInfoClickListener {
showReactionForChatMessageModelEvent.value = Event(model!!)
}
setScrollToRepliedMessageClickListener {
scrollToRepliedMessageEvent.value = Event(model!!)
}
lifecycleOwner = viewLifecycleOwner
}
return viewHolder
}
private fun createOutgoingChatBubble(parent: ViewGroup): OutgoingBubbleViewHolder {
@ -94,7 +112,25 @@ class ConversationEventAdapter : ListAdapter<EventLogModel, RecyclerView.ViewHol
parent,
false
)
return OutgoingBubbleViewHolder(binding)
val viewHolder = OutgoingBubbleViewHolder(binding)
binding.apply {
setOnLongClickListener {
chatMessageLongPressEvent.value = Event(model!!)
true
}
setShowDeliveryInfoClickListener {
showDeliveryForChatMessageModelEvent.value = Event(model!!)
}
setShowReactionInfoClickListener {
showReactionForChatMessageModelEvent.value = Event(model!!)
}
setScrollToRepliedMessageClickListener {
scrollToRepliedMessageEvent.value = Event(model!!)
}
lifecycleOwner = viewLifecycleOwner
}
return viewHolder
}
private fun createEvent(parent: ViewGroup): EventViewHolder {
@ -104,6 +140,7 @@ class ConversationEventAdapter : ListAdapter<EventLogModel, RecyclerView.ViewHol
parent,
false
)
binding.lifecycleOwner = viewLifecycleOwner
return EventViewHolder(binding)
}
@ -122,23 +159,6 @@ class ConversationEventAdapter : ListAdapter<EventLogModel, RecyclerView.ViewHol
fun bind(message: ChatMessageModel) {
with(binding) {
model = message
setOnLongClickListener {
chatMessageLongPressEvent.value = Event(message)
true
}
setShowDeliveryInfoClickListener {
showDeliveryForChatMessageModelEvent.value = Event(message)
}
setShowReactionInfoClickListener {
showReactionForChatMessageModelEvent.value = Event(message)
}
setScrollToRepliedMessageClickListener {
scrollToRepliedMessageEvent.value = Event(message)
}
lifecycleOwner = viewLifecycleOwner
executePendingBindings()
}
}
@ -150,23 +170,6 @@ class ConversationEventAdapter : ListAdapter<EventLogModel, RecyclerView.ViewHol
fun bind(message: ChatMessageModel) {
with(binding) {
model = message
setOnLongClickListener {
chatMessageLongPressEvent.value = Event(message)
true
}
setShowDeliveryInfoClickListener {
showDeliveryForChatMessageModelEvent.value = Event(message)
}
setShowReactionInfoClickListener {
showReactionForChatMessageModelEvent.value = Event(message)
}
setScrollToRepliedMessageClickListener {
scrollToRepliedMessageEvent.value = Event(message)
}
lifecycleOwner = viewLifecycleOwner
executePendingBindings()
}
}
@ -177,8 +180,6 @@ class ConversationEventAdapter : ListAdapter<EventLogModel, RecyclerView.ViewHol
fun bind(event: EventModel) {
with(binding) {
model = event
lifecycleOwner = viewLifecycleOwner
executePendingBindings()
}
}

View file

@ -23,6 +23,7 @@ class ConversationParticipantsAdapter(
parent,
false
)
binding.lifecycleOwner = viewLifecycleOwner
return ViewHolder(binding)
}
@ -37,9 +38,6 @@ class ConversationParticipantsAdapter(
fun bind(participantModel: ParticipantModel) {
with(binding) {
model = participantModel
lifecycleOwner = viewLifecycleOwner
executePendingBindings()
}
}

View file

@ -34,7 +34,22 @@ class ConversationsListAdapter(
parent,
false
)
return ViewHolder(binding)
val viewHolder = ViewHolder(binding)
binding.apply {
lifecycleOwner = viewLifecycleOwner
setOnClickListener {
conversationClickedEvent.value = Event(model!!)
}
setOnLongClickListener {
selectedAdapterPosition = viewHolder.bindingAdapterPosition
root.isSelected = true
conversationLongClickedEvent.value = Event(model!!)
true
}
}
return viewHolder
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
@ -54,21 +69,8 @@ class ConversationsListAdapter(
with(binding) {
model = conversationModel
lifecycleOwner = viewLifecycleOwner
binding.root.isSelected = bindingAdapterPosition == selectedAdapterPosition
binding.setOnClickListener {
conversationClickedEvent.value = Event(conversationModel)
}
binding.setOnLongClickListener {
selectedAdapterPosition = bindingAdapterPosition
binding.root.isSelected = true
conversationLongClickedEvent.value = Event(conversationModel)
true
}
executePendingBindings()
}
}

View file

@ -39,7 +39,22 @@ class ContactsListAdapter(
parent,
false
)
return FavouriteViewHolder(binding)
val viewHolder = FavouriteViewHolder(binding)
binding.apply {
lifecycleOwner = viewLifecycleOwner
setOnClickListener {
contactClickedEvent.value = Event(model!!)
}
setOnLongClickListener {
selectedAdapterPosition = viewHolder.bindingAdapterPosition
root.isSelected = true
contactLongClickedEvent.value = Event(model!!)
true
}
}
return viewHolder
} else {
val binding: ContactListCellBinding = DataBindingUtil.inflate(
LayoutInflater.from(parent.context),
@ -47,7 +62,24 @@ class ContactsListAdapter(
parent,
false
)
return ViewHolder(binding)
val viewHolder = ViewHolder(binding)
binding.apply {
lifecycleOwner = viewLifecycleOwner
setOnClickListener {
contactClickedEvent.value = Event(model!!)
}
if (!disableLongClick) {
setOnLongClickListener {
selectedAdapterPosition = viewHolder.bindingAdapterPosition
root.isSelected = true
contactLongClickedEvent.value = Event(model!!)
true
}
}
}
return viewHolder
}
}
@ -72,23 +104,8 @@ class ContactsListAdapter(
with(binding) {
model = contactModel
lifecycleOwner = viewLifecycleOwner
binding.root.isSelected = bindingAdapterPosition == selectedAdapterPosition
binding.setOnClickListener {
contactClickedEvent.value = Event(contactModel)
}
if (!disableLongClick) {
binding.setOnLongClickListener {
selectedAdapterPosition = bindingAdapterPosition
binding.root.isSelected = true
contactLongClickedEvent.value = Event(contactModel)
true
}
}
executePendingBindings()
}
}
@ -102,21 +119,8 @@ class ContactsListAdapter(
with(binding) {
model = contactModel
lifecycleOwner = viewLifecycleOwner
binding.root.isSelected = bindingAdapterPosition == selectedAdapterPosition
binding.setOnClickListener {
contactClickedEvent.value = Event(contactModel)
}
binding.setOnLongClickListener {
selectedAdapterPosition = bindingAdapterPosition
binding.root.isSelected = true
contactLongClickedEvent.value = Event(contactModel)
true
}
executePendingBindings()
}
}

View file

@ -41,6 +41,7 @@ class ContactHistoryListAdapter(
parent,
false
)
binding.lifecycleOwner = viewLifecycleOwner
return ViewHolder(binding)
}
@ -55,9 +56,6 @@ class ContactHistoryListAdapter(
fun bind(callLogHistoryModel: CallLogHistoryModel) {
with(binding) {
model = callLogHistoryModel
lifecycleOwner = viewLifecycleOwner
executePendingBindings()
}
}

View file

@ -75,6 +75,7 @@ class ContactsAndSuggestionsListAdapter(
parent,
false
)
binding.lifecycleOwner = viewLifecycleOwner
ContactViewHolder(binding)
}
else -> {
@ -84,6 +85,12 @@ class ContactsAndSuggestionsListAdapter(
parent,
false
)
binding.apply {
lifecycleOwner = viewLifecycleOwner
setOnClickListener {
contactClickedEvent.value = Event(model!!)
}
}
SuggestionViewHolder(binding)
}
}
@ -103,13 +110,9 @@ class ContactsAndSuggestionsListAdapter(
fun bind(contactOrSuggestionModel: ContactOrSuggestionModel) {
with(binding) {
model = contactOrSuggestionModel.avatarModel.value
lifecycleOwner = viewLifecycleOwner
binding.setOnClickListener {
setOnClickListener {
contactClickedEvent.value = Event(contactOrSuggestionModel)
}
executePendingBindings()
}
}
@ -122,13 +125,6 @@ class ContactsAndSuggestionsListAdapter(
fun bind(contactOrSuggestionModel: ContactOrSuggestionModel) {
with(binding) {
model = contactOrSuggestionModel
lifecycleOwner = viewLifecycleOwner
binding.setOnClickListener {
contactClickedEvent.value = Event(contactOrSuggestionModel)
}
executePendingBindings()
}
}

View file

@ -38,7 +38,26 @@ class HistoryListAdapter(
parent,
false
)
return ViewHolder(binding)
val viewHolder = ViewHolder(binding)
binding.apply {
lifecycleOwner = viewLifecycleOwner
setOnClickListener {
callLogClickedEvent.value = Event(model!!)
}
setOnLongClickListener {
selectedAdapterPosition = viewHolder.bindingAdapterPosition
root.isSelected = true
callLogLongClickedEvent.value = Event(model!!)
true
}
setOnCallClickListener {
callLogCallBackClickedEvent.value = Event(model!!)
}
}
return viewHolder
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
@ -58,25 +77,8 @@ class HistoryListAdapter(
with(binding) {
model = callLogModel
lifecycleOwner = viewLifecycleOwner
binding.root.isSelected = bindingAdapterPosition == selectedAdapterPosition
binding.setOnClickListener {
callLogClickedEvent.value = Event(callLogModel)
}
binding.setOnLongClickListener {
selectedAdapterPosition = bindingAdapterPosition
binding.root.isSelected = true
callLogLongClickedEvent.value = Event(callLogModel)
true
}
binding.setOnCallClickListener {
callLogCallBackClickedEvent.value = Event(callLogModel)
}
executePendingBindings()
}
}

View file

@ -51,6 +51,19 @@ class MeetingsListAdapter(
parent,
false
)
binding.apply {
lifecycleOwner = viewLifecycleOwner
setOnClickListener {
meetingClickedEvent.value = Event(model!!)
}
setOnLongClickListener {
root.isSelected = true
meetingLongClickedEvent.value = Event(model!!)
true
}
}
return ViewHolder(binding)
}
@ -65,19 +78,6 @@ class MeetingsListAdapter(
fun bind(meetingModel: MeetingModel) {
with(binding) {
model = meetingModel
lifecycleOwner = viewLifecycleOwner
binding.setOnClickListener {
meetingClickedEvent.value = Event(meetingModel)
}
binding.setOnLongClickListener {
binding.root.isSelected = true
meetingLongClickedEvent.value = Event(meetingModel)
true
}
executePendingBindings()
}
}

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="256"
android:viewportHeight="256">
<path
android:pathData="M216,48L40,48A16,16 0,0 0,24 64L24,224a15.85,15.85 0,0 0,9.24 14.5A16.13,16.13 0,0 0,40 240a15.89,15.89 0,0 0,10.25 -3.78,0.69 0.69,0 0,0 0.13,-0.11L82.5,208L216,208a16,16 0,0 0,16 -16L232,64A16,16 0,0 0,216 48ZM40,224h0ZM216,192L82.5,192a16,16 0,0 0,-10.3 3.75l-0.12,0.11L40,224L40,64L216,64ZM116,128a12,12 0,1 1,12 12A12,12 0,0 1,116 128ZM72,128a12,12 0,1 1,12 12A12,12 0,0 1,72 128ZM160,128a12,12 0,1 1,12 12A12,12 0,0 1,160 128Z"
android:fillColor="#4e6074"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="256"
android:viewportHeight="256">
<path
android:pathData="M216,48L40,48A16,16 0,0 0,24 64L24,224a15.85,15.85 0,0 0,9.24 14.5A16.13,16.13 0,0 0,40 240a15.89,15.89 0,0 0,10.25 -3.78,0.69 0.69,0 0,0 0.13,-0.11L82.5,208L216,208a16,16 0,0 0,16 -16L232,64A16,16 0,0 0,216 48ZM40,224h0ZM216,192L82.5,192a16,16 0,0 0,-10.3 3.75l-0.12,0.11L40,224L40,64L216,64ZM88,112a8,8 0,0 1,8 -8h64a8,8 0,0 1,0 16L96,120A8,8 0,0 1,88 112ZM88,144a8,8 0,0 1,8 -8h64a8,8 0,1 1,0 16L96,152A8,8 0,0 1,88 144Z"
android:fillColor="#4e6074"/>
</vector>

View file

@ -61,7 +61,7 @@
android:layout_marginEnd="30dp"
android:background="@drawable/circle_light_blue_button_background"
android:padding="16dp"
android:src="@drawable/chat_text"
android:src="@drawable/chat_teardrop_text"
app:tint="@color/gray_main2_500"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"