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

Commit 5d4b99a4 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[DocsUI M3] Fix the corner pixelation for thumbnail" into main

parents 91bc3ee2 da3f6d64
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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>
+32 −0
Original line number Diff line number Diff line
@@ -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);
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -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()) {
+5 −0
Original line number Diff line number Diff line
@@ -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;
        }