Merge "Fixed a bug with notification clipping" into lmp-mr1-dev
This commit is contained in:
@@ -23,9 +23,7 @@ import android.graphics.PorterDuff;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.RippleDrawable;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
* A view that can be used for both the dimmed and normal background of an notification.
|
||||
|
||||
@@ -200,15 +200,25 @@ public class StackScrollAlgorithm {
|
||||
// apply clipping and shadow
|
||||
float newNotificationEnd = newYTranslation + newHeight;
|
||||
|
||||
// In the unlocked shade we have to clip a little bit higher because of the rounded
|
||||
// corners of the notifications.
|
||||
float clippingCorrection = state.dimmed ? 0 : mRoundedRectCornerRadius * state.scale;
|
||||
float clipHeight;
|
||||
if (previousNotificationIsSwiped) {
|
||||
// When the previous notification is swiped, we don't clip the content to the
|
||||
// bottom of it.
|
||||
clipHeight = newHeight;
|
||||
} else {
|
||||
clipHeight = newNotificationEnd - previousNotificationEnd;
|
||||
clipHeight = Math.max(0.0f, clipHeight);
|
||||
if (clipHeight != 0.0f) {
|
||||
|
||||
// When the previous notification is swiped, we don't clip the content to the
|
||||
// bottom of it.
|
||||
float clipHeight = previousNotificationIsSwiped
|
||||
? newHeight
|
||||
: newNotificationEnd - (previousNotificationEnd - clippingCorrection);
|
||||
// In the unlocked shade we have to clip a little bit higher because of the rounded
|
||||
// corners of the notifications, but only if we are not fully overlapped by
|
||||
// the top card.
|
||||
float clippingCorrection = state.dimmed
|
||||
? 0
|
||||
: mRoundedRectCornerRadius * state.scale;
|
||||
clipHeight += clippingCorrection;
|
||||
}
|
||||
}
|
||||
|
||||
updateChildClippingAndBackground(state, newHeight, clipHeight,
|
||||
newHeight - (previousNotificationStart - newYTranslation));
|
||||
@@ -669,7 +679,11 @@ public class StackScrollAlgorithm {
|
||||
StackScrollState.ViewState childViewState = resultState.getViewStateForView(child);
|
||||
if (i < algorithmState.itemsInTopStack) {
|
||||
float stackIndex = algorithmState.itemsInTopStack - i;
|
||||
stackIndex = Math.min(stackIndex, MAX_ITEMS_IN_TOP_STACK + 2);
|
||||
|
||||
// Ensure that the topmost item is a little bit higher than the rest when fully
|
||||
// scrolled, to avoid drawing errors when swiping it out
|
||||
float max = MAX_ITEMS_IN_TOP_STACK + (i == 0 ? 2.5f : 2);
|
||||
stackIndex = Math.min(stackIndex, max);
|
||||
if (i == 0 && algorithmState.itemsInTopStack < 2.0f) {
|
||||
|
||||
// We only have the top item and an additional item in the top stack,
|
||||
|
||||
@@ -119,9 +119,7 @@ public class StackScrollState {
|
||||
}
|
||||
|
||||
// apply alpha
|
||||
if (!becomesInvisible) {
|
||||
child.setAlpha(newAlpha);
|
||||
}
|
||||
child.setAlpha(newAlpha);
|
||||
}
|
||||
|
||||
// apply visibility
|
||||
|
||||
@@ -477,6 +477,7 @@ public class StackStateAnimator {
|
||||
if (newEndValue == 0 && !mWasCancelled) {
|
||||
child.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
// remove the tag when the animation is finished
|
||||
child.setTag(TAG_ANIMATOR_ALPHA, null);
|
||||
child.setTag(TAG_START_ALPHA, null);
|
||||
child.setTag(TAG_END_ALPHA, null);
|
||||
@@ -498,13 +499,7 @@ public class StackStateAnimator {
|
||||
animator.setStartDelay(delay);
|
||||
}
|
||||
animator.addListener(getGlobalAnimationFinishedListener());
|
||||
// remove the tag when the animation is finished
|
||||
animator.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
|
||||
}
|
||||
});
|
||||
startAnimator(animator);
|
||||
child.setTag(TAG_ANIMATOR_ALPHA, animator);
|
||||
child.setTag(TAG_START_ALPHA, child.getAlpha());
|
||||
|
||||
Reference in New Issue
Block a user