Reworked chat_room_list_cell layout using ConstraintLayout to speed up display time

This commit is contained in:
Sylvain Berfini 2022-06-09 17:44:03 +02:00
parent f94b65ed0a
commit 9a6dc56b42

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data> <data>
<import type="android.view.View" /> <import type="android.view.View" />
@ -23,162 +24,171 @@
type="org.linphone.activities.main.viewmodels.ListTopBarViewModel" /> type="org.linphone.activities.main.viewmodels.ListTopBarViewModel" />
</data> </data>
<LinearLayout <androidx.constraintlayout.widget.ConstraintLayout
android:onClick="@{clickListener}"
android:onLongClick="@{longClickListener}"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="80dp" android:layout_height="80dp"
android:background="?attr/backgroundColor"
android:gravity="center_vertical" android:gravity="center_vertical"
android:paddingLeft="10dp" android:onClick="@{clickListener}"
android:paddingTop="5dp" android:onLongClick="@{longClickListener}"
android:paddingRight="10dp"
android:orientation="horizontal" android:orientation="horizontal"
android:background="?attr/backgroundColor"> android:paddingLeft="5dp"
android:paddingTop="5dp"
<RelativeLayout android:paddingRight="5dp">
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/avatar"
android:layout_width="45dp"
android:layout_height="wrap_content">
<ImageView <ImageView
android:id="@+id/avatar"
coilContact="@{viewModel}" coilContact="@{viewModel}"
android:layout_width="@dimen/contact_avatar_size" android:layout_width="@dimen/contact_avatar_size"
android:layout_height="@dimen/contact_avatar_size" android:layout_height="@dimen/contact_avatar_size"
android:layout_alignParentStart="true" android:layout_marginLeft="5dp"
android:layout_centerHorizontal="true" android:contentDescription="@null"
android:contentDescription="@null" /> android:src="@drawable/voip_single_contact_avatar_alt"
app:layout_constraintBottom_toTopOf="@id/date"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<ImageView <ImageView
android:id="@+id/securityLevel"
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="20dp" android:layout_height="20dp"
android:layout_alignParentTop="true" android:layout_marginLeft="25dp"
android:layout_alignParentEnd="true"
android:contentDescription="@{viewModel.securityLevelContentDescription}" android:contentDescription="@{viewModel.securityLevelContentDescription}"
android:src="@{viewModel.securityLevelIcon, default=@drawable/security_alert_indicator}" android:src="@{viewModel.securityLevelIcon, default=@drawable/security_alert_indicator}"
android:visibility="@{viewModel.encryptedChatRoom ? View.VISIBLE : View.GONE, default=gone}" /> android:visibility="@{viewModel.encryptedChatRoom ? View.VISIBLE : View.INVISIBLE, default=invisible}"
app:layout_constraintStart_toStartOf="@id/avatar"
</RelativeLayout> app:layout_constraintTop_toTopOf="@id/avatar" />
<TextView <TextView
android:id="@+id/date" android:id="@+id/date"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/avatar"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:paddingRight="10dp" android:paddingRight="10dp"
android:singleLine="true" android:singleLine="true"
android:text="@{viewModel.lastUpdate, default=`12:03`}" android:text="@{viewModel.lastUpdate, default=`12:03`}"
android:textColor="?attr/accentColor" android:textColor="?attr/accentColor"
android:textSize="16sp" /> android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
</RelativeLayout> app:layout_constraintEnd_toEndOf="@id/securityLevel"
app:layout_constraintStart_toStartOf="@id/avatar"
<RelativeLayout app:layout_constraintTop_toBottomOf="@id/avatar" />
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:paddingLeft="5dp">
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
style="@style/contact_name_list_cell_font" style="@style/contact_name_list_cell_font"
android:text="@{viewModel.oneToOneChatRoom ? (viewModel.contact.name ?? viewModel.displayName) : viewModel.subject, default=`Lorem Ipsum`}" android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="30dp" android:layout_marginLeft="10dp"
android:singleLine="true"
android:scrollHorizontally="true" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/lastMessage"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp" android:layout_marginRight="5dp"
android:gravity="center"
android:orientation="horizontal">
<TextView
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/unread_message_count_bg"
android:gravity="center"
android:singleLine="true" android:singleLine="true"
android:ellipsize="end" android:ellipsize="end"
android:text="@{String.valueOf(viewModel.unreadMessagesCount)}" android:text="@{viewModel.oneToOneChatRoom ? (viewModel.contact.name ?? viewModel.displayName) : viewModel.subject, default=`Lorem Ipsum`}"
android:visibility="@{viewModel.unreadMessagesCount == 0 ? View.GONE : View.VISIBLE, default=gone}"/> app:layout_constraintStart_toEndOf="@id/date"
app:layout_constraintEnd_toStartOf="@id/unread"
<CheckBox app:layout_constraintTop_toTopOf="@id/avatar" />
android:onClick="@{() -> selectionListViewModel.onToggleSelect(position)}"
android:visibility="@{selectionListViewModel.isEditionEnabled ? View.VISIBLE : View.GONE, default=gone}"
android:checked="@{selectionListViewModel.selectedItems.contains(position)}"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
<TextView <TextView
android:id="@+id/lastMessage" android:id="@+id/lastMessage"
style="@style/standard_small_text_font" style="@style/standard_small_text_font"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/title" android:layout_marginLeft="10dp"
android:layout_toLeftOf="@id/icons" android:layout_marginRight="5dp"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="2" android:maxLines="2"
android:text="@{viewModel.lastMessageText, default=`Lorem ipsum dolor sit amet`}" /> android:text="@{viewModel.lastMessageText, default=`Lorem ipsum dolor sit amet`}"
app:layout_constraintStart_toEndOf="@id/date"
app:layout_constraintEnd_toStartOf="@id/endBarrier"
app:layout_constraintTop_toBottomOf="@id/title" />
<LinearLayout <CheckBox
android:id="@+id/icons" android:id="@+id/select"
android:layout_width="30dp"
android:layout_height="20dp"
android:checked="@{selectionListViewModel.selectedItems.contains(position)}"
android:onClick="@{() -> selectionListViewModel.onToggleSelect(position)}"
android:visibility="@{selectionListViewModel.isEditionEnabled ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/title" />
<TextView
android:id="@+id/unread"
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:background="@drawable/unread_message_count_bg"
android:ellipsize="end"
android:gravity="center"
android:singleLine="true"
android:text="@{String.valueOf(viewModel.unreadMessagesCount)}"
android:visibility="@{viewModel.unreadMessagesCount == 0 ? View.GONE : View.VISIBLE, default=gone}"
app:layout_constraintEnd_toStartOf="@id/endBarrier2"
app:layout_constraintTop_toTopOf="@id/title" />
<ImageView
android:id="@+id/ephemeral"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="20dp" android:layout_height="20dp"
android:orientation="horizontal" android:layout_marginRight="10dp"
android:layout_alignParentBottom="true" android:layout_marginBottom="5dp"
android:layout_alignParentRight="true"
android:layout_marginBottom="10dp"
android:gravity="right">
<ImageView
android:visibility="@{viewModel.notificationsMuted ? View.VISIBLE : View.GONE, default=gone}"
android:id="@+id/muted"
android:contentDescription="@string/content_description_muted_chat_room"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:layout_marginRight="5dp"
android:src="@drawable/chat_room_menu_mute_notifications"/>
<ImageView
android:visibility="@{viewModel.ephemeralEnabled ? View.VISIBLE : View.GONE, default=gone}"
android:id="@+id/ephemeral"
android:contentDescription="@string/content_description_ephemeral_chat_room" android:contentDescription="@string/content_description_ephemeral_chat_room"
android:layout_width="wrap_content" android:src="@drawable/ephemeral_messages"
android:layout_height="wrap_content" android:visibility="@{viewModel.ephemeralEnabled ? View.VISIBLE : View.GONE, default=gone}"
android:adjustViewBounds="true" app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginRight="5dp" app:layout_constraintEnd_toStartOf="@id/forward" />
android:src="@drawable/ephemeral_messages"/>
</LinearLayout>
</RelativeLayout>
<ImageView <ImageView
android:visibility="@{forwardPending ? View.VISIBLE : View.GONE, default=gone}" android:id="@+id/muted"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="5dp"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_muted_chat_room"
android:src="@drawable/chat_room_menu_mute_notifications"
android:visibility="@{viewModel.notificationsMuted ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/endBarrier3" />
<ImageView
android:id="@+id/forward"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:padding="10dp" android:layout_marginEnd="5dp"
android:layout_marginLeft="10dp" android:background="@drawable/background_round_secondary_color"
android:src="@drawable/forward_message_default"
android:contentDescription="@string/content_description_forward_message" android:contentDescription="@string/content_description_forward_message"
android:background="@drawable/background_round_secondary_color" /> android:padding="10dp"
android:src="@drawable/forward_message_default"
android:visibility="@{forwardPending ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout> <androidx.constraintlayout.widget.Barrier
android:id="@+id/endBarrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="left"
app:constraint_referenced_ids="ephemeral, muted, forward"/>
<androidx.constraintlayout.widget.Barrier
android:id="@+id/endBarrier2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="left"
app:constraint_referenced_ids="select, forward"/>
<androidx.constraintlayout.widget.Barrier
android:id="@+id/endBarrier3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="left"
app:constraint_referenced_ids="ephemeral, forward"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>