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

Commit c5d55863 authored by Romain Guy's avatar Romain Guy
Browse files

Correctly invalidate views that transition from opaque to non-opaque.

Bug #3337037

Change-Id: I31397273a31b6004e2e3801866122bcbb3ebee5d
parent 2152ca58
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -1813,6 +1813,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
    private int mPrevWidth = -1;
    private int mPrevHeight = -1;

    private boolean mLastIsOpaque;    
    
    /**
     * Convenience value to check for float values that are close enough to zero to be considered
     * zero.
@@ -6734,8 +6736,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
            ViewDebug.trace(this, ViewDebug.HierarchyTraceType.INVALIDATE);
        }

        boolean opaque = isOpaque();
        if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||
                (invalidateCache && (mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID)) {
                (invalidateCache && (mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID) ||
                opaque != mLastIsOpaque) {
            mLastIsOpaque = opaque;
            mPrivateFlags &= ~DRAWN;
            if (invalidateCache) {
                mPrivateFlags &= ~DRAWING_CACHE_VALID;
+4 −2
Original line number Diff line number Diff line
@@ -710,8 +710,10 @@ public final class ViewRoot extends Handler implements ViewParent,
            // object is not initialized to its backing store, but soon it
            // will be (assuming the window is visible).
            attachInfo.mSurface = mSurface;
            attachInfo.mUse32BitDrawingCache = PixelFormat.formatHasAlpha(lp.format) ||
                    lp.format == PixelFormat.RGBX_8888;
            // We used to use the following condition to choose 32 bits drawing caches:
            // PixelFormat.hasAlpha(lp.format) || lp.format == PixelFormat.RGBX_8888
            // However, windows are now always 32 bits by default, so choose 32 bits
            attachInfo.mUse32BitDrawingCache = true;
            attachInfo.mHasWindowFocus = false;
            attachInfo.mWindowVisibility = viewVisibility;
            attachInfo.mRecomputeGlobalAttributes = false;