Loading res/flag(com.android.documentsui.flags.use_material3)/values/dimens.xml +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ <dimen name="icon_size">40dp</dimen> <dimen name="button_touch_size">48dp</dimen> <dimen name="root_icon_size">24dp</dimen> <dimen name="thumbnail_clip_corner_radius">6dp</dimen> <!-- TODO(b/379776735): remove this block after use_material3 flag is launched. --> <dimen name="root_icon_margin">0dp</dimen> <dimen name="root_spacer_padding">0dp</dimen> Loading src/com/android/documentsui/IconUtils.java +32 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } } src/com/android/documentsui/dirlist/GridDocumentHolder.java +8 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()) { Loading src/com/android/documentsui/dirlist/ListDocumentHolder.java +5 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading Loading
res/flag(com.android.documentsui.flags.use_material3)/values/dimens.xml +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ <dimen name="icon_size">40dp</dimen> <dimen name="button_touch_size">48dp</dimen> <dimen name="root_icon_size">24dp</dimen> <dimen name="thumbnail_clip_corner_radius">6dp</dimen> <!-- TODO(b/379776735): remove this block after use_material3 flag is launched. --> <dimen name="root_icon_margin">0dp</dimen> <dimen name="root_spacer_padding">0dp</dimen> Loading
src/com/android/documentsui/IconUtils.java +32 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } }
src/com/android/documentsui/dirlist/GridDocumentHolder.java +8 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()) { Loading
src/com/android/documentsui/dirlist/ListDocumentHolder.java +5 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading