Fix inflating content views after removal

Fix a crash with NotifBindPipeline where we try to inflate a group child
after it's removed. This is due to some edge case logic where we delay
view hierarchy updates til later (i.e. after the notification is
removed) and inflation logic and group change logic being precedented on
view hierarchy changes.

This fixes that by checking if the row is already removed in order to
stop inflation. We add a similar check for redaction since that is
similarly triggered at the view hierarchy stage.

Bug: 149989491
Test: Repro from bug
Change-Id: I42114bcdaf0d135bcbb68f0b634b77252ea7b8b0
This commit is contained in:
Kevin Han
2020-02-21 18:23:04 -08:00
parent 2c89e32d34
commit a052c0ca0b

View File

@@ -807,7 +807,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
// TODO: Move inflation logic out of this call
if (mIsChildInGroup != isChildInGroup) {
mIsChildInGroup = isChildInGroup;
if (mIsLowPriority) {
if (!isRemoved() && mIsLowPriority) {
RowContentBindParams params = mRowContentBindStage.getStageParams(mEntry);
params.setUseLowPriority(mIsLowPriority);
mRowContentBindStage.requestRebind(mEntry, null /* callback */);
@@ -1576,13 +1576,15 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
// TODO: Move inflation logic out of this call and remove this method
if (mNeedsRedaction != needsRedaction) {
mNeedsRedaction = needsRedaction;
RowContentBindParams params = mRowContentBindStage.getStageParams(mEntry);
if (needsRedaction) {
params.requireContentViews(FLAG_CONTENT_VIEW_PUBLIC);
} else {
params.freeContentViews(FLAG_CONTENT_VIEW_PUBLIC);
if (!isRemoved()) {
RowContentBindParams params = mRowContentBindStage.getStageParams(mEntry);
if (needsRedaction) {
params.requireContentViews(FLAG_CONTENT_VIEW_PUBLIC);
} else {
params.freeContentViews(FLAG_CONTENT_VIEW_PUBLIC);
}
mRowContentBindStage.requestRebind(mEntry, null /* callback */);
}
mRowContentBindStage.requestRebind(mEntry, null /* callback */);
}
}