From f83e6e4b7a7fcbfcc8e3b6078f4655fa3e64bce3 Mon Sep 17 00:00:00 2001 From: Vasu Nori Date: Mon, 13 Dec 2010 16:28:31 -0800 Subject: bug:3264401 changes to support usage of new downloads dir in /data Change-Id: I209a624523f727d47a4a8f758c13df5d4eac614f --- core/java/android/app/DownloadManager.java | 25 ++++++++++++++++++++++++- core/java/android/provider/Downloads.java | 7 +++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index ed4aed2e95c4..a24375eba621 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -24,6 +24,7 @@ import android.database.Cursor; import android.database.CursorWrapper; import android.net.ConnectivityManager; import android.net.Uri; +import android.os.Binder; import android.os.Environment; import android.os.ParcelFileDescriptor; import android.provider.Downloads; @@ -335,6 +336,7 @@ public class DownloadManager { private int mAllowedNetworkTypes = ~0; // default to all network types allowed private boolean mIsVisibleInDownloadsUi = true; private boolean mScannable = false; + private boolean mUseSystemCache = false; /** if a file is designated as a MediaScanner scannable file, the following value is * stored in the database column {@link Downloads.Impl#COLUMN_MEDIA_SCANNED}. */ @@ -401,6 +403,24 @@ public class DownloadManager { return this; } + /** + * Set the local destination for the downloaded file to the system cache dir (/cache). + * This is only available to System apps with the permission + * {@link android.Manifest.permission#ACCESS_CACHE_FILESYSTEM}. + *

+ * The downloaded file is not scanned by MediaScanner. + * But it can be made scannable by calling {@link #allowScanningByMediaScanner()}. + *

+ * Files downloaded to /cache may be deleted by the system at any time to reclaim space. + * + * @return this object + * @hide + */ + public Request setDestinationToSystemCache() { + mUseSystemCache = true; + return this; + } + /** * Set the local destination for the downloaded file to a path within the application's * external files directory (as returned by {@link Context#getExternalFilesDir(String)}. @@ -596,7 +616,9 @@ public class DownloadManager { values.put(Downloads.Impl.COLUMN_FILE_NAME_HINT, mDestinationUri.toString()); } else { values.put(Downloads.Impl.COLUMN_DESTINATION, - Downloads.Impl.DESTINATION_CACHE_PARTITION_PURGEABLE); + (this.mUseSystemCache) ? + Downloads.Impl.DESTINATION_SYSTEMCACHE_PARTITION : + Downloads.Impl.DESTINATION_CACHE_PARTITION_PURGEABLE); } // is the file supposed to be media-scannable? values.put(Downloads.Impl.COLUMN_MEDIA_SCANNED, (mScannable) ? SCANNABLE_VALUE_YES : @@ -918,6 +940,7 @@ public class DownloadManager { // non-external storage for a downloaded file, then the following code // should also check for that destination. if (destination == Downloads.Impl.DESTINATION_CACHE_PARTITION || + destination == Downloads.Impl.DESTINATION_SYSTEMCACHE_PARTITION || destination == Downloads.Impl.DESTINATION_CACHE_PARTITION_NOROAMING || destination == Downloads.Impl.DESTINATION_CACHE_PARTITION_PURGEABLE) { // return private uri diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java index b2b8c5af9df2..013edd395ae7 100644 --- a/core/java/android/provider/Downloads.java +++ b/core/java/android/provider/Downloads.java @@ -458,6 +458,13 @@ public final class Downloads { */ public static final int DESTINATION_FILE_URI = 4; + /** + * This download will be saved to the system cache ("/cache") + * partition. This option is only used by system apps and so it requires + * android.permission.ACCESS_CACHE_FILESYSTEM permission. + */ + public static final int DESTINATION_SYSTEMCACHE_PARTITION = 5; + /** * This download is allowed to run. */ -- cgit v1.2.3-59-g8ed1b