package com.novoda.downloadmanager.demo.extended.extra_data;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Bundle;
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.QueryTimestamp;
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.List;
public class ExtraDataActivity extends AppCompatActivity implements QueryForExtraDataDownloadsAsyncTask.Callback {
private static final String BIG_FILE = "http://download.thinkbroadband.com/20MB.zip";
private final Handler handler = new Handler(Looper.getMainLooper());
private final QueryTimestamp lastQueryTimestamp = new QueryTimestamp();
private DownloadManager downloadManager;
private ExtraDataAdapter downloadAdapter;
private View emptyView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_extra_data);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.main_downloads_list);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
downloadManager = DownloadManagerBuilder.from(this)
.build();
downloadAdapter = new ExtraDataAdapter();
recyclerView.setAdapter(downloadAdapter);
emptyView = findViewById(R.id.main_no_downloads_view);
findViewById(R.id.download_button).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(@NonNull View v) {
enqueueSingleDownload();
}
}
);
setupQueryingExample();
}
private void setupQueryingExample() {
queryForDownloads();
}
private void queryForDownloads() {
QueryForExtraDataDownloadsAsyncTask.newInstance(downloadManager, this).execute(new Query());
}
private void enqueueSingleDownload() {
Uri uri = Uri.parse(BIG_FILE);
final Request request = new Request(uri)
.setTitle("A Single Beard")
.setDescription("Fine facial hair")
.setExtraData("Hey you forgot your beard comb.")
.setNotificationVisibility(NotificationVisibility.ACTIVE_OR_COMPLETE);
long requestId = downloadManager.enqueue(request);
LLog.d("Download enqueued with request ID: " + requestId);
}
@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) {
if (lastQueryTimestamp.updatedRecently()) {
return;
}
queryForDownloads();
lastQueryTimestamp.setJustUpdated();
}
};
@Override
protected void onStop() {
super.onStop();
getContentResolver().unregisterContentObserver(updateSelf);
}
@Override
public void onQueryResult(List<ExtraDataDownload> extraDataDownloads) {
downloadAdapter.updateDownloads(extraDataDownloads);
emptyView.setVisibility(extraDataDownloads.isEmpty() ? View.VISIBLE : View.GONE);
}
}