summaryrefslogtreecommitdiffstats
path: root/core/java/android/app/DownloadManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/app/DownloadManager.java')
-rw-r--r--core/java/android/app/DownloadManager.java35
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();