PopupContainerWithArrow should align correctly in RTL mode Test: see attached screenshot in the bug am: 435a35dec3

Change-Id: I4c290f603c94955a9b85a9c4b91fa0738820d932
This commit is contained in:
Hyunyoung Song 2017-07-19 19:35:46 +00:00
commit febdbfcafb
1 changed files with 20 additions and 15 deletions

View File

@ -399,6 +399,24 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra
openAnim.start(); 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. * 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; mIsAboveIcon = true;
} }
if (x < dragLayer.getLeft() || x + width > dragLayer.getRight()) { setX(x);
// If we are still off screen, center horizontally too. setY(y);
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);
}
} }
private boolean isAlignedWithStart() { private boolean isAlignedWithStart() {