package zlc.season.rxdownloadproject.activity; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.Toolbar; import android.view.View; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; import zlc.season.practicalrecyclerview.PracticalRecyclerView; import zlc.season.rxdownload2.RxDownload; import zlc.season.rxdownload2.entity.DownloadRecord; import zlc.season.rxdownload2.function.Utils; import zlc.season.rxdownloadproject.R; import zlc.season.rxdownloadproject.adapter.DownloadAdapter; import zlc.season.rxdownloadproject.model.DownloadItem; public class DownloadManagerActivity extends AppCompatActivity { @BindView(R.id.toolbar) Toolbar mToolbar; @BindView(R.id.recycler) PracticalRecyclerView mRecycler; private DownloadAdapter mAdapter; private RxDownload rxDownload; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_download_manager); ButterKnife.bind(this); setSupportActionBar(mToolbar); rxDownload = RxDownload.getInstance(this); mAdapter = new DownloadAdapter(); mRecycler.setLayoutManager(new LinearLayoutManager(this)); mRecycler.setAdapterWithLoading(mAdapter); loadData(); } @OnClick({R.id.start, R.id.pause}) public void onClick(View view) { List<DownloadItem> list = mAdapter.getData(); switch (view.getId()) { case R.id.start: for (DownloadItem each : list) { rxDownload.serviceDownload(each.record.getUrl()) .subscribe(new Consumer<Object>() { @Override public void accept(Object o) throws Exception { } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Utils.log(throwable); } }); } break; case R.id.pause: for (DownloadItem each : list) { rxDownload.pauseServiceDownload(each.record.getUrl()) .subscribe(new Consumer<Object>() { @Override public void accept(Object o) throws Exception { } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Utils.log(throwable); } }); } break; } } @Override protected void onDestroy() { super.onDestroy(); List<DownloadItem> list = mAdapter.getData(); for (DownloadItem each : list) { Utils.dispose(each.disposable); } } private void loadData() { RxDownload.getInstance(this).getTotalDownloadRecords() .map(new Function<List<DownloadRecord>, List<DownloadItem>>() { @Override public List<DownloadItem> apply(List<DownloadRecord> downloadRecords) throws Exception { List<DownloadItem> result = new ArrayList<>(); for (DownloadRecord each : downloadRecords) { DownloadItem bean = new DownloadItem(); bean.record = each; result.add(bean); } return result; } }) .subscribe(new Consumer<List<DownloadItem>>() { @Override public void accept(List<DownloadItem> downloadBeen) throws Exception { mAdapter.addAll(downloadBeen); } }); } }