Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f833085 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Defer updating dim layers if layout is deferred

When a translucent activity is on top of launcher and the activity
is animated away, we update the layers too early in case the
activity window is dimming. After starting the launcher, launcher
is on top of activity already in the hierarchy, but we haven't
started the transtion yet which would prevent the launcher to be
visible on top of activity by the anim layer adjustment.

To fix this, we prevent updating the layers if layout is currently
deferred.

Ideally we would do the whole activityStart in one surface
transaction but that's way too risky at this point.

Test: Open translucent dimming activity over launcher, press home,
ensure no flickering.
Test: go/wm-smoke

Change-Id: I72b8f5f555b555646121355c19cf7813e4f8d7a3
Fixes: 64206558
parent c0c9324f
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -2036,6 +2036,11 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        if (dc == null) {
            return;
        }

        // If layout is currently deferred, we want to hold of with updating the layers.
        if (mService.mWindowPlacerLocked.isLayoutDeferred()) {
            return;
        }
        final DimLayer.DimLayerUser dimLayerUser = getDimLayerUser();
        if (dimLayerUser != null && dc.mDimLayerController.isDimming(dimLayerUser, mWinAnimator)) {
            // Force an animation pass just to update the mDimLayer layer.
+4 −0
Original line number Diff line number Diff line
@@ -127,6 +127,10 @@ class WindowSurfacePlacer {
        }
    }

    boolean isLayoutDeferred() {
        return mDeferDepth > 0;
    }

    final void performSurfacePlacement() {
        performSurfacePlacement(false /* force */);
    }