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

Commit 24cf50f0 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

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
parent 24e9f93b
Loading
Loading
Loading
Loading
+25 −3
Original line number Diff line number Diff line
@@ -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,