diff options
author | Steve Howard <showard@google.com> | 2010-07-26 12:30:58 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-07-26 12:30:58 -0700 |
commit | 59554027a29a0ad2bcc6ce641cccb0b214be000b (patch) | |
tree | 9d3f74ca1a33f6ad0da46b2380e6831d0eea5db8 /src/com/android/providers/downloads/DownloadProvider.java | |
parent | 1e5f9f05bcc378a30445483b7ef02654ca75fe20 (diff) | |
parent | 0a450da1d9e95f27f479aa45b442960baac49bb1 (diff) | |
download | android_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.java | 21 |
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 "); |