summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorVasu Nori <vnori@google.com>2010-10-13 16:50:45 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-10-13 16:50:45 -0700
commit51679ca89293ef33275b9681018c09be3948bf1c (patch)
tree30af6bad320f12d65a6d5844b0cb4ce6a5646954 /core
parentc008ca96bb32289958010dcf8f247c35ab9b1f18 (diff)
parent216fa22791889774b83977341632c4570dcec35d (diff)
downloadframeworks_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.java35
-rw-r--r--core/java/android/provider/Downloads.java26
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.
*/