Apply layout param to NotificationShelf only when needed
Before, layout params were applied even when they stayed the same, causing a requestLayout that was propagating to the NotificationStackScrollLayout and remeasuring all notifications (even if it wasn't needed).
Bug: 245268301
Bug: 243647188
Test: Manually verified in a perfetto trace that no RequestLayout was propagated to NSSL after this change from the shelf. Currently there are no ways of writing tests, but I'm working at a way to enable us to make such kind of assertions, so I'll consider adding one when possible.
Change-Id: Ib3a360e705fe49cbff6f90ada0a52171ce9a5688
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index 815b86e..cd13085 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -132,8 +132,11 @@
mPaddingBetweenElements = res.getDimensionPixelSize(R.dimen.notification_divider_height);
ViewGroup.LayoutParams layoutParams = getLayoutParams();
- layoutParams.height = res.getDimensionPixelOffset(R.dimen.notification_shelf_height);
- setLayoutParams(layoutParams);
+ final int newShelfHeight = res.getDimensionPixelOffset(R.dimen.notification_shelf_height);
+ if (newShelfHeight != layoutParams.height) {
+ layoutParams.height = newShelfHeight;
+ setLayoutParams(layoutParams);
+ }
final int padding = res.getDimensionPixelOffset(R.dimen.shelf_icon_container_padding);
mShelfIcons.setPadding(padding, 0, padding, 0);