Merge "Fixed the inline launch animation for notification groups" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-12-11 02:46:38 +00:00
committed by Android (Google) Code Review
6 changed files with 64 additions and 16 deletions

View File

@@ -1856,7 +1856,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
float interpolation = Interpolators.FAST_OUT_SLOW_IN.getInterpolation(params.getProgress());
int startClipTopAmount = params.getStartClipTopAmount();
if (mNotificationParent != null) {
top -= mNotificationParent.getTranslationY();
float parentY = mNotificationParent.getTranslationY();
top -= parentY;
mNotificationParent.setTranslationZ(translationZ);
int parentStartClipTopAmount = params.getParentStartClipTopAmount();
if (startClipTopAmount != 0) {
@@ -1866,8 +1867,12 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
mNotificationParent.setClipTopAmount(clipTopAmount);
}
mNotificationParent.setExtraWidthForClipping(extraWidthForClipping);
mNotificationParent.setMinimumHeightForClipping(params.getHeight()
+ mNotificationParent.getActualHeight());
float clipBottom = Math.max(params.getBottom(),
parentY + mNotificationParent.getActualHeight()
- mNotificationParent.getClipBottomAmount());
float clipTop = Math.min(params.getTop(), parentY);
int minimumHeightForClipping = (int) (clipBottom - clipTop);
mNotificationParent.setMinimumHeightForClipping(minimumHeightForClipping);
} else if (startClipTopAmount != 0) {
int clipTopAmount = (int) MathUtils.lerp(startClipTopAmount, 0, interpolation);
setClipTopAmount(clipTopAmount);
@@ -1922,6 +1927,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
private void setChildIsExpanding(boolean isExpanding) {
mChildIsExpanding = isExpanding;
updateClipping();
invalidate();
}
@Override
@@ -1931,7 +1938,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
@Override
protected boolean shouldClipToActualHeight() {
return super.shouldClipToActualHeight() && !mExpandAnimationRunning && !mChildIsExpanding;
return super.shouldClipToActualHeight() && !mExpandAnimationRunning;
}
@Override
@@ -2827,7 +2834,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
return true;
}
} else if (child == mChildrenContainer) {
if (!mChildIsExpanding && (isClippingNeeded() || !hasNoRounding())) {
if (isClippingNeeded() || !hasNoRounding()) {
return true;
}
} else if (child instanceof NotificationGuts) {

View File

@@ -78,8 +78,6 @@ public abstract class ExpandableOutlineView extends ExpandableView {
protected boolean mShouldTranslateContents;
private boolean mTopAmountRounded;
private float mDistanceToTopRoundness = -1;
private float mExtraWidthForClipping;
private int mMinimumHeightForClipping = 0;
private final ViewOutlineProvider mProvider = new ViewOutlineProvider() {
@Override
@@ -120,11 +118,13 @@ public abstract class ExpandableOutlineView extends ExpandableView {
if (!mCustomOutline) {
int translation = mShouldTranslateContents && !ignoreTranslation
? (int) getTranslation() : 0;
left = Math.max(translation, 0);
int halfExtraWidth = (int) (mExtraWidthForClipping / 2.0f);
left = Math.max(translation, 0) - halfExtraWidth;
top = mClipTopAmount + mBackgroundTop;
right = getWidth() + Math.min(translation, 0);
right = getWidth() + halfExtraWidth + Math.min(translation, 0);
bottom = Math.max(getActualHeight(), top);
int intersectBottom = Math.max(getActualHeight() - mClipBottomAmount, top);
int intersectBottom = Math.max(mMinimumHeightForClipping,
Math.max(getActualHeight() - mClipBottomAmount, top));
if (bottom != intersectBottom) {
if (clipRoundedToBottom) {
bottom = intersectBottom;
@@ -237,12 +237,16 @@ public abstract class ExpandableOutlineView extends ExpandableView {
return result;
}
@Override
public void setExtraWidthForClipping(float extraWidthForClipping) {
mExtraWidthForClipping = extraWidthForClipping;
super.setExtraWidthForClipping(extraWidthForClipping);
invalidate();
}
@Override
public void setMinimumHeightForClipping(int minimumHeightForClipping) {
mMinimumHeightForClipping = minimumHeightForClipping;
super.setMinimumHeightForClipping(minimumHeightForClipping);
invalidate();
}
@Override

View File

@@ -41,6 +41,8 @@ public abstract class ExpandableView extends FrameLayout {
private int mActualHeight;
protected int mClipTopAmount;
protected int mClipBottomAmount;
protected int mMinimumHeightForClipping = 0;
protected float mExtraWidthForClipping = 0;
private boolean mDark;
private ArrayList<View> mMatchParentViews = new ArrayList<View>();
private static Rect mClipRect = new Rect();
@@ -390,14 +392,26 @@ public abstract class ExpandableView extends FrameLayout {
protected void updateClipping() {
if (mClipToActualHeight && shouldClipToActualHeight()) {
int top = getClipTopAmount();
mClipRect.set(0, top, getWidth(), Math.max(getActualHeight() + getExtraBottomPadding()
- mClipBottomAmount, top));
int bottom = Math.max(Math.max(getActualHeight() + getExtraBottomPadding()
- mClipBottomAmount, top), mMinimumHeightForClipping);
int halfExtraWidth = (int) (mExtraWidthForClipping / 2.0f);
mClipRect.set(-halfExtraWidth, top, getWidth() + halfExtraWidth, bottom);
setClipBounds(mClipRect);
} else {
setClipBounds(null);
}
}
public void setMinimumHeightForClipping(int minimumHeightForClipping) {
mMinimumHeightForClipping = minimumHeightForClipping;
updateClipping();
}
public void setExtraWidthForClipping(float extraWidthForClipping) {
mExtraWidthForClipping = extraWidthForClipping;
updateClipping();
}
public float getHeaderVisibleAmount() {
return 1.0f;
}

View File

@@ -156,10 +156,17 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater.
}
// Check if the notification is displaying the menu, if so slide notification back
if (row.getProvider() != null && row.getProvider().isMenuVisible()) {
if (isMenuVisible(row)) {
row.animateTranslateNotification(0);
return;
}
} else if (row.isChildInGroup() && isMenuVisible(row.getNotificationParent())) {
row.getNotificationParent().animateTranslateNotification(0);
return;
} else if (row.isSummaryWithChildren() && row.areChildrenExpanded()) {
// We never want to open the app directly if the user clicks in between
// the notifications.
return;
}
// Mark notification for one frame.
row.setJustClicked(true);
@@ -168,6 +175,10 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater.
mCallback.onNotificationClicked(sbn, row);
}
private boolean isMenuVisible(ExpandableNotificationRow row) {
return row.getProvider() != null && row.getProvider().isMenuVisible();
}
public void register(ExpandableNotificationRow row, StatusBarNotification sbn) {
Notification notification = sbn.getNotification();
if (notification.contentIntent != null || notification.fullScreenIntent != null) {

View File

@@ -278,6 +278,10 @@ public class ActivityLaunchAnimator {
return top;
}
public int getBottom() {
return bottom;
}
public int getWidth() {
return right - left;
}

View File

@@ -869,6 +869,7 @@ public class NotificationChildrenContainer extends ViewGroup {
ExpandableNotificationRow child = mChildren.get(childIdx);
child.setChildrenExpanded(childrenExpanded, false);
}
updateHeaderTouchability();
}
public void setContainingNotification(ExpandableNotificationRow parent) {
@@ -1209,6 +1210,13 @@ public class NotificationChildrenContainer extends ViewGroup {
ExpandableNotificationRow child = mChildren.get(i);
child.setUserLocked(userLocked && !showingAsLowPriority());
}
updateHeaderTouchability();
}
private void updateHeaderTouchability() {
if (mNotificationHeader != null) {
mNotificationHeader.setAcceptAllTouches(mChildrenExpanded || mUserLocked);
}
}
public void onNotificationUpdated() {