Add `getTotalSize`, `setTotalSize`, `getBytesSoFar` and `setBytesSoFar` for DownloadManager.Request in ShadowDownloadManager.
PiperOrigin-RevId: 432226590
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowDownloadManagerTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowDownloadManagerTest.java
index 26ff011..56cc77e 100644
--- a/robolectric/src/test/java/org/robolectric/shadows/ShadowDownloadManagerTest.java
+++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowDownloadManagerTest.java
@@ -113,7 +113,7 @@
}
@Test
- public void query_shouldReturnColumnIndexes() {
+ public void query_shouldReturnColumnIndices() {
ShadowDownloadManager manager = new ShadowDownloadManager();
long id = manager.enqueue(request.setDestinationUri(destination));
Cursor cursor = manager.query(new DownloadManager.Query().setFilterById(id));
@@ -124,6 +124,9 @@
assertThat(cursor.getColumnIndex(DownloadManager.COLUMN_DESCRIPTION)).isAtLeast(0);
assertThat(cursor.getColumnIndex(DownloadManager.COLUMN_REASON)).isAtLeast(0);
assertThat(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)).isAtLeast(0);
+ assertThat(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE)).isAtLeast(0);
+ assertThat(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)).isAtLeast(0);
+ assertThat(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)).isAtLeast(0);
}
@Test
@@ -169,6 +172,24 @@
}
@Test
+ public void query_shouldGetTotalSizeAndBytesSoFar() {
+ long currentBytes = 500L;
+ long totalSize = 1000L;
+ ShadowDownloadManager manager = new ShadowDownloadManager();
+ long id = manager.enqueue(request.setDestinationUri(destination));
+ shadow.setTotalSize(totalSize);
+ shadow.setBytesSoFar(currentBytes);
+ Cursor cursor = manager.query(new DownloadManager.Query().setFilterById(id));
+
+ cursor.moveToNext();
+ assertThat(cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)))
+ .isEqualTo(totalSize);
+ assertThat(
+ cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)))
+ .isEqualTo(currentBytes);
+ }
+
+ @Test
public void request_shouldSetDestinationInExternalPublicDir_publicDirectories() throws Exception {
shadow.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "foo.mp4");
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDownloadManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDownloadManager.java
index c65d6ab..3e7ce2f 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDownloadManager.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDownloadManager.java
@@ -75,6 +75,8 @@
@RealObject DownloadManager.Request realObject;
private int status;
+ private long totalSize;
+ private long bytesSoFar;
public int getStatus() {
return this.status;
@@ -84,6 +86,22 @@
this.status = status;
}
+ public long getTotalSize() {
+ return this.totalSize;
+ }
+
+ public void setTotalSize(long totalSize) {
+ this.totalSize = totalSize;
+ }
+
+ public long getBytesSoFar() {
+ return this.bytesSoFar;
+ }
+
+ public void setBytesSoFar(long bytesSoFar) {
+ this.bytesSoFar = bytesSoFar;
+ }
+
public Uri getUri() {
return getFieldReflectively("mUri", realObject, Uri.class);
}
@@ -179,6 +197,8 @@
private static final int COLUMN_INDEX_URI = 4;
private static final int COLUMN_INDEX_LOCAL_URI = 5;
private static final int COLUMN_INDEX_TITLE = 6;
+ private static final int COLUMN_INDEX_TOTAL_SIZE = 7;
+ private static final int COLUMN_INDEX_BYTES_SO_FAR = 8;
public List<DownloadManager.Request> requests = new ArrayList<>();
private int positionIndex = -1;
@@ -233,6 +253,10 @@
} else if (DownloadManager.COLUMN_TITLE.equals(columnName)) {
return COLUMN_INDEX_TITLE;
+ } else if (DownloadManager.COLUMN_TOTAL_SIZE_BYTES.equals(columnName)) {
+ return COLUMN_INDEX_TOTAL_SIZE;
+ } else if (DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR.equals(columnName)) {
+ return COLUMN_INDEX_BYTES_SO_FAR;
}
return -1;
@@ -296,6 +320,18 @@
return 0;
}
+ @Override
+ public long getLong(int columnIndex) {
+ checkClosed();
+ ShadowRequest request = Shadow.extract(requests.get(positionIndex));
+ if (columnIndex == COLUMN_INDEX_TOTAL_SIZE) {
+ return request.getTotalSize();
+ } else if (columnIndex == COLUMN_INDEX_BYTES_SO_FAR) {
+ return request.getBytesSoFar();
+ }
+ return 0;
+ }
+
private void checkClosed() {
if (closed) {
throw new IllegalStateException("Cursor is already closed.");