Loading packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java +9 −3 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ import android.widget.Toast; import com.android.documentsui.model.Document; import java.io.FileNotFoundException; /** * Dialog to create a new directory. */ Loading Loading @@ -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(); } } Loading packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java +10 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } } Loading packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +7 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); } Loading Loading @@ -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(); } Loading packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java +10 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading packages/DocumentsUI/src/com/android/documentsui/model/Document.java +30 −10 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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); } Loading @@ -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); Loading @@ -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); Loading @@ -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); } } Loading Loading @@ -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
packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java +9 −3 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ import android.widget.Toast; import com.android.documentsui.model.Document; import java.io.FileNotFoundException; /** * Dialog to create a new directory. */ Loading Loading @@ -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(); } } Loading
packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java +10 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } } Loading
packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +7 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); } Loading Loading @@ -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(); } Loading
packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java +10 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading
packages/DocumentsUI/src/com/android/documentsui/model/Document.java +30 −10 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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); } Loading @@ -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); Loading @@ -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); Loading @@ -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); } } Loading Loading @@ -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; } }