From a5a4ee43eba38d39e8fffc91b663f63502e4e3a3 Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Thu, 21 May 2020 15:38:32 -0700 Subject: [PATCH] Ensured that the gut's bounds update properly Because we were using a transition to update the content and the guts were using getHeight() to infer their actualHeight, getHeight() was returning the start value of the animation and only updated later when other state changed. This is now fixed by returning the height determined in the layout. Bug: 157215227 Test: add guts with 3 line priority, switch between them, observe correct measuring Change-Id: Icdecd022276e1e21b78991cb5de9f3f7972cb490 --- .../row/NotificationConversationInfo.java | 11 ++++++++++- .../statusbar/notification/row/NotificationInfo.java | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java index 863951e655e9e..e0583be1935de 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java @@ -117,6 +117,7 @@ public class NotificationConversationInfo extends LinearLayout implements @VisibleForTesting boolean mSkipPost = false; + private int mActualHeight; @Retention(SOURCE) @IntDef({ACTION_DEFAULT, ACTION_HOME, ACTION_FAVORITE, ACTION_SNOOZE, ACTION_MUTE, @@ -582,7 +583,15 @@ public class NotificationConversationInfo extends LinearLayout implements @Override public int getActualHeight() { - return getHeight(); + // Because we're animating the bounds, getHeight will return the small height at the + // beginning of the animation. Instead we'd want it to already return the end value + return mActualHeight; + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + mActualHeight = getHeight(); } @VisibleForTesting diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java index 08affa868073b..91c31cf58ea07 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java @@ -71,6 +71,7 @@ import java.util.Set; */ public class NotificationInfo extends LinearLayout implements NotificationGuts.GutsContent { private static final String TAG = "InfoGuts"; + private int mActualHeight; @IntDef(prefix = { "ACTION_" }, value = { ACTION_NONE, @@ -583,7 +584,15 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G @Override public int getActualHeight() { - return getHeight(); + // Because we're animating the bounds, getHeight will return the small height at the + // beginning of the animation. Instead we'd want it to already return the end value + return mActualHeight; + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + mActualHeight = getHeight(); } @VisibleForTesting