Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java +31 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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 { Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java +14 −4 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 Loading Loading @@ -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(); } Loading Loading @@ -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); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java +31 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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 { Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java +14 −4 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 Loading Loading @@ -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(); } Loading Loading @@ -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); Loading