Loading packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java +4 −2 Original line number Diff line number Diff line Loading @@ -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<>(); Loading Loading @@ -211,6 +211,8 @@ public class NotificationViewHierarchyManager implements DynamicPrivacyControlle } orderedChildren.add(ent); } else { // Top-level notif mTmpChildOrderMap.put(ent, null); toShow.add(ent.getRow()); } } Loading Loading @@ -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(); Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java +19 −11 Original line number Diff line number Diff line Loading @@ -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); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java +4 −2 Original line number Diff line number Diff line Loading @@ -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<>(); Loading Loading @@ -211,6 +211,8 @@ public class NotificationViewHierarchyManager implements DynamicPrivacyControlle } orderedChildren.add(ent); } else { // Top-level notif mTmpChildOrderMap.put(ent, null); toShow.add(ent.getRow()); } } Loading Loading @@ -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(); Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicChildBindController.java +19 −11 Original line number Diff line number Diff line Loading @@ -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); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicChildBindControllerTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading