Fixed a bug where the positioning on the lockscreen was wrong
Because of a circular dependancy of calculating the notification
heights and setting them to GONE, the views could be laid out in a
wrong fashion. Another issue was that ambient notifications would
still be taken into account as well as removed notifications.
This also lead to a bug where the removal of notifications could
lead to unnecessary add animations when swiping them away.
Change-Id: If9ad81237a520b14dc6851df3af52406d192a7a7
Fixes: 28441832
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index fcd5cad..87dcb91 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -480,19 +480,22 @@
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- measureChildren(widthMeasureSpec, heightMeasureSpec);
+ // We need to measure all children even the GONE ones, such that the heights are calculated
+ // correctly as they are used to calculate how many we can fit on the screen.
+ final int size = getChildCount();
+ for (int i = 0; i < size; i++) {
+ measureChild(getChildAt(i), widthMeasureSpec, heightMeasureSpec);
+ }
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
-
// we layout all our children centered on the top
float centerX = getWidth() / 2.0f;
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
- if (child.getVisibility() == GONE) {
- continue;
- }
+ // We need to layout all children even the GONE ones, such that the heights are
+ // calculated correctly as they are used to calculate how many we can fit on the screen
float width = child.getMeasuredWidth();
float height = child.getMeasuredHeight();
child.layout((int) (centerX - width / 2.0f),