summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java30
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java4
3 files changed, 25 insertions, 15 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java
index 02c41e5aaefe..8fcc67a0708e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java
@@ -61,7 +61,7 @@ public class NotificationViewHierarchyManager implements DynamicPrivacyControlle
private final Handler mHandler;
- /** Re-usable map of notifications to their sorted children.*/
+ /** Re-usable map of top-level notifications to their sorted children if any.*/
private final HashMap<NotificationEntry, List<NotificationEntry>> mTmpChildOrderMap =
new HashMap<>();
@@ -211,6 +211,8 @@ public class NotificationViewHierarchyManager implements DynamicPrivacyControlle
}
orderedChildren.add(ent);
} else {
+ // Top-level notif
+ mTmpChildOrderMap.put(ent, null);
toShow.add(ent.getRow());
}
}
@@ -288,7 +290,7 @@ public class NotificationViewHierarchyManager implements DynamicPrivacyControlle
}
- mDynamicChildBindController.updateChildContentViews(mTmpChildOrderMap);
+ mDynamicChildBindController.updateContentViews(mTmpChildOrderMap);
mVisualStabilityManager.onReorderingFinished();
// clear the map again for the next usage
mTmpChildOrderMap.clear();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java
index 148cdea92052..57b41f36e51f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java
@@ -63,44 +63,52 @@ public class DynamicChildBindController {
}
/**
- * Update the child content views, unbinding content views on children that won't be visible
- * and binding content views on children that will be visible eventually.
+ * Update the content views, unbinding content views on children that won't be visible
+ * and binding content views on children that will be visible eventually and previously unbound
+ * children that are no longer children.
*
- * @param groupNotifs map of notification summaries to their children
+ * @param groupNotifs map of top-level notifs to their children, if any
*/
- public void updateChildContentViews(
+ public void updateContentViews(
Map<NotificationEntry, List<NotificationEntry>> groupNotifs) {
for (NotificationEntry entry : groupNotifs.keySet()) {
List<NotificationEntry> children = groupNotifs.get(entry);
+ if (children == null) {
+ if (!hasContent(entry)) {
+ // Case where child is updated to be top level
+ bindContent(entry);
+ }
+ continue;
+ }
for (int j = 0; j < children.size(); j++) {
NotificationEntry childEntry = children.get(j);
if (j >= mChildBindCutoff) {
- if (hasChildContent(childEntry)) {
- freeChildContent(childEntry);
+ if (hasContent(childEntry)) {
+ freeContent(childEntry);
}
} else {
- if (!hasChildContent(childEntry)) {
- bindChildContent(childEntry);
+ if (!hasContent(childEntry)) {
+ bindContent(childEntry);
}
}
}
}
}
- private boolean hasChildContent(NotificationEntry entry) {
+ private boolean hasContent(NotificationEntry entry) {
ExpandableNotificationRow row = entry.getRow();
return row.getPrivateLayout().getContractedChild() != null
|| row.getPrivateLayout().getExpandedChild() != null;
}
- private void freeChildContent(NotificationEntry entry) {
+ private void freeContent(NotificationEntry entry) {
RowContentBindParams params = mStage.getStageParams(entry);
params.markContentViewsFreeable(FLAG_CONTENT_VIEW_CONTRACTED);
params.markContentViewsFreeable(FLAG_CONTENT_VIEW_EXPANDED);
mStage.requestRebind(entry, null);
}
- private void bindChildContent(NotificationEntry entry) {
+ private void bindContent(NotificationEntry entry) {
RowContentBindParams params = mStage.getStageParams(entry);
params.requireContentViews(FLAG_CONTENT_VIEW_CONTRACTED);
params.requireContentViews(FLAG_CONTENT_VIEW_EXPANDED);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java
index 29040147d1ca..d0dfb17111c6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java
@@ -80,7 +80,7 @@ public class DynamicChildBindControllerTest extends SysuiTestCase {
when(mBindStage.getStageParams(lastChild)).thenReturn(bindParams);
// WHEN the controller gets the list
- mDynamicChildBindController.updateChildContentViews(mGroupNotifs);
+ mDynamicChildBindController.updateContentViews(mGroupNotifs);
// THEN we free content views
verify(bindParams).markContentViewsFreeable(FLAG_CONTENT_VIEW_CONTRACTED);
@@ -101,7 +101,7 @@ public class DynamicChildBindControllerTest extends SysuiTestCase {
when(mBindStage.getStageParams(lastChild)).thenReturn(bindParams);
// WHEN the controller gets the list
- mDynamicChildBindController.updateChildContentViews(mGroupNotifs);
+ mDynamicChildBindController.updateContentViews(mGroupNotifs);
// THEN we bind content views
verify(bindParams).requireContentViews(FLAG_CONTENT_VIEW_CONTRACTED);