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

Commit d70695ee authored by Derek Sollenberger's avatar Derek Sollenberger
Browse files

Add an O-release targetAPI check for Canvas.setBitmap.

For apps targeting releases earlier than O setBitmap will attempt
to preserve the matrix from the previous bitmap.  It does not however
attempt to reconstruct the save/restore stack or the clip.

Test: manual test of messenger app referenced in the bug
Bug: 37589964
Change-Id: I67f0928a3f84a8be41da38ef1868e79bdeb03e46
parent 6d4db456
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4462,6 +4462,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            sIgnoreMeasureCache = targetSdkVersion < Build.VERSION_CODES.KITKAT;
            Canvas.sCompatibilityRestore = targetSdkVersion < Build.VERSION_CODES.M;
            Canvas.sCompatibilitySetBitmap = targetSdkVersion < Build.VERSION_CODES.O;
            // In M and newer, our widgets can pass a "hint" value in the size
            // for UNSPECIFIED MeasureSpecs. This lets child views of scrolling containers
+11 −0
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@ import javax.microedition.khronos.opengles.GL;
public class Canvas extends BaseCanvas {
    /** @hide */
    public static boolean sCompatibilityRestore = false;
    /** @hide */
    public static boolean sCompatibilitySetBitmap = false;

    /** @hide */
    public long getNativeCanvasWrapper() {
@@ -172,6 +174,11 @@ public class Canvas extends BaseCanvas {
            throw new RuntimeException("Can't set a bitmap device on a HW accelerated canvas");
        }

        Matrix preservedMatrix = null;
        if (bitmap != null && sCompatibilitySetBitmap) {
            preservedMatrix = getMatrix();
        }

        if (bitmap == null) {
            nSetBitmap(mNativeCanvasWrapper, null);
            mDensity = Bitmap.DENSITY_NONE;
@@ -185,6 +192,10 @@ public class Canvas extends BaseCanvas {
            mDensity = bitmap.mDensity;
        }

        if (preservedMatrix != null) {
            setMatrix(preservedMatrix);
        }

        mBitmap = bitmap;
    }