Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,

// setLayerType() is needed to allow larger items (long texts in our case)
// with hardware layers, drawing may result in errors as "OpenGLRenderer: Path too large to be rendered into a texture"
// On foldable devices with large screens, software layer can exceed memory limits (~11MB).
// To prevent this, message bubble width is constrained via maxWidth in layout files.
list.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

return view;
Expand Down
29 changes: 19 additions & 10 deletions src/main/res/layout/conversation_item_received.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,21 @@
android:id="@+id/reply_icon"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignStart="@id/body_bubble"
android:layout_alignTop="@id/body_bubble"
android:layout_alignBottom="@id/body_bubble"
android:layout_alignStart="@id/body_bubble_wrapper"
android:layout_alignTop="@id/body_bubble_wrapper"
android:layout_alignBottom="@id/body_bubble_wrapper"
android:alpha="0"
app:srcCompat="?menu_reply_icon"
android:tint="?icon_tint"
android:layout_alignLeft="@id/body_bubble" />
android:layout_alignLeft="@id/body_bubble_wrapper" />

<FrameLayout
android:id="@+id/contact_photo_container"
android:layout_width="36dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignBottom="@id/body_bubble">
android:layout_alignBottom="@id/body_bubble_wrapper">

<org.thoughtcrime.securesms.components.AvatarImageView
android:id="@+id/contact_photo"
Expand All @@ -65,16 +65,21 @@

</FrameLayout>

<LinearLayout
android:id="@+id/body_bubble"
<FrameLayout
android:id="@+id/body_bubble_wrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/message_bubble_edge_margin"
android:layout_marginEnd="@dimen/message_bubble_edge_margin"
android:layout_marginLeft="6dp"
android:layout_marginStart="6dp"
android:layout_toRightOf="@id/contact_photo_container"
android:layout_toEndOf="@id/contact_photo_container"
android:layout_toEndOf="@id/contact_photo_container">

<LinearLayout
android:id="@+id/body_bubble"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:clipToPadding="false"
android:clipChildren="false"
Expand Down Expand Up @@ -112,6 +117,7 @@
android:id="@+id/quote_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="@dimen/message_bubble_max_width"
android:layout_marginTop="@dimen/message_bubble_top_padding"
android:layout_marginStart="6dp"
android:layout_marginEnd="6dp"
Expand Down Expand Up @@ -186,6 +192,7 @@
android:id="@+id/conversation_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="@dimen/message_bubble_max_width"
android:layout_marginBottom="@dimen/message_bubble_collapsed_footer_padding"
android:layout_marginLeft="@dimen/message_bubble_horizontal_padding"
android:layout_marginRight="@dimen/message_bubble_horizontal_padding"
Expand Down Expand Up @@ -247,12 +254,14 @@

</LinearLayout>

</FrameLayout>

<org.thoughtcrime.securesms.reactions.ReactionsConversationView
android:id="@+id/reactions_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/body_bubble"
android:layout_alignStart="@id/body_bubble"
android:layout_below="@id/body_bubble_wrapper"
android:layout_alignStart="@id/body_bubble_wrapper"
android:layout_marginTop="-4dp"
android:orientation="horizontal"
app:message_type="incoming" />
Expand Down
29 changes: 19 additions & 10 deletions src/main/res/layout/conversation_item_sent.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,24 +40,29 @@
android:id="@+id/reply_icon"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignStart="@id/body_bubble"
android:layout_alignTop="@id/body_bubble"
android:layout_alignBottom="@id/body_bubble"
android:layout_alignStart="@id/body_bubble_wrapper"
android:layout_alignTop="@id/body_bubble_wrapper"
android:layout_alignBottom="@id/body_bubble_wrapper"
android:alpha="0"
app:srcCompat="?menu_reply_icon"
android:tint="?icon_tint"
android:layout_alignLeft="@id/body_bubble" />
android:layout_alignLeft="@id/body_bubble_wrapper" />

<LinearLayout
android:id="@+id/body_bubble"
<FrameLayout
android:id="@+id/body_bubble_wrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_toLeftOf="@+id/indicators_parent"
android:layout_toStartOf="@+id/indicators_parent"
android:layout_alignWithParentIfMissing="true"
android:layout_marginLeft="@dimen/message_bubble_edge_margin"
android:layout_marginStart="@dimen/message_bubble_edge_margin"
android:layout_marginStart="@dimen/message_bubble_edge_margin">

<LinearLayout
android:id="@+id/body_bubble"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:clipToPadding="false"
android:clipChildren="false"
android:background="@color/white"
Expand Down Expand Up @@ -94,6 +99,7 @@
android:id="@+id/quote_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="@dimen/message_bubble_max_width"
android:layout_marginTop="@dimen/message_bubble_top_padding"
android:layout_marginStart="6dp"
android:layout_marginEnd="6dp"
Expand Down Expand Up @@ -168,6 +174,7 @@
android:id="@+id/conversation_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="@dimen/message_bubble_max_width"
android:layout_marginLeft="@dimen/message_bubble_horizontal_padding"
android:layout_marginRight="@dimen/message_bubble_horizontal_padding"
android:layout_marginBottom="@dimen/message_bubble_collapsed_footer_padding"
Expand Down Expand Up @@ -228,12 +235,14 @@

</LinearLayout>

</FrameLayout>

<org.thoughtcrime.securesms.reactions.ReactionsConversationView
android:id="@+id/reactions_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/body_bubble"
android:layout_alignEnd="@id/body_bubble"
android:layout_below="@id/body_bubble_wrapper"
android:layout_alignEnd="@id/body_bubble_wrapper"
android:layout_marginTop="-4dp"
android:orientation="horizontal"
app:message_type="outgoing" />
Expand Down
5 changes: 5 additions & 0 deletions src/main/res/values-sw600dp/dimens.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Limit bubble width on large screens (tablets/foldable devices) to prevent software layer overflow -->
<dimen name="message_bubble_max_width">600dp</dimen>
</resources>
1 change: 1 addition & 0 deletions src/main/res/values/dimens.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
<dimen name="message_bubble_edge_margin">32dp</dimen>
<dimen name="message_bubble_bottom_padding">6dp</dimen>
<dimen name="message_bubble_showmore_padding">8dp</dimen>
<dimen name="message_bubble_max_width">512dp</dimen>
<dimen name="transparent_footer_padding">2dp</dimen>
<dimen name="media_bubble_remove_button_size">24dp</dimen>
<dimen name="media_bubble_edit_button_size">24dp</dimen>
Expand Down