Set views below shelf explicitly invisible to skip hardware rendering

Bug: 191969252
Test: manual logs verified that viewState#applyToView
      invisibles views below shelf
Change-Id: I36e8a4e96d6830c5610649e5987b1e65add593fa
This commit is contained in:
Lyn Han
2021-07-12 14:33:19 -04:00
parent 576c548b3c
commit 12de672d3d

View File

@@ -148,8 +148,22 @@ public class StackScrollAlgorithm {
AmbientState ambientState) {
NotificationShelf shelf = ambientState.getShelf();
if (shelf != null) {
shelf.updateState(algorithmState, ambientState);
if (shelf == null) {
return;
}
shelf.updateState(algorithmState, ambientState);
// After the shelf has updated its yTranslation,
// explicitly hide views below the shelf to skip rendering them in the hardware layer.
final float shelfTop = shelf.getViewState().yTranslation;
for (ExpandableView view : algorithmState.visibleChildren) {
final float viewTop = view.getViewState().yTranslation;
if (viewTop >= shelfTop) {
view.getViewState().hidden = true;
}
}
}
@@ -411,8 +425,7 @@ public class StackScrollAlgorithm {
} else {
if (view != ambientState.getTrackedHeadsUpRow()) {
if (ambientState.isExpansionChanging()) {
// Show all views. Views below the shelf will later be clipped (essentially
// hidden) in NotificationShelf.
// We later update shelf state, then hide views below the shelf.
viewState.hidden = false;
viewState.inShelf = algorithmState.firstViewInShelf != null
&& i >= algorithmState.visibleChildren.indexOf(