diff options
Diffstat (limited to 'core/java/android/app/DownloadManager.java')
-rw-r--r-- | core/java/android/app/DownloadManager.java | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index 00d8ae3..a25aa6f 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -28,7 +28,6 @@ import android.os.Environment; import android.os.ParcelFileDescriptor; import android.provider.BaseColumns; import android.provider.Downloads; -import android.util.Log; import android.util.Pair; import java.io.File; @@ -136,6 +135,12 @@ public class DownloadManager { */ public final static String COLUMN_LAST_MODIFIED_TIMESTAMP = "last_modified_timestamp"; + /** + * The URI to the corresponding entry in MediaProvider for this downloaded entry. It is + * used to delete the entries from MediaProvider database when it is deleted from the + * downloaded list. + */ + public static final String COLUMN_MEDIAPROVIDER_URI = "mediaprovider_uri"; /** * Value of {@link #COLUMN_STATUS} when the download is waiting to start. @@ -266,6 +271,7 @@ public class DownloadManager { // this array must contain all public columns private static final String[] COLUMNS = new String[] { COLUMN_ID, + COLUMN_MEDIAPROVIDER_URI, COLUMN_TITLE, COLUMN_DESCRIPTION, COLUMN_URI, @@ -281,6 +287,7 @@ public class DownloadManager { // columns to request from DownloadProvider private static final String[] UNDERLYING_COLUMNS = new String[] { Downloads.Impl._ID, + Downloads.Impl.COLUMN_MEDIAPROVIDER_URI, Downloads.COLUMN_TITLE, Downloads.COLUMN_DESCRIPTION, Downloads.COLUMN_URI, @@ -677,6 +684,9 @@ public class DownloadManager { selectionParts.add(Downloads.Impl.COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI + " != '0'"); } + // only return rows which are not marked 'deleted = 1' + selectionParts.add(Downloads.Impl.COLUMN_DELETED + " != '1'"); + String selection = joinStrings(" AND ", selectionParts); String orderDirection = (mOrderDirection == ORDER_ASCENDING ? "ASC" : "DESC"); String orderBy = mOrderByColumn + " " + orderDirection; @@ -743,6 +753,26 @@ public class DownloadManager { } /** + * Marks the specified download as 'to be deleted'. This is done when a completed download + * is to be removed but the row was stored without enough info to delete the corresponding + * metadata from Mediaprovider database. Actual cleanup of this row is done in DownloadService. + * + * @param ids the IDs of the downloads to be marked 'deleted' + * @return the number of downloads actually updated + * @hide + */ + public int markRowDeleted(long... ids) { + if (ids == null || ids.length == 0) { + // called with nothing to remove! + throw new IllegalArgumentException("input param 'ids' can't be null"); + } + ContentValues values = new ContentValues(); + values.put(Downloads.Impl.COLUMN_DELETED, 1); + return mResolver.update(mBaseUri, values, getWhereClauseForIds(ids), + getWhereArgsForIds(ids)); + } + + /** * Cancel downloads and remove them from the download manager. Each download will be stopped if * it was running, and it will no longer be accessible through the download manager. If a file * was already downloaded to external storage, it will not be deleted. @@ -950,6 +980,9 @@ public class DownloadManager { if (column.equals(COLUMN_MEDIA_TYPE)) { return getUnderlyingString(Downloads.COLUMN_MIME_TYPE); } + if (column.equals(COLUMN_MEDIAPROVIDER_URI)) { + return getUnderlyingString(Downloads.Impl.COLUMN_MEDIAPROVIDER_URI); + } assert column.equals(COLUMN_LOCAL_URI); return getLocalUri(); |