From 7193252d7788dec876f1cbd92289c3890bc22327 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 15 Oct 2019 18:31:31 -0400 Subject: [PATCH] Fix TooltipPopup positioning. --- .../securesms/components/TooltipPopup.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/org/thoughtcrime/securesms/components/TooltipPopup.java b/src/org/thoughtcrime/securesms/components/TooltipPopup.java index 3381fe0cbf..1f7b532457 100644 --- a/src/org/thoughtcrime/securesms/components/TooltipPopup.java +++ b/src/org/thoughtcrime/securesms/components/TooltipPopup.java @@ -117,7 +117,7 @@ public class TooltipPopup extends PopupWindow { switch (position) { case POSITION_ABOVE: xoffset = 0; - yoffset = -(2 * anchor.getWidth() + tooltipSpacing); + yoffset = -(anchor.getHeight() + getContentView().getMeasuredHeight() + tooltipSpacing); onLayout(() -> setArrowHorizontalPosition(arrow, anchor)); break; case POSITION_BELOW: @@ -128,10 +128,12 @@ public class TooltipPopup extends PopupWindow { case POSITION_LEFT: xoffset = -getContentView().getMeasuredWidth() - tooltipSpacing; yoffset = -(getContentView().getMeasuredHeight()/2 + anchor.getHeight()/2); + onLayout(() -> setArrowVerticalPosition(arrow, anchor)); break; case POSITION_RIGHT: xoffset = anchor.getWidth() + tooltipSpacing; yoffset = -(getContentView().getMeasuredHeight()/2 + anchor.getHeight()/2); + onLayout(() -> setArrowVerticalPosition(arrow, anchor)); break; default: throw new AssertionError("Invalid tooltip position!"); @@ -154,7 +156,14 @@ public class TooltipPopup extends PopupWindow { int arrowCenterX = getAbsolutePosition(arrow)[0] + arrow.getWidth()/2; int anchorCenterX = getAbsolutePosition(anchor)[0] + anchor.getWidth()/2; - arrow.setX(anchorCenterX - arrowCenterX); + arrow.setTranslationX(anchorCenterX - arrowCenterX); + } + + private static void setArrowVerticalPosition(@NonNull View arrow, @NonNull View anchor) { + int arrowCenterY = getAbsolutePosition(arrow)[1] + arrow.getHeight()/2; + int anchorCenterY = getAbsolutePosition(anchor)[1] + anchor.getHeight()/2; + + arrow.setTranslationY(anchorCenterY - arrowCenterY); } private static int[] getAbsolutePosition(@NonNull View view) {