Loading src/com/android/documentsui/base/State.java +3 −2 Original line number Diff line number Diff line Loading @@ -16,12 +16,13 @@ package com.android.documentsui.base; import androidx.annotation.IntDef; import android.content.Intent; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; import androidx.annotation.IntDef; import com.android.documentsui.services.FileOperationService; import com.android.documentsui.services.FileOperationService.OpType; import com.android.documentsui.sorting.SortModel; Loading Loading @@ -130,7 +131,7 @@ public class State implements android.os.Parcelable { * @return True, if acceptMimes are all image type and action is file picking. */ public boolean isPhotoPicking() { if (action != ACTION_GET_CONTENT && action != ACTION_OPEN) { if (action != ACTION_GET_CONTENT && action != ACTION_OPEN || acceptMimes == null) { return false; } Loading src/com/android/documentsui/dirlist/DirectoryAddonsAdapter.java +6 −3 Original line number Diff line number Diff line Loading @@ -16,9 +16,10 @@ package com.android.documentsui.dirlist; import android.view.ViewGroup; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver; import android.view.ViewGroup; import com.android.documentsui.Model; import com.android.documentsui.Model.Update; Loading Loading @@ -72,17 +73,19 @@ final class DirectoryAddonsAdapter extends DocumentsAdapter { return new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { final int columnCount = mEnv.getColumnCount(); // Make layout whitespace span the grid. This has the effect of breaking // grid rows whenever layout whitespace is encountered. if (getItemViewType(position) == ITEM_TYPE_SECTION_BREAK || getItemViewType(position) == ITEM_TYPE_HEADER_MESSAGE || getItemViewType(position) == ITEM_TYPE_INFLATED_MESSAGE) { return mEnv.getColumnCount(); return columnCount; } else if (mEnv.getDisplayState().isPhotoPicking() && mEnv.getDisplayState().derivedMode == State.MODE_GRID) { // If on photo picking state and grid mode, // the UI should show 3 images a row or 2 folders a row. return getItemViewType(position) == ITEM_TYPE_DIRECTORY ? 3 : 2; return getItemViewType(position) == ITEM_TYPE_DIRECTORY ? Math.min(columnCount, 3) : Math.min(columnCount, 2); } else { return 1; } Loading src/com/android/documentsui/dirlist/DirectoryFragment.java +7 −6 Original line number Diff line number Diff line Loading @@ -22,9 +22,6 @@ import static com.android.documentsui.base.SharedMinimal.VERBOSE; import static com.android.documentsui.base.State.MODE_GRID; import static com.android.documentsui.base.State.MODE_LIST; import androidx.annotation.DimenRes; import androidx.annotation.FractionRes; import androidx.annotation.IntDef; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; Loading @@ -47,6 +44,9 @@ import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.ImageView; import androidx.annotation.DimenRes; import androidx.annotation.FractionRes; import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; Loading @@ -56,8 +56,8 @@ import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails; import androidx.recyclerview.selection.MutableSelection; import androidx.recyclerview.selection.Selection; import androidx.recyclerview.selection.SelectionTracker; import androidx.recyclerview.selection.StorageStrategy; import androidx.recyclerview.selection.SelectionTracker.SelectionPredicate; import androidx.recyclerview.selection.StorageStrategy; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup; import androidx.recyclerview.widget.RecyclerView; Loading Loading @@ -166,6 +166,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On private DocumentClipper mClipper; private GridLayoutManager mLayout; private int mColumnCount = 1; // This will get updated when layout changes. private int mColumnUnit = 1; private float mLiveScale = 1.0f; private @ViewMode int mMode; Loading Loading @@ -597,8 +598,8 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On // Clamp so that we always lay out the grid with at least 2 columns by default. // If on photo picking state, the UI should show 3 images a row or 2 folders a row, // so use 6 columns by default and set folder size to 3 and document size is to 2. int minColumnCount = mState.isPhotoPicking() ? 6 : 2; int columnCount = Math.max(minColumnCount, mColumnUnit = mState.isPhotoPicking() ? 3 : 1; int columnCount = mColumnUnit * Math.max(2, (mRecView.getWidth() - viewPadding) / (cellWidth + cellMargin)); // Finally with our grid count logic firmly in place, we apply any live scaling Loading tests/unit/com/android/documentsui/base/StateTest.java +10 −0 Original line number Diff line number Diff line Loading @@ -133,4 +133,14 @@ public class StateTest { assertFalse(mState.isPhotoPicking()); } @Test public void testPhotoPicking_nullExrta() { final String[] mimeTypes = null; mIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes); mState.initAcceptMimes(mIntent, "*/*"); mState.action = State.ACTION_GET_CONTENT; assertFalse(mState.isPhotoPicking()); } } Loading
src/com/android/documentsui/base/State.java +3 −2 Original line number Diff line number Diff line Loading @@ -16,12 +16,13 @@ package com.android.documentsui.base; import androidx.annotation.IntDef; import android.content.Intent; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; import androidx.annotation.IntDef; import com.android.documentsui.services.FileOperationService; import com.android.documentsui.services.FileOperationService.OpType; import com.android.documentsui.sorting.SortModel; Loading Loading @@ -130,7 +131,7 @@ public class State implements android.os.Parcelable { * @return True, if acceptMimes are all image type and action is file picking. */ public boolean isPhotoPicking() { if (action != ACTION_GET_CONTENT && action != ACTION_OPEN) { if (action != ACTION_GET_CONTENT && action != ACTION_OPEN || acceptMimes == null) { return false; } Loading
src/com/android/documentsui/dirlist/DirectoryAddonsAdapter.java +6 −3 Original line number Diff line number Diff line Loading @@ -16,9 +16,10 @@ package com.android.documentsui.dirlist; import android.view.ViewGroup; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver; import android.view.ViewGroup; import com.android.documentsui.Model; import com.android.documentsui.Model.Update; Loading Loading @@ -72,17 +73,19 @@ final class DirectoryAddonsAdapter extends DocumentsAdapter { return new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { final int columnCount = mEnv.getColumnCount(); // Make layout whitespace span the grid. This has the effect of breaking // grid rows whenever layout whitespace is encountered. if (getItemViewType(position) == ITEM_TYPE_SECTION_BREAK || getItemViewType(position) == ITEM_TYPE_HEADER_MESSAGE || getItemViewType(position) == ITEM_TYPE_INFLATED_MESSAGE) { return mEnv.getColumnCount(); return columnCount; } else if (mEnv.getDisplayState().isPhotoPicking() && mEnv.getDisplayState().derivedMode == State.MODE_GRID) { // If on photo picking state and grid mode, // the UI should show 3 images a row or 2 folders a row. return getItemViewType(position) == ITEM_TYPE_DIRECTORY ? 3 : 2; return getItemViewType(position) == ITEM_TYPE_DIRECTORY ? Math.min(columnCount, 3) : Math.min(columnCount, 2); } else { return 1; } Loading
src/com/android/documentsui/dirlist/DirectoryFragment.java +7 −6 Original line number Diff line number Diff line Loading @@ -22,9 +22,6 @@ import static com.android.documentsui.base.SharedMinimal.VERBOSE; import static com.android.documentsui.base.State.MODE_GRID; import static com.android.documentsui.base.State.MODE_LIST; import androidx.annotation.DimenRes; import androidx.annotation.FractionRes; import androidx.annotation.IntDef; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; Loading @@ -47,6 +44,9 @@ import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.ImageView; import androidx.annotation.DimenRes; import androidx.annotation.FractionRes; import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; Loading @@ -56,8 +56,8 @@ import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails; import androidx.recyclerview.selection.MutableSelection; import androidx.recyclerview.selection.Selection; import androidx.recyclerview.selection.SelectionTracker; import androidx.recyclerview.selection.StorageStrategy; import androidx.recyclerview.selection.SelectionTracker.SelectionPredicate; import androidx.recyclerview.selection.StorageStrategy; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup; import androidx.recyclerview.widget.RecyclerView; Loading Loading @@ -166,6 +166,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On private DocumentClipper mClipper; private GridLayoutManager mLayout; private int mColumnCount = 1; // This will get updated when layout changes. private int mColumnUnit = 1; private float mLiveScale = 1.0f; private @ViewMode int mMode; Loading Loading @@ -597,8 +598,8 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On // Clamp so that we always lay out the grid with at least 2 columns by default. // If on photo picking state, the UI should show 3 images a row or 2 folders a row, // so use 6 columns by default and set folder size to 3 and document size is to 2. int minColumnCount = mState.isPhotoPicking() ? 6 : 2; int columnCount = Math.max(minColumnCount, mColumnUnit = mState.isPhotoPicking() ? 3 : 1; int columnCount = mColumnUnit * Math.max(2, (mRecView.getWidth() - viewPadding) / (cellWidth + cellMargin)); // Finally with our grid count logic firmly in place, we apply any live scaling Loading
tests/unit/com/android/documentsui/base/StateTest.java +10 −0 Original line number Diff line number Diff line Loading @@ -133,4 +133,14 @@ public class StateTest { assertFalse(mState.isPhotoPicking()); } @Test public void testPhotoPicking_nullExrta() { final String[] mimeTypes = null; mIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes); mState.initAcceptMimes(mIntent, "*/*"); mState.action = State.ACTION_GET_CONTENT; assertFalse(mState.isPhotoPicking()); } }