mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-05 02:16:49 +00:00
PopupContainerWithArrow should align correctly in RTL mode
Test: see attached screenshot in the bug Bug: 63721807 the horizontal gravity enforcement has to be done on (left+translateX) value and not just translateX. Hence that enforcement has been moved to onLayout. Change-Id: I9b6502dc55d59e04a406ebe71ac3b649b31d6088
This commit is contained in:
@@ -399,6 +399,24 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra
|
||||
openAnim.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||
super.onLayout(changed, l, t, r, b);
|
||||
DragLayer dragLayer = mLauncher.getDragLayer();
|
||||
if (getTranslationX() + l < 0 ||
|
||||
getTranslationX() + l + getMeasuredWidth() > dragLayer.getWidth()) {
|
||||
// If we are still off screen, center horizontally too.
|
||||
mGravity |= Gravity.CENTER_HORIZONTAL;
|
||||
}
|
||||
|
||||
if (Gravity.isHorizontal(mGravity)) {
|
||||
setX(dragLayer.getWidth() / 2 - getMeasuredWidth() / 2);
|
||||
}
|
||||
if (Gravity.isVertical(mGravity)) {
|
||||
setY(dragLayer.getHeight() / 2 - getMeasuredHeight() / 2);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the point at which the center of the arrow merges with the first popup item.
|
||||
*/
|
||||
@@ -517,21 +535,8 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra
|
||||
mIsAboveIcon = true;
|
||||
}
|
||||
|
||||
if (x < dragLayer.getLeft() || x + width > dragLayer.getRight()) {
|
||||
// If we are still off screen, center horizontally too.
|
||||
mGravity |= Gravity.CENTER_HORIZONTAL;
|
||||
}
|
||||
|
||||
if (Gravity.isHorizontal(mGravity)) {
|
||||
setX(dragLayer.getWidth() / 2 - getMeasuredWidth() / 2);
|
||||
} else {
|
||||
setX(x);
|
||||
}
|
||||
if (Gravity.isVertical(mGravity)) {
|
||||
setY(dragLayer.getHeight() / 2 - getMeasuredHeight() / 2);
|
||||
} else {
|
||||
setY(y);
|
||||
}
|
||||
setX(x);
|
||||
setY(y);
|
||||
}
|
||||
|
||||
private boolean isAlignedWithStart() {
|
||||
|
||||
Reference in New Issue
Block a user