Account for children margins when orienting popup container.

Instead of recalculating the orientation after adding margins,
we account for the margins in the initial calls to orientAboutObject.

This ensures consistent mIsAboveIcon throughout calls to show the popup.

- Also updates the smaller radius to match the middle items.

Bug: 175329686
Test: long press on item where height and height without margins would
      result in differing mIsAboveIcon values
      eg. the 3rd item in a folder in the top middle of 5x5 workspace

Change-Id: I6132b544a89c7948339d17f219ad75c797233f55
This commit is contained in:
Jon Miranda
2021-03-19 17:21:22 -04:00
parent 83c4b1fd72
commit 116e94e0a7
3 changed files with 16 additions and 9 deletions

View File

@@ -16,5 +16,5 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="?attr/popupColorPrimary"/>
<corners android:radius="@dimen/popup_middle_item_radius" />
<corners android:radius="@dimen/popup_smaller_radius" />
</shape>

View File

@@ -192,7 +192,7 @@
<dimen name="deep_shortcut_icon_size">32dp</dimen>
<dimen name="popup_margin">2dp</dimen>
<dimen name="popup_single_item_radius">100dp</dimen>
<dimen name="popup_middle_item_radius">4dp</dimen>
<dimen name="popup_smaller_radius">4dp</dimen>
<dimen name="deep_shortcut_drawable_padding">12dp</dimen>
<dimen name="deep_shortcut_drag_handle_size">16dp</dimen>
<dimen name="popup_padding_start">10dp</dimen>

View File

@@ -130,13 +130,14 @@ public abstract class ArrowPopup<T extends BaseDraggingActivity> extends Abstrac
R.dimen.popup_arrow_horizontal_center_offset) - (mArrowWidth / 2);
mArrowPointRadius = resources.getDimensionPixelSize(R.dimen.popup_arrow_corner_radius);
int smallerRadius = resources.getDimensionPixelSize(R.dimen.popup_smaller_radius);
mRoundedTop = new GradientDrawable();
mRoundedTop.setCornerRadii(new float[] { mOutlineRadius, mOutlineRadius, mOutlineRadius,
mOutlineRadius, 0, 0, 0, 0});
mOutlineRadius, smallerRadius, smallerRadius, smallerRadius, smallerRadius});
mRoundedBottom = new GradientDrawable();
mRoundedBottom.setCornerRadii(new float[] { 0, 0, 0, 0, mOutlineRadius, mOutlineRadius,
mOutlineRadius, mOutlineRadius});
mRoundedBottom.setCornerRadii(new float[] { smallerRadius, smallerRadius, smallerRadius,
smallerRadius, mOutlineRadius, mOutlineRadius, mOutlineRadius, mOutlineRadius});
int primaryColor = Themes.getAttrColor(context, R.attr.popupColorPrimary);
int secondaryColor = Themes.getAttrColor(context, R.attr.popupColorSecondary);
@@ -272,7 +273,6 @@ public abstract class ArrowPopup<T extends BaseDraggingActivity> extends Abstrac
}
onInflationComplete(reverseOrder);
assignMarginsAndBackgrounds();
orientAboutObject();
if (shouldAddArrow()) {
addArrow();
}
@@ -286,7 +286,6 @@ public abstract class ArrowPopup<T extends BaseDraggingActivity> extends Abstrac
setupForDisplay();
onInflationComplete(false);
assignMarginsAndBackgrounds();
orientAboutObject();
if (shouldAddArrow()) {
addArrow();
}
@@ -383,10 +382,18 @@ public abstract class ArrowPopup<T extends BaseDraggingActivity> extends Abstrac
private void orientAboutObject(boolean allowAlignLeft, boolean allowAlignRight) {
measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
int width = getMeasuredWidth();
int extraVerticalSpace = mArrowHeight + mArrowOffsetVertical
+ getResources().getDimensionPixelSize(R.dimen.popup_vertical_padding);
int height = getMeasuredHeight() + extraVerticalSpace;
// The margins are added after we call this method, so we need to account for them here.
int numVisibleChildren = 0;
for (int i = getChildCount() - 1; i >= 0; --i) {
if (getChildAt(i).getVisibility() == VISIBLE) {
numVisibleChildren++;
}
}
int childMargins = (numVisibleChildren - 1) * mMargin;
int height = getMeasuredHeight() + extraVerticalSpace + childMargins;
int width = getMeasuredWidth();
getTargetObjectLocation(mTempRect);
InsettableFrameLayout dragLayer = getPopupContainer();