Pretend to be having the original background

...as otherwise setWindowBackground(bg) => bg == dv.getBackground
property is violated.

Also ensure the setBackground updates mOriginalBackground as well,
such that getBackground doesn't return a stale value.

Test: WindowTest
Test: Open maps
Bug: 130586696
Fixes: 130170137
Change-Id: I22b74ca6d4fd18600645b5d24814a90b8528745c
This commit is contained in:
Jorim Jaggi
2019-04-09 15:16:23 +02:00
parent 24e9f93b71
commit 24cf50f00c

View File

@@ -630,7 +630,8 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
drawingBounds.bottom -= framePadding.bottom - frameOffsets.bottom;
}
Drawable bg = getBackground();
// Need to call super here as we pretend to be having the original background.
Drawable bg = super.getBackground();
if (bg != null) {
bg.setBounds(drawingBounds);
}
@@ -975,6 +976,18 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
}
}
@Override
public void setBackgroundDrawable(Drawable background) {
// TODO: This should route through setWindowBackground, but late in the release to make this
// change.
if (mOriginalBackgroundDrawable != background) {
mOriginalBackgroundDrawable = background;
updateBackgroundDrawable();
drawableChanged();
}
}
public void setWindowFrame(Drawable drawable) {
if (getForeground() != drawable) {
setForeground(drawable);
@@ -1218,9 +1231,13 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
return;
}
if (mOriginalBackgroundDrawable == null || mBackgroundInsets.equals(Insets.NONE)) {
setBackground(mOriginalBackgroundDrawable);
// Call super since we are intercepting setBackground on this class.
super.setBackgroundDrawable(mOriginalBackgroundDrawable);
} else {
setBackground(new InsetDrawable(mOriginalBackgroundDrawable,
// Call super since we are intercepting setBackground on this class.
super.setBackgroundDrawable(new InsetDrawable(mOriginalBackgroundDrawable,
mBackgroundInsets.left, mBackgroundInsets.top,
mBackgroundInsets.right, mBackgroundInsets.bottom) {
@@ -1238,6 +1255,11 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
mLastOriginalBackgroundDrawable = mOriginalBackgroundDrawable;
}
@Override
public Drawable getBackground() {
return mOriginalBackgroundDrawable;
}
private int calculateStatusBarColor() {
return calculateBarColor(mWindow.getAttributes().flags, FLAG_TRANSLUCENT_STATUS,
mSemiTransparentBarColor, mWindow.mStatusBarColor,