package com.novoda.downloadmanager.demo.extended.pause_resume; 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.logger.LLog; import java.util.ArrayList; import java.util.List; public class PauseResumeActivity extends AppCompatActivity implements QueryForDownloadsAsyncTask.Callback { private static final String BIG_FILE = "http://download.thinkbroadband.com/100MB.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 PauseResumeAdapter pauseResumeAdapter; private View emptyView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pause_resume); emptyView = findViewById(R.id.main_no_downloads_view); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.main_downloads_list); recyclerView.setLayoutManager(new LinearLayoutManager(this)); downloadManager = DownloadManagerBuilder.from(this) .build(); PauseResumeAdapter.Listener clickListener = new PauseResumeAdapter.Listener() { @Override public void onItemClick(BeardDownload download) { if (download.isPaused()) { downloadManager.resumeBatch(download.getBatchId()); } else { downloadManager.pauseBatch(download.getBatchId()); } queryForDownloads(); } }; pauseResumeAdapter = new PauseResumeAdapter(new ArrayList<BeardDownload>(), clickListener); recyclerView.setAdapter(pauseResumeAdapter); findViewById(R.id.single_download_button).setOnClickListener( new View.OnClickListener() { @Override public void onClick(@NonNull View v) { enqueueSingleDownload(); } } ); setupQueryingExample(); } private void setupQueryingExample() { queryForDownloads(); } private void queryForDownloads() { Query orderedQuery = new Query().orderByLiveness(); QueryForDownloadsAsyncTask.newInstance(downloadManager, this).execute(orderedQuery); } private void enqueueSingleDownload() { Uri uri = Uri.parse(BIG_FILE); final Request request = new Request(uri) .setTitle("A Single Beard") .setDescription("Fine facial hair") .setBigPictureUrl(BEARD_IMAGE) .setDestinationInInternalFilesDir(Environment.DIRECTORY_MOVIES, "pause_resume_example.beard") .setNotificationVisibility(NotificationVisibility.ACTIVE_OR_COMPLETE) .alwaysAttemptResume(); long requestId = downloadManager.enqueue(request); LLog.d("Download enqueued with request ID: " + requestId); } @Override protected void onStart() { super.onStart(); getContentResolver().registerContentObserver(downloadManager.getDownloadsWithoutProgressUri(), 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) { pauseResumeAdapter.updateDownloads(beardDownloads); emptyView.setVisibility(beardDownloads.isEmpty() ? View.VISIBLE : View.GONE); } }