summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java12
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java13
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java10
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java12
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/model/Document.java40
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java7
6 files changed, 71 insertions, 23 deletions
diff --git a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
index e19505f4b05a..313774ba469f 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
@@ -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();
}
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java
index a50c312659c0..94c2b6130d65 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java
@@ -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:
- doc = Document.fromRecentOpenCursor(resolver, cursor);
+ 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);
}
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
index fae567374062..8e7e087c487d 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
@@ -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) {
- onDocumentPicked(Document.fromRoot(getContentResolver(), root));
+ try {
+ onDocumentPicked(Document.fromRoot(getContentResolver(), root));
+ } catch (FileNotFoundException e) {
+ }
} else {
onCurrentDirectoryChanged();
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
index 1e018e73f04d..5cdc915dae9d 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
@@ -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));
- final DocumentStack stack = DocumentStack.deserialize(resolver, rawStack);
- result.add(stack);
+ 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);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/Document.java b/packages/DocumentsUI/src/com/android/documentsui/model/Document.java
index f2744658da5f..95922b40de3a 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/model/Document.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/model/Document.java
@@ -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;
+ }
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java
index 67dca07673b0..d6c852ed60d6 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java
@@ -17,6 +17,7 @@
package com.android.documentsui.model;
import static com.android.documentsui.DocumentsActivity.TAG;
+import static com.android.documentsui.model.Document.asFileNotFoundException;
import android.content.ContentResolver;
import android.net.Uri;
@@ -25,6 +26,7 @@ import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
+import java.io.FileNotFoundException;
import java.util.LinkedList;
/**
@@ -41,7 +43,8 @@ public class DocumentStack extends LinkedList<Document> {
return json.toString();
}
- public static DocumentStack deserialize(ContentResolver resolver, String raw) {
+ public static DocumentStack deserialize(ContentResolver resolver, String raw)
+ throws FileNotFoundException {
Log.d(TAG, "deserialize: " + raw);
final DocumentStack stack = new DocumentStack();
@@ -53,7 +56,7 @@ public class DocumentStack extends LinkedList<Document> {
stack.add(doc);
}
} catch (JSONException e) {
- Log.w(TAG, "Failed to decode stack", e);
+ throw asFileNotFoundException(e);
}
// TODO: handle roots that have gone missing