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

Commit 867b812e authored by Chris Craik's avatar Chris Craik
Browse files

Fix status bar background flicker

Fixes: 28533578

Change-Id: I075f49b7d20e0e95e790a9755d104a0a51575054
parent 08ca2e3a
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;
import android.os.RemoteException;
@@ -257,6 +258,26 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
        setWillNotDraw(getBackground() == null && !mBackgroundFallback.hasFallback());
    }

    @Override
    public boolean gatherTransparentRegion(Region region) {
        boolean statusOpaque = gatherTransparentRegion(mStatusColorViewState, region);
        boolean navOpaque = gatherTransparentRegion(mNavigationColorViewState, region);
        boolean decorOpaque = super.gatherTransparentRegion(region);

        // combine bools after computation, so each method above always executes
        return statusOpaque || navOpaque || decorOpaque;
    }

    boolean gatherTransparentRegion(ColorViewState colorViewState, Region region) {
        if (colorViewState.view != null && colorViewState.visible && isResizing()) {
            // If a visible ColorViewState is in a resizing host DecorView, forcibly register its
            // opaque area, since it's drawn by a different root RenderNode. It would otherwise be
            // rejected by ViewGroup#gatherTransparentRegion() for the view not being VISIBLE.
            return colorViewState.view.gatherTransparentRegion(region);
        }
        return false; // no opaque area added
    }

    @Override
    public void onDraw(Canvas c) {
        super.onDraw(c);