package com.novoda.downloadmanager.demo.extended.batches; import android.content.Intent; import android.database.ContentObserver; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import com.novoda.downloadmanager.DownloadManagerBuilder; import com.novoda.downloadmanager.demo.R; import com.novoda.downloadmanager.demo.extended.BeardDownload; import com.novoda.downloadmanager.demo.extended.QueryForDownloadsAsyncTask; import com.novoda.downloadmanager.lib.DownloadManager; import com.novoda.downloadmanager.notifications.NotificationVisibility; import com.novoda.downloadmanager.lib.Query; import com.novoda.downloadmanager.lib.Request; import com.novoda.downloadmanager.lib.RequestBatch; import com.novoda.downloadmanager.lib.logger.LLog; import java.util.ArrayList; import java.util.List; public class BatchDownloadsActivity extends AppCompatActivity implements QueryForDownloadsAsyncTask.Callback { private static final String BIG_FILE = "http://download.thinkbroadband.com/10MB.zip"; private static final String BEARD_IMAGE = "http://i.imgur.com/9JL2QVl.jpg"; private final Handler handler = new Handler(Looper.getMainLooper()); private DownloadManager downloadManager; private BatchDownloadsAdapter batchDownloadsAdapter; private View emptyView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_batches); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.main_downloads_list); downloadManager = DownloadManagerBuilder.from(this) .build(); batchDownloadsAdapter = new BatchDownloadsAdapter(new ArrayList<BeardDownload>()); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(batchDownloadsAdapter); emptyView = findViewById(R.id.main_no_downloads_view); findViewById(R.id.batch_download_button).setOnClickListener( new View.OnClickListener() { @Override public void onClick(@NonNull View v) { enqueueBatch(); } }); findViewById(R.id.batch_show_button).setOnClickListener( new View.OnClickListener() { @Override public void onClick(@NonNull View v) { startActivity(new Intent(BatchDownloadsActivity.this, BatchesActivity.class)); } }); setupQueryingExample(); } private void setupQueryingExample() { queryForDownloads(); } private void queryForDownloads() { QueryForDownloadsAsyncTask.newInstance(downloadManager, this).execute(new Query()); } private void enqueueBatch() { final RequestBatch batch = new RequestBatch.Builder() .withTitle("Large Beard Shipment") .withDescription("Goatees galore") .withBigPictureUrl(BEARD_IMAGE) .withVisibility(NotificationVisibility.ACTIVE_OR_COMPLETE) .withExtraData("An extra beard.") .build(); Uri uri = Uri.parse(BIG_FILE); final Request request = new Request(uri); request.setDestinationInInternalFilesDir(Environment.DIRECTORY_MOVIES, "beard.shipment"); request.setNotificationExtra("beard_1"); request.applicationChecksFileIntegrity(); batch.addRequest(request); request.setNotificationExtra("beard_2"); batch.addRequest(request); request.setNotificationExtra("beard_3"); batch.addRequest(request); request.setNotificationExtra("beard_4"); batch.addRequest(request); request.setNotificationExtra("beard_5"); batch.addRequest(request); long batchId = downloadManager.enqueue(batch); LLog.d("Download enqueued with batch ID: " + batchId); } @Override protected void onStart() { super.onStart(); getContentResolver().registerContentObserver(downloadManager.getContentUri(), true, updateSelf); } private final ContentObserver updateSelf = new ContentObserver(handler) { @Override public void onChange(boolean selfChange) { queryForDownloads(); } }; @Override protected void onStop() { super.onStop(); getContentResolver().unregisterContentObserver(updateSelf); } @Override public void onQueryResult(List<BeardDownload> beardDownloads) { batchDownloadsAdapter.updateDownloads(beardDownloads); emptyView.setVisibility(beardDownloads.isEmpty() ? View.VISIBLE : View.GONE); } }