mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-02-07 14:58:24 +00:00
281 lines
No EOL
14 KiB
XML
281 lines
No EOL
14 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
xmlns:bind="http://schemas.android.com/tools">
|
|
|
|
<data>
|
|
<import type="android.view.View" />
|
|
<import type="com.google.android.flexbox.JustifyContent" />
|
|
<import type="org.linphone.core.ChatMessage.State" />
|
|
<variable
|
|
name="onLongClickListener"
|
|
type="View.OnLongClickListener" />
|
|
<variable
|
|
name="showDeliveryInfoClickListener"
|
|
type="View.OnClickListener" />
|
|
<variable
|
|
name="scrollToRepliedMessageClickListener"
|
|
type="View.OnClickListener" />
|
|
<variable
|
|
name="showReactionInfoClickListener"
|
|
type="View.OnClickListener" />
|
|
<variable
|
|
name="model"
|
|
type="org.linphone.ui.main.chat.model.MessageModel" />
|
|
<variable
|
|
name="inflatedVisibility"
|
|
type="Integer" />
|
|
</data>
|
|
|
|
<androidx.constraintlayout.widget.ConstraintLayout
|
|
android:clickable="false"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginStart="32dp"
|
|
android:layout_marginEnd="8dp"
|
|
android:layout_marginBottom="@{model.groupedWithNextMessage ? @dimen/chat_bubble_grouped_bottom_margin : @dimen/chat_bubble_bottom_margin, default=@dimen/chat_bubble_bottom_margin}"
|
|
android:layout_marginTop="@{model.groupedWithPreviousMessage ? @dimen/chat_bubble_grouped_top_margin : @dimen/chat_bubble_top_margin, default=@dimen/chat_bubble_top_margin}"
|
|
android:visibility="@{inflatedVisibility == View.VISIBLE ? View.VISIBLE : View.GONE}"
|
|
inflatedLifecycleOwner="@{true}">
|
|
|
|
<androidx.constraintlayout.widget.Group
|
|
android:id="@+id/reply_group"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:visibility="@{model.isReply ? View.VISIBLE : View.GONE, default=gone}"
|
|
app:constraint_referenced_ids="reply, reply_background, reply_name, reply_icon"/>
|
|
|
|
<androidx.appcompat.widget.AppCompatTextView
|
|
style="@style/default_text_style_300"
|
|
android:id="@+id/reply_name"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginEnd="8dp"
|
|
android:text="@{model.replyTo, default=`John Doe`}"
|
|
android:textSize="12sp"
|
|
android:textColor="?attr/color_main2_500"
|
|
app:drawableTint="?attr/color_main2_500"
|
|
app:layout_constraintEnd_toEndOf="@id/reply"
|
|
app:layout_constraintTop_toTopOf="parent"
|
|
app:layout_constraintBottom_toTopOf="@id/reply" />
|
|
|
|
<ImageView
|
|
android:id="@+id/reply_icon"
|
|
android:layout_width="@dimen/small_icon_size"
|
|
android:layout_height="@dimen/small_icon_size"
|
|
android:layout_marginEnd="5dp"
|
|
android:src="@drawable/reply"
|
|
android:contentDescription="@string/content_description_chat_bubble_reply"
|
|
app:layout_constraintEnd_toStartOf="@id/reply_name"
|
|
app:layout_constraintTop_toTopOf="@id/reply_name"
|
|
app:layout_constraintBottom_toBottomOf="@id/reply_name" />
|
|
|
|
<View
|
|
android:id="@+id/reply_background"
|
|
android:layout_width="0dp"
|
|
android:layout_height="0dp"
|
|
android:layout_marginBottom="-20dp"
|
|
android:background="@drawable/shape_chat_bubble_reply"
|
|
app:layout_constraintTop_toTopOf="@id/reply"
|
|
app:layout_constraintStart_toStartOf="@id/reply"
|
|
app:layout_constraintEnd_toEndOf="@id/reply"
|
|
app:layout_constraintBottom_toTopOf="@id/bubble"/>
|
|
|
|
<androidx.appcompat.widget.AppCompatTextView
|
|
style="@style/default_text_style"
|
|
android:onClick="@{scrollToRepliedMessageClickListener}"
|
|
android:id="@+id/reply"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginStart="32dp"
|
|
android:text="@{model.replyText, default=`Reply`}"
|
|
android:textColor="?attr/color_main2_500"
|
|
android:textSize="14sp"
|
|
android:maxLines="2"
|
|
android:ellipsize="end"
|
|
android:padding="10dp"
|
|
app:layout_constraintHorizontal_bias="0"
|
|
app:layout_constraintWidth_max="@dimen/chat_bubble_max_reply_width"
|
|
app:layout_constraintEnd_toEndOf="@id/bubble"
|
|
app:layout_constraintTop_toBottomOf="@id/reply_name" />
|
|
|
|
<androidx.appcompat.widget.AppCompatTextView
|
|
style="@style/default_text_style_300"
|
|
android:id="@+id/forward_label"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginEnd="8dp"
|
|
android:text="@string/message_forwarded_label"
|
|
android:textSize="12sp"
|
|
android:textColor="?attr/color_main2_500"
|
|
android:visibility="@{model.isForward ? View.VISIBLE : View.GONE, default=gone}"
|
|
app:drawableTint="?attr/color_main2_500"
|
|
app:layout_constraintEnd_toEndOf="@id/bubble"
|
|
app:layout_constraintTop_toTopOf="parent"
|
|
app:layout_constraintBottom_toTopOf="@id/bubble" />
|
|
|
|
<ImageView
|
|
android:id="@+id/forward_icon"
|
|
android:layout_width="@dimen/small_icon_size"
|
|
android:layout_height="@dimen/small_icon_size"
|
|
android:layout_marginEnd="5dp"
|
|
android:src="@drawable/forward"
|
|
android:contentDescription="@string/content_description_chat_bubble_forward"
|
|
android:visibility="@{model.isForward ? View.VISIBLE : View.GONE, default=gone}"
|
|
app:layout_constraintEnd_toStartOf="@id/forward_label"
|
|
app:layout_constraintTop_toTopOf="@id/forward_label"
|
|
app:layout_constraintBottom_toBottomOf="@id/forward_label" />
|
|
|
|
<LinearLayout
|
|
android:id="@+id/bubble"
|
|
android:onLongClick="@{onLongClickListener}"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:padding="10dp"
|
|
android:orientation="vertical"
|
|
android:gravity="end"
|
|
android:selected="@{model.isSelected}"
|
|
android:background="@{model.groupedWithNextMessage ? @drawable/chat_bubble_outgoing_full_background : @drawable/chat_bubble_outgoing_last_background, default=@drawable/chat_bubble_outgoing_last_background}"
|
|
app:layout_constraintHorizontal_bias="1"
|
|
app:layout_constrainedWidth="true"
|
|
app:layout_constraintStart_toStartOf="parent"
|
|
app:layout_constraintTop_toBottomOf="@id/reply"
|
|
app:layout_constraintEnd_toEndOf="parent">
|
|
|
|
<com.google.android.flexbox.FlexboxLayout
|
|
android:id="@+id/files_grid"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:onLongClick="@{onLongClickListener}"
|
|
android:visibility="@{model.filesList.size() >= 2 ? View.VISIBLE : View.GONE, default=gone}"
|
|
app:alignItems="center"
|
|
app:flexWrap="wrap"
|
|
app:justifyContent="@{model.outgoing ? JustifyContent.FLEX_END : JustifyContent.FLEX_START}"
|
|
entries="@{model.filesList}"
|
|
layout="@{@layout/chat_bubble_content_grid_cell}"
|
|
onLongClick="@{onLongClickListener}"/>
|
|
|
|
<ViewStub
|
|
android:id="@+id/single_media"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout="@layout/chat_bubble_single_media_content"
|
|
android:visibility="@{model.filesList.size() == 1 && model.firstFileModel.isMedia ? View.VISIBLE : View.GONE, default=gone}"
|
|
bind:inflatedVisibility="@{model.filesList.size() == 1 && model.firstFileModel.isMedia? View.VISIBLE : View.GONE}"
|
|
bind:model="@{model.firstFileModel}"
|
|
bind:onLongClickListener="@{onLongClickListener}"/>
|
|
|
|
<ViewStub
|
|
android:id="@+id/single_file"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout="@layout/chat_bubble_single_file_content"
|
|
android:visibility="@{model.filesList.size() == 1 && !model.firstFileModel.isMedia ? View.VISIBLE : View.GONE, default=gone}"
|
|
bind:inflatedVisibility="@{model.filesList.size() == 1 && !model.firstFileModel.isMedia? View.VISIBLE : View.GONE}"
|
|
bind:model="@{model.firstFileModel}"
|
|
bind:onLongClickListener="@{onLongClickListener}"/>
|
|
|
|
<ViewStub
|
|
android:id="@+id/meeting_info"
|
|
android:layout_width="@dimen/chat_bubble_meeting_invite_width"
|
|
android:layout_height="wrap_content"
|
|
android:layout="@layout/chat_bubble_meeting_invite_content"
|
|
android:visibility="@{model.meetingFound ? View.VISIBLE : View.GONE, default=gone}"
|
|
bind:inflatedVisibility="@{model.meetingFound ? View.VISIBLE : View.GONE}"
|
|
bind:model="@{model}"
|
|
bind:onLongClickListener="@{onLongClickListener}"/>
|
|
|
|
<ViewStub
|
|
android:id="@+id/voice_record"
|
|
android:layout_width="@dimen/chat_bubble_voice_record_width"
|
|
android:layout_height="wrap_content"
|
|
android:layout="@layout/chat_bubble_voice_record_content"
|
|
android:visibility="@{model.isVoiceRecord ? View.VISIBLE : View.GONE, default=gone}"
|
|
bind:inflatedVisibility="@{model.isVoiceRecord ? View.VISIBLE : View.GONE}"
|
|
bind:model="@{model}"
|
|
bind:onLongClickListener="@{onLongClickListener}" />
|
|
|
|
<org.linphone.ui.main.chat.view.ChatBubbleTextView
|
|
style="@style/default_text_style"
|
|
android:id="@+id/text_content"
|
|
android:onLongClick="@{onLongClickListener}"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="@{model.text, default=`Lorem ipsum dolor sit amet`}"
|
|
android:textSize="14sp"
|
|
android:textColor="?attr/color_main2_800"
|
|
android:gravity="center_vertical|start"
|
|
android:visibility="@{model.text.length() > 0 ? View.VISIBLE : View.GONE}"/>
|
|
|
|
<LinearLayout
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:gravity="center_vertical"
|
|
android:orientation="horizontal">
|
|
|
|
<androidx.appcompat.widget.AppCompatTextView
|
|
style="@style/default_text_style_300"
|
|
android:id="@+id/ephemeral_timer"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout_gravity="bottom"
|
|
android:text="@{model.ephemeralLifetime, default=`00:00`}"
|
|
android:textSize="12sp"
|
|
android:visibility="@{model.isEphemeral ? View.VISIBLE : View.GONE, default=gone}"/>
|
|
|
|
<ImageView
|
|
style="@style/default_text_style_300"
|
|
android:id="@+id/countdown_clock"
|
|
android:layout_width="@dimen/small_icon_size"
|
|
android:layout_height="match_parent"
|
|
android:layout_marginStart="2dp"
|
|
android:paddingTop="7dp"
|
|
android:layout_gravity="bottom"
|
|
android:contentDescription="@null"
|
|
android:src="@drawable/clock_countdown"
|
|
app:tint="?attr/color_main2_600"
|
|
android:visibility="@{model.isEphemeral ? View.VISIBLE : View.GONE, default=gone}" />
|
|
|
|
<androidx.appcompat.widget.AppCompatTextView
|
|
style="@style/default_text_style_300"
|
|
android:id="@+id/date_time"
|
|
android:onClick="@{showDeliveryInfoClickListener}"
|
|
android:onLongClick="@{onLongClickListener}"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginStart="5dp"
|
|
android:text="@{model.time, default=`13:40`}"
|
|
android:textSize="12sp" />
|
|
|
|
<ImageView
|
|
style="@style/default_text_style_300"
|
|
android:id="@+id/delivery_status"
|
|
android:onClick="@{showDeliveryInfoClickListener}"
|
|
android:onLongClick="@{onLongClickListener}"
|
|
android:layout_width="@dimen/small_icon_size"
|
|
android:layout_height="match_parent"
|
|
android:layout_marginStart="5dp"
|
|
android:paddingTop="2dp"
|
|
android:src="@{model.statusIcon, default=@drawable/checks}"
|
|
android:contentDescription="@string/content_description_chat_bubble_delivery_status"
|
|
app:tint="?attr/color_main1_500" />
|
|
|
|
</LinearLayout>
|
|
|
|
</LinearLayout>
|
|
|
|
<androidx.appcompat.widget.AppCompatTextView
|
|
style="@style/message_reaction_style"
|
|
android:id="@+id/reactions"
|
|
android:onClick="@{showReactionInfoClickListener}"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:background="@drawable/shape_chat_bubble_outgoing_reactions_background"
|
|
android:text="@{model.reactions, default=@string/emoji_love}"
|
|
android:visibility="@{model.reactions.length() > 0 ? View.VISIBLE : View.GONE}"
|
|
app:layout_constraintEnd_toEndOf="@id/bubble"
|
|
app:layout_constraintTop_toBottomOf="@id/bubble" />
|
|
|
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
|
|
</layout> |