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.");