Get dim bounds after super.prepareSurfaces

The dim state may be active when iterating child windows
from super.prepareSurfaces.

Bug: 159103089
Test: DimmerTests
Change-Id: I9326efa0e5d8f265ae7ec62434b850d43802c34e
This commit is contained in:
Riddle Hsu
2023-04-12 23:30:33 +08:00
parent 7dd18dd348
commit f5e44fca7f
4 changed files with 13 additions and 7 deletions

View File

@@ -263,16 +263,19 @@ class Dimmer {
* {@link WindowContainer#prepareSurfaces}. After calling this, the container should
* chain {@link WindowContainer#prepareSurfaces} down to it's children to give them
* a chance to request dims to continue.
* @return Non-null dim bounds if the dimmer is showing.
*/
Rect resetDimStates() {
void resetDimStates() {
if (mDimState == null) {
return null;
return;
}
if (!mDimState.mDontReset) {
mDimState.mDimming = false;
}
return mDimState.mDimBounds;
}
/** Returns non-null bounds if the dimmer is showing. */
Rect getDimBounds() {
return mDimState != null ? mDimState.mDimBounds : null;
}
void dontAnimateExit() {

View File

@@ -779,8 +779,9 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> {
@Override
void prepareSurfaces() {
final Rect dimBounds = mDimmer.resetDimStates();
mDimmer.resetDimStates();
super.prepareSurfaces();
final Rect dimBounds = mDimmer.getDimBounds();
if (dimBounds != null) {
// Bounds need to be relative, as the dim layer is a child.
getBounds(dimBounds);

View File

@@ -3253,9 +3253,10 @@ class Task extends TaskFragment {
@Override
void prepareSurfaces() {
final Rect dimBounds = mDimmer.resetDimStates();
mDimmer.resetDimStates();
super.prepareSurfaces();
final Rect dimBounds = mDimmer.getDimBounds();
if (dimBounds != null) {
getDimBounds(dimBounds);

View File

@@ -2923,9 +2923,10 @@ class TaskFragment extends WindowContainer<WindowContainer> {
return;
}
final Rect dimBounds = mDimmer.resetDimStates();
mDimmer.resetDimStates();
super.prepareSurfaces();
final Rect dimBounds = mDimmer.getDimBounds();
if (dimBounds != null) {
// Bounds need to be relative, as the dim layer is a child.
dimBounds.offsetTo(0 /* newLeft */, 0 /* newTop */);