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

Commit 9cf2567c authored by Lyn Han's avatar Lyn Han Committed by Automerger Merge Worker
Browse files

Merge "Swipe notification to edge of screen" into sc-dev am: f688a8b9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13945589

Change-Id: Ife66591557d08609c0d75f34dd32166665572fe7
parents e3ed7e75 f688a8b9
Loading
Loading
Loading
Loading
+31 −6
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewOutlineProvider;

import com.android.systemui.R;
@@ -101,6 +102,28 @@ public abstract class ExpandableOutlineView extends ExpandableView {
        }
    };

    /**
     * Get the relative start padding of a view relative to this view. This recursively walks up the
     * hierarchy and does the corresponding measuring.
     *
     * @param view the view to get the padding for. The requested view has to be a child of this
     *             notification.
     * @return the start padding
     */
    public int getRelativeStartPadding(View view) {
        boolean isRtl = isLayoutRtl();
        int startPadding = 0;
        while (view.getParent() instanceof ViewGroup) {
            View parent = (View) view.getParent();
            startPadding += isRtl ? parent.getWidth() - view.getRight() : view.getLeft();
            view = parent;
            if (view == this) {
                return startPadding;
            }
        }
        return startPadding;
    }

    protected Path getClipPath(boolean ignoreTranslation) {
        int left;
        int top;
@@ -109,15 +132,17 @@ public abstract class ExpandableOutlineView extends ExpandableView {
        int height;
        float topRoundness = mAlwaysRoundBothCorners
                ? mOutlineRadius : getCurrentBackgroundRadiusTop();

        if (!mCustomOutline) {
            int translation = mShouldTranslateContents && !ignoreTranslation
                    ? (int) getTranslation() : 0;
            int halfExtraWidth = (int) (mExtraWidthForClipping / 2.0f);
            left = Math.max(translation, 0) - halfExtraWidth;
            top = mClipTopAmount + mBackgroundTop;
            right = getWidth() + halfExtraWidth + Math.min(translation, 0);
            // Extend left/right clip bounds beyond the notification by the
            // 1) space between the notification and edge of screen
            // 2) corner radius (so we do not see any rounding as the notification goes off screen)
            left = (int) (-getRelativeStartPadding(this) - mOutlineRadius);
            right = (int) (((View) getParent()).getWidth() + mOutlineRadius);

            // If the top is rounded we want the bottom to be at most at the top roundness, in order
            // to avoid the shadow changing when scrolling up.
            top = mClipTopAmount + mBackgroundTop;
            bottom = Math.max(mMinimumHeightForClipping,
                    Math.max(getActualHeight() - mClipBottomAmount, (int) (top + topRoundness)));
        } else {
+14 −4
Original line number Diff line number Diff line
@@ -69,6 +69,8 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable {
    private float mContentTranslation;
    protected boolean mLastInSection;
    protected boolean mFirstInSection;
    private float mOutlineRadius;
    private float mParentWidth;

    public ExpandableView(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -79,6 +81,7 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable {
    private void initDimens() {
        mContentShift = getResources().getDimensionPixelSize(
                R.dimen.shelf_transform_content_shift);
        mOutlineRadius = getResources().getDimensionPixelSize(R.dimen.notification_corner_radius);
    }

    @Override
@@ -150,6 +153,9 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable {
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        if (getParent() != null) {
            mParentWidth = ((View) getParent()).getWidth();
        }
        updateClipping();
    }

@@ -436,11 +442,15 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable {

    protected void updateClipping() {
        if (mClipToActualHeight && shouldClipToActualHeight()) {
            int top = getClipTopAmount();
            int bottom = Math.max(Math.max(getActualHeight() + getExtraBottomPadding()
            final int top = getClipTopAmount();
            final int bottom = Math.max(Math.max(getActualHeight() + getExtraBottomPadding()
                    - mClipBottomAmount, top), mMinimumHeightForClipping);
            int halfExtraWidth = (int) (mExtraWidthForClipping / 2.0f);
            mClipRect.set(-halfExtraWidth, top, getWidth() + halfExtraWidth, bottom);
            // Extend left/right clip bounds beyond the notification by the
            // 1) space between the notification and edge of screen
            // 2) corner radius (so we do not see any rounding as the notification goes off screen)
            final int left = (int) (-getRelativeStartPadding(this) - mOutlineRadius);
            final int right = (int) (mParentWidth + mOutlineRadius);
            mClipRect.set(left, top, right, bottom);
            setClipBounds(mClipRect);
        } else {
            setClipBounds(null);