summaryrefslogtreecommitdiffstats
path: root/packages/ExternalStorageProvider/src
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2013-09-22 19:55:19 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-09-22 19:55:19 +0000
commit5e1a5e5bad475696e842addceb7dd6a519879f98 (patch)
tree3e62dbaa8a6893c9d2c3159b3e4ea09566a4bd9d /packages/ExternalStorageProvider/src
parent3ba21e979524367631de70dfc82075693d9c616d (diff)
parent5545f56f7561810187545a1817b6001dd1f9931b (diff)
downloadframeworks_base-5e1a5e5bad475696e842addceb7dd6a519879f98.zip
frameworks_base-5e1a5e5bad475696e842addceb7dd6a519879f98.tar.gz
frameworks_base-5e1a5e5bad475696e842addceb7dd6a519879f98.tar.bz2
Merge "Create unique files, root ordering, UI bugs." into klp-dev
Diffstat (limited to 'packages/ExternalStorageProvider/src')
-rw-r--r--packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java67
1 files changed, 34 insertions, 33 deletions
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index f468abc..0ef5f56 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -96,25 +96,6 @@ public class ExternalStorageProvider extends DocumentsProvider {
throw new IllegalStateException(e);
}
- try {
- final String rootId = "documents";
- final File path = Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_DOCUMENTS);
- mIdToPath.put(rootId, path);
-
- final RootInfo root = new RootInfo();
- root.rootId = rootId;
- root.rootType = Root.ROOT_TYPE_SHORTCUT;
- root.flags = Root.FLAG_SUPPORTS_CREATE | Root.FLAG_LOCAL_ONLY
- | Root.FLAG_SUPPORTS_SEARCH;
- root.title = getContext().getString(R.string.root_documents);
- root.docId = getDocIdForFile(path);
- mRoots.add(root);
- mIdToRoot.put(rootId, root);
- } catch (FileNotFoundException e) {
- throw new IllegalStateException(e);
- }
-
return true;
}
@@ -230,14 +211,23 @@ public class ExternalStorageProvider extends DocumentsProvider {
public String createDocument(String docId, String mimeType, String displayName)
throws FileNotFoundException {
final File parent = getFileForDocId(docId);
- displayName = validateDisplayName(mimeType, displayName);
+ File file;
- final File file = new File(parent, displayName);
if (Document.MIME_TYPE_DIR.equals(mimeType)) {
+ file = new File(parent, displayName);
if (!file.mkdir()) {
throw new IllegalStateException("Failed to mkdir " + file);
}
} else {
+ displayName = removeExtension(mimeType, displayName);
+ file = new File(parent, addExtension(mimeType, displayName));
+
+ // If conflicting file, try adding counter suffix
+ int n = 0;
+ while (file.exists() && n++ < 32) {
+ file = new File(parent, addExtension(mimeType, displayName + " (" + n + ")"));
+ }
+
try {
if (!file.createNewFile()) {
throw new IllegalStateException("Failed to touch " + file);
@@ -354,20 +344,31 @@ public class ExternalStorageProvider extends DocumentsProvider {
return "application/octet-stream";
}
- private static String validateDisplayName(String mimeType, String displayName) {
- if (Document.MIME_TYPE_DIR.equals(mimeType)) {
- return displayName;
- } else {
- // Try appending meaningful extension if needed
- if (!mimeType.equals(getTypeForName(displayName))) {
- final String extension = MimeTypeMap.getSingleton()
- .getExtensionFromMimeType(mimeType);
- if (extension != null) {
- displayName += "." + extension;
- }
+ /**
+ * Remove file extension from name, but only if exact MIME type mapping
+ * exists. This means we can reapply the extension later.
+ */
+ private static String removeExtension(String mimeType, String name) {
+ final int lastDot = name.lastIndexOf('.');
+ if (lastDot >= 0) {
+ final String extension = name.substring(lastDot + 1);
+ final String nameMime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
+ if (mimeType.equals(nameMime)) {
+ return name.substring(0, lastDot);
}
+ }
+ return name;
+ }
- return displayName;
+ /**
+ * Add file extension to name, but only if exact MIME type mapping exists.
+ */
+ private static String addExtension(String mimeType, String name) {
+ final String extension = MimeTypeMap.getSingleton()
+ .getExtensionFromMimeType(mimeType);
+ if (extension != null) {
+ return name + "." + extension;
}
+ return name;
}
}