mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-22 14:18:15 +00:00
273 lines
No EOL
14 KiB
XML
273 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.ConsolidatedPresence" />
|
|
<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" />
|
|
</data>
|
|
|
|
<androidx.constraintlayout.widget.ConstraintLayout
|
|
android:onLongClick="@{onLongClickListener}"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginStart="8dp"
|
|
android:layout_marginEnd="32dp"
|
|
android:layout_marginTop="@{model.groupedWithPreviousMessage ? @dimen/chat_bubble_grouped_top_margin : @dimen/chat_bubble_top_margin, default=@dimen/chat_bubble_top_margin}">
|
|
|
|
<com.google.android.material.imageview.ShapeableImageView
|
|
style="@style/avatar_imageview"
|
|
android:id="@+id/avatar"
|
|
android:layout_width="@dimen/avatar_bubble_size"
|
|
android:layout_height="@dimen/avatar_bubble_size"
|
|
android:visibility="@{!model.isFromGroup ? View.GONE: model.groupedWithPreviousMessage ? View.INVISIBLE : View.VISIBLE}"
|
|
coilBubbleAvatar="@{model.avatarModel}"
|
|
app:layout_constraintStart_toStartOf="parent"
|
|
app:layout_constraintTop_toBottomOf="@id/name" />
|
|
|
|
<ImageView
|
|
android:id="@+id/presence_badge"
|
|
android:layout_width="@dimen/avatar_bubble_presence_badge_size"
|
|
android:layout_height="@dimen/avatar_bubble_presence_badge_size"
|
|
android:layout_marginEnd="1dp"
|
|
android:background="@drawable/led_background"
|
|
android:padding="1dp"
|
|
android:visibility="@{model.groupedWithPreviousMessage || !model.isFromGroup || model.avatarModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE}"
|
|
app:presenceIcon="@{model.avatarModel.presenceStatus}"
|
|
app:layout_constraintEnd_toEndOf="@id/avatar"
|
|
app:layout_constraintBottom_toBottomOf="@id/avatar"/>
|
|
|
|
<androidx.appcompat.widget.AppCompatTextView
|
|
style="@style/default_text_style_300"
|
|
android:id="@+id/name"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:textSize="12sp"
|
|
android:text="@{model.avatarModel.name, default=`John Doe`}"
|
|
android:textColor="?attr/color_main2_700"
|
|
android:maxLines="1"
|
|
android:ellipsize="end"
|
|
android:visibility="@{!model.isFromGroup ? View.GONE: model.groupedWithPreviousMessage ? View.GONE : View.VISIBLE}"
|
|
app:layout_constraintTop_toTopOf="parent"
|
|
app:layout_constraintBottom_toTopOf="@id/reply_icon"
|
|
app:layout_constraintStart_toStartOf="@id/bubble" />
|
|
|
|
<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_marginStart="5dp"
|
|
android:text="@{model.replyTo, default=`John Doe`}"
|
|
android:textSize="12sp"
|
|
android:textColor="?attr/color_main2_500"
|
|
app:drawableTint="?attr/color_main2_500"
|
|
app:layout_constraintStart_toEndOf="@id/reply_icon"
|
|
app:layout_constraintTop_toBottomOf="@id/name"
|
|
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_marginStart="8dp"
|
|
android:src="@drawable/reply"
|
|
app:layout_constraintStart_toStartOf="@id/reply"
|
|
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:id="@+id/reply"
|
|
android:onClick="@{scrollToRepliedMessageClickListener}"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginEnd="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_constraintStart_toStartOf="@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_marginStart="5dp"
|
|
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_constraintStart_toEndOf="@id/forward_icon"
|
|
app:layout_constraintTop_toBottomOf="@id/name"
|
|
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_marginStart="8dp"
|
|
android:src="@drawable/forward"
|
|
android:visibility="@{model.isForward ? View.VISIBLE : View.GONE, default=gone}"
|
|
app:layout_constraintStart_toStartOf="@id/bubble"
|
|
app:layout_constraintTop_toTopOf="@id/forward_label"
|
|
app:layout_constraintBottom_toBottomOf="@id/forward_label" />
|
|
|
|
<LinearLayout
|
|
android:id="@+id/bubble"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginStart="@{model.isFromGroup ? @dimen/chat_bubble_start_margin_when_avatar_displayed : @dimen/zero, default=@dimen/chat_bubble_start_margin_when_avatar_displayed}"
|
|
android:padding="10dp"
|
|
android:orientation="vertical"
|
|
android:selected="@{model.isSelected}"
|
|
android:background="@{model.groupedWithPreviousMessage ? @drawable/chat_bubble_incoming_full_background : @drawable/chat_bubble_incoming_first_background, default=@drawable/chat_bubble_incoming_first_background}"
|
|
app:layout_constraintHorizontal_bias="0"
|
|
app:layout_constraintWidth_max="@dimen/chat_bubble_max_width"
|
|
app:layout_constraintTop_toBottomOf="@id/reply"
|
|
app:layout_constraintStart_toEndOf="@id/avatar">
|
|
|
|
<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 || (model.filesList.size() >= 1 && model.firstImagePath.length() == 0) ? 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}"/>
|
|
|
|
<ImageView
|
|
android:id="@+id/single_image"
|
|
android:onClick="@{() -> model.firstImageClicked()}"
|
|
android:onLongClick="@{onLongClickListener}"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="@dimen/chat_bubble_big_image_max_size"
|
|
android:adjustViewBounds="true"
|
|
android:scaleType="fitCenter"
|
|
android:visibility="@{model.filesList.size() == 1 && model.firstImagePath.length() > 0 ? View.VISIBLE : View.GONE, default=gone}"
|
|
coilBubble="@{model.firstImagePath}"/>
|
|
|
|
<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}"/>
|
|
|
|
<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}" />
|
|
|
|
<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_700"
|
|
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:layout_marginTop="5dp"
|
|
android:gravity="center_vertical|start"
|
|
android:orientation="horizontal">
|
|
|
|
<androidx.appcompat.widget.AppCompatTextView
|
|
style="@style/default_text_style_300"
|
|
android:id="@+id/date_time"
|
|
android:onClick="@{showDeliveryInfoClickListener}"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="@{model.time, default=`13:40`}"
|
|
android:textSize="12sp"
|
|
android:visibility="@{!model.groupedWithNextMessage ? View.VISIBLE : View.GONE}"/>
|
|
|
|
<ImageView
|
|
style="@style/default_text_style_300"
|
|
android:id="@+id/delivery_status"
|
|
android:onClick="@{showDeliveryInfoClickListener}"
|
|
android:layout_width="@dimen/small_icon_size"
|
|
android:layout_height="@dimen/small_icon_size"
|
|
android:layout_marginStart="5dp"
|
|
android:layout_marginTop="2dp"
|
|
android:src="@{model.statusIcon, default=@drawable/checks}"
|
|
android:visibility="@{!model.groupedWithNextMessage ? View.VISIBLE : View.GONE}"
|
|
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_incoming_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> |