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

Commit 09400249 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "DocumentsUI handles GET_CONTENT; hinting, errors." into klp-dev

parents 3ed72781 54ca29a5
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -65,7 +65,7 @@ public final class DocumentsContract {
    public static final String META_DATA_DOCUMENT_PROVIDER = "android.content.DOCUMENT_PROVIDER";
    public static final String META_DATA_DOCUMENT_PROVIDER = "android.content.DOCUMENT_PROVIDER";


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


    /**
    /**
     * {@link DocumentColumns#DOC_ID} value representing the root directory of a
     * {@link DocumentColumns#DOC_ID} value representing the root directory of a
@@ -496,7 +496,7 @@ public final class DocumentsContract {
     * This signal is used to invalidate internal caches.
     * This signal is used to invalidate internal caches.
     */
     */
    public static void notifyRootsChanged(Context context, String authority) {
    public static void notifyRootsChanged(Context context, String authority) {
        final Intent intent = new Intent(ACTION_ROOTS_CHANGED);
        final Intent intent = new Intent(ACTION_DOCUMENT_CHANGED);
        intent.setData(buildRootsUri(authority));
        intent.setData(buildRootsUri(authority));
        context.sendBroadcast(intent);
        context.sendBroadcast(intent);
    }
    }
+8 −0
Original line number Original line Diff line number Diff line
@@ -17,11 +17,19 @@
            <intent-filter android:priority="100">
            <intent-filter android:priority="100">
                <action android:name="android.intent.action.OPEN_DOCUMENT" />
                <action android:name="android.intent.action.OPEN_DOCUMENT" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.OPENABLE" />
                <data android:mimeType="*/*" />
                <data android:mimeType="*/*" />
            </intent-filter>
            </intent-filter>
            <intent-filter android:priority="100">
            <intent-filter android:priority="100">
                <action android:name="android.intent.action.CREATE_DOCUMENT" />
                <action android:name="android.intent.action.CREATE_DOCUMENT" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.OPENABLE" />
                <data android:mimeType="*/*" />
            </intent-filter>
            <intent-filter android:priority="100">
                <action android:name="android.intent.action.GET_CONTENT" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.OPENABLE" />
                <data android:mimeType="*/*" />
                <data android:mimeType="*/*" />
            </intent-filter>
            </intent-filter>
        </activity>
        </activity>
+1 −0
Original line number Original line Diff line number Diff line
@@ -47,6 +47,7 @@
    <string name="root_type_service">Services</string>
    <string name="root_type_service">Services</string>
    <string name="root_type_shortcut">Shortcuts</string>
    <string name="root_type_shortcut">Shortcuts</string>
    <string name="root_type_device">Devices</string>
    <string name="root_type_device">Devices</string>
    <string name="root_type_apps">More apps</string>


    <string name="pref_advanced_devices">Display advanced devices</string>
    <string name="pref_advanced_devices">Display advanced devices</string>
    <string name="pref_file_size">Display file size</string>
    <string name="pref_file_size">Display file size</string>
+5 −1
Original line number Original line Diff line number Diff line
@@ -144,7 +144,7 @@ public class DirectoryFragment extends Fragment {
                final DisplayState state = getDisplayState(DirectoryFragment.this);
                final DisplayState state = getDisplayState(DirectoryFragment.this);
                mFilter = new MimePredicate(state.acceptMimes);
                mFilter = new MimePredicate(state.acceptMimes);


                final Uri contentsUri;
                Uri contentsUri;
                if (mType == TYPE_NORMAL) {
                if (mType == TYPE_NORMAL) {
                    contentsUri = DocumentsContract.buildContentsUri(uri);
                    contentsUri = DocumentsContract.buildContentsUri(uri);
                } else if (mType == TYPE_RECENT_OPEN) {
                } else if (mType == TYPE_RECENT_OPEN) {
@@ -153,6 +153,10 @@ public class DirectoryFragment extends Fragment {
                    contentsUri = uri;
                    contentsUri = uri;
                }
                }


                if (state.localOnly) {
                    contentsUri = DocumentsContract.setLocalOnly(contentsUri);
                }

                final Comparator<Document> sortOrder;
                final Comparator<Document> sortOrder;
                if (state.sortOrder == DisplayState.SORT_ORDER_DATE || mType == TYPE_RECENT_OPEN) {
                if (state.sortOrder == DisplayState.SORT_ORDER_DATE || mType == TYPE_RECENT_OPEN) {
                    sortOrder = new Document.DateComparator();
                    sortOrder = new Document.DateComparator();
+34 −2
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@ import android.content.Context;
import android.database.Cursor;
import android.database.Cursor;
import android.net.Uri;
import android.net.Uri;
import android.os.CancellationSignal;
import android.os.CancellationSignal;
import android.provider.DocumentsContract.DocumentColumns;
import android.util.Log;
import android.util.Log;


import com.android.documentsui.model.Document;
import com.android.documentsui.model.Document;
@@ -38,6 +39,7 @@ import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Collections;
import java.util.Comparator;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.List;


public class DirectoryLoader extends UriDerivativeLoader<List<Document>> {
public class DirectoryLoader extends UriDerivativeLoader<List<Document>> {
@@ -46,6 +48,17 @@ public class DirectoryLoader extends UriDerivativeLoader<List<Document>> {
    private Predicate<Document> mFilter;
    private Predicate<Document> mFilter;
    private Comparator<Document> mSortOrder;
    private Comparator<Document> mSortOrder;


    /**
     * Stub result that represents an internal error.
     */
    public static class ExceptionResult extends LinkedList<Document> {
        public final Exception e;

        public ExceptionResult(Exception e) {
            this.e = e;
        }
    }

    public DirectoryLoader(Context context, Uri uri, int type, Predicate<Document> filter,
    public DirectoryLoader(Context context, Uri uri, int type, Predicate<Document> filter,
            Comparator<Document> sortOrder) {
            Comparator<Document> sortOrder) {
        super(context, uri);
        super(context, uri);
@@ -56,11 +69,18 @@ public class DirectoryLoader extends UriDerivativeLoader<List<Document>> {


    @Override
    @Override
    public List<Document> loadInBackground(Uri uri, CancellationSignal signal) {
    public List<Document> loadInBackground(Uri uri, CancellationSignal signal) {
        try {
            return loadInBackgroundInternal(uri, signal);
        } catch (Exception e) {
            return new ExceptionResult(e);
        }
    }

    private List<Document> loadInBackgroundInternal(Uri uri, CancellationSignal signal) {
        final ArrayList<Document> result = Lists.newArrayList();
        final ArrayList<Document> result = Lists.newArrayList();


        // TODO: send selection and sorting hints to backend
        final ContentResolver resolver = getContext().getContentResolver();
        final ContentResolver resolver = getContext().getContentResolver();
        final Cursor cursor = resolver.query(uri, null, null, null, null, signal);
        final Cursor cursor = resolver.query(uri, null, null, null, getQuerySortOrder(), signal);
        try {
        try {
            while (cursor != null && cursor.moveToNext()) {
            while (cursor != null && cursor.moveToNext()) {
                Document doc = null;
                Document doc = null;
@@ -94,4 +114,16 @@ public class DirectoryLoader extends UriDerivativeLoader<List<Document>> {


        return result;
        return result;
    }
    }

    private String getQuerySortOrder() {
        if (mSortOrder instanceof Document.DateComparator) {
            return DocumentColumns.LAST_MODIFIED + " DESC";
        } else if (mSortOrder instanceof Document.NameComparator) {
            return DocumentColumns.DISPLAY_NAME + " ASC";
        } else if (mSortOrder instanceof Document.SizeComparator) {
            return DocumentColumns.SIZE + " DESC";
        } else {
            return null;
        }
    }
}
}
Loading