Fix always-null children on NotificationEntry

Looks like _someone_ decided to make an array of children and _never_
poplate it.

What used to happen was that callers into NotificationEntry would grab
the row and call ExpandableNotificationRow#getNotificationChildren() on
it to iterate the children and call things (notably setKeepInParent()).
During the work to refactor NotficationEntry into its own class,
NotificationEntry#getChildren() was created so that we could iterate the
entry's children instead of the view's children. Unfortunately it was
never populated.

For now, just call through to
ExpandableNotificationRow#getNotificationChildren() and map those to
their entries.

Fixes: 130018576
Test: atest SystemUITests; visual
Change-Id: Ica629b96c8fa2ee2fb45fdf588ee7d1efc836883
This commit is contained in:
Evan Laird
2019-05-30 16:00:22 -04:00
parent 782e511f49
commit ce2d1afe86
2 changed files with 16 additions and 5 deletions

View File

@@ -355,10 +355,10 @@ public class NotificationEntryManager implements
// a child we're keeping around for reply!
continue;
}
entry.setKeepInParent(true);
childEntry.setKeepInParent(true);
// we need to set this state earlier as otherwise we might generate some weird
// animations
entry.removeRow();
childEntry.removeRow();
}
}
}

View File

@@ -122,7 +122,6 @@ public final class NotificationEntry {
public boolean suspended;
private NotificationEntry parent; // our parent (if we're in a group)
private ArrayList<NotificationEntry> children = new ArrayList<NotificationEntry>();
private ExpandableNotificationRow row; // the outer expanded view
private int mCachedContrastColor = COLOR_INVALID;
@@ -277,10 +276,20 @@ public final class NotificationEntry {
@Nullable
public List<NotificationEntry> getChildren() {
if (children.size() <= 0) {
if (row == null) {
return null;
}
List<ExpandableNotificationRow> rowChildren = row.getNotificationChildren();
if (rowChildren == null) {
return null;
}
ArrayList<NotificationEntry> children = new ArrayList<>();
for (ExpandableNotificationRow child : rowChildren) {
children.add(child.getEntry());
}
return children;
}
@@ -740,7 +749,9 @@ public final class NotificationEntry {
if (notification == null || !notification.isClearable()) {
return false;
}
if (children.size() > 0) {
List<NotificationEntry> children = getChildren();
if (children != null && children.size() > 0) {
for (int i = 0; i < children.size(); i++) {
NotificationEntry child = children.get(i);
if (!child.isClearable()) {