Fix NPE when ranking update causes reinflation

Pass in the NEM inflation callback to RowBinderImpl's
onNotificationRankingUpdated since changes in state in ranking can
trigger inflation (smart replies and conversations)

Also go ahead and support null callbacks in inflateContentViews.

Bug: 154028814
Test: build
Change-Id: I265e2a9e6b707bd908ce8c1ae5957cfe76973a5f
This commit is contained in:
Kevin Han
2020-04-15 14:53:17 -07:00
parent 42aa54c1a0
commit 1390930fe5
3 changed files with 11 additions and 6 deletions

View File

@@ -699,7 +699,8 @@ public class NotificationEntryManager implements
entry,
oldImportances.get(entry.getKey()),
oldAdjustments.get(entry.getKey()),
NotificationUiAdjustment.extractFromNotificationEntry(entry));
NotificationUiAdjustment.extractFromNotificationEntry(entry),
mInflationCallback);
}
updateNotifications("updateNotificationRanking");

View File

@@ -51,5 +51,6 @@ public interface NotificationRowBinder {
NotificationEntry entry,
@Nullable Integer oldImportance,
NotificationUiAdjustment oldAdjustment,
NotificationUiAdjustment newAdjustment);
NotificationUiAdjustment newAdjustment,
NotificationRowContentBinder.InflationCallback callback);
}

View File

@@ -180,13 +180,14 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
NotificationEntry entry,
@Nullable Integer oldImportance,
NotificationUiAdjustment oldAdjustment,
NotificationUiAdjustment newAdjustment) {
NotificationUiAdjustment newAdjustment,
NotificationRowContentBinder.InflationCallback callback) {
if (NotificationUiAdjustment.needReinflate(oldAdjustment, newAdjustment)) {
if (entry.rowExists()) {
ExpandableNotificationRow row = entry.getRow();
row.reset();
updateRow(entry, row);
inflateContentViews(entry, row, null /* callback */);
inflateContentViews(entry, row, callback);
} else {
// Once the RowInflaterTask is done, it will pick up the updated entry, so
// no-op here.
@@ -221,7 +222,7 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
private void inflateContentViews(
NotificationEntry entry,
ExpandableNotificationRow row,
NotificationRowContentBinder.InflationCallback inflationCallback) {
@Nullable NotificationRowContentBinder.InflationCallback inflationCallback) {
final boolean useIncreasedCollapsedHeight =
mMessagingUtil.isImportantMessaging(entry.getSbn(), entry.getImportance());
final boolean isLowPriority = entry.isAmbient();
@@ -238,7 +239,9 @@ public class NotificationRowBinderImpl implements NotificationRowBinder {
mRowContentBindStage.requestRebind(entry, en -> {
row.setUsesIncreasedCollapsedHeight(useIncreasedCollapsedHeight);
row.setIsLowPriority(isLowPriority);
inflationCallback.onAsyncInflationFinished(en);
if (inflationCallback != null) {
inflationCallback.onAsyncInflationFinished(en);
}
});
}