Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fed87296 authored by Mady Mellor's avatar Mady Mellor
Browse files

Fix the pointer position when displayed in RTL

When displaying in RTL, the pointer translates from the opposite
side of the screen than the code assumes. This CL changes the math
for the pointer position when displaying in RTL.

Test: manual - test landscape / portrait on tablet / phone in LTR
               and RTL: have a couple of bubbles, expand the stack
               and select each bubble ensuring that the pointer is
               centered on the selection.
Bug: 230579507
Bug: 233950592
Change-Id: I71a6f64a43c1b7bb5e0a30773d4cc5ae55c63b6a
Merged-In: I71a6f64a43c1b7bb5e0a30773d4cc5ae55c63b6a
parent 43181611
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -706,6 +706,8 @@ public class BubbleExpandedView extends LinearLayout {
     * @param animate whether the pointer should animate to this position.
     */
    public void setPointerPosition(float bubblePosition, boolean onLeft, boolean animate) {
        final boolean isRtl = mContext.getResources().getConfiguration().getLayoutDirection()
                == LAYOUT_DIRECTION_RTL;
        // Pointer gets drawn in the padding
        final boolean showVertically = mPositioner.showBubblesVertically();
        final float paddingLeft = (showVertically && onLeft)
@@ -732,12 +734,22 @@ public class BubbleExpandedView extends LinearLayout {
            float pointerX;
            if (showVertically) {
                pointerY = bubbleCenter - (mPointerWidth / 2f);
                if (!isRtl) {
                    pointerX = onLeft
                            ? -mPointerHeight + mPointerOverlap
                            : getWidth() - mPaddingRight - mPointerOverlap;
                } else {
                    pointerX = onLeft
                            ? -(getWidth() - mPaddingLeft - mPointerOverlap)
                            : mPointerHeight - mPointerOverlap;
                }
            } else {
                pointerY = mPointerOverlap;
                if (!isRtl) {
                    pointerX = bubbleCenter - (mPointerWidth / 2f);
                } else {
                    pointerX = -(getWidth() - mPaddingLeft - bubbleCenter) + (mPointerWidth / 2f);
                }
            }
            if (animate) {
                mPointerView.animate().translationX(pointerX).translationY(pointerY).start();