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

Commit a5599ef6 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Documents management mode; API adjustment.

Create documents manage mode to support Downloads and transient
storage devices.  Locks user into requested backend root, and forces
file sizes on and sorting by last modified.

Separate API constants for Documents versus Roots, and give concrete
MIME types for roots.

Treat null sizes as unknown.  Documents are always enabled in list
so that divider is drawn.  Mark external storage file as writable.

Bug: 10329983, 10332993, 10332952
Change-Id: I05f4fdf5b04041a38e1ba7fb30202a3b0c615bf6
parent 54ca29a5
Loading
Loading
Loading
Loading
+21 −13
Original line number Diff line number Diff line
@@ -20620,19 +20620,6 @@ package android.provider {
    field public static final java.lang.String EXTRA_HAS_MORE = "has_more";
    field public static final java.lang.String EXTRA_REQUEST_MORE = "request_more";
    field public static final java.lang.String EXTRA_THUMBNAIL_SIZE = "thumbnail_size";
    field public static final int FLAG_PREFERS_GRID = 64; // 0x40
    field public static final int FLAG_SUPPORTS_CREATE = 1; // 0x1
    field public static final int FLAG_SUPPORTS_DELETE = 4; // 0x4
    field public static final int FLAG_SUPPORTS_RENAME = 2; // 0x2
    field public static final int FLAG_SUPPORTS_SEARCH = 16; // 0x10
    field public static final int FLAG_SUPPORTS_THUMBNAIL = 8; // 0x8
    field public static final int FLAG_SUPPORTS_WRITE = 32; // 0x20
    field public static final java.lang.String MIME_TYPE_DIRECTORY = "vnd.android.cursor.dir/doc";
    field public static final java.lang.String ROOT_DOC_ID = "0";
    field public static final int ROOT_TYPE_DEVICE = 3; // 0x3
    field public static final int ROOT_TYPE_DEVICE_ADVANCED = 4; // 0x4
    field public static final int ROOT_TYPE_SERVICE = 1; // 0x1
    field public static final int ROOT_TYPE_SHORTCUT = 2; // 0x2
  }
  public static abstract interface DocumentsContract.DocumentColumns implements android.provider.OpenableColumns {
@@ -20643,6 +20630,18 @@ package android.provider {
    field public static final java.lang.String SUMMARY = "summary";
  }
  public static class DocumentsContract.Documents {
    field public static final java.lang.String DOC_ID_ROOT = "0";
    field public static final int FLAG_PREFERS_GRID = 64; // 0x40
    field public static final int FLAG_SUPPORTS_CREATE = 1; // 0x1
    field public static final int FLAG_SUPPORTS_DELETE = 4; // 0x4
    field public static final int FLAG_SUPPORTS_RENAME = 2; // 0x2
    field public static final int FLAG_SUPPORTS_SEARCH = 16; // 0x10
    field public static final int FLAG_SUPPORTS_THUMBNAIL = 8; // 0x8
    field public static final int FLAG_SUPPORTS_WRITE = 32; // 0x20
    field public static final java.lang.String MIME_TYPE_DIR = "vnd.android.cursor.dir/doc";
  }
  public static abstract interface DocumentsContract.RootColumns {
    field public static final java.lang.String AVAILABLE_BYTES = "available_bytes";
    field public static final java.lang.String ICON = "icon";
@@ -20652,6 +20651,15 @@ package android.provider {
    field public static final java.lang.String TITLE = "title";
  }
  public static class DocumentsContract.Roots {
    field public static final java.lang.String MIME_TYPE_DIR = "vnd.android.cursor.dir/root";
    field public static final java.lang.String MIME_TYPE_ITEM = "vnd.android.cursor.item/root";
    field public static final int ROOT_TYPE_DEVICE = 3; // 0x3
    field public static final int ROOT_TYPE_DEVICE_ADVANCED = 4; // 0x4
    field public static final int ROOT_TYPE_SERVICE = 1; // 0x1
    field public static final int ROOT_TYPE_SHORTCUT = 2; // 0x2
  }
  public final deprecated class LiveFolders implements android.provider.BaseColumns {
    field public static final java.lang.String ACTION_CREATE_LIVE_FOLDER = "android.intent.action.CREATE_LIVE_FOLDER";
    field public static final java.lang.String DESCRIPTION = "description";
+4 −0
Original line number Diff line number Diff line
@@ -2678,6 +2678,10 @@ public class Intent implements Parcelable, Cloneable {
    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    public static final String ACTION_CREATE_DOCUMENT = "android.intent.action.CREATE_DOCUMENT";

    /** {@hide} */
    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    public static final String ACTION_MANAGE_DOCUMENT = "android.intent.action.MANAGE_DOCUMENT";

    // ---------------------------------------------------------------------
    // ---------------------------------------------------------------------
    // Standard intent categories (see addCategory()).
+108 −94
Original line number Diff line number Diff line
@@ -53,25 +53,29 @@ public final class DocumentsContract {
    // content://com.example/roots/sdcard/docs/0/contents/
    // content://com.example/roots/sdcard/docs/0/search/?query=pony

    /** {@hide} */
    public static final String META_DATA_DOCUMENT_PROVIDER = "android.content.DOCUMENT_PROVIDER";

    /** {@hide} */
    public static final String ACTION_DOCUMENT_CHANGED = "android.provider.action.DOCUMENT_CHANGED";

    public static class Documents {
        private Documents() {
        }

        /**
         * MIME type of a document which is a directory that may contain additional
         * documents.
         *
         * @see #buildContentsUri(String, String, String)
         */
    public static final String MIME_TYPE_DIRECTORY = "vnd.android.cursor.dir/doc";

    /** {@hide} */
    public static final String META_DATA_DOCUMENT_PROVIDER = "android.content.DOCUMENT_PROVIDER";

    /** {@hide} */
    public static final String ACTION_DOCUMENT_CHANGED = "android.provider.action.DOCUMENT_CHANGED";
        public static final String MIME_TYPE_DIR = "vnd.android.cursor.dir/doc";

        /**
         * {@link DocumentColumns#DOC_ID} value representing the root directory of a
         * storage root.
         */
    public static final String ROOT_DOC_ID = "0";
        public static final String DOC_ID_ROOT = "0";

        /**
         * Flag indicating that a document is a directory that supports creation of
@@ -127,6 +131,7 @@ public final class DocumentsContract {
         * @see DocumentColumns#FLAGS
         */
        public static final int FLAG_PREFERS_GRID = 1 << 6;
    }

    /**
     * Optimal dimensions for a document thumbnail request, stored as a
@@ -189,7 +194,7 @@ public final class DocumentsContract {

    /**
     * Build URI representing the contents of the given directory in a storage
     * backend. The given document must be {@link #MIME_TYPE_DIRECTORY}.
     * backend. The given document must be {@link Documents#MIME_TYPE_DIR}.
     */
    public static Uri buildContentsUri(String authority, String rootId, String docId) {
        return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(authority)
@@ -296,7 +301,7 @@ public final class DocumentsContract {
         * <p>
         * Type: STRING
         *
         * @see DocumentsContract#MIME_TYPE_DIRECTORY
         * @see Documents#MIME_TYPE_DIR
         */
        public static final String MIME_TYPE = "mime_type";

@@ -327,6 +332,13 @@ public final class DocumentsContract {
        public static final String SUMMARY = "summary";
    }

    public static class Roots {
        private Roots() {
        }

        public static final String MIME_TYPE_DIR = "vnd.android.cursor.dir/root";
        public static final String MIME_TYPE_ITEM = "vnd.android.cursor.item/root";

        /**
         * Root that represents a cloud-based storage service.
         *
@@ -356,6 +368,7 @@ public final class DocumentsContract {
         * @see RootColumns#ROOT_TYPE
         */
        public static final int ROOT_TYPE_DEVICE_ADVANCED = 4;
    }

    /**
     * These are standard columns for the roots URI.
@@ -370,8 +383,8 @@ public final class DocumentsContract {
         * <p>
         * Type: INTEGER (int)
         *
         * @see DocumentsContract#ROOT_TYPE_SERVICE
         * @see DocumentsContract#ROOT_TYPE_DEVICE
         * @see Roots#ROOT_TYPE_SERVICE
         * @see Roots#ROOT_TYPE_DEVICE
         */
        public static final String ROOT_TYPE = "root_type";

@@ -440,7 +453,7 @@ public final class DocumentsContract {
    /**
     * Return thumbnail representing the document at the given URI. Callers are
     * responsible for their own caching. Given document must have
     * {@link #FLAG_SUPPORTS_THUMBNAIL} set.
     * {@link Documents#FLAG_SUPPORTS_THUMBNAIL} set.
     *
     * @return decoded thumbnail, or {@code null} if problem was encountered.
     */
@@ -465,7 +478,8 @@ public final class DocumentsContract {
     * Create a new document under a specific parent document with the given
     * display name and MIME type.
     *
     * @param parentDocumentUri document with {@link #FLAG_SUPPORTS_CREATE}
     * @param parentDocumentUri document with
     *            {@link Documents#FLAG_SUPPORTS_CREATE}
     * @param displayName name for new document
     * @param mimeType MIME type for new document, which cannot be changed
     * @return newly created document Uri, or {@code null} if failed
@@ -480,7 +494,7 @@ public final class DocumentsContract {

    /**
     * Rename the document at the given URI. Given document must have
     * {@link #FLAG_SUPPORTS_RENAME} set.
     * {@link Documents#FLAG_SUPPORTS_RENAME} set.
     *
     * @return if rename was successful.
     */
+6 −0
Original line number Diff line number Diff line
@@ -32,6 +32,12 @@
                <category android:name="android.intent.category.OPENABLE" />
                <data android:mimeType="*/*" />
            </intent-filter>
            <!-- data expected to point at existing root to manage -->
            <intent-filter>
                <action android:name="android.intent.action.MANAGE_DOCUMENT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/root" />
            </intent-filter>
        </activity>

        <activity
+2 −2
Original line number Diff line number Diff line
@@ -27,8 +27,8 @@ import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Bundle;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.DocumentColumns;
import android.provider.DocumentsContract.Documents;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
@@ -69,7 +69,7 @@ public class CreateDirectoryFragment extends DialogFragment {
                final String displayName = text1.getText().toString();

                final ContentValues values = new ContentValues();
                values.put(DocumentColumns.MIME_TYPE, DocumentsContract.MIME_TYPE_DIRECTORY);
                values.put(DocumentColumns.MIME_TYPE, Documents.MIME_TYPE_DIR);
                values.put(DocumentColumns.DISPLAY_NAME, displayName);

                final DocumentsActivity activity = (DocumentsActivity) getActivity();
Loading