Round thumbnail corners

Round the task thumbnail corners as per the mocks by setting the bitmap
as a shader.

Bug: 114136250
Test: See rounded thumbnails on recents Go
Change-Id: I2bf8ebce34deb0d1cb6199cf8f6d5fa6ac746bb8
This commit is contained in:
Kevin 2019-04-25 17:16:53 -07:00
parent efe8475093
commit 90bddf0cf8
4 changed files with 39 additions and 4 deletions

View File

@ -18,5 +18,5 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/darker_gray"/>
<corners android:radius="2dp"/>
<corners android:radius="@dimen/task_thumbnail_corner_radius"/>
</shape>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2019 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<dimen name="task_thumbnail_corner_radius">3dp</dimen>
</resources>

View File

@ -16,17 +16,23 @@
package com.android.quickstep;
import static android.graphics.Shader.TileMode.CLAMP;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
import com.android.launcher3.R;
import com.android.systemui.shared.recents.model.ThumbnailData;
/**
@ -39,11 +45,18 @@ public final class ThumbnailDrawable extends Drawable {
private final Paint mPaint = new Paint();
private final Matrix mMatrix = new Matrix();
private final ThumbnailData mThumbnailData;
private final BitmapShader mShader;
private final RectF mDestRect = new RectF();
private final int mCornerRadius;
private int mRequestedOrientation;
public ThumbnailDrawable(@NonNull ThumbnailData thumbnailData, int requestedOrientation) {
public ThumbnailDrawable(Resources res, @NonNull ThumbnailData thumbnailData,
int requestedOrientation) {
mThumbnailData = thumbnailData;
mRequestedOrientation = requestedOrientation;
mCornerRadius = (int) res.getDimension(R.dimen.task_thumbnail_corner_radius);
mShader = new BitmapShader(mThumbnailData.thumbnail, CLAMP, CLAMP);
mPaint.setShader(mShader);
updateMatrix();
}
@ -64,12 +77,13 @@ public final class ThumbnailDrawable extends Drawable {
if (mThumbnailData.thumbnail == null) {
return;
}
canvas.drawBitmap(mThumbnailData.thumbnail, mMatrix, mPaint);
canvas.drawRoundRect(mDestRect, mCornerRadius, mCornerRadius, mPaint);
}
@Override
protected void onBoundsChange(Rect bounds) {
super.onBoundsChange(bounds);
mDestRect.set(bounds);
updateMatrix();
}
@ -125,5 +139,6 @@ public final class ThumbnailDrawable extends Drawable {
}
// Scale to fill.
mMatrix.postScale(scaleX, scaleY);
mShader.setLocalMatrix(mMatrix);
}
}

View File

@ -177,7 +177,8 @@ public final class TaskItemView extends LinearLayout {
return mDefaultThumbnail;
}
int orientation = getResources().getConfiguration().orientation;
return new ThumbnailDrawable(thumbnailData, orientation /* requestedOrientation */);
return new ThumbnailDrawable(getResources(), thumbnailData,
orientation /* requestedOrientation */);
}
private @NonNull String getSafeLabel(@Nullable String label) {