diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java index a089585a5a004..b8bf1a8e497e7 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java @@ -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); - pointerX = onLeft - ? -mPointerHeight + mPointerOverlap - : getWidth() - mPaddingRight - mPointerOverlap; + if (!isRtl) { + pointerX = onLeft + ? -mPointerHeight + mPointerOverlap + : getWidth() - mPaddingRight - mPointerOverlap; + } else { + pointerX = onLeft + ? -(getWidth() - mPaddingLeft - mPointerOverlap) + : mPointerHeight - mPointerOverlap; + } } else { pointerY = mPointerOverlap; - pointerX = bubbleCenter - (mPointerWidth / 2f); + if (!isRtl) { + pointerX = bubbleCenter - (mPointerWidth / 2f); + } else { + pointerX = -(getWidth() - mPaddingLeft - bubbleCenter) + (mPointerWidth / 2f); + } } if (animate) { mPointerView.animate().translationX(pointerX).translationY(pointerY).start();