summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/downloads/DownloadProvider.java
diff options
context:
space:
mode:
authorSteve Howard <showard@google.com>2010-07-26 12:30:58 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-07-26 12:30:58 -0700
commit59554027a29a0ad2bcc6ce641cccb0b214be000b (patch)
tree9d3f74ca1a33f6ad0da46b2380e6831d0eea5db8 /src/com/android/providers/downloads/DownloadProvider.java
parent1e5f9f05bcc378a30445483b7ef02654ca75fe20 (diff)
parent0a450da1d9e95f27f479aa45b442960baac49bb1 (diff)
downloadandroid_packages_providers_DownloadProvider-59554027a29a0ad2bcc6ce641cccb0b214be000b.tar.gz
android_packages_providers_DownloadProvider-59554027a29a0ad2bcc6ce641cccb0b214be000b.tar.bz2
android_packages_providers_DownloadProvider-59554027a29a0ad2bcc6ce641cccb0b214be000b.zip
am 0a450da1: am 71aab521: Support for non-purgeable downloads through the public API.
Merge commit '0a450da1d9e95f27f479aa45b442960baac49bb1' * commit '0a450da1d9e95f27f479aa45b442960baac49bb1': Support for non-purgeable downloads through the public API.
Diffstat (limited to 'src/com/android/providers/downloads/DownloadProvider.java')
-rw-r--r--src/com/android/providers/downloads/DownloadProvider.java21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java
index d72b1460..74fd2792 100644
--- a/src/com/android/providers/downloads/DownloadProvider.java
+++ b/src/com/android/providers/downloads/DownloadProvider.java
@@ -337,6 +337,11 @@ public final class DownloadProvider extends ContentProvider {
copyBoolean(Downloads.Impl.COLUMN_NO_INTEGRITY, values, filteredValues);
copyString(Downloads.Impl.COLUMN_FILE_NAME_HINT, values, filteredValues);
copyString(Downloads.Impl.COLUMN_MIME_TYPE, values, filteredValues);
+
+ copyBoolean(Downloads.Impl.COLUMN_IS_PUBLIC_API, values, filteredValues);
+ boolean isPublicApi =
+ values.getAsBoolean(Downloads.Impl.COLUMN_IS_PUBLIC_API) == Boolean.TRUE;
+
Integer dest = values.getAsInteger(Downloads.Impl.COLUMN_DESTINATION);
if (dest != null) {
if (getContext().checkCallingPermission(Downloads.Impl.PERMISSION_ACCESS_ADVANCED)
@@ -346,6 +351,16 @@ public final class DownloadProvider extends ContentProvider {
&& dest != Downloads.Impl.DESTINATION_FILE_URI) {
throw new SecurityException("unauthorized destination code");
}
+ // for public API behavior, if an app has CACHE_NON_PURGEABLE permission, automatically
+ // switch to non-purgeable download
+ boolean hasNonPurgeablePermission =
+ getContext().checkCallingPermission(
+ Downloads.Impl.PERMISSION_CACHE_NON_PURGEABLE)
+ == PackageManager.PERMISSION_GRANTED;
+ if (isPublicApi && dest == Downloads.Impl.DESTINATION_CACHE_PARTITION_PURGEABLE
+ && hasNonPurgeablePermission) {
+ dest = Downloads.Impl.DESTINATION_CACHE_PARTITION;
+ }
if (dest == Downloads.Impl.DESTINATION_FILE_URI) {
getContext().enforcePermission(
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
@@ -372,10 +387,6 @@ public final class DownloadProvider extends ContentProvider {
filteredValues.put(Downloads.Impl.COLUMN_LAST_MODIFICATION,
mSystemFacade.currentTimeMillis());
- copyBoolean(Downloads.Impl.COLUMN_IS_PUBLIC_API, values, filteredValues);
- boolean isPublicApi =
- values.getAsBoolean(Downloads.Impl.COLUMN_IS_PUBLIC_API) == Boolean.TRUE;
-
String pckg = values.getAsString(Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE);
String clazz = values.getAsString(Downloads.Impl.COLUMN_NOTIFICATION_CLASS);
if (pckg != null && (clazz != null || isPublicApi)) {
@@ -841,7 +852,7 @@ public final class DownloadProvider extends ContentProvider {
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
-
+
private void appendClause(StringBuilder whereClause, String newClause) {
if (whereClause.length() != 0) {
whereClause.append(" AND ");