Merge "Download manager support for file URIs + last modified time" into gingerbread
This commit is contained in:
@@ -24,6 +24,7 @@ import android.os.ParcelFileDescriptor;
|
|||||||
import android.provider.Downloads;
|
import android.provider.Downloads;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -112,10 +113,10 @@ public class DownloadManager {
|
|||||||
public final static String COLUMN_BYTES_DOWNLOADED_SO_FAR = "bytes_so_far";
|
public final static String COLUMN_BYTES_DOWNLOADED_SO_FAR = "bytes_so_far";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Timestamp when the download was requested, in {@link System#currentTimeMillis
|
* Timestamp when the download was last modified, in {@link System#currentTimeMillis
|
||||||
* System.currentTimeMillis()} (wall clock time in UTC).
|
* System.currentTimeMillis()} (wall clock time in UTC).
|
||||||
*/
|
*/
|
||||||
public final static String COLUMN_REQUESTED_TIMESTAMP = "requested_timestamp";
|
public final static String COLUMN_LAST_MODIFIED_TIMESTAMP = "last_modified_timestamp";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -199,7 +200,7 @@ public class DownloadManager {
|
|||||||
COLUMN_STATUS,
|
COLUMN_STATUS,
|
||||||
COLUMN_ERROR_CODE,
|
COLUMN_ERROR_CODE,
|
||||||
COLUMN_BYTES_DOWNLOADED_SO_FAR,
|
COLUMN_BYTES_DOWNLOADED_SO_FAR,
|
||||||
COLUMN_REQUESTED_TIMESTAMP
|
COLUMN_LAST_MODIFIED_TIMESTAMP
|
||||||
};
|
};
|
||||||
|
|
||||||
// columns to request from DownloadProvider
|
// columns to request from DownloadProvider
|
||||||
@@ -212,12 +213,13 @@ public class DownloadManager {
|
|||||||
Downloads.COLUMN_TOTAL_BYTES,
|
Downloads.COLUMN_TOTAL_BYTES,
|
||||||
Downloads._DATA,
|
Downloads._DATA,
|
||||||
Downloads.COLUMN_STATUS,
|
Downloads.COLUMN_STATUS,
|
||||||
Downloads.COLUMN_CURRENT_BYTES
|
Downloads.COLUMN_CURRENT_BYTES,
|
||||||
|
Downloads.COLUMN_LAST_MODIFICATION,
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final Set<String> LONG_COLUMNS = new HashSet<String>(
|
private static final Set<String> LONG_COLUMNS = new HashSet<String>(
|
||||||
Arrays.asList(COLUMN_ID, COLUMN_TOTAL_SIZE_BYTES, COLUMN_STATUS, COLUMN_ERROR_CODE,
|
Arrays.asList(COLUMN_ID, COLUMN_TOTAL_SIZE_BYTES, COLUMN_STATUS, COLUMN_ERROR_CODE,
|
||||||
COLUMN_BYTES_DOWNLOADED_SO_FAR, COLUMN_REQUESTED_TIMESTAMP));
|
COLUMN_BYTES_DOWNLOADED_SO_FAR, COLUMN_LAST_MODIFIED_TIMESTAMP));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class contains all the information necessary to request a new download. The URI is the
|
* This class contains all the information necessary to request a new download. The URI is the
|
||||||
@@ -340,8 +342,8 @@ public class DownloadManager {
|
|||||||
values.put(Downloads.COLUMN_URI, mUri.toString());
|
values.put(Downloads.COLUMN_URI, mUri.toString());
|
||||||
|
|
||||||
if (mDestinationUri != null) {
|
if (mDestinationUri != null) {
|
||||||
// TODO destination support
|
values.put(Downloads.COLUMN_DESTINATION, Downloads.Impl.DESTINATION_FILE_URI);
|
||||||
throw new UnsupportedOperationException();
|
values.put(Downloads.COLUMN_FILE_NAME_HINT, mDestinationUri.toString());
|
||||||
} else {
|
} else {
|
||||||
values.put(Downloads.COLUMN_DESTINATION,
|
values.put(Downloads.COLUMN_DESTINATION,
|
||||||
Downloads.DESTINATION_CACHE_PARTITION_PURGEABLE);
|
Downloads.DESTINATION_CACHE_PARTITION_PURGEABLE);
|
||||||
@@ -433,8 +435,8 @@ public class DownloadManager {
|
|||||||
selection = joinStrings(" OR ", parts);
|
selection = joinStrings(" OR ", parts);
|
||||||
Log.w("DownloadManagerPublic", selection);
|
Log.w("DownloadManagerPublic", selection);
|
||||||
}
|
}
|
||||||
// TODO: ordering
|
String orderBy = Downloads.COLUMN_LAST_MODIFICATION + " DESC";
|
||||||
return resolver.query(uri, projection, selection, null, null);
|
return resolver.query(uri, projection, selection, null, orderBy);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String joinStrings(String joiner, Iterable<String> parts) {
|
private String joinStrings(String joiner, Iterable<String> parts) {
|
||||||
@@ -625,7 +627,7 @@ public class DownloadManager {
|
|||||||
return getUnderlyingString(Downloads.COLUMN_MIME_TYPE);
|
return getUnderlyingString(Downloads.COLUMN_MIME_TYPE);
|
||||||
}
|
}
|
||||||
assert column.equals(COLUMN_LOCAL_URI);
|
assert column.equals(COLUMN_LOCAL_URI);
|
||||||
return Uri.fromParts("file", getUnderlyingString(Downloads._DATA), null).toString();
|
return Uri.fromFile(new File(getUnderlyingString(Downloads._DATA))).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private long translateLong(String column) {
|
private long translateLong(String column) {
|
||||||
@@ -649,8 +651,8 @@ public class DownloadManager {
|
|||||||
if (column.equals(COLUMN_BYTES_DOWNLOADED_SO_FAR)) {
|
if (column.equals(COLUMN_BYTES_DOWNLOADED_SO_FAR)) {
|
||||||
return getUnderlyingLong(Downloads.COLUMN_CURRENT_BYTES);
|
return getUnderlyingLong(Downloads.COLUMN_CURRENT_BYTES);
|
||||||
}
|
}
|
||||||
assert column.equals(COLUMN_REQUESTED_TIMESTAMP);
|
assert column.equals(COLUMN_LAST_MODIFIED_TIMESTAMP);
|
||||||
throw new UnsupportedOperationException(); // TODO
|
return getUnderlyingLong(Downloads.COLUMN_LAST_MODIFICATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
private long translateErrorCode(int status) {
|
private long translateErrorCode(int status) {
|
||||||
|
|||||||
@@ -898,6 +898,12 @@ public final class Downloads {
|
|||||||
*/
|
*/
|
||||||
public static final int DESTINATION_CACHE_PARTITION_NOROAMING = 3;
|
public static final int DESTINATION_CACHE_PARTITION_NOROAMING = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This download will be saved to the location given by the file URI in
|
||||||
|
* {@link #COLUMN_FILE_NAME_HINT}.
|
||||||
|
*/
|
||||||
|
public static final int DESTINATION_FILE_URI = 4;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This download is allowed to run.
|
* This download is allowed to run.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user