diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 35c257f53e..1f1d57adc9 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -141,6 +141,7 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, private final CheckLongPressHelper mLongPressHelper; private final boolean mLayoutHorizontal; + private final boolean mIsRtl; private final int mIconSize; @ViewDebug.ExportedProperty(category = "launcher") @@ -185,6 +186,8 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BubbleTextView, defStyle, 0); mLayoutHorizontal = a.getBoolean(R.styleable.BubbleTextView_layoutHorizontal, false); + mIsRtl = (getResources().getConfiguration().getLayoutDirection() + == View.LAYOUT_DIRECTION_RTL); DeviceProfile grid = mActivity.getDeviceProfile(); mDisplay = a.getInteger(R.styleable.BubbleTextView_iconDisplay, DISPLAY_WORKSPACE); @@ -581,19 +584,29 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, return mDotInfo != null; } + /** + * Get the icon bounds on the view depending on the layout type. + */ public void getIconBounds(Rect outBounds) { - getIconBounds(this, outBounds, mIconSize); + getIconBounds(mIconSize, outBounds); } - public static void getIconBounds(View iconView, Rect outBounds, int iconSize) { - int top = iconView.getPaddingTop(); - int left = (iconView.getWidth() - iconSize) / 2; - int right = left + iconSize; - int bottom = top + iconSize; - outBounds.set(left, top, right, bottom); + /** + * Get the icon bounds on the view depending on the layout type. + */ + public void getIconBounds(int iconSize, Rect outBounds) { + Utilities.setRectToViewCenter(this, iconSize, outBounds); + if (mLayoutHorizontal) { + if (mIsRtl) { + outBounds.offsetTo(getWidth() - iconSize - getPaddingRight(), outBounds.top); + } else { + outBounds.offsetTo(getPaddingLeft(), outBounds.top); + } + } else { + outBounds.offsetTo(outBounds.left, getPaddingTop()); + } } - /** * Sets whether to vertically center the content. */ @@ -980,8 +993,7 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, @Override public void getWorkspaceVisualDragBounds(Rect bounds) { - DeviceProfile grid = mActivity.getDeviceProfile(); - BubbleTextView.getIconBounds(this, bounds, grid.iconSizePx); + getIconBounds(mIconSize, bounds); } private int getIconSizeForDisplay(int display) { @@ -998,7 +1010,7 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, } public void getSourceVisualDragBounds(Rect bounds) { - BubbleTextView.getIconBounds(this, bounds, getIconSizeForDisplay(mDisplay)); + getIconBounds(mIconSize, bounds); } @Override diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 7a38fe736a..d2fe483c96 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -526,6 +526,18 @@ public final class Utilities { return defaultValue; } + /** + * Using the view's bounds and icon size, calculate where the icon bounds will + * be if it was positioned at the center of the view. + */ + public static void setRectToViewCenter(View iconView, int iconSize, Rect outBounds) { + int top = (iconView.getHeight() - iconSize) / 2; + int left = (iconView.getWidth() - iconSize) / 2; + int right = left + iconSize; + int bottom = top + iconSize; + outBounds.set(left, top, right, bottom); + } + /** * Ensures that a value is within given bounds. Specifically: * If value is less than lowerBound, return lowerBound; else if value is greater than upperBound, diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java index 439df80284..98be72a6b9 100644 --- a/src/com/android/launcher3/folder/FolderIcon.java +++ b/src/com/android/launcher3/folder/FolderIcon.java @@ -628,7 +628,10 @@ public class FolderIcon extends FrameLayout implements FolderListener, IconLabel public void drawDot(Canvas canvas) { if (!mForceHideDot && ((mDotInfo != null && mDotInfo.hasDot()) || mDotScale > 0)) { Rect iconBounds = mDotParams.iconBounds; - BubbleTextView.getIconBounds(this, iconBounds, mActivity.getDeviceProfile().iconSizePx); + + Utilities.setRectToViewCenter(this, mActivity.getDeviceProfile().iconSizePx, + iconBounds); + iconBounds.offsetTo(iconBounds.left, getPaddingTop()); float iconScale = (float) mBackground.previewSize / iconBounds.width(); Utilities.scaleRectAboutCenter(iconBounds, iconScale);