summaryrefslogtreecommitdiff
path: root/src/com
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2025-03-17 22:51:54 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-17 22:51:54 -0700
commit5d4b99a40e85da7260b2cf034b715ca8ba903ab8 (patch)
tree9ea93cb13256efd3b36b2d25faeb5f6934c7be5d /src/com
parent91bc3ee29efaba6a55bb1eb8e5cc6c214cde7ca0 (diff)
parentda3f6d64b886035ee536fea32577fd9a133b23bb (diff)
Merge "[DocsUI M3] Fix the corner pixelation for thumbnail" into main
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/documentsui/IconUtils.java32
-rw-r--r--src/com/android/documentsui/dirlist/GridDocumentHolder.java8
-rw-r--r--src/com/android/documentsui/dirlist/ListDocumentHolder.java5
3 files changed, 45 insertions, 0 deletions
diff --git a/src/com/android/documentsui/IconUtils.java b/src/com/android/documentsui/IconUtils.java
index 1763fd2a3..ece38bb64 100644
--- a/src/com/android/documentsui/IconUtils.java
+++ b/src/com/android/documentsui/IconUtils.java
@@ -19,8 +19,12 @@ package com.android.documentsui;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
+import android.graphics.Outline;
import android.graphics.drawable.Drawable;
import android.util.TypedValue;
+import android.view.View;
+import android.view.ViewOutlineProvider;
+import android.widget.ImageView;
import com.android.documentsui.base.UserId;
@@ -80,4 +84,32 @@ public class IconUtils {
context.getTheme().resolveAttribute(tintAttrId, outValue, true);
return applyTintColor(context, drawableId, outValue.resourceId);
}
+
+ /**
+ * When a ImageView loads a thumbnail from a bitmap, we usually uses a CardView to wrap it to
+ * apply CardView's corner radius to the ImageView. This causes the corner pixelation of the
+ * thumbnail especially when there's a border (stroke) around the CardView. This method creates
+ * a custom clip outline with the correct shape to fix this issue.
+ *
+ * @param imageView ImageView to apply clip outline.
+ * @param strokeWidth stroke width of the thumbnail.
+ * @param cornerRadius corner radius of the thumbnail.
+ */
+ public static void applyThumbnailClipOutline(
+ ImageView imageView, int strokeWidth, int cornerRadius) {
+ ViewOutlineProvider outlineProvider =
+ new ViewOutlineProvider() {
+ @Override
+ public void getOutline(View view, Outline outline) {
+ outline.setRoundRect(
+ strokeWidth,
+ strokeWidth,
+ view.getWidth() - strokeWidth,
+ view.getHeight() - strokeWidth,
+ cornerRadius);
+ }
+ };
+ imageView.setOutlineProvider(outlineProvider);
+ imageView.setClipToOutline(true);
+ }
}
diff --git a/src/com/android/documentsui/dirlist/GridDocumentHolder.java b/src/com/android/documentsui/dirlist/GridDocumentHolder.java
index 431ace5d9..67ee1f2bf 100644
--- a/src/com/android/documentsui/dirlist/GridDocumentHolder.java
+++ b/src/com/android/documentsui/dirlist/GridDocumentHolder.java
@@ -41,6 +41,7 @@ import androidx.annotation.RequiresApi;
import com.android.documentsui.ConfigStore;
import com.android.documentsui.DocumentsApplication;
+import com.android.documentsui.IconUtils;
import com.android.documentsui.R;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.Shared;
@@ -112,6 +113,13 @@ final class GridDocumentHolder extends DocumentHolder {
mIconBadge = (ImageView) itemView.findViewById(R.id.icon_profile_badge);
mPreviewIcon = itemView.findViewById(R.id.preview_icon);
+ if (isUseMaterial3FlagEnabled()) {
+ int clipCornerRadius = context.getResources()
+ .getDimensionPixelSize(R.dimen.thumbnail_clip_corner_radius);
+ IconUtils.applyThumbnailClipOutline(
+ mIconThumb, mThumbnailStrokeWidth, clipCornerRadius);
+ }
+
mIconHelper = iconHelper;
if (SdkLevel.isAtLeastT() && !mConfigStore.isPrivateSpaceInDocsUIEnabled()) {
diff --git a/src/com/android/documentsui/dirlist/ListDocumentHolder.java b/src/com/android/documentsui/dirlist/ListDocumentHolder.java
index 24b7e3ae5..d91c9547e 100644
--- a/src/com/android/documentsui/dirlist/ListDocumentHolder.java
+++ b/src/com/android/documentsui/dirlist/ListDocumentHolder.java
@@ -43,6 +43,7 @@ import androidx.annotation.RequiresApi;
import com.android.documentsui.ConfigStore;
import com.android.documentsui.DocumentsApplication;
+import com.android.documentsui.IconUtils;
import com.android.documentsui.R;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.Lookup;
@@ -109,6 +110,10 @@ final class ListDocumentHolder extends DocumentHolder {
mThumbnailStrokeWidth =
context.getResources()
.getDimensionPixelSize(R.dimen.list_item_thumbnail_border_width);
+ int clipCornerRadius = context.getResources()
+ .getDimensionPixelSize(R.dimen.thumbnail_clip_corner_radius);
+ IconUtils.applyThumbnailClipOutline(
+ mIconThumb, mThumbnailStrokeWidth, clipCornerRadius);
} else {
mThumbnailStrokeWidth = 0;
}