Fix status bar background flicker

Fixes: 28533578

Change-Id: I075f49b7d20e0e95e790a9755d104a0a51575054
This commit is contained in:
Chris Craik
2016-05-05 16:19:22 -07:00
parent 08ca2e3a75
commit 867b812eff

View File

@@ -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);