mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 10:49:06 +01:00
[android] highlight selected conversation messages in UI
This commit is contained in:
@@ -20,6 +20,7 @@ import static org.briarproject.briar.android.util.UiUtils.formatDate;
|
||||
abstract class ConversationItemViewHolder extends ViewHolder {
|
||||
|
||||
protected final ConversationListener listener;
|
||||
private final View root;
|
||||
protected final ConstraintLayout layout;
|
||||
@Nullable
|
||||
private final OutItemViewHolder outViewHolder;
|
||||
@@ -33,6 +34,7 @@ abstract class ConversationItemViewHolder extends ViewHolder {
|
||||
super(v);
|
||||
this.listener = listener;
|
||||
this.outViewHolder = isIncoming ? null : new OutItemViewHolder(v);
|
||||
root = v;
|
||||
layout = v.findViewById(R.id.layout);
|
||||
text = v.findViewById(R.id.text);
|
||||
time = v.findViewById(R.id.time);
|
||||
@@ -41,6 +43,7 @@ abstract class ConversationItemViewHolder extends ViewHolder {
|
||||
@CallSuper
|
||||
void bind(ConversationItem item, boolean selected) {
|
||||
itemKey = item.getKey();
|
||||
root.setActivated(selected);
|
||||
|
||||
if (item.getText() != null) {
|
||||
text.setText(trim(item.getText()));
|
||||
|
||||
@@ -44,8 +44,8 @@ class ConversationMessageViewHolder extends ConversationItemViewHolder {
|
||||
timeColorBubble = getColor(v.getContext(), R.color.briar_white);
|
||||
|
||||
// clone constraint sets from layout files
|
||||
textConstraints
|
||||
.clone(v.getContext(), R.layout.list_item_conversation_msg_in);
|
||||
textConstraints.clone(v.getContext(),
|
||||
R.layout.list_item_conversation_msg_in_content);
|
||||
imageConstraints.clone(v.getContext(),
|
||||
R.layout.list_item_conversation_msg_image);
|
||||
imageTextConstraints.clone(v.getContext(),
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@color/msg_selected_background" android:state_activated="true" />
|
||||
</selector>
|
||||
@@ -1,73 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/layout"
|
||||
android:layout_width="wrap_content"
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginTop="@dimen/message_bubble_margin"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginBottom="@dimen/message_bubble_margin"
|
||||
android:background="@drawable/msg_in"
|
||||
android:elevation="@dimen/message_bubble_elevation">
|
||||
android:background="@drawable/list_item_background_selectable">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/imageList"
|
||||
android:layout_width="@dimen/message_bubble_image_default"
|
||||
android:layout_height="@dimen/message_bubble_image_default"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone"
|
||||
app:layoutManager="androidx.recyclerview.widget.StaggeredGridLayoutManager"
|
||||
app:layout_constraintBottom_toTopOf="@+id/text"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:spanCount="2"
|
||||
tools:ignore="ContentDescription"
|
||||
tools:listitem="@layout/list_item_image" />
|
||||
<!--
|
||||
We need to wrap the actual layout, because
|
||||
* we want to clone the ConstraintLayout's constraints in the ViewHolder
|
||||
* we want to have a selectable frame around the message bubble
|
||||
-->
|
||||
<include layout="@layout/list_item_conversation_msg_in_content" />
|
||||
|
||||
<com.vanniktech.emoji.EmojiTextView
|
||||
android:id="@+id/text"
|
||||
style="@style/TextMessage"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/message_bubble_padding_sides_inner"
|
||||
android:layout_marginTop="@dimen/message_bubble_padding_top_inner"
|
||||
android:layout_marginRight="@dimen/message_bubble_padding_sides_inner"
|
||||
android:layout_marginBottom="@dimen/message_bubble_padding_bottom_inner"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintBottom_toTopOf="@+id/statusLayout"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.0"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/imageList"
|
||||
tools:text="The text of a message which can sometimes be a bit longer as well" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/statusLayout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/message_bubble_padding_sides_inner"
|
||||
android:layout_marginRight="@dimen/message_bubble_padding_sides_inner"
|
||||
android:layout_marginBottom="@dimen/message_bubble_padding_bottom_inner"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="1.0"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/text">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/time"
|
||||
style="@style/TextMessage.Timestamp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Dec 24, 13:37" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</FrameLayout>
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/layout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginTop="@dimen/message_bubble_margin"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginBottom="@dimen/message_bubble_margin"
|
||||
android:background="@drawable/msg_in"
|
||||
android:elevation="@dimen/message_bubble_elevation">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/imageList"
|
||||
android:layout_width="@dimen/message_bubble_image_default"
|
||||
android:layout_height="@dimen/message_bubble_image_default"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone"
|
||||
app:layoutManager="androidx.recyclerview.widget.StaggeredGridLayoutManager"
|
||||
app:layout_constraintBottom_toTopOf="@+id/text"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:spanCount="2"
|
||||
tools:ignore="ContentDescription"
|
||||
tools:listitem="@layout/list_item_image" />
|
||||
|
||||
<com.vanniktech.emoji.EmojiTextView
|
||||
android:id="@+id/text"
|
||||
style="@style/TextMessage"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/message_bubble_padding_sides_inner"
|
||||
android:layout_marginTop="@dimen/message_bubble_padding_top_inner"
|
||||
android:layout_marginRight="@dimen/message_bubble_padding_sides_inner"
|
||||
android:layout_marginBottom="@dimen/message_bubble_padding_bottom_inner"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintBottom_toTopOf="@+id/statusLayout"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.0"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/imageList"
|
||||
tools:text="The text of a message which can sometimes be a bit longer as well" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/statusLayout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/message_bubble_padding_sides_inner"
|
||||
android:layout_marginRight="@dimen/message_bubble_padding_sides_inner"
|
||||
android:layout_marginBottom="@dimen/message_bubble_padding_bottom_inner"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="1.0"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/text">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/time"
|
||||
style="@style/TextMessage.Timestamp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Dec 24, 13:37" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,9 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- This is needed to right-align message bubble in RecyclerView -->
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/list_item_background_selectable">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/layout"
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/message_bubble_margin"
|
||||
android:orientation="vertical">
|
||||
android:background="@drawable/list_item_background_selectable"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="@dimen/message_bubble_margin">
|
||||
|
||||
<com.vanniktech.emoji.EmojiTextView
|
||||
android:id="@+id/msgText"
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/message_bubble_margin"
|
||||
android:orientation="vertical">
|
||||
android:background="@drawable/list_item_background_selectable"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="@dimen/message_bubble_margin">
|
||||
|
||||
<com.vanniktech.emoji.EmojiTextView
|
||||
android:id="@+id/msgText"
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/message_bubble_margin"
|
||||
android:orientation="vertical">
|
||||
android:background="@drawable/list_item_background_selectable"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="@dimen/message_bubble_margin">
|
||||
|
||||
<com.vanniktech.emoji.EmojiTextView
|
||||
android:id="@+id/msgText"
|
||||
@@ -19,7 +20,8 @@
|
||||
android:background="@drawable/msg_in_top"
|
||||
android:elevation="@dimen/message_bubble_elevation"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
tools:text="Short message" />
|
||||
tools:text="Short message"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/layout"
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
<color name="msg_stroke_dark">#333333</color>
|
||||
<color name="msg_stroke">@color/msg_stroke_light</color>
|
||||
<color name="msg_status_bubble_background">#66000000</color>
|
||||
<color name="msg_selected_background">@color/briar_green</color>
|
||||
|
||||
<!-- text colors -->
|
||||
<color name="briar_text_link">@color/briar_blue_light</color>
|
||||
|
||||
Reference in New Issue
Block a user