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
This commit is contained in:
Steve Howard
2010-09-22 18:56:29 -07:00
parent 4f564cdeb8
commit bb0d23b547

View File

@@ -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<String> LONG_COLUMNS = new HashSet<String>(
@@ -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();