package com.u9porn.ui.download; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.aitsuki.swipe.SwipeItemLayout; import com.chad.library.adapter.base.BaseQuickAdapter; import com.liulishuo.filedownloader.BaseDownloadTask; import com.liulishuo.filedownloader.FileDownloadConnectListener; import com.liulishuo.filedownloader.FileDownloader; import com.liulishuo.filedownloader.model.FileDownloadStatus; import com.orhanobut.logger.Logger; import com.sdsmdg.tastytoast.TastyToast; import com.u9porn.R; import com.u9porn.adapter.DownloadVideoAdapter; import com.u9porn.data.db.entity.V9PornItem; import com.u9porn.service.DownloadVideoService; import com.u9porn.ui.MvpFragment; import com.u9porn.utils.DownloadManager; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; /** * A simple {@link Fragment} subclass. * * @author flymegoc */ public class DownloadingFragment extends MvpFragment<DownloadView, DownloadPresenter> implements DownloadManager.DownloadStatusUpdater, DownloadView { private static final String TAG = DownloadingFragment.class.getSimpleName(); @BindView(R.id.recyclerView_download) RecyclerView recyclerView; Unbinder unbinder; private DownloadVideoAdapter mDownloadAdapter; private ArrayList<V9PornItem> mV9PornItemList; @Inject protected DownloadPresenter downloadPresenter; @Inject public DownloadingFragment() { // Required empty public constructor } private FileDownloadConnectListener fileDownloadConnectListener = new FileDownloadConnectListener() { @Override public void connected() { Logger.t(TAG).d("连接上下载服务"); List<V9PornItem> v9PornItems = presenter.loadDownloadingDatas(); for (V9PornItem v9PornItem : v9PornItems) { int status = FileDownloader.getImpl().getStatus(v9PornItem.getVideoResult().getVideoUrl(), v9PornItem.getDownLoadPath(presenter.getCustomDownloadVideoDirPath())); Logger.t(TAG).d("fix status:::" + status); if (status != v9PornItem.getStatus()) { v9PornItem.setStatus(status); presenter.updateV9PornItem(v9PornItem); } } presenter.loadDownloadingData(); } @Override public void disconnected() { Logger.t(TAG).d("下载服务连接断开了"); } }; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); DownloadManager.getImpl().addUpdater(this); FileDownloader.getImpl().addServiceConnectListener(fileDownloadConnectListener); } @NonNull @Override public DownloadPresenter createPresenter() { return downloadPresenter; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); unbinder = ButterKnife.bind(this, view); mV9PornItemList = new ArrayList<>(); mDownloadAdapter = new DownloadVideoAdapter(R.layout.item_right_menu_delete_download, mV9PornItemList); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.getItemAnimator().setChangeDuration(0); recyclerView.setAdapter(mDownloadAdapter); mDownloadAdapter.setEmptyView(R.layout.empty_view, recyclerView); mDownloadAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { goToPlayVideo((V9PornItem) adapter.getItem(position), presenter.getPlaybackEngine(), 0, 0); } }); mDownloadAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { @Override public void onItemChildClick(BaseQuickAdapter adapter, final View view, int position) { final V9PornItem v9PornItem = (V9PornItem) adapter.getItem(position); if (v9PornItem == null) { return; } Logger.t(TAG).d("当前状态:" + v9PornItem.getStatus()); if (view.getId() == R.id.right_menu_delete) { SwipeItemLayout swipeItemLayout = (SwipeItemLayout) view.getParent(); swipeItemLayout.close(); presenter.deleteDownloadingTask(v9PornItem); presenter.loadDownloadingData(); } else if (view.getId() == R.id.iv_download_control) { if (FileDownloader.getImpl().isServiceConnected()) { if (v9PornItem.getStatus() == FileDownloadStatus.progress) { FileDownloader.getImpl().pause(v9PornItem.getDownloadId()); ((ImageView) view).setImageResource(R.drawable.start_download); } else { showDownloadCheck(v9PornItem, view); } } } } }); } /** * 让使用者自己选择是重新下载还是继续下载 * * @param v9PornItem 需要下载的视频信息 * @param view 需要更新的view */ private void showDownloadCheck(final V9PornItem v9PornItem, final View view) { showDialog("请选择下载方式", new String[]{"继续下载", "重新下载"}, new DialogCheck() { @Override public void onCheck(int index) { startDownload(v9PornItem, view, index != 0); } }); } @Override protected void onLazyLoadOnce() { super.onLazyLoadOnce(); if (!FileDownloader.getImpl().isServiceConnected()) { FileDownloader.getImpl().bindService(); Logger.t(TAG).d("启动下载服务"); } else { presenter.loadDownloadingData(); Logger.t(TAG).d("下载服务已经连接"); } } private void startDownload(V9PornItem v9PornItem, View view, boolean isForceReDownload) { presenter.downloadVideo(v9PornItem, isForceReDownload); ((ImageView) view).setImageResource(R.drawable.pause_download); Intent intent = new Intent(getContext(), DownloadVideoService.class); context.startService(intent); } @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment super.onCreateView(inflater, container, savedInstanceState); return inflater.inflate(R.layout.fragment_download, container, false); } @Override public void complete(BaseDownloadTask task) { if (mV9PornItemList == null || mV9PornItemList.size() == 0) { return; } Logger.t(TAG).d("已经下载完成了"); V9PornItem v9PornItem = presenter.findUnLimit91PornItemByDownloadId(task.getId()); if (v9PornItem != null) { int position = mV9PornItemList.indexOf(v9PornItem); if (position >= 0 && position < mV9PornItemList.size()) { mV9PornItemList.remove(position); mDownloadAdapter.notifyItemRemoved(position); } else { presenter.loadDownloadingData(); } } else { presenter.loadDownloadingData(); } } @Override public void update(BaseDownloadTask task) { Logger.t(TAG).d("updateV9PornItem(BaseDownloadTask task)"); if (mV9PornItemList == null || mV9PornItemList.size() == 0) { return; } V9PornItem v9PornItem = presenter.findUnLimit91PornItemByDownloadId(task.getId()); if (v9PornItem != null) { int position = mV9PornItemList.indexOf(v9PornItem); Logger.t(TAG).d("position" + position); if (position >= 0 && position < mV9PornItemList.size()) { mV9PornItemList.set(position, v9PornItem); mDownloadAdapter.notifyItemChanged(position); } else { mV9PornItemList.add(v9PornItem); mDownloadAdapter.notifyItemInserted(mV9PornItemList.size()); } } else { presenter.loadDownloadingData(); } } @Override public String getTitle() { return "正在下载"; } @Override public void onDestroy() { super.onDestroy(); FileDownloader.getImpl().removeServiceConnectListener(fileDownloadConnectListener); DownloadManager.getImpl().removeUpdater(this); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } @Override public void setDownloadingData(List<V9PornItem> v9PornItems) { mV9PornItemList.clear(); mV9PornItemList.addAll(v9PornItems); mDownloadAdapter.notifyDataSetChanged(); if (v9PornItems.size() == 0) { try { Intent intent = new Intent(getContext(), DownloadVideoService.class); context.stopService(intent); } catch (Exception e) { e.printStackTrace(); } } } @Override public void setFinishedData(List<V9PornItem> v9PornItems) { } @Override public void showLoading(boolean pullToRefresh) { } @Override public void showContent() { } @Override public void showMessage(String msg, int type) { super.showMessage(msg, type); } @Override public void showError(String message) { showMessage(message, TastyToast.ERROR); } }