summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVasu Nori <vnori@google.com>2010-11-16 18:06:10 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-11-16 18:06:10 -0800
commitb2475011bc6d02f3da91e754a5898cd7f44e8eb6 (patch)
treeb2423f585be16736b6cf94bb23d55c8f72e7ad50
parente521c16eb6b343fe1ef70106e78c9b077d575bee (diff)
parent6e2b2a660ebc2f690b341da6e83d2cd2af99ebeb (diff)
downloadframeworks_base-b2475011bc6d02f3da91e754a5898cd7f44e8eb6.zip
frameworks_base-b2475011bc6d02f3da91e754a5898cd7f44e8eb6.tar.gz
frameworks_base-b2475011bc6d02f3da91e754a5898cd7f44e8eb6.tar.bz2
Merge "return file uri from downloadmanager instead of content uri for public downloads"
-rw-r--r--api/current.xml13
-rw-r--r--core/java/android/app/DownloadManager.java44
2 files changed, 51 insertions, 6 deletions
diff --git a/api/current.xml b/api/current.xml
index c9c6f6f..ebfa842 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -26482,6 +26482,19 @@
<parameter name="request" type="android.app.DownloadManager.Request">
</parameter>
</method>
+<method name="getMimeTypeForDownloadedFile"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="id" type="long">
+</parameter>
+</method>
<method name="getUriForDownloadedFile"
return="android.net.Uri"
abstract="false"
diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java
index 6e18533..09a21f8 100644
--- a/core/java/android/app/DownloadManager.java
+++ b/core/java/android/app/DownloadManager.java
@@ -886,8 +886,8 @@ public class DownloadManager {
* downloaded successfully. otherwise, null is returned.
*<p>
* If the specified downloaded file is in external storage (for example, /sdcard dir),
- * then it is assumed to be safe for anyone to read and the returned {@link Uri} can be used
- * by any app to access the downloaded file.
+ * then it is assumed to be safe for anyone to read and the returned {@link Uri} corresponds
+ * to the filepath on sdcard.
*
* @param id the id of the downloaded file.
* @return the {@link Uri} for the given downloaded file id, if download was successful. null
@@ -903,8 +903,7 @@ public class DownloadManager {
return null;
}
while (cursor.moveToFirst()) {
- int status = cursor.getInt(cursor.getColumnIndexOrThrow(
- DownloadManager.COLUMN_STATUS));
+ int status = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_STATUS));
if (DownloadManager.STATUS_SUCCESSFUL == status) {
int indx = cursor.getColumnIndexOrThrow(
Downloads.Impl.COLUMN_DESTINATION);
@@ -919,8 +918,9 @@ public class DownloadManager {
return ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI, id);
} else {
// return public uri
- return ContentUris.withAppendedId(
- Downloads.Impl.PUBLICLY_ACCESSIBLE_DOWNLOADS_URI, id);
+ String path = cursor.getString(
+ cursor.getColumnIndexOrThrow(COLUMN_LOCAL_FILENAME));
+ return Uri.fromFile(new File(path));
}
}
}
@@ -934,6 +934,38 @@ public class DownloadManager {
}
/**
+ * Returns {@link Uri} for the given downloaded file id, if the file is
+ * downloaded successfully. otherwise, null is returned.
+ *<p>
+ * If the specified downloaded file is in external storage (for example, /sdcard dir),
+ * then it is assumed to be safe for anyone to read and the returned {@link Uri} corresponds
+ * to the filepath on sdcard.
+ *
+ * @param id the id of the downloaded file.
+ * @return the {@link Uri} for the given downloaded file id, if download was successful. null
+ * otherwise.
+ */
+ public String getMimeTypeForDownloadedFile(long id) {
+ Query query = new Query().setFilterById(id);
+ Cursor cursor = null;
+ try {
+ cursor = query(query);
+ if (cursor == null) {
+ return null;
+ }
+ while (cursor.moveToFirst()) {
+ return cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_MEDIA_TYPE));
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ // downloaded file not found or its status is not 'successfully completed'
+ return null;
+ }
+
+ /**
* Restart the given downloads, which must have already completed (successfully or not). This
* method will only work when called from within the download manager's process.
* @param ids the IDs of the downloads