linphone-android/app/src/main/res/layout/chat_bubble_incoming.xml
2024-07-15 16:10:39 +02:00

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 &amp;&amp; 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 &amp;&amp; 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>