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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user