Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c58461d authored by Selim Cinek's avatar Selim Cinek
Browse files

Fixed a bug where group expansion size calculation was wrong

On the lockscreen, the minheight was always based on the intrinsic
height and not actually the minHeight of the children. Because
children were userlocked, they were now reporting their small size
instead of the single line size.
This meant that the expand motion on the lockscreen wasn't following
the finger at all.

Bug: 27418617
Change-Id: I81daaf87887de1adc014cb4c6d46f4ef118061e5
parent d1bb54b8
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -169,21 +169,23 @@ public class DragDownHelper implements Gefingerpoken {
                ? RUBBERBAND_FACTOR_EXPANDABLE
                : RUBBERBAND_FACTOR_STATIC;
        float rubberband = heightDelta * rubberbandFactor;
        if (expandable && (rubberband + child.getMinHeight()) > child.getMaxContentHeight()) {
            float overshoot = (rubberband + child.getMinHeight()) - child.getMaxContentHeight();
        if (expandable
                && (rubberband + child.getMinExpandHeight()) > child.getMaxContentHeight()) {
            float overshoot =
                    (rubberband + child.getMinExpandHeight()) - child.getMaxContentHeight();
            overshoot *= (1 - RUBBERBAND_FACTOR_STATIC);
            rubberband -= overshoot;
        }
        child.setActualHeight((int) (child.getMinHeight() + rubberband));
        child.setActualHeight((int) (child.getMinExpandHeight() + rubberband));
    }

    private void cancelExpansion(final ExpandableView child) {
        if (child.getActualHeight() == child.getMinHeight()) {
        if (child.getActualHeight() == child.getMinExpandHeight()) {
            mCallback.setUserLockedChild(child, false);
            return;
        }
        ObjectAnimator anim = ObjectAnimator.ofInt(child, "actualHeight",
                child.getActualHeight(), child.getMinHeight());
                child.getActualHeight(), child.getMinExpandHeight());
        anim.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
        anim.setDuration(SPRING_BACK_ANIMATION_LENGTH_MS);
        anim.addListener(new AnimatorListenerAdapter() {
+2 −2
Original line number Diff line number Diff line
@@ -1221,8 +1221,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {

    @Override
    public int getMinExpandHeight() {
        if (mIsSummaryWithChildren && !mOnKeyguard) {
            return mChildrenContainer.getMinExpandHeight();
        if (mIsSummaryWithChildren && !mShowingPublic) {
            return mChildrenContainer.getMinExpandHeight(mOnKeyguard);
        }
        return getMinHeight();
    }
+22 −2
Original line number Diff line number Diff line
@@ -566,8 +566,28 @@ public class NotificationChildrenContainer extends ViewGroup {
        return getIntrinsicHeight(NUMBER_OF_CHILDREN_WHEN_COLLAPSED);
    }

    public int getMinExpandHeight() {
        return getIntrinsicHeight(getMaxAllowedVisibleChildren(true /* forceCollapsed */));
    public int getMinExpandHeight(boolean onKeyguard) {
        int maxAllowedVisibleChildren = onKeyguard ? NUMBER_OF_CHILDREN_WHEN_COLLAPSED
                : getMaxAllowedVisibleChildren(true /* forceCollapsed */);
        int minExpandHeight = mNotificationHeaderHeight;
        int visibleChildren = 0;
        boolean firstChild = true;
        int childCount = mChildren.size();
        for (int i = 0; i < childCount; i++) {
            if (visibleChildren >= maxAllowedVisibleChildren) {
                break;
            }
            if (!firstChild) {
                minExpandHeight += mChildPadding;
            } else {
                firstChild = false;
            }
            ExpandableNotificationRow child = mChildren.get(i);
            minExpandHeight += child.getMinHeight();
            visibleChildren++;
        }
        minExpandHeight += mCollapsedBottompadding;
        return minExpandHeight;
    }

    public void setDark(boolean dark, boolean fade, long delay) {