summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2012-04-16 14:29:04 -0700
committerJeff Sharkey <jsharkey@android.com>2012-04-17 10:43:45 -0700
commit9b606340a0b5b88436505651dbe3cdaf60117604 (patch)
tree679f509ab117ec62399f8955ac72aecfc1ced00e /src
parent6da2d0a2e1d046cd39270a46c3c77f8234f4cfaa (diff)
downloadandroid_packages_providers_DownloadProvider-9b606340a0b5b88436505651dbe3cdaf60117604.tar.gz
android_packages_providers_DownloadProvider-9b606340a0b5b88436505651dbe3cdaf60117604.tar.bz2
android_packages_providers_DownloadProvider-9b606340a0b5b88436505651dbe3cdaf60117604.zip
View file downloads through DownloadsProvider.
When viewing file://-style downloads, open through DownloadsProvider so that FLAG_GRANT_READ_URI_PERMISSION works. Add support for OpenableColumns to support external apps probing for metadata. Bug: 6343461 Change-Id: I630405406321ea1871c62cbcded55a4ee024ef6e
Diffstat (limited to 'src')
-rw-r--r--src/com/android/providers/downloads/DownloadProvider.java30
1 files changed, 26 insertions, 4 deletions
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java
index 3efdf63d..4a3844f9 100644
--- a/src/com/android/providers/downloads/DownloadProvider.java
+++ b/src/com/android/providers/downloads/DownloadProvider.java
@@ -38,8 +38,10 @@ import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.os.Process;
import android.provider.Downloads;
+import android.provider.OpenableColumns;
import android.util.Log;
+import com.google.android.collect.Maps;
import com.google.common.annotations.VisibleForTesting;
import java.io.File;
@@ -47,6 +49,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -135,14 +138,24 @@ public final class DownloadProvider extends ContentProvider {
Downloads.Impl.COLUMN_FILE_NAME_HINT,
Downloads.Impl.COLUMN_MEDIAPROVIDER_URI,
Downloads.Impl.COLUMN_DELETED,
+ OpenableColumns.DISPLAY_NAME,
+ OpenableColumns.SIZE,
};
- private static HashSet<String> sAppReadableColumnsSet;
+ private static final HashSet<String> sAppReadableColumnsSet;
+ private static final HashMap<String, String> sColumnsMap;
+
static {
sAppReadableColumnsSet = new HashSet<String>();
for (int i = 0; i < sAppReadableColumnsArray.length; ++i) {
sAppReadableColumnsSet.add(sAppReadableColumnsArray[i]);
}
+
+ sColumnsMap = Maps.newHashMap();
+ sColumnsMap.put(OpenableColumns.DISPLAY_NAME,
+ Downloads.Impl.COLUMN_TITLE + " AS " + OpenableColumns.DISPLAY_NAME);
+ sColumnsMap.put(OpenableColumns.SIZE,
+ Downloads.Impl.COLUMN_TOTAL_BYTES + " AS " + OpenableColumns.SIZE);
}
private static final List<String> downloadManagerColumnsList =
Arrays.asList(DownloadManager.UNDERLYING_COLUMNS);
@@ -440,10 +453,12 @@ public final class DownloadProvider extends ContentProvider {
public String getType(final Uri uri) {
int match = sURIMatcher.match(uri);
switch (match) {
- case MY_DOWNLOADS: {
+ case MY_DOWNLOADS:
+ case ALL_DOWNLOADS: {
return DOWNLOAD_LIST_TYPE;
}
- case MY_DOWNLOADS_ID: {
+ case MY_DOWNLOADS_ID:
+ case ALL_DOWNLOADS_ID: {
return DOWNLOAD_TYPE;
}
case PUBLIC_DOWNLOAD_ID: {
@@ -827,7 +842,7 @@ public final class DownloadProvider extends ContentProvider {
if (shouldRestrictVisibility()) {
if (projection == null) {
- projection = sAppReadableColumnsArray;
+ projection = sAppReadableColumnsArray.clone();
} else {
// check the validity of the columns in projection
for (int i = 0; i < projection.length; ++i) {
@@ -838,6 +853,13 @@ public final class DownloadProvider extends ContentProvider {
}
}
}
+
+ for (int i = 0; i < projection.length; i++) {
+ final String newColumn = sColumnsMap.get(projection[i]);
+ if (newColumn != null) {
+ projection[i] = newColumn;
+ }
+ }
}
if (Constants.LOGVV) {