diff options
| -rw-r--r-- | api/current.xml | 11 | ||||
| -rw-r--r-- | core/java/android/app/DownloadManager.java | 35 | ||||
| -rw-r--r-- | core/java/android/provider/Downloads.java | 26 |
3 files changed, 71 insertions, 1 deletions
diff --git a/api/current.xml b/api/current.xml index 4ecaf539d27b..b51242b97adf 100644 --- a/api/current.xml +++ b/api/current.xml @@ -29358,6 +29358,17 @@ visibility="public" > </field> +<field name="COLUMN_MEDIAPROVIDER_URI" + type="java.lang.String" + transient="false" + volatile="false" + value=""mediaprovider_uri"" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="COLUMN_MEDIA_TYPE" type="java.lang.String" transient="false" diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index b9a541dec257..fd96cf0f7119 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; @@ -141,6 +140,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. @@ -271,6 +276,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, @@ -287,6 +293,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, @@ -683,6 +690,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; @@ -749,6 +759,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. @@ -959,6 +989,9 @@ public class DownloadManager { if (column.equals(COLUMN_LOCAL_FILENAME)) { return getUnderlyingString(Downloads.Impl._DATA); } + if (column.equals(COLUMN_MEDIAPROVIDER_URI)) { + return getUnderlyingString(Downloads.Impl.COLUMN_MEDIAPROVIDER_URI); + } assert column.equals(COLUMN_LOCAL_URI); return getLocalUri(); diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java index 8fd0e0a3f712..72bf6b08d684 100644 --- a/core/java/android/provider/Downloads.java +++ b/core/java/android/provider/Downloads.java @@ -300,6 +300,15 @@ public final class Downloads { */ public static final String COLUMN_DESCRIPTION = "description"; + /** + * Set to true if this download is deleted. It is completely removed from the database + * when MediaProvider database also deletes the metadata asociated with this downloaded file. + * <P>Type: BOOLEAN</P> + * <P>Owner can Read</P> + * @hide + */ + public static final String COLUMN_DELETED = "deleted"; + /* * Lists the destinations that an application can specify for a download. */ @@ -881,6 +890,23 @@ public final class Downloads { public static final String COLUMN_BYPASS_RECOMMENDED_SIZE_LIMIT = "bypass_recommended_size_limit"; + /** + * Set to true if this download is deleted. It is completely removed from the database + * when MediaProvider database also deletes the metadata asociated with this downloaded file. + * <P>Type: BOOLEAN</P> + * <P>Owner can Read</P> + */ + public static final String COLUMN_DELETED = "deleted"; + + /** + * 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. + * <P>Type: TEXT</P> + * <P>Owner can Read</P> + */ + public static final String COLUMN_MEDIAPROVIDER_URI = "mediaprovider_uri"; + /* * Lists the destinations that an application can specify for a download. */ |