Merge "Fix notif content when child updated to top level" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e52160f4ce
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user