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

Commit 20d49271 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android Git Automerger
Browse files

am 26d4adf3: Merge "Better handling of broken storage providers."

* commit '26d4adf3':
  Better handling of broken storage providers.
parents d262fb60 26d4adf3
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@ import android.widget.Toast;

import com.android.documentsui.model.Document;

import java.io.FileNotFoundException;

/**
 * Dialog to create a new directory.
 */
@@ -73,12 +75,16 @@ public class CreateDirectoryFragment extends DialogFragment {
                final DocumentsActivity activity = (DocumentsActivity) getActivity();
                final Document cwd = activity.getCurrentDirectory();

                final Uri childUri = resolver.insert(cwd.uri, values);
                if (childUri != null) {
                Uri childUri = resolver.insert(cwd.uri, values);
                try {
                    // Navigate into newly created child
                    final Document childDoc = Document.fromUri(resolver, childUri);
                    activity.onDocumentPicked(childDoc);
                } else {
                } catch (FileNotFoundException e) {
                    childUri = null;
                }

                if (childUri == null) {
                    Toast.makeText(context, R.string.save_error, Toast.LENGTH_SHORT).show();
                }
            }
+10 −3
Original line number Diff line number Diff line
@@ -19,12 +19,14 @@ package com.android.documentsui;
import static com.android.documentsui.DirectoryFragment.TYPE_NORMAL;
import static com.android.documentsui.DirectoryFragment.TYPE_RECENT_OPEN;
import static com.android.documentsui.DirectoryFragment.TYPE_SEARCH;
import static com.android.documentsui.DocumentsActivity.TAG;

import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.CancellationSignal;
import android.util.Log;

import com.android.documentsui.model.Document;
import com.android.internal.util.Predicate;
@@ -32,6 +34,7 @@ import com.google.android.collect.Lists;

import libcore.io.IoUtils;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -60,20 +63,24 @@ public class DirectoryLoader extends UriDerivativeLoader<List<Document>> {
        final Cursor cursor = resolver.query(uri, null, null, null, null, signal);
        try {
            while (cursor != null && cursor.moveToNext()) {
                final Document doc;
                Document doc = null;
                switch (mType) {
                    case TYPE_NORMAL:
                    case TYPE_SEARCH:
                        doc = Document.fromDirectoryCursor(uri, cursor);
                        break;
                    case TYPE_RECENT_OPEN:
                        try {
                            doc = Document.fromRecentOpenCursor(resolver, cursor);
                        } catch (FileNotFoundException e) {
                            Log.w(TAG, "Failed to find recent: " + e);
                        }
                        break;
                    default:
                        throw new IllegalArgumentException("Unknown type");
                }

                if (mFilter == null || mFilter.apply(doc)) {
                if (doc != null && (mFilter == null || mFilter.apply(doc))) {
                    result.add(doc);
                }
            }
+7 −3
Original line number Diff line number Diff line
@@ -25,12 +25,10 @@ import android.content.ClipData;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.provider.DocumentsContract.DocumentColumns;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
@@ -53,6 +51,7 @@ import com.android.documentsui.model.Document;
import com.android.documentsui.model.DocumentStack;
import com.android.documentsui.model.Root;

import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.List;

@@ -138,6 +137,8 @@ public class DocumentsActivity extends Activity {
                        cursor.getColumnIndex(RecentsProvider.COL_PATH));
                mStack = DocumentStack.deserialize(getContentResolver(), raw);
            }
        } catch (FileNotFoundException e) {
            Log.w(TAG, "Failed to resume", e);
        } finally {
            cursor.close();
        }
@@ -470,7 +471,10 @@ public class DocumentsActivity extends Activity {
        mStack.clear();

        if (!root.isRecents) {
            try {
                onDocumentPicked(Document.fromRoot(getContentResolver(), root));
            } catch (FileNotFoundException e) {
            }
        } else {
            onCurrentDirectoryChanged();
        }
+10 −2
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.documentsui;

import static com.android.documentsui.DocumentsActivity.TAG;

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
@@ -28,6 +30,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.text.TextUtils.TruncateAt;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -44,6 +47,7 @@ import com.google.android.collect.Lists;

import libcore.io.IoUtils;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

@@ -136,8 +140,12 @@ public class RecentsCreateFragment extends Fragment {
                while (cursor != null && cursor.moveToNext()) {
                    final String rawStack = cursor.getString(
                            cursor.getColumnIndex(RecentsProvider.COL_PATH));
                    try {
                        final DocumentStack stack = DocumentStack.deserialize(resolver, rawStack);
                        result.add(stack);
                    } catch (FileNotFoundException e) {
                        Log.w(TAG, "Failed to resolve stack: " + e);
                    }
                }
            } finally {
                IoUtils.closeQuietly(cursor);
+30 −10
Original line number Diff line number Diff line
@@ -21,10 +21,12 @@ import android.database.Cursor;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.DocumentColumns;
import android.util.Log;

import com.android.documentsui.RecentsProvider;

import libcore.io.IoUtils;

import java.io.FileNotFoundException;
import java.util.Comparator;

/**
@@ -50,7 +52,8 @@ public class Document {
        this.size = size;
    }

    public static Document fromRoot(ContentResolver resolver, Root root) {
    public static Document fromRoot(ContentResolver resolver, Root root)
            throws FileNotFoundException {
        return fromUri(resolver, root.uri);
    }

@@ -70,14 +73,16 @@ public class Document {
        return new Document(uri, mimeType, displayName, lastModified, flags, summary, size);
    }

    public static Document fromRecentOpenCursor(ContentResolver resolver, Cursor recentCursor) {
    public static Document fromRecentOpenCursor(ContentResolver resolver, Cursor recentCursor)
            throws FileNotFoundException {
        final Uri uri = Uri.parse(getCursorString(recentCursor, RecentsProvider.COL_URI));
        final long lastModified = getCursorLong(recentCursor, RecentsProvider.COL_TIMESTAMP);

        final Cursor cursor = resolver.query(uri, null, null, null, null);
        Cursor cursor = null;
        try {
            cursor = resolver.query(uri, null, null, null, null);
            if (!cursor.moveToFirst()) {
                throw new IllegalArgumentException("Missing details for " + uri);
                throw new FileNotFoundException("Missing details for " + uri);
            }
            final String mimeType = getCursorString(cursor, DocumentColumns.MIME_TYPE);
            final String displayName = getCursorString(cursor, DocumentColumns.DISPLAY_NAME);
@@ -87,16 +92,19 @@ public class Document {
            final long size = getCursorLong(cursor, DocumentColumns.SIZE);

            return new Document(uri, mimeType, displayName, lastModified, flags, summary, size);
        } catch (Throwable t) {
            throw asFileNotFoundException(t);
        } finally {
            cursor.close();
            IoUtils.closeQuietly(cursor);
        }
    }

    public static Document fromUri(ContentResolver resolver, Uri uri) {
        final Cursor cursor = resolver.query(uri, null, null, null, null);
    public static Document fromUri(ContentResolver resolver, Uri uri) throws FileNotFoundException {
        Cursor cursor = null;
        try {
            cursor = resolver.query(uri, null, null, null, null);
            if (!cursor.moveToFirst()) {
                throw new IllegalArgumentException("Missing details for " + uri);
                throw new FileNotFoundException("Missing details for " + uri);
            }
            final String mimeType = getCursorString(cursor, DocumentColumns.MIME_TYPE);
            final String displayName = getCursorString(cursor, DocumentColumns.DISPLAY_NAME);
@@ -106,8 +114,10 @@ public class Document {
            final long size = getCursorLong(cursor, DocumentColumns.SIZE);

            return new Document(uri, mimeType, displayName, lastModified, flags, summary, size);
        } catch (Throwable t) {
            throw asFileNotFoundException(t);
        } finally {
            cursor.close();
            IoUtils.closeQuietly(cursor);
        }
    }

@@ -174,4 +184,14 @@ public class Document {
            return Long.compare(rhs.size, lhs.size);
        }
    }

    public static FileNotFoundException asFileNotFoundException(Throwable t)
            throws FileNotFoundException {
        if (t instanceof FileNotFoundException) {
            throw (FileNotFoundException) t;
        }
        final FileNotFoundException fnfe = new FileNotFoundException(t.getMessage());
        fnfe.initCause(t);
        throw fnfe;
    }
}
Loading