mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 03:18:06 +00:00
Prevent participants list from blinking if it hasn't changed, using RecyclerView will also improve performances a bit for conversations with a lot of participants
This commit is contained in:
parent
a897c127e5
commit
7e0353cc91
4 changed files with 26 additions and 18 deletions
|
|
@ -94,6 +94,7 @@ import org.linphone.utils.hideKeyboard
|
|||
import org.linphone.utils.setKeyboardInsetListener
|
||||
import org.linphone.utils.showKeyboard
|
||||
import androidx.core.net.toUri
|
||||
import org.linphone.ui.main.chat.adapter.ConversationParticipantsAdapter
|
||||
import org.linphone.ui.main.chat.model.MessageDeleteDialogModel
|
||||
|
||||
@UiThread
|
||||
|
|
@ -114,6 +115,8 @@ open class ConversationFragment : SlidingPaneChildFragment() {
|
|||
|
||||
private lateinit var adapter: ConversationEventAdapter
|
||||
|
||||
private lateinit var participantsAdapter: ConversationParticipantsAdapter
|
||||
|
||||
private lateinit var bottomSheetAdapter: MessageBottomSheetAdapter
|
||||
|
||||
private val args: ConversationFragmentArgs by navArgs()
|
||||
|
|
@ -395,6 +398,7 @@ open class ConversationFragment : SlidingPaneChildFragment() {
|
|||
super.onCreate(savedInstanceState)
|
||||
|
||||
adapter = ConversationEventAdapter()
|
||||
participantsAdapter = ConversationParticipantsAdapter()
|
||||
headerItemDecoration = RecyclerViewHeaderDecoration(
|
||||
requireContext(),
|
||||
adapter,
|
||||
|
|
@ -466,6 +470,10 @@ open class ConversationFragment : SlidingPaneChildFragment() {
|
|||
layoutManager.stackFromEnd = true
|
||||
binding.eventsList.layoutManager = layoutManager
|
||||
|
||||
binding.sendArea.participants.participants.setHasFixedSize(true)
|
||||
val participantsLayoutManager = LinearLayoutManager(requireContext())
|
||||
binding.sendArea.participants.participants.layoutManager = participantsLayoutManager
|
||||
|
||||
val callbacks = RecyclerViewSwipeUtilsCallback(
|
||||
R.drawable.reply,
|
||||
ConversationEventAdapter.EventViewHolder::class.java
|
||||
|
|
@ -764,6 +772,14 @@ open class ConversationFragment : SlidingPaneChildFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
sendMessageViewModel.participants.observe(viewLifecycleOwner) {
|
||||
participantsAdapter.submitList(it)
|
||||
|
||||
if (binding.sendArea.participants.participants.adapter != participantsAdapter) {
|
||||
binding.sendArea.participants.participants.adapter = participantsAdapter
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.focusSearchBarEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { show ->
|
||||
if (show) {
|
||||
|
|
|
|||
|
|
@ -593,7 +593,7 @@ class SendMessageInConversationViewModel
|
|||
participantsListFilter = filter
|
||||
val currentList = participants.value.orEmpty()
|
||||
val newList = currentList.filter {
|
||||
it.address.asStringUriOnly().contains(filter) || it.avatarModel.contactName?.contains(filter) == true
|
||||
it.address.username.orEmpty().contains(filter) || it.avatarModel.contactName?.contains(filter) == true
|
||||
}
|
||||
participants.postValue(newList as ArrayList<ParticipantModel>)
|
||||
isComputingParticipantsList.postValue(false)
|
||||
|
|
|
|||
|
|
@ -31,27 +31,19 @@
|
|||
android:text="@string/conversation_participants_list_header"
|
||||
android:textSize="12sp"
|
||||
android:textColor="?attr/color_main2_500"
|
||||
app:layout_constraintTop_toBottomOf="@id/participants_separator"
|
||||
app:layout_constraintTop_toTopOf="@id/participants_close"
|
||||
app:layout_constraintBottom_toBottomOf="@id/participants_close"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/participants"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintHeight_max="@dimen/chat_room_participants_list_max_height"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/chat_room_participants_list_max_height"
|
||||
android:layout_marginTop="5dp"
|
||||
android:scrollbars="vertical"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/participants_header">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="5dp"
|
||||
android:orientation="vertical"
|
||||
entries="@{viewModel.participants}"
|
||||
layout="@{@layout/chat_participant_list_cell}"/>
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
app:layout_constraintTop_toBottomOf="@id/participants_close" />
|
||||
|
||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
android:id="@+id/fetch_in_progress"
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
<dimen name="chat_documents_list_padding_start_end">10dp</dimen>
|
||||
|
||||
<dimen name="chat_room_emoji_picker_height">300dp</dimen>
|
||||
<dimen name="chat_room_participants_list_max_height">300dp</dimen>
|
||||
<dimen name="chat_room_participants_list_max_height">200dp</dimen>
|
||||
<dimen name="chat_bubble_emoji_picker_height">425dp</dimen>
|
||||
|
||||
<dimen name="spinner_start_padding">15dp</dimen>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue