From bb0d23b5475cb516fa6f61ee3fe4e7b79cd980f8 Mon Sep 17 00:00:00 2001 From: Steve Howard Date: Wed, 22 Sep 2010 18:56:29 -0700 Subject: Have DownloadManager pass file URIs for legacy external downloads DownloadManager was set up to return file URIs for public API downloads to external, but to return content URIs for all others. This included browser downloads, which are on external but don't go through the public API. Since the new downloads UI uses DownloadManager, it was affected by this change when the user opened a file from the UI. Apparently numerous things don't handle content URIs well, including music preview (clicking on downloaded mp3) and package installer (clicking on downloaded APK), so this change makes it generate file URIs for legacy external downloads. Change-Id: I5c34d8ba188cc8b0d11865262cb451208be78eae --- core/java/android/net/DownloadManager.java | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'core/java') diff --git a/core/java/android/net/DownloadManager.java b/core/java/android/net/DownloadManager.java index 836223e..18e62b0 100644 --- a/core/java/android/net/DownloadManager.java +++ b/core/java/android/net/DownloadManager.java @@ -247,6 +247,7 @@ public class DownloadManager { Downloads.COLUMN_LAST_MODIFICATION, Downloads.COLUMN_DESTINATION, Downloads.Impl.COLUMN_FILE_NAME_HINT, + Downloads.Impl._DATA, }; private static final Set LONG_COLUMNS = new HashSet( @@ -881,6 +882,11 @@ public class DownloadManager { return getUnderlyingString(Downloads.Impl.COLUMN_FILE_NAME_HINT); } + if (destinationType == Downloads.Impl.DESTINATION_EXTERNAL) { + // return stored destination for legacy external download + return Uri.fromFile(new File(getUnderlyingString(Downloads.Impl._DATA))).toString(); + } + // return content URI for cache download long downloadId = getUnderlyingLong(Downloads.Impl._ID); return ContentUris.withAppendedId(mBaseUri, downloadId).toString(); -- cgit v1.1