From 612230dbd31d430fb975ccf7be3e566aac355f9b Mon Sep 17 00:00:00 2001 From: Thales Lima Date: Thu, 31 Mar 2022 18:04:37 +0100 Subject: [PATCH] Make hotseat RTL aware Fix: 217567306 Test: manual, turning on "Force RTL" Change-Id: I1369cfc6e9afd328a1a6945469064d4cd54f31ea --- src/com/android/launcher3/DeviceProfile.java | 29 +++++++++++--------- src/com/android/launcher3/Hotseat.java | 3 +- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 500244cdda..5685d3beb3 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -1013,29 +1013,32 @@ public class DeviceProfile { mInsets.right + hotseatBarSidePaddingStartPx, paddingBottom); } } else if (isTaskbarPresent) { + boolean isRtl = Utilities.isRtl(context.getResources()); int hotseatHeight = workspacePadding.bottom; int taskbarOffset = getTaskbarOffsetY(); - int additionalLeftSpace = 0; - - // Center the QSB with hotseat and push icons to the right - if (isQsbInline) { - additionalLeftSpace = qsbWidth + hotseatBorderSpace; - } + // Push icons to the side + int additionalQsbSpace = isQsbInline ? qsbWidth + hotseatBorderSpace : 0; + // Center the QSB vertically with hotseat int hotseatTopPadding = hotseatHeight - taskbarOffset - hotseatCellHeightPx; int endOffset = ApiWrapper.getHotseatEndOffset(context); int requiredWidth = iconSizePx * numShownHotseatIcons + hotseatBorderSpace * (numShownHotseatIcons - 1) - + additionalLeftSpace; + + additionalQsbSpace; - int hotseatSize = Math.min(requiredWidth, availableWidthPx - endOffset); - int sideSpacing = (availableWidthPx - hotseatSize) / 2; - mHotseatPadding.set(sideSpacing + additionalLeftSpace, hotseatTopPadding, sideSpacing, - taskbarOffset); + int hotseatWidth = Math.min(requiredWidth, availableWidthPx - endOffset); + int sideSpacing = (availableWidthPx - hotseatWidth) / 2; + mHotseatPadding.set(sideSpacing, hotseatTopPadding, sideSpacing, taskbarOffset); + + if (isRtl) { + mHotseatPadding.right += additionalQsbSpace; + } else { + mHotseatPadding.left += additionalQsbSpace; + } if (endOffset > sideSpacing) { - int diff = Utilities.isRtl(context.getResources()) + int diff = isRtl ? sideSpacing - endOffset : endOffset - sideSpacing; mHotseatPadding.left -= diff; @@ -1085,7 +1088,7 @@ public class DeviceProfile { */ public int getTaskbarOffsetY() { if (isQsbInline) { - return getQsbOffsetY() + (Math.abs(hotseatQsbHeight - iconSizePx) / 2); + return getQsbOffsetY() - (Math.abs(hotseatQsbHeight - hotseatCellHeightPx) / 2); } else { return (getQsbOffsetY() - taskbarSize) / 2; } diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index 9c749aa790..66a4da8ce2 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -195,7 +195,8 @@ public class Hotseat extends CellLayout implements Insettable { int left; if (mActivity.getDeviceProfile().isQsbInline) { int qsbSpace = mActivity.getDeviceProfile().hotseatBorderSpace; - left = l + getPaddingLeft() - qsbWidth - qsbSpace; + left = Utilities.isRtl(getResources()) ? r - getPaddingRight() + qsbSpace + : l + getPaddingLeft() - qsbWidth - qsbSpace; } else { left = (r - l - qsbWidth) / 2; }