From bec9b3d88c81324e5a6a1179d7c348b84a8b9cc9 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 18 Feb 2022 12:13:57 -0500 Subject: [PATCH] Update reaction bar positioning to sit above short messages. --- .../ConversationReactionOverlay.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java index e637ecd74f..a22dd2dd9f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java @@ -273,16 +273,16 @@ public final class ConversationReactionOverlay extends FrameLayout { endY = 0; } float contextMenuTop = endY + conversationItemSnapshot.getHeight(); - reactionBarBackgroundY = getReactionBarOffsetForTouch(lastSeenDownPoint, contextMenuTop, reactionBarOffset, reactionBarHeight, reactionBarTopPadding); + reactionBarBackgroundY = getReactionBarOffsetForTouch(lastSeenDownPoint, contextMenuTop, menuPadding, reactionBarOffset, reactionBarHeight, reactionBarTopPadding, endY); - if (reactionBarBackgroundY < reactionBarTopPadding) { + if (reactionBarBackgroundY <= reactionBarTopPadding) { endY = backgroundView.getHeight() + menuPadding + reactionBarTopPadding; } } else { endY = overlayHeight - contextMenu.getMaxHeight() - menuPadding - conversationItemSnapshot.getHeight(); float contextMenuTop = endY + conversationItemSnapshot.getHeight(); - reactionBarBackgroundY = getReactionBarOffsetForTouch(lastSeenDownPoint, contextMenuTop, reactionBarOffset, reactionBarHeight, reactionBarTopPadding); + reactionBarBackgroundY = getReactionBarOffsetForTouch(lastSeenDownPoint, contextMenuTop, menuPadding, reactionBarOffset, reactionBarHeight, reactionBarTopPadding, endY); } endApparentTop = endY; @@ -294,7 +294,7 @@ public final class ConversationReactionOverlay extends FrameLayout { endY = spaceForReactionBar - Util.halfOffsetFromScale(conversationItemSnapshot.getHeight(), endScale); float contextMenuTop = endY + (conversationItemSnapshot.getHeight() * endScale); - reactionBarBackgroundY = getReactionBarOffsetForTouch(lastSeenDownPoint, contextMenuTop, reactionBarOffset, reactionBarHeight, reactionBarTopPadding); + reactionBarBackgroundY = getReactionBarOffsetForTouch(lastSeenDownPoint, contextMenuTop, menuPadding, reactionBarOffset, reactionBarHeight, reactionBarTopPadding, endY); endApparentTop = endY + Util.halfOffsetFromScale(conversationItemSnapshot.getHeight(), endScale); } else { contextMenu.setHeight(contextMenu.getMaxHeight() / 2); @@ -377,8 +377,25 @@ public final class ConversationReactionOverlay extends FrameLayout { .setDuration(revealDuration); } - private float getReactionBarOffsetForTouch(@NonNull PointF lastSeenDownPoint, float contextMenuTop, float reactionBarOffset, int reactionBarHeight, float reactionBarTopPadding) { - return Math.max(Math.min(lastSeenDownPoint.y - statusBarHeight, contextMenuTop) - reactionBarOffset - reactionBarHeight, reactionBarTopPadding); + private float getReactionBarOffsetForTouch(@NonNull PointF touchPoint, + float contextMenuTop, + float contextMenuPadding, + float reactionBarOffset, + int reactionBarHeight, + float spaceNeededBetweenTopOfScreenAndTopOfReactionBar, + float messageTop) + { + float adjustedTouchY = touchPoint.y - statusBarHeight; + float reactionStartingPoint = Math.min(adjustedTouchY, contextMenuTop); + + float spaceBetweenTopOfMessageAndTopOfContextMenu = Math.abs(messageTop - contextMenuTop); + + if (spaceBetweenTopOfMessageAndTopOfContextMenu < DimensionUnit.DP.toPixels(150)) { + float offsetToMakeReactionBarOffsetMatchMenuPadding = reactionBarOffset - contextMenuPadding; + reactionStartingPoint = messageTop + offsetToMakeReactionBarOffsetMatchMenuPadding; + } + + return Math.max(reactionStartingPoint - reactionBarOffset - reactionBarHeight, spaceNeededBetweenTopOfScreenAndTopOfReactionBar); } private void updateToolbarShade(@NonNull Activity activity) {