Merge "Combining the Thumbnail bitmap with the background to fix background spilling in the front." into tm-dev

This commit is contained in:
TreeHugger Robot
2022-03-01 22:29:09 +00:00
committed by Android (Google) Code Review
@@ -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) {