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

Commit b7e181c7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Combining the Thumbnail bitmap with the background to fix background...

Merge "Combining the Thumbnail bitmap with the background to fix background spilling in the front." into tm-dev
parents 76263c2d 5a9dce51
Loading
Loading
Loading
Loading
+19 −14
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import androidx.core.graphics.ColorUtils;
import com.android.launcher3.BaseActivity;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Utilities;
import com.android.launcher3.icons.BitmapRenderer;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.util.SystemUiController;
import com.android.quickstep.TaskOverlayFactory.TaskOverlay;
@@ -161,6 +162,23 @@ public class TaskThumbnailView extends View {
        setThumbnail(task, thumbnailData, true /* refreshNow */);
    }

    /**
     * By combining the two in a single bitmap then we only have to do a single draw
     * call in the onDraw function. Also, this fixes a bug where the background was
     * visible in the corners because of anti-aliasing.
     */
    public Bitmap combineThumbnailAndBackground(Bitmap bm) {
        return BitmapRenderer.createHardwareBitmap(bm.getWidth(), bm.getHeight(), c -> {
            final boolean drawBackgroundOnly = mTask == null || mTask.isLocked;
            if (drawBackgroundOnly) {
                c.drawPaint(mBackgroundPaint);
            } else {
                c.drawPaint(mBackgroundPaint);
                c.drawBitmap(bm, 0, 0, null);
            }
        });
    }

    /** Updates the shader, paint, matrix to redraw. */
    public void refresh() {
        refresh(false);
@@ -173,6 +191,7 @@ public class TaskThumbnailView extends View {
    private void refresh(boolean shouldRefreshOverlay) {
        if (mThumbnailData != null && mThumbnailData.thumbnail != null) {
            Bitmap bm = mThumbnailData.thumbnail;
            bm = combineThumbnailAndBackground(bm);
            bm.prepareToDraw();
            mBitmapShader = new BitmapShader(bm, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
            mPaint.setShader(mBitmapShader);
@@ -194,7 +213,6 @@ public class TaskThumbnailView extends View {
     * <p>
     * If dimAlpha is 0, no dimming is applied; if dimAlpha is 1, the thumbnail will be the
     * extracted background color.
     *
     */
    public void setDimAlpha(float dimAlpha) {
        mDimAlpha = dimAlpha;
@@ -296,18 +314,6 @@ public class TaskThumbnailView extends View {
                return;
            }
        }

        // Always draw the background since the snapshots might be translucent or partially empty
        // (For example, tasks been reparented out of dismissing split root when drag-to-dismiss
        // split screen).
        canvas.drawRoundRect(x, y, width, height, cornerRadius, cornerRadius, mBackgroundPaint);

        final boolean drawBackgroundOnly = mTask == null || mTask.isLocked || mBitmapShader == null
                || mThumbnailData == null;
        if (drawBackgroundOnly) {
            return;
        }

        canvas.drawRoundRect(x, y, width, height, cornerRadius, cornerRadius, mPaint);
    }

@@ -338,7 +344,6 @@ public class TaskThumbnailView extends View {

    private void updateThumbnailPaintFilter() {
        ColorFilter filter = getColorFilter(mDimAlpha);
        mBackgroundPaint.setColorFilter(filter);
        int alpha = (int) (mDimAlpha * 255);
        mDimmingPaintAfterClearing.setAlpha(alpha);
        if (mBitmapShader != null) {