content: //package com.wm.remusic.downmusic;
  //
  //import android.content.Context;
  //import android.util.Log;
  //import android.util.SparseArray;
  //
  //import com.squareup.okhttp.OkHttpClient;
  //import com.wm.remusic.provider.DownFileStore;
  //
  //import java.util.ArrayList;
  //import java.util.HashMap;
  //import java.util.List;
  //import java.util.Map;
  //import java.util.concurrent.ExecutorService;
  //import java.util.concurrent.Executors;
  //import java.util.concurrent.Future;
  //
  ///**
  // * Created by dzc on 15/11/21.
  // */
  //public class DownloadManager implements DownloadTaskListener{
  //    private static final String TAG = "DownloadManager";
  //    private Context context;
  //    private static DownloadManager downloadManager;
  //    private static DownFileStore downFileStore;
  //    private int mPoolSize = 1;
  //    private ExecutorService executorService;
  //    private Map<String, Future> futureMap;
  //    private OkHttpClient client;
  //    private List<DownloadDBEntity> allTaskEntity = new ArrayList<>();
  //    private ArrayList<DownloadTask> prepareTaskList = new ArrayList<>();
  //    private DownloadTask currentTask;
  //
  //    public Map<String, DownloadTask> getCurrentTaskList() {
  //        return currentTaskList;
  //    }
  //
  //    private Map<String, DownloadTask> currentTaskList = new HashMap<>();
  //
  //    public void init() {
  //        executorService = Executors.newFixedThreadPool(mPoolSize);
  //        futureMap = new HashMap<>();
  //        downFileStore = DownFileStore.getInstance(context);
  //        client = new OkHttpClient();
  //        allTaskEntity = loadAllDownloadEntityFromDB();
  //    }
  //
  //    private DownloadManager() {
  //        init();
  //    }
  //
  //    private DownloadManager(Context context) {
  //        this.context = context;
  //        init();
  //    }
  //
  //    public static DownloadManager getInstance(Context context) {
  //        if (downloadManager == null) {
  //            downloadManager = new DownloadManager(context);
  //        }
  //        return downloadManager;
  //    }
  //
  //    public synchronized void addDownloadTask(DownloadTask task, DownloadTaskListener listener) {
  //        if (null != currentTaskList.get(task.getId()) && task.getDownloadStatus() != DownloadStatus.DOWNLOAD_STATUS_INIT) {
  //            Log.d(TAG, "task already exist");
  //            return;
  //        }
  //        DownloadDBEntity dbEntity = new DownloadDBEntity(task.getId(), task.getTotalSize(),
  //                task.getCompletedSize(), task.getUrl(), task.getSaveDirPath(), task.getFileName(),task.getArtistName(), task.getDownloadStatus());
  //        downFileStore.insert(dbEntity);
  //        task.setPreparingDown(true);
  //        allTaskEntity.add(dbEntity);
  //        prepareTaskList.add(task);
  //        currentTaskList.put(task.getId(), task);
  //        if(currentTask != null){
  //            return;
  //        }
  //
  //        task.setDownloadStatus(DownloadStatus.DOWNLOAD_STATUS_PREPARE);
  //        task.setdownFileStore(downFileStore);
  //        task.setHttpClient(client);
  //        task.addDownloadListener(this);
  //        if (listener != null) {
  //            task.addDownloadListener(listener);
  //        }
  //        Future future = executorService.submit(task);
  //        futureMap.put(task.getId(), future);
  //        currentTask = task;
  //
  //    }
  //
  //
  //   public void startTask(){
  //       if(prepareTaskList.size() > 0){
  //           DownloadTask downloadTask = prepareTaskList.get(0);
  //           if (downloadTask.getDownloadStatus() != DownloadStatus.DOWNLOAD_STATUS_COMPLETED) {
  //                downloadTask.setDownloadStatus(DownloadStatus.DOWNLOAD_STATUS_PREPARE);
  //                downloadTask.setdownFileStore(downFileStore);
  //                downloadTask.setHttpClient(client);
  //                Future future = executorService.submit(downloadTask);
  //                futureMap.put(downloadTask.getId(), future);
  //            }
  //       }
  //   }
  //
  //    /**
  //     * if return null,the task does not exist
  //     *
  //     * @param taskId
  //     * @return
  //     */
  //    public void resume(String taskId) {
  //        DownloadTask downloadTask = getCurrentTaskById(taskId);
  //        if(downloadTask == null){
  //            downloadTask = getDBTaskById(taskId);
  //        }
  //        prepareTaskList.add(downloadTask);
  //        if(currentTask == null){
  //            startTask();
  //        }
  //
  ////        if (downloadTask != null) {
  ////            if (downloadTask.getDownloadStatus() != DownloadStatus.DOWNLOAD_STATUS_COMPLETED) {
  ////                downloadTask.setDownloadStatus(DownloadStatus.DOWNLOAD_STATUS_PREPARE);
  ////                downloadTask.setdownFileStore(downFileStore);
  ////                downloadTask.setHttpClient(client);
  ////                Future future = executorService.submit(downloadTask);
  ////                futureMap.put(downloadTask.getId(), future);
  ////            }
  ////
  ////        } else {
  ////            downloadTask = getDBTaskById(taskId);
  ////            if (downloadTask != null) {
  ////                currentTaskList.put(taskId, downloadTask);
  ////                downloadTask.setDownloadStatus(DownloadStatus.DOWNLOAD_STATUS_PREPARE);
  ////                downloadTask.setdownFileStore(downFileStore);
  ////                downloadTask.setHttpClient(client);
  ////                Future future = executorService.submit(downloadTask);
  ////                futureMap.put(downloadTask.getId(), future);
  ////            }
  ////        }
  ////        return downloadTask;
  //    }
  //
  //
  ////    /**
  ////     * if return null,the task does not exist
  ////     * @param taskId
  ////     * @return
  ////     */
  ////    public void resume(String taskId){
  //////        Log.e("taskid",taskId);
  //////        DownloadTask downloadTask = getCurrentTaskId(taskId);
  //////        if(downloadTask!=null){
  //////            Log.e("taskid","is exits in current");
  //////            Log.e("task status",downloadTask.getDownloadStatus() + "");
  //////            if(downloadTask.getDownloadStatus()!=DownloadStatus.DOWNLOAD_STATUS_COMPLETED){
  //////                Log.e("taskid","to run");
  //////                Future future =  executorService.submit(downloadTask);
  //////                Log.e("taskid","run");
  //////                futureMap.put(downloadTask.getId(),future);
  //////            }
  //////
  //////        }else{
  ////
  ////      DownloadTask downloadTask = getDBTaskById(taskId);
  ////
  ////            if(downloadTask!=null){
  ////                currentTaskList.put(taskId,downloadTask);
  ////                Future future =  executorService.submit(downloadTask);
  ////                futureMap.put(downloadTask.getId(),future);
  ////            }
  //// //       }
  ////  //      return downloadTask;
  ////    }
  //
  //
  //    public void addDownloadListener(DownloadTask task, DownloadTaskListener listener) {
  //        task.addDownloadListener(listener);
  //    }
  //
  //    public void removeDownloadListener(DownloadTask task, DownloadTaskListener listener) {
  //        task.removeDownloadListener(listener);
  //    }
  //
  //    public void addDownloadTask(DownloadTask task) {
  //        addDownloadTask(task, null);
  //    }
  //
  //    public void cancel(DownloadTask task) {
  //        task.cancel();
  //        currentTaskList.remove(task.getId());
  //        prepareTaskList.remove(task);
  //        futureMap.remove(task.getId());
  //        task.setDownloadStatus(DownloadStatus.DOWNLOAD_STATUS_CANCEL);
  //        downFileStore.deleteTask(task.getId());
  //    }
  //
  //    public void cancel(String taskId) {
  //        DownloadTask task = getTaskById(taskId);
  //        if (task != null) {
  //            cancel(task);
  //        }
  //    }
  //
  //    public void pause(DownloadTask task) {
  //        task.pause();
  //        currentTaskList.remove(task.getId());
  //        futureMap.remove(task.getId());
  //    }
  //
  //    public void pause(String taskId) {
  //        DownloadTask task = getTaskById(taskId);
  //        if (task != null) {
  //            pause(task);
  //        }
  //    }
  //
  //
  //    private List<DownloadDBEntity> loadAllDownloadEntityFromDB() {
  //        return downFileStore.getDownLoadedListAll();
  //    }
  //
  //    public List<DownloadTask> loadAllDownloadTaskFromDB() {
  //        List<DownloadDBEntity> list = loadAllDownloadEntityFromDB();
  //        List<DownloadTask> downloadTaskList = null;
  //        if (list != null && !list.isEmpty()) {
  //            downloadTaskList = new ArrayList<>();
  //            for (DownloadDBEntity entity : list) {
  //                downloadTaskList.add(DownloadTask.parse(entity, context));
  //            }
  //        }
  //        return downloadTaskList;
  //    }
  //
  //    public List<DownloadTask> loadDownloadingTaskFromDB() {
  //        List<DownloadDBEntity> list = loadAllDownloadEntityFromDB();
  //        List<DownloadTask> downloadTaskList = null;
  //        if (list != null && !list.isEmpty()) {
  //            downloadTaskList = new ArrayList<>();
  //            for (DownloadDBEntity entity : list) {
  //                if (entity.getCompletedSize().equals(entity.getTotalSize())) {
  //                    continue;
  //                }
  //
  //                downloadTaskList.add(DownloadTask.parse(entity, context));
  //            }
  //        }
  //        return downloadTaskList;
  //    }
  //
  //    public List<DownloadTask> loadDownloadCompletedTaskFromDB() {
  //        List<DownloadDBEntity> list = loadAllDownloadEntityFromDB();
  //        List<DownloadTask> downloadTaskList = null;
  //        if (list != null && !list.isEmpty()) {
  //            downloadTaskList = new ArrayList<>();
  //            for (DownloadDBEntity entity : list) {
  //                if (entity.getCompletedSize().equals(entity.getTotalSize()))
  //                    downloadTaskList.add(DownloadTask.parse(entity, context));
  //            }
  //        }
  //        return downloadTaskList;
  //    }
  //
  //    public DownloadTask getCurrentTaskById(String taskId) {
  //        for(int i = 0 ; i< prepareTaskList.size(); i++){
  //            if(prepareTaskList.get(i).getId() == taskId){
  //                return prepareTaskList.get(i);
  //            }
  //        }
  //        return null;
  //       // return currentTaskList.get(taskId);
  //    }
  //
  //    public boolean isCurrentTask(String taskId) {
  //        DownloadTask task = null;
  //        task = getCurrentTaskById(taskId);
  //        if (task != null) {
  //            return true;
  //        }
  //        return false;
  //    }
  //
  //    public DownloadTask getTaskById(String taskId) {
  //        DownloadTask task = null;
  //        task = getCurrentTaskById(taskId);
  //        if (task != null) {
  //            return task;
  //        }
  //        return getDBTaskById(taskId);
  //    }
  //
  //    public DownloadTask getDBTaskById(String taskId) {
  //        DownloadDBEntity entity = downFileStore.getDownLoadedList(taskId);
  //        if (entity != null) {
  //            return DownloadTask.parse(entity, context);
  //        }
  //        return null;
  //    }
  //
  //    @Override
  //    public void onPrepare(DownloadTask downloadTask) {
  //
  //    }
  //
  //    @Override
  //    public void onStart(DownloadTask downloadTask) {
  //
  //    }
  //
  //    @Override
  //    public void onDownloading(DownloadTask downloadTask) {
  //
  //    }
  //
  //    @Override
  //    public void onPause(DownloadTask downloadTask) {
  //        if(prepareTaskList.size() > 0){
  //            prepareTaskList.remove(currentTask);
  //        }
  //        currentTask = null;
  //        startTask();
  //    }
  //
  //    @Override
  //    public void onCancel(DownloadTask downloadTask) {
  //        if(prepareTaskList.size() > 0){
  //            prepareTaskList.remove(currentTask);
  //        }
  //        currentTask = null;
  //        startTask();
  //    }
  //
  //    @Override
  //    public void onCompleted(DownloadTask downloadTask) {
  //        if(prepareTaskList.size() > 0){
  //            prepareTaskList.remove(currentTask);
  //        }
  //        currentTask = null;
  //        startTask();
  //
  //    }
  //
  //    @Override
  //    public void onError(DownloadTask downloadTask, int errorCode) {
  //        startTask();
  //    }
  //
  //
  //}
  