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 bf8406c68a894..1b75d8bdb3cb4 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 @@ -908,6 +908,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) @@ -932,12 +934,23 @@ public class BubbleExpandedView extends LinearLayout { updatePointerView(); if (showVertically) { mPointerPos.y = bubbleCenter - (mPointerWidth / 2f); - mPointerPos.x = onLeft - ? -mPointerHeight + mPointerOverlap - : getWidth() - mPaddingRight - mPointerOverlap; + if (!isRtl) { + mPointerPos.x = onLeft + ? -mPointerHeight + mPointerOverlap + : getWidth() - mPaddingRight - mPointerOverlap; + } else { + mPointerPos.x = onLeft + ? -(getWidth() - mPaddingLeft - mPointerOverlap) + : mPointerHeight - mPointerOverlap; + } } else { mPointerPos.y = mPointerOverlap; - mPointerPos.x = bubbleCenter - (mPointerWidth / 2f); + if (!isRtl) { + mPointerPos.x = bubbleCenter - (mPointerWidth / 2f); + } else { + mPointerPos.x = -(getWidth() - mPaddingLeft - bubbleCenter) + + (mPointerWidth / 2f); + } } if (animate) { mPointerView.animate().translationX(mPointerPos.x).translationY(