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

Commit 93685017 authored by Cassy Chun-Crogan's avatar Cassy Chun-Crogan
Browse files

[DocsUI M3] Uplift folders in grid

Use the new grid item layout for folders. This means that the folder
and file item logic will be combined into the GridDocumentHolder.
The following differences between GridDirectoryHolder and
GridDocumentHolder have been folded into GridDocumentHolder:
- inSelectRegion() is only activated for ACTION_BROWSE for folders.
   - This condition is now checked for folders.
- There is no previewIcon (bindPreviewIcon()) for folders.
   - bindPreviewIcon() now exits early for folders
- There is no image thumbnail for folders, the folder mime icon is
hardcoded in instead.
   - mIconHelper.load() now handles finding the folder mime icon, which
     is the same logic used by ListDocumentHolder which also handled
     both files and folders.

See b/400807990 #comment2 for before and after screenshots.

Bug: 400807990
Test: m DocumentsUIGoogle && manual inspection
Flag: com.android.documentsui.flags.use_material3
Change-Id: I0ee8725b8f93f4b53e9f2e02cb95b8ba93406786
parent 725f07ab
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -157,6 +157,7 @@
                    android:textAppearance="@style/ItemCaptionText" />

                <TextView
                    android:id="@+id/bullet"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="4dp"
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import com.android.modules.utils.build.SdkLevel;

import java.util.Map;

// TODO(b/379776735): remove this file after use_material3 flag is launched.
final class GridDirectoryHolder extends DocumentHolder {
    final TextView mTitle;

+19 −2
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import com.android.documentsui.DocumentsApplication;
import com.android.documentsui.R;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
import com.android.documentsui.base.UserId;
import com.android.documentsui.roots.RootCursorWrapper;
import com.android.documentsui.ui.Views;
@@ -59,6 +60,8 @@ final class GridDocumentHolder extends DocumentHolder {
    final TextView mTitle;
    final TextView mDate;
    final TextView mDetails;
    // Non-null only when useMaterial3 flag is ON.
    final @Nullable TextView mBullet;
    final ImageView mIconMimeLg;
    // Null when useMaterial3 flag is ON.
    final @Nullable ImageView mIconMimeSm;
@@ -82,11 +85,13 @@ final class GridDocumentHolder extends DocumentHolder {
        super(context, parent, R.layout.item_doc_grid, configStore);

        if (isUseMaterial3FlagEnabled()) {
            mBullet = itemView.findViewById(R.id.bullet);
            mIconWrapper = itemView.findViewById(R.id.icon_wrapper);
            mIconLayout = null;
            mIconMimeSm = null;
            mIconCheck = null;
        } else {
            mBullet = null;
            mIconWrapper = null;
            mIconLayout = itemView.findViewById(R.id.icon);
            mIconMimeSm = (ImageView) itemView.findViewById(R.id.icon_mime_sm);
@@ -172,13 +177,18 @@ final class GridDocumentHolder extends DocumentHolder {

    @Override
    public void bindPreviewIcon(boolean show, Function<View, Boolean> clickCallback) {
        if (isUseMaterial3FlagEnabled() && mDoc.isDirectory()) {
            mPreviewIcon.setVisibility(View.GONE);
            return;
        }
        mPreviewIcon.setVisibility(show ? View.VISIBLE : View.GONE);
        if (show) {
            mPreviewIcon.setContentDescription(
                    getPreviewIconContentDescription(
                            mIconHelper.shouldShowBadge(mDoc.userId.getIdentifier()),
                            mDoc.displayName, mDoc.userId));
            mPreviewIcon.setAccessibilityDelegate(new PreviewAccessibilityDelegate(clickCallback));
            mPreviewIcon.setAccessibilityDelegate(
                    new PreviewAccessibilityDelegate(clickCallback));
        }
    }

@@ -207,7 +217,8 @@ final class GridDocumentHolder extends DocumentHolder {
    @Override
    public boolean inSelectRegion(MotionEvent event) {
        if (isUseMaterial3FlagEnabled()) {
            return Views.isEventOver(event, itemView.getParent(), mIconWrapper);
            return (mDoc.isDirectory() && !(mAction == State.ACTION_BROWSE)) ? false
                    : Views.isEventOver(event, itemView.getParent(), mIconWrapper);
        }
        return Views.isEventOver(event, itemView.getParent(), mIconLayout);
    }
@@ -281,5 +292,11 @@ final class GridDocumentHolder extends DocumentHolder {
                mDetails.setText(Formatter.formatFileSize(mContext, docSize));
            }
        }

        if (mBullet != null && (mDetails.getVisibility() == View.GONE
                || mDate.getText().isEmpty())) {
            // There is no need for the bullet separating the details and date.
            mBullet.setVisibility(View.GONE);
        }
    }
}
+7 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.documentsui.base.DocumentInfo.getCursorInt;
import static com.android.documentsui.base.DocumentInfo.getCursorString;
import static com.android.documentsui.base.State.MODE_GRID;
import static com.android.documentsui.base.State.MODE_LIST;
import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;

import android.database.Cursor;
import android.provider.DocumentsContract.Document;
@@ -95,8 +96,12 @@ final class ModelBackedDocumentsAdapter extends DocumentsAdapter {
            case MODE_GRID:
                switch (viewType) {
                    case ITEM_TYPE_DIRECTORY:
                        holder =
                                new GridDirectoryHolder(
                        // Under the Material3 flag, the GridDocumentHolder is the holder for all
                        // grid items.
                        holder = isUseMaterial3FlagEnabled()
                                ? new GridDocumentHolder(
                                mEnv.getContext(), parent, mIconHelper, mConfigStore)
                                : new GridDirectoryHolder(
                                        mEnv.getContext(), parent, mIconHelper, mConfigStore);
                        break;
                    case ITEM_TYPE_DOCUMENT: