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

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

Merge "Refactoring of DocumentsContract." into klp-dev

parents 00971e00 724deeb5
Loading
Loading
Loading
Loading
+6 −14
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
@@ -28,13 +27,13 @@ import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Bundle;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Documents;
import android.provider.DocumentsContract.Document;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.android.documentsui.model.Document;
import com.android.documentsui.model.DocumentInfo;

/**
 * Dialog to create a new directory.
@@ -67,24 +66,17 @@ public class CreateDirectoryFragment extends DialogFragment {
                final String displayName = text1.getText().toString();

                final DocumentsActivity activity = (DocumentsActivity) getActivity();
                final Document cwd = activity.getCurrentDirectory();
                final DocumentInfo cwd = activity.getCurrentDirectory();

                final ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
                        cwd.uri.getAuthority());
                try {
                    final String docId = DocumentsContract.createDocument(client,
                            DocumentsContract.getDocId(cwd.uri), Documents.MIME_TYPE_DIR,
                            displayName);
                    final Uri childUri = DocumentsContract.createDocument(
                            resolver, cwd.uri, Document.MIME_TYPE_DIR, displayName);

                    // Navigate into newly created child
                    final Uri childUri = DocumentsContract.buildDocumentUri(
                            cwd.uri.getAuthority(), docId);
                    final Document childDoc = Document.fromUri(resolver, childUri);
                    final DocumentInfo childDoc = DocumentInfo.fromUri(resolver, childUri);
                    activity.onDocumentPicked(childDoc);
                } catch (Exception e) {
                    Toast.makeText(context, R.string.save_error, Toast.LENGTH_SHORT).show();
                } finally {
                    ContentProviderClient.closeQuietly(client);
                }
            }
        });
+24 −24
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ import android.widget.TextView;
import android.widget.Toast;

import com.android.documentsui.DocumentsActivity.DisplayState;
import com.android.documentsui.model.Document;
import com.android.documentsui.model.DocumentInfo;
import com.android.internal.util.Predicate;
import com.google.android.collect.Lists;

@@ -81,7 +81,7 @@ public class DirectoryFragment extends Fragment {

    private AbsListView mCurrentView;

    private Predicate<Document> mFilter;
    private Predicate<DocumentInfo> mFilter;

    public static final int TYPE_NORMAL = 1;
    public static final int TYPE_SEARCH = 2;
@@ -106,8 +106,8 @@ public class DirectoryFragment extends Fragment {
    }

    public static void showSearch(FragmentManager fm, Uri uri, String query) {
        final Uri searchUri = DocumentsContract.buildSearchUri(
                uri.getAuthority(), DocumentsContract.getDocId(uri), query);
        final Uri searchUri = DocumentsContract.buildSearchDocumentsUri(
                uri.getAuthority(), DocumentsContract.getDocumentId(uri), query);
        show(fm, TYPE_SEARCH, searchUri);
    }

@@ -163,21 +163,21 @@ public class DirectoryFragment extends Fragment {

                Uri contentsUri;
                if (mType == TYPE_NORMAL) {
                    contentsUri = DocumentsContract.buildChildrenUri(
                            uri.getAuthority(), DocumentsContract.getDocId(uri));
                    contentsUri = DocumentsContract.buildChildDocumentsUri(
                            uri.getAuthority(), DocumentsContract.getDocumentId(uri));
                } else if (mType == TYPE_RECENT_OPEN) {
                    contentsUri = RecentsProvider.buildRecentOpen();
                } else {
                    contentsUri = uri;
                }

                final Comparator<Document> sortOrder;
                final Comparator<DocumentInfo> sortOrder;
                if (state.sortOrder == SORT_ORDER_LAST_MODIFIED || mType == TYPE_RECENT_OPEN) {
                    sortOrder = new Document.LastModifiedComparator();
                    sortOrder = new DocumentInfo.LastModifiedComparator();
                } else if (state.sortOrder == SORT_ORDER_DISPLAY_NAME) {
                    sortOrder = new Document.DisplayNameComparator();
                    sortOrder = new DocumentInfo.DisplayNameComparator();
                } else if (state.sortOrder == SORT_ORDER_SIZE) {
                    sortOrder = new Document.SizeComparator();
                    sortOrder = new DocumentInfo.SizeComparator();
                } else {
                    throw new IllegalArgumentException("Unknown sort order " + state.sortOrder);
                }
@@ -258,7 +258,7 @@ public class DirectoryFragment extends Fragment {
    private OnItemClickListener mItemListener = new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            final Document doc = mAdapter.getItem(position);
            final DocumentInfo doc = mAdapter.getItem(position);
            if (mFilter.apply(doc)) {
                ((DocumentsActivity) getActivity()).onDocumentPicked(doc);
            }
@@ -291,11 +291,11 @@ public class DirectoryFragment extends Fragment {
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            final SparseBooleanArray checked = mCurrentView.getCheckedItemPositions();
            final ArrayList<Document> docs = Lists.newArrayList();
            final ArrayList<DocumentInfo> docs = Lists.newArrayList();
            final int size = checked.size();
            for (int i = 0; i < size; i++) {
                if (checked.valueAt(i)) {
                    final Document doc = mAdapter.getItem(checked.keyAt(i));
                    final DocumentInfo doc = mAdapter.getItem(checked.keyAt(i));
                    docs.add(doc);
                }
            }
@@ -328,7 +328,7 @@ public class DirectoryFragment extends Fragment {
                ActionMode mode, int position, long id, boolean checked) {
            if (checked) {
                // Directories cannot be checked
                final Document doc = mAdapter.getItem(position);
                final DocumentInfo doc = mAdapter.getItem(position);
                if (doc.isDirectory()) {
                    mCurrentView.setItemChecked(position, false);
                }
@@ -339,9 +339,9 @@ public class DirectoryFragment extends Fragment {
        }
    };

    private void onShareDocuments(List<Document> docs) {
    private void onShareDocuments(List<DocumentInfo> docs) {
        final ArrayList<Uri> uris = Lists.newArrayList();
        for (Document doc : docs) {
        for (DocumentInfo doc : docs) {
            uris.add(doc.uri);
        }

@@ -363,12 +363,12 @@ public class DirectoryFragment extends Fragment {
        startActivity(intent);
    }

    private void onDeleteDocuments(List<Document> docs) {
    private void onDeleteDocuments(List<DocumentInfo> docs) {
        final Context context = getActivity();
        final ContentResolver resolver = context.getContentResolver();

        boolean hadTrouble = false;
        for (Document doc : docs) {
        for (DocumentInfo doc : docs) {
            if (!doc.isDeleteSupported()) {
                Log.w(TAG, "Skipping " + doc);
                hadTrouble = true;
@@ -396,12 +396,12 @@ public class DirectoryFragment extends Fragment {
    }

    private class DocumentsAdapter extends BaseAdapter {
        private List<Document> mDocuments;
        private List<DocumentInfo> mDocuments;

        public DocumentsAdapter() {
        }

        public void swapDocuments(List<Document> documents) {
        public void swapDocuments(List<DocumentInfo> documents) {
            mDocuments = documents;

            if (mDocuments != null && mDocuments.isEmpty()) {
@@ -433,7 +433,7 @@ public class DirectoryFragment extends Fragment {
                }
            }

            final Document doc = getItem(position);
            final DocumentInfo doc = getItem(position);

            final ImageView icon = (ImageView) convertView.findViewById(android.R.id.icon);
            final TextView title = (TextView) convertView.findViewById(android.R.id.title);
@@ -507,7 +507,7 @@ public class DirectoryFragment extends Fragment {
        }

        @Override
        public Document getItem(int position) {
        public DocumentInfo getItem(int position) {
            return mDocuments.get(position);
        }

@@ -538,8 +538,8 @@ public class DirectoryFragment extends Fragment {

            Bitmap result = null;
            try {
                result = DocumentsContract.getThumbnail(
                        context.getContentResolver(), uri, mThumbSize);
                result = DocumentsContract.getDocumentThumbnail(
                        context.getContentResolver(), uri, mThumbSize, null);
                if (result != null) {
                    final ThumbnailCache thumbs = DocumentsApplication.getThumbnailsCache(
                            context, mThumbSize);
+9 −9
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ import android.net.Uri;
import android.os.CancellationSignal;
import android.util.Log;

import com.android.documentsui.model.Document;
import com.android.documentsui.model.DocumentInfo;
import com.android.internal.util.Predicate;
import com.google.android.collect.Lists;

@@ -41,7 +41,7 @@ import java.util.List;

class DirectoryResult implements AutoCloseable {
    Cursor cursor;
    List<Document> contents = Lists.newArrayList();
    List<DocumentInfo> contents = Lists.newArrayList();
    Exception e;

    @Override
@@ -53,11 +53,11 @@ class DirectoryResult implements AutoCloseable {
public class DirectoryLoader extends UriDerivativeLoader<Uri, DirectoryResult> {

    private final int mType;
    private Predicate<Document> mFilter;
    private Comparator<Document> mSortOrder;
    private Predicate<DocumentInfo> mFilter;
    private Comparator<DocumentInfo> mSortOrder;

    public DirectoryLoader(Context context, Uri uri, int type, Predicate<Document> filter,
            Comparator<Document> sortOrder) {
    public DirectoryLoader(Context context, Uri uri, int type, Predicate<DocumentInfo> filter,
            Comparator<DocumentInfo> sortOrder) {
        super(context, uri);
        mType = type;
        mFilter = filter;
@@ -84,15 +84,15 @@ public class DirectoryLoader extends UriDerivativeLoader<Uri, DirectoryResult> {
        result.cursor.registerContentObserver(mObserver);

        while (cursor.moveToNext()) {
            Document doc = null;
            DocumentInfo doc = null;
            switch (mType) {
                case TYPE_NORMAL:
                case TYPE_SEARCH:
                    doc = Document.fromDirectoryCursor(uri, cursor);
                    doc = DocumentInfo.fromDirectoryCursor(uri, cursor);
                    break;
                case TYPE_RECENT_OPEN:
                    try {
                        doc = Document.fromRecentOpenCursor(resolver, cursor);
                        doc = DocumentInfo.fromRecentOpenCursor(resolver, cursor);
                    } catch (FileNotFoundException e) {
                        Log.w(TAG, "Failed to find recent: " + e);
                    }
+1 −2
Original line number Diff line number Diff line
@@ -21,11 +21,10 @@ import static com.android.documentsui.DocumentsActivity.TAG;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.provider.DocumentsContract.DocumentRoot;
import android.util.Log;

/**
 * Handles {@link DocumentRoot} changes which invalidate cached data.
 * Handles changes which invalidate cached data.
 */
public class DocumentChangedReceiver extends BroadcastReceiver {
    @Override
+18 −20
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@ import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.DocumentRoot;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
@@ -60,8 +59,9 @@ import android.widget.SearchView.OnQueryTextListener;
import android.widget.TextView;
import android.widget.Toast;

import com.android.documentsui.model.Document;
import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.DocumentStack;
import com.android.documentsui.model.RootInfo;

import java.io.FileNotFoundException;
import java.util.Arrays;
@@ -160,7 +160,7 @@ public class DocumentsActivity extends Activity {
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

            final Uri rootUri = intent.getData();
            final DocumentRoot root = mRoots.findRoot(rootUri);
            final RootInfo root = mRoots.findRoot(rootUri);
            if (root != null) {
                onRootPicked(root, true);
            } else {
@@ -252,7 +252,7 @@ public class DocumentsActivity extends Activity {
            mDrawerToggle.setDrawerIndicatorEnabled(true);

        } else {
            final DocumentRoot root = getCurrentRoot();
            final RootInfo root = getCurrentRoot();
            actionBar.setIcon(root != null ? root.loadIcon(this) : null);

            if (mRoots.isRecentsRoot(root)) {
@@ -317,7 +317,7 @@ public class DocumentsActivity extends Activity {
        super.onPrepareOptionsMenu(menu);

        final FragmentManager fm = getFragmentManager();
        final Document cwd = getCurrentDirectory();
        final DocumentInfo cwd = getCurrentDirectory();

        final MenuItem createDir = menu.findItem(R.id.menu_create_dir);
        final MenuItem search = menu.findItem(R.id.menu_search);
@@ -473,7 +473,7 @@ public class DocumentsActivity extends Activity {
        }
    };

    public DocumentRoot getCurrentRoot() {
    public RootInfo getCurrentRoot() {
        if (mStack.size() > 0) {
            return mStack.getRoot(mRoots);
        } else {
@@ -481,7 +481,7 @@ public class DocumentsActivity extends Activity {
        }
    }

    public Document getCurrentDirectory() {
    public DocumentInfo getCurrentDirectory() {
        return mStack.peek();
    }

@@ -491,7 +491,7 @@ public class DocumentsActivity extends Activity {

    private void onCurrentDirectoryChanged() {
        final FragmentManager fm = getFragmentManager();
        final Document cwd = getCurrentDirectory();
        final DocumentInfo cwd = getCurrentDirectory();

        if (cwd == null) {
            // No directory means recents
@@ -533,14 +533,14 @@ public class DocumentsActivity extends Activity {
        onCurrentDirectoryChanged();
    }

    public void onRootPicked(DocumentRoot root, boolean closeDrawer) {
    public void onRootPicked(RootInfo root, boolean closeDrawer) {
        // Clear entire backstack and start in new root
        mStack.clear();

        if (!mRoots.isRecentsRoot(root)) {
            try {
                final Uri uri = DocumentsContract.buildDocumentUri(root.authority, root.docId);
                onDocumentPicked(Document.fromUri(getContentResolver(), uri));
                final Uri uri = DocumentsContract.buildDocumentUri(root.authority, root.documentId);
                onDocumentPicked(DocumentInfo.fromUri(getContentResolver(), uri));
            } catch (FileNotFoundException e) {
            }
        } else {
@@ -561,7 +561,7 @@ public class DocumentsActivity extends Activity {
        finish();
    }

    public void onDocumentPicked(Document doc) {
    public void onDocumentPicked(DocumentInfo doc) {
        final FragmentManager fm = getFragmentManager();
        if (doc.isDirectory()) {
            // TODO: query display mode user preference for this dir
@@ -591,7 +591,7 @@ public class DocumentsActivity extends Activity {
        }
    }

    public void onDocumentsPicked(List<Document> docs) {
    public void onDocumentsPicked(List<DocumentInfo> docs) {
        if (mAction == ACTION_OPEN || mAction == ACTION_GET_CONTENT) {
            final int size = docs.size();
            final Uri[] uris = new Uri[size];
@@ -602,21 +602,19 @@ public class DocumentsActivity extends Activity {
        }
    }

    public void onSaveRequested(Document replaceTarget) {
    public void onSaveRequested(DocumentInfo replaceTarget) {
        onFinished(replaceTarget.uri);
    }

    public void onSaveRequested(String mimeType, String displayName) {
        final Document cwd = getCurrentDirectory();
        final DocumentInfo cwd = getCurrentDirectory();
        final String authority = cwd.uri.getAuthority();

        final ContentProviderClient client = getContentResolver()
                .acquireUnstableContentProviderClient(authority);
        try {
            final String docId = DocumentsContract.createDocument(client,
                    DocumentsContract.getDocId(cwd.uri), mimeType, displayName);

            final Uri childUri = DocumentsContract.buildDocumentUri(authority, docId);
            final Uri childUri = DocumentsContract.createDocument(
                    getContentResolver(), cwd.uri, mimeType, displayName);
            onFinished(childUri);
        } catch (Exception e) {
            Toast.makeText(this, R.string.save_error, Toast.LENGTH_SHORT).show();
@@ -701,7 +699,7 @@ public class DocumentsActivity extends Activity {

    private void dumpStack() {
        Log.d(TAG, "Current stack:");
        for (Document doc : mStack) {
        for (DocumentInfo doc : mStack) {
            Log.d(TAG, "--> " + doc);
        }
    }
Loading