package com.novoda.downloadmanager.demo.extended.batches;
import android.database.Cursor;
import android.os.AsyncTask;
import com.novoda.downloadmanager.lib.BatchQuery;
import com.novoda.downloadmanager.lib.DownloadManager;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
public class QueryForBatchesAsyncTask extends AsyncTask<BatchQuery, Void, List<BeardBatch>> {
private final DownloadManager downloadManager;
private final WeakReference<Callback> weakCallback;
public static QueryForBatchesAsyncTask newInstance(DownloadManager downloadManager, Callback callback) {
return new QueryForBatchesAsyncTask(downloadManager, new WeakReference<>(callback));
}
QueryForBatchesAsyncTask(DownloadManager downloadManager, WeakReference<Callback> weakCallback) {
this.downloadManager = downloadManager;
this.weakCallback = weakCallback;
}
@Override
protected List<BeardBatch> doInBackground(BatchQuery... params) {
Cursor cursor = downloadManager.query(params[0]);
List<BeardBatch> beardBatches = new ArrayList<>();
try {
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_ID));
String title = cursor.getString(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_TITLE));
int status = cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_BATCH_STATUS));
long totalBytes = cursor.getLong(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_BATCH_TOTAL_SIZE_BYTES));
long currentBytes = cursor.getLong(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_BATCH_CURRENT_SIZE_BYTES));
String extraData = cursor.getString(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_EXTRA_DATA));
beardBatches.add(new BeardBatch(id, title, status, totalBytes, currentBytes, extraData));
}
} finally {
cursor.close();
}
return beardBatches;
}
@Override
protected void onPostExecute(List<BeardBatch> beardBatches) {
super.onPostExecute(beardBatches);
Callback callback = weakCallback.get();
if (callback == null) {
return;
}
callback.onQueryResult(beardBatches);
}
public interface Callback {
void onQueryResult(List<BeardBatch> beardBatches);
}
}