diff options
author | Vasu Nori <vnori@google.com> | 2010-10-13 16:50:45 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-10-13 16:50:45 -0700 |
commit | 51679ca89293ef33275b9681018c09be3948bf1c (patch) | |
tree | 30af6bad320f12d65a6d5844b0cb4ce6a5646954 /core | |
parent | c008ca96bb32289958010dcf8f247c35ab9b1f18 (diff) | |
parent | 216fa22791889774b83977341632c4570dcec35d (diff) | |
download | frameworks_base-51679ca89293ef33275b9681018c09be3948bf1c.zip frameworks_base-51679ca89293ef33275b9681018c09be3948bf1c.tar.gz frameworks_base-51679ca89293ef33275b9681018c09be3948bf1c.tar.bz2 |
Merge "bug:3069735 in Download UI app, handle deletes correctly" into gingerbread
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/app/DownloadManager.java | 35 | ||||
-rw-r--r-- | core/java/android/provider/Downloads.java | 26 |
2 files changed, 60 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(); diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java index 8fd0e0a..72bf6b0 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. */ |