Merge "Fix notif content when child updated to top level" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-04-30 03:17:41 +00:00
committed by Android (Google) Code Review
3 changed files with 25 additions and 15 deletions

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);