diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index d737002a8..0238f09ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -1476,6 +1476,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect focusedView); bodyBubble.setVisibility(View.INVISIBLE); + conversationItem.reactionsView.setVisibility(View.INVISIBLE); ViewUtil.hideKeyboard(requireContext(), conversationItem); @@ -1510,6 +1511,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect } bodyBubble.setVisibility(View.VISIBLE); + conversationItem.reactionsView.setVisibility(View.VISIBLE); if (showScrollButtons) { conversationViewModel.setShowScrollButtons(true); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index 06d036663..69e3adcbd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -242,6 +242,10 @@ public final class ConversationItem extends RelativeLayout implements BindableCo parent.invalidate(); } }); + + reactionsView.animate() + .scaleX(LONG_PRESS_SCALE_FACTOR) + .scaleY(LONG_PRESS_SCALE_FACTOR); } }; @@ -377,6 +381,9 @@ public final class ConversationItem extends RelativeLayout implements BindableCo bodyBubble.animate() .scaleX(1.0f) .scaleY(1.0f); + reactionsView.animate() + .scaleX(1.0f) + .scaleY(1.0f); break; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemSelection.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemSelection.kt index 0cf9cee40..8a19099a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemSelection.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemSelection.kt @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.conversation import android.graphics.Bitmap import android.graphics.Path -import android.view.View import android.view.ViewGroup import androidx.core.graphics.applyCanvas import androidx.core.graphics.createBitmap @@ -10,6 +9,7 @@ import androidx.core.graphics.withClip import androidx.core.graphics.withTranslation import androidx.core.view.children import androidx.recyclerview.widget.RecyclerView +import org.signal.core.util.DimensionUnit import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.util.hasNoBubble @@ -30,6 +30,7 @@ object ConversationItemSelection { list = list, videoBitmap = videoBitmap, drawConversationItem = !isOutgoing || hasNoBubble, + hasReaction = messageRecord.reactions.isNotEmpty(), ) } @@ -38,22 +39,21 @@ object ConversationItemSelection { list: RecyclerView, videoBitmap: Bitmap?, drawConversationItem: Boolean, + hasReaction: Boolean, ): Bitmap { - val initialReactionVisibility = conversationItem.reactionsView.visibility - if (initialReactionVisibility == View.VISIBLE) { - conversationItem.reactionsView.visibility = View.INVISIBLE - } + val bodyBubble = conversationItem.bodyBubble + val reactionsView = conversationItem.reactionsView - val originalScale = conversationItem.bodyBubble.scaleX - conversationItem.bodyBubble.scaleX = 1.0f - conversationItem.bodyBubble.scaleY = 1.0f + val originalScale = bodyBubble.scaleX + bodyBubble.scaleX = 1.0f + bodyBubble.scaleY = 1.0f val projections = conversationItem.getColorizerProjections(list) val path = Path() - val xTranslation = -conversationItem.x - conversationItem.bodyBubble.x - val yTranslation = -conversationItem.y - conversationItem.bodyBubble.y + val xTranslation = -conversationItem.x - bodyBubble.x + val yTranslation = -conversationItem.y - bodyBubble.y val mp4Projection = conversationItem.getGiphyMp4PlayableProjection(list) var scaledVideoBitmap = videoBitmap @@ -80,9 +80,13 @@ object ConversationItemSelection { conversationItem.destroyAllDrawingCaches() - return createBitmap(conversationItem.bodyBubble.width, conversationItem.bodyBubble.height).applyCanvas { + var bitmapHeight = bodyBubble.height + if (hasReaction) { + bitmapHeight += (reactionsView.height - DimensionUnit.DP.toPixels(4f)).toInt() + } + return createBitmap(bodyBubble.width, bitmapHeight).applyCanvas { if (drawConversationItem) { - conversationItem.bodyBubble.draw(this) + bodyBubble.draw(this) } withClip(path) { @@ -94,11 +98,17 @@ object ConversationItemSelection { } } } + + withTranslation( + x = reactionsView.x - bodyBubble.x, + y = reactionsView.y - bodyBubble.y + ) { + reactionsView.draw(this) + } }.also { mp4Projection.release() - conversationItem.reactionsView.visibility = initialReactionVisibility - conversationItem.bodyBubble.scaleX = originalScale - conversationItem.bodyBubble.scaleY = originalScale + bodyBubble.scaleX = originalScale + bodyBubble.scaleY = originalScale } } }