Loading api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -20812,6 +20812,7 @@ package android.provider { field public static final java.lang.String COLUMN_MIME_TYPE = "mime_type"; field public static final java.lang.String COLUMN_SIZE = "_size"; field public static final java.lang.String COLUMN_SUMMARY = "summary"; field public static final int FLAG_DIR_HIDE_GRID_TITLES = 64; // 0x40 field public static final int FLAG_DIR_PREFERS_GRID = 16; // 0x10 field public static final int FLAG_DIR_PREFERS_LAST_MODIFIED = 32; // 0x20 field public static final int FLAG_DIR_SUPPORTS_CREATE = 8; // 0x8 core/java/android/provider/DocumentsContract.java +12 −0 Original line number Diff line number Diff line Loading @@ -257,6 +257,18 @@ public final class DocumentsContract { * @see #COLUMN_FLAGS */ public static final int FLAG_DIR_PREFERS_LAST_MODIFIED = 1 << 5; /** * Flag indicating that document titles should be hidden when viewing * this directory in a larger format grid. For example, a directory * containing only images may want the image thumbnails to speak for * themselves. Only valid when {@link #COLUMN_MIME_TYPE} is * {@link #MIME_TYPE_DIR}. * * @see #COLUMN_FLAGS * @see #FLAG_DIR_PREFERS_GRID */ public static final int FLAG_DIR_HIDE_GRID_TITLES = 1 << 6; } /** Loading packages/DocumentsUI/res/layout/item_doc_grid.xml +16 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" android:layout_marginBottom="6dp" android:background="#fff"> <FrameLayout Loading Loading @@ -63,10 +64,10 @@ </FrameLayout> <LinearLayout android:id="@+id/line1" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingTop="6dp" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"> Loading Loading @@ -121,6 +122,20 @@ android:textAlignment="viewStart" style="@style/TextAppearance.Small" /> <Space android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> <ImageView android:id="@android:id/icon2" android:layout_width="@dimen/root_icon_size" android:layout_height="@dimen/root_icon_size" android:layout_marginStart="8dip" android:scaleType="centerInside" android:contentDescription="@null" android:visibility="gone" /> </LinearLayout> </LinearLayout> Loading packages/DocumentsUI/res/menu/activity.xml +3 −3 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ android:id="@+id/menu_create_dir" android:title="@string/menu_create_dir" android:icon="@drawable/ic_menu_new_folder" android:showAsAction="ifRoom" /> android:showAsAction="always" /> <item android:id="@+id/menu_search" android:title="@string/menu_search" Loading Loading @@ -48,12 +48,12 @@ android:id="@+id/menu_grid" android:title="@string/menu_grid" android:icon="@drawable/ic_menu_view_grid" android:showAsAction="ifRoom" /> android:showAsAction="never" /> <item android:id="@+id/menu_list" android:title="@string/menu_list" android:icon="@drawable/ic_menu_view_list" android:showAsAction="ifRoom" /> android:showAsAction="never" /> <item android:id="@+id/menu_settings" android:title="@string/menu_settings" Loading packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +59 −18 Original line number Diff line number Diff line Loading @@ -102,6 +102,8 @@ public class DirectoryFragment extends Fragment { private int mLastSortOrder = SORT_ORDER_UNKNOWN; private boolean mLastShowSize = false; private boolean mHideGridTitles = false; private Point mThumbSize; private DocumentsAdapter mAdapter; Loading @@ -112,11 +114,6 @@ public class DirectoryFragment extends Fragment { private static final String EXTRA_DOC = "doc"; private static final String EXTRA_QUERY = "query"; /** * MIME types that should always show thumbnails in list mode. */ private static final String[] LIST_THUMBNAIL_MIMES = new String[] { "image/*", "video/*" }; private static AtomicInteger sLoaderId = new AtomicInteger(4000); private final int mLoaderId = sLoaderId.incrementAndGet(); Loading Loading @@ -182,14 +179,23 @@ public class DirectoryFragment extends Fragment { final Context context = getActivity(); final State state = getDisplayState(DirectoryFragment.this); final RootInfo root = getArguments().getParcelable(EXTRA_ROOT); final DocumentInfo doc = getArguments().getParcelable(EXTRA_DOC); mAdapter = new DocumentsAdapter(); mType = getArguments().getInt(EXTRA_TYPE); if (mType == TYPE_RECENT_OPEN) { // Hide titles when showing recents for picking images/videos mHideGridTitles = MimePredicate.mimeMatches( MimePredicate.VISUAL_MIMES, state.acceptMimes); } else { mHideGridTitles = (doc != null) && doc.isGridTitlesHidden(); } mCallbacks = new LoaderCallbacks<DirectoryResult>() { @Override public Loader<DirectoryResult> onCreateLoader(int id, Bundle args) { final RootInfo root = getArguments().getParcelable(EXTRA_ROOT); final DocumentInfo doc = getArguments().getParcelable(EXTRA_DOC); final String query = getArguments().getString(EXTRA_QUERY); Uri contentsUri; Loading Loading @@ -643,6 +649,8 @@ public class DirectoryFragment extends Fragment { final Context context = parent.getContext(); final State state = getDisplayState(DirectoryFragment.this); final DocumentInfo doc = getArguments().getParcelable(EXTRA_DOC); final RootsCache roots = DocumentsApplication.getRootsCache(context); final ThumbnailCache thumbs = DocumentsApplication.getThumbnailsCache( context, mThumbSize); Loading Loading @@ -671,12 +679,15 @@ public class DirectoryFragment extends Fragment { final String docSummary = getCursorString(cursor, Document.COLUMN_SUMMARY); final long docSize = getCursorLong(cursor, Document.COLUMN_SIZE); final View line1 = convertView.findViewById(R.id.line1); final View line2 = convertView.findViewById(R.id.line2); final View icon = convertView.findViewById(android.R.id.icon); final ImageView iconMime = (ImageView) convertView.findViewById(R.id.icon_mime); final ImageView iconThumb = (ImageView) convertView.findViewById(R.id.icon_thumb); final TextView title = (TextView) convertView.findViewById(android.R.id.title); final View line2 = convertView.findViewById(R.id.line2); final ImageView icon1 = (ImageView) convertView.findViewById(android.R.id.icon1); final ImageView icon2 = (ImageView) convertView.findViewById(android.R.id.icon2); final TextView summary = (TextView) convertView.findViewById(android.R.id.summary); final TextView date = (TextView) convertView.findViewById(R.id.date); final TextView size = (TextView) convertView.findViewById(R.id.size); Loading @@ -692,10 +703,11 @@ public class DirectoryFragment extends Fragment { final boolean supportsThumbnail = (docFlags & Document.FLAG_SUPPORTS_THUMBNAIL) != 0; final boolean allowThumbnail = (state.derivedMode == MODE_GRID) || MimePredicate.mimeMatches(LIST_THUMBNAIL_MIMES, docMimeType); || MimePredicate.mimeMatches(MimePredicate.VISUAL_MIMES, docMimeType); final boolean showThumbnail = supportsThumbnail && allowThumbnail; boolean cacheHit = false; if (supportsThumbnail && allowThumbnail) { if (showThumbnail) { final Uri uri = DocumentsContract.buildDocumentUri(docAuthority, docId); final Bitmap cachedResult = thumbs.get(uri); if (cachedResult != null) { Loading Loading @@ -726,15 +738,19 @@ public class DirectoryFragment extends Fragment { } } title.setText(docDisplayName); boolean hasLine1 = false; boolean hasLine2 = false; final boolean hideTitle = (state.derivedMode == MODE_GRID) && mHideGridTitles; if (!hideTitle) { title.setText(docDisplayName); hasLine1 = true; } Drawable iconDrawable = null; if (mType == TYPE_RECENT_OPEN) { final RootInfo root = roots.getRoot(docAuthority, docRootId); final Drawable iconDrawable = root.loadIcon(context); icon1.setVisibility(View.VISIBLE); icon1.setImageDrawable(iconDrawable); iconDrawable = root.loadIcon(context); if (summary != null) { final boolean alwaysShowSummary = getResources() Loading @@ -756,7 +772,13 @@ public class DirectoryFragment extends Fragment { } } } else { icon1.setVisibility(View.GONE); // Directories showing thumbnails in grid mode get a little icon // hint to remind user they're a directory. if (Document.MIME_TYPE_DIR.equals(docMimeType) && state.derivedMode == MODE_GRID && showThumbnail) { iconDrawable = context.getResources().getDrawable(R.drawable.ic_root_folder); } if (summary != null) { if (docSummary != null) { summary.setText(docSummary); Loading @@ -768,6 +790,19 @@ public class DirectoryFragment extends Fragment { } } if (icon1 != null) icon1.setVisibility(View.GONE); if (icon2 != null) icon2.setVisibility(View.GONE); if (iconDrawable != null) { if (hasLine1) { icon1.setVisibility(View.VISIBLE); icon1.setImageDrawable(iconDrawable); } else { icon2.setVisibility(View.VISIBLE); icon2.setImageDrawable(iconDrawable); } } if (docLastModified == -1) { date.setText(null); } else { Loading @@ -787,6 +822,9 @@ public class DirectoryFragment extends Fragment { size.setVisibility(View.GONE); } if (line1 != null) { line1.setVisibility(hasLine1 ? View.VISIBLE : View.GONE); } if (line2 != null) { line2.setVisibility(hasLine2 ? View.VISIBLE : View.GONE); } Loading @@ -796,11 +834,13 @@ public class DirectoryFragment extends Fragment { if (enabled) { setEnabledRecursive(convertView, true); icon.setAlpha(1f); icon1.setAlpha(1f); if (icon1 != null) icon1.setAlpha(1f); if (icon2 != null) icon2.setAlpha(1f); } else { setEnabledRecursive(convertView, false); icon.setAlpha(0.5f); icon1.setAlpha(0.5f); if (icon1 != null) icon1.setAlpha(0.5f); if (icon2 != null) icon2.setAlpha(0.5f); } return convertView; Loading Loading @@ -943,6 +983,7 @@ public class DirectoryFragment extends Fragment { } private void setEnabledRecursive(View v, boolean enabled) { if (v == null) return; if (v.isEnabled() == enabled) return; v.setEnabled(enabled); Loading Loading
api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -20812,6 +20812,7 @@ package android.provider { field public static final java.lang.String COLUMN_MIME_TYPE = "mime_type"; field public static final java.lang.String COLUMN_SIZE = "_size"; field public static final java.lang.String COLUMN_SUMMARY = "summary"; field public static final int FLAG_DIR_HIDE_GRID_TITLES = 64; // 0x40 field public static final int FLAG_DIR_PREFERS_GRID = 16; // 0x10 field public static final int FLAG_DIR_PREFERS_LAST_MODIFIED = 32; // 0x20 field public static final int FLAG_DIR_SUPPORTS_CREATE = 8; // 0x8
core/java/android/provider/DocumentsContract.java +12 −0 Original line number Diff line number Diff line Loading @@ -257,6 +257,18 @@ public final class DocumentsContract { * @see #COLUMN_FLAGS */ public static final int FLAG_DIR_PREFERS_LAST_MODIFIED = 1 << 5; /** * Flag indicating that document titles should be hidden when viewing * this directory in a larger format grid. For example, a directory * containing only images may want the image thumbnails to speak for * themselves. Only valid when {@link #COLUMN_MIME_TYPE} is * {@link #MIME_TYPE_DIR}. * * @see #COLUMN_FLAGS * @see #FLAG_DIR_PREFERS_GRID */ public static final int FLAG_DIR_HIDE_GRID_TITLES = 1 << 6; } /** Loading
packages/DocumentsUI/res/layout/item_doc_grid.xml +16 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" android:layout_marginBottom="6dp" android:background="#fff"> <FrameLayout Loading Loading @@ -63,10 +64,10 @@ </FrameLayout> <LinearLayout android:id="@+id/line1" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingTop="6dp" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"> Loading Loading @@ -121,6 +122,20 @@ android:textAlignment="viewStart" style="@style/TextAppearance.Small" /> <Space android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> <ImageView android:id="@android:id/icon2" android:layout_width="@dimen/root_icon_size" android:layout_height="@dimen/root_icon_size" android:layout_marginStart="8dip" android:scaleType="centerInside" android:contentDescription="@null" android:visibility="gone" /> </LinearLayout> </LinearLayout> Loading
packages/DocumentsUI/res/menu/activity.xml +3 −3 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ android:id="@+id/menu_create_dir" android:title="@string/menu_create_dir" android:icon="@drawable/ic_menu_new_folder" android:showAsAction="ifRoom" /> android:showAsAction="always" /> <item android:id="@+id/menu_search" android:title="@string/menu_search" Loading Loading @@ -48,12 +48,12 @@ android:id="@+id/menu_grid" android:title="@string/menu_grid" android:icon="@drawable/ic_menu_view_grid" android:showAsAction="ifRoom" /> android:showAsAction="never" /> <item android:id="@+id/menu_list" android:title="@string/menu_list" android:icon="@drawable/ic_menu_view_list" android:showAsAction="ifRoom" /> android:showAsAction="never" /> <item android:id="@+id/menu_settings" android:title="@string/menu_settings" Loading
packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +59 −18 Original line number Diff line number Diff line Loading @@ -102,6 +102,8 @@ public class DirectoryFragment extends Fragment { private int mLastSortOrder = SORT_ORDER_UNKNOWN; private boolean mLastShowSize = false; private boolean mHideGridTitles = false; private Point mThumbSize; private DocumentsAdapter mAdapter; Loading @@ -112,11 +114,6 @@ public class DirectoryFragment extends Fragment { private static final String EXTRA_DOC = "doc"; private static final String EXTRA_QUERY = "query"; /** * MIME types that should always show thumbnails in list mode. */ private static final String[] LIST_THUMBNAIL_MIMES = new String[] { "image/*", "video/*" }; private static AtomicInteger sLoaderId = new AtomicInteger(4000); private final int mLoaderId = sLoaderId.incrementAndGet(); Loading Loading @@ -182,14 +179,23 @@ public class DirectoryFragment extends Fragment { final Context context = getActivity(); final State state = getDisplayState(DirectoryFragment.this); final RootInfo root = getArguments().getParcelable(EXTRA_ROOT); final DocumentInfo doc = getArguments().getParcelable(EXTRA_DOC); mAdapter = new DocumentsAdapter(); mType = getArguments().getInt(EXTRA_TYPE); if (mType == TYPE_RECENT_OPEN) { // Hide titles when showing recents for picking images/videos mHideGridTitles = MimePredicate.mimeMatches( MimePredicate.VISUAL_MIMES, state.acceptMimes); } else { mHideGridTitles = (doc != null) && doc.isGridTitlesHidden(); } mCallbacks = new LoaderCallbacks<DirectoryResult>() { @Override public Loader<DirectoryResult> onCreateLoader(int id, Bundle args) { final RootInfo root = getArguments().getParcelable(EXTRA_ROOT); final DocumentInfo doc = getArguments().getParcelable(EXTRA_DOC); final String query = getArguments().getString(EXTRA_QUERY); Uri contentsUri; Loading Loading @@ -643,6 +649,8 @@ public class DirectoryFragment extends Fragment { final Context context = parent.getContext(); final State state = getDisplayState(DirectoryFragment.this); final DocumentInfo doc = getArguments().getParcelable(EXTRA_DOC); final RootsCache roots = DocumentsApplication.getRootsCache(context); final ThumbnailCache thumbs = DocumentsApplication.getThumbnailsCache( context, mThumbSize); Loading Loading @@ -671,12 +679,15 @@ public class DirectoryFragment extends Fragment { final String docSummary = getCursorString(cursor, Document.COLUMN_SUMMARY); final long docSize = getCursorLong(cursor, Document.COLUMN_SIZE); final View line1 = convertView.findViewById(R.id.line1); final View line2 = convertView.findViewById(R.id.line2); final View icon = convertView.findViewById(android.R.id.icon); final ImageView iconMime = (ImageView) convertView.findViewById(R.id.icon_mime); final ImageView iconThumb = (ImageView) convertView.findViewById(R.id.icon_thumb); final TextView title = (TextView) convertView.findViewById(android.R.id.title); final View line2 = convertView.findViewById(R.id.line2); final ImageView icon1 = (ImageView) convertView.findViewById(android.R.id.icon1); final ImageView icon2 = (ImageView) convertView.findViewById(android.R.id.icon2); final TextView summary = (TextView) convertView.findViewById(android.R.id.summary); final TextView date = (TextView) convertView.findViewById(R.id.date); final TextView size = (TextView) convertView.findViewById(R.id.size); Loading @@ -692,10 +703,11 @@ public class DirectoryFragment extends Fragment { final boolean supportsThumbnail = (docFlags & Document.FLAG_SUPPORTS_THUMBNAIL) != 0; final boolean allowThumbnail = (state.derivedMode == MODE_GRID) || MimePredicate.mimeMatches(LIST_THUMBNAIL_MIMES, docMimeType); || MimePredicate.mimeMatches(MimePredicate.VISUAL_MIMES, docMimeType); final boolean showThumbnail = supportsThumbnail && allowThumbnail; boolean cacheHit = false; if (supportsThumbnail && allowThumbnail) { if (showThumbnail) { final Uri uri = DocumentsContract.buildDocumentUri(docAuthority, docId); final Bitmap cachedResult = thumbs.get(uri); if (cachedResult != null) { Loading Loading @@ -726,15 +738,19 @@ public class DirectoryFragment extends Fragment { } } title.setText(docDisplayName); boolean hasLine1 = false; boolean hasLine2 = false; final boolean hideTitle = (state.derivedMode == MODE_GRID) && mHideGridTitles; if (!hideTitle) { title.setText(docDisplayName); hasLine1 = true; } Drawable iconDrawable = null; if (mType == TYPE_RECENT_OPEN) { final RootInfo root = roots.getRoot(docAuthority, docRootId); final Drawable iconDrawable = root.loadIcon(context); icon1.setVisibility(View.VISIBLE); icon1.setImageDrawable(iconDrawable); iconDrawable = root.loadIcon(context); if (summary != null) { final boolean alwaysShowSummary = getResources() Loading @@ -756,7 +772,13 @@ public class DirectoryFragment extends Fragment { } } } else { icon1.setVisibility(View.GONE); // Directories showing thumbnails in grid mode get a little icon // hint to remind user they're a directory. if (Document.MIME_TYPE_DIR.equals(docMimeType) && state.derivedMode == MODE_GRID && showThumbnail) { iconDrawable = context.getResources().getDrawable(R.drawable.ic_root_folder); } if (summary != null) { if (docSummary != null) { summary.setText(docSummary); Loading @@ -768,6 +790,19 @@ public class DirectoryFragment extends Fragment { } } if (icon1 != null) icon1.setVisibility(View.GONE); if (icon2 != null) icon2.setVisibility(View.GONE); if (iconDrawable != null) { if (hasLine1) { icon1.setVisibility(View.VISIBLE); icon1.setImageDrawable(iconDrawable); } else { icon2.setVisibility(View.VISIBLE); icon2.setImageDrawable(iconDrawable); } } if (docLastModified == -1) { date.setText(null); } else { Loading @@ -787,6 +822,9 @@ public class DirectoryFragment extends Fragment { size.setVisibility(View.GONE); } if (line1 != null) { line1.setVisibility(hasLine1 ? View.VISIBLE : View.GONE); } if (line2 != null) { line2.setVisibility(hasLine2 ? View.VISIBLE : View.GONE); } Loading @@ -796,11 +834,13 @@ public class DirectoryFragment extends Fragment { if (enabled) { setEnabledRecursive(convertView, true); icon.setAlpha(1f); icon1.setAlpha(1f); if (icon1 != null) icon1.setAlpha(1f); if (icon2 != null) icon2.setAlpha(1f); } else { setEnabledRecursive(convertView, false); icon.setAlpha(0.5f); icon1.setAlpha(0.5f); if (icon1 != null) icon1.setAlpha(0.5f); if (icon2 != null) icon2.setAlpha(0.5f); } return convertView; Loading Loading @@ -943,6 +983,7 @@ public class DirectoryFragment extends Fragment { } private void setEnabledRecursive(View v, boolean enabled) { if (v == null) return; if (v.isEnabled() == enabled) return; v.setEnabled(enabled); Loading