/** 停止所有任务 */
  public void stopAllTask() {
    // 从下载队列移除
    for (Map.Entry<String, DownloadHttpTask> entry : mDownloadingTaskMap.entrySet()) {
      DownloadHttpTask task = entry.getValue();
      task.setInterrupt(true);
    }
    mDownloadingTaskMap.clear();

    Iterator<DownloadInfo> downloadingIt = mDownloadingTasks.iterator();
    while (downloadingIt.hasNext()) {
      DownloadInfo b = downloadingIt.next();
      b.setState(DownloadInfo.PAUSE);
      downloadingIt.remove();
      mPausingTasks.add(b); // 放入暂停队列
    }
    mDownloadingTasks.clear();

    // 从等待队列移除
    Iterator<DownloadInfo> waitIt = mWaitTasks.iterator();
    while (waitIt.hasNext()) {
      DownloadInfo b = waitIt.next();
      b.setState(DownloadInfo.PAUSE);
      waitIt.remove();
      mPausingTasks.add(b); // 放入暂停队列
      break;
    }
    mWaitTasks.clear();
  }
 /**
  * 重新下载
  *
  * @param url
  */
 public void restartTask(String url) {
   Iterator<DownloadInfo> pauseIt = mPausingTasks.iterator();
   if (mPausingTasks.size() > 0) {
     synchronized (mIteratorLock) {
       while (pauseIt.hasNext()) {
         DownloadInfo downloadInfo = pauseIt.next();
         if (TextUtils.equals(downloadInfo.getUrl(), url)) {
           if (mDownloadingTasks.size() < MAX_DOWNLOAD_COUNT) {
             downloadInfo.setState(DownloadInfo.DOWNLOADING);
             DownloadHttpTask task =
                 new DownloadHttpTask(downloadInfo, mDownloadUIHandler, mDbHelper, this);
             mDownloadingTaskMap.put(url, task);
             mDownloadingTasks.add(downloadInfo);
             pauseIt.remove();
             task.start();
           } else {
             downloadInfo.setState(DownloadInfo.WAIT);
             mWaitTasks.offer(downloadInfo);
             pauseIt.remove();
           }
           return;
         }
       }
     }
   } else {
     stopTask(url);
     restartTask(url);
   }
 }
  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
      case MENU_ID_UPGRADE:
        if (Util.isLowBattery(getApplicationContext())) {
          showDialog(DIALOG_LOW_BATTERY);
        } else {
          showDialog(DIALOG_INSTALLWARNING);
        }
        return true;
      case android.R.id.home:
        Xlog.v(TAG, "Navigation key,finish activity");
        if (!mDownloadInfo.getIfNeedRefreshMenu()) {

          if (mDownloadInfo.getActivityID() < 0) {
            mGoToMainEntry = true;
            SdPkgInstallActivity.this.startActivity(new Intent(this, MainEntry.class));
          }
        }
        SdPkgInstallActivity.this.finish();
        break;
      case MENU_ID_REFRESH:
        mGoToMainEntry = true;
        requeryPackages();
        break;
      default:
        break;
    }
    return super.onOptionsItemSelected(item);
  }
  /**
   * 下载一个任务
   *
   * @param url
   * @param listener
   */
  public void addTask(String url, DownloadListener listener) {
    if (StringUtils.isEmpty(url)) {
      Logger.d("download url null");
      return;
    }

    DownloadInfo downloadInfo = new DownloadInfo();
    downloadInfo.setUrl(url);
    if (!hasTask(url)) {
      downloadInfo.setTargetFolder(mTargetFolder);
      try {
        mDbHelper.save(downloadInfo);
      } catch (DbException e) {
        Logger.e(e);
      }

      if (mDownloadingTasks.size() < MAX_DOWNLOAD_COUNT) {
        downloadInfo.setState(DownloadInfo.DOWNLOADING);
        mDownloadingTasks.add(downloadInfo);
        DownloadHttpTask task =
            new DownloadHttpTask(downloadInfo, mDownloadUIHandler, mDbHelper, this);
        mDownloadingTaskMap.put(url, task);
        task.start();
      } else { // 加入等待队列
        downloadInfo.setState(DownloadInfo.WAIT);
        boolean b = mWaitTasks.offer(downloadInfo);
        if (b) {
          addTaskListener(url, listener);
        }
      }
      mAllTasks.add(downloadInfo);
    } else {
      Logger.d("任务已存在");
    }
  }
Esempio n. 5
0
 public void removeDownload(DownloadInfo downloadInfo) throws Exception {
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null && !handler.isCancelled()) {
     handler.cancel();
   }
   downloadInfoList.remove(downloadInfo);
   infoImpl.delete((int) downloadInfo.getId());
 }
 public DownloadInfo getDownloadInfo(String pkg, int versionCode) {
   for (DownloadInfo info : downloadInfoList) {
     if (pkg.equals(info.getPkg().equals(pkg))) {
       return info;
     }
   }
   return null;
 }
 /**
  * 判断是否有这个任务
  *
  * @param url
  * @return
  */
 public boolean hasTask(String url) {
   // 判断下载中是否有
   DownloadInfo downloadInfo = new DownloadInfo();
   downloadInfo.setUrl(url);
   if (mAllTasks.contains(downloadInfo)) {
     return true;
   }
   return false;
 }
 public void stopDownload(DownloadInfo downloadInfo) throws DbException {
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null && !handler.isStopped()) {
     handler.stop();
   } else {
     downloadInfo.setState(HttpHandler.State.STOPPED);
   }
   db.saveOrUpdate(downloadInfo);
 }
 @Override
 public void fireDownload(DownloadInfo downloadData) {
   if (downloadData != null) {
     fireWindowDownload(
         downloadData.getBase64Data(),
         downloadData.getFilename(),
         Base64Utils.getMimeTypeFromBase64Data(downloadData.getBase64Data()));
   }
 }
 public void backupDownloadInfoList() throws DbException {
   for (DownloadInfo downloadInfo : downloadInfoList) {
     HttpHandler<File> handler = downloadInfo.getHandler();
     if (handler != null) {
       downloadInfo.setState(handler.getState());
     }
   }
   db.saveOrUpdateAll(downloadInfoList);
 }
 public void stopDownload(DownloadInfo downloadInfo) throws DbException {
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null && !handler.isCancelled()) {
     handler.cancel();
   } else {
     downloadInfo.setState(HttpHandler.State.CANCELLED);
   }
   db.saveOrUpdate(downloadInfo);
 }
Esempio n. 12
0
 public void addNewDownload(DownloadInfo info, final RequestCallBack<File> callback) {
   info.setId(mCount.getAndIncrement());
   HttpUtils http = new HttpUtils();
   HttpHandler<File> handler = http.download(info, new ManagerCallBack(info, callback));
   info.setHandler(handler);
   info.setState(handler.getState());
   downloadInfoList.add(info);
   infoImpl.insert(info, false);
 }
Esempio n. 13
0
 public void stopDownload(DownloadInfo downloadInfo) throws Exception {
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null && !handler.isCancelled()) {
     handler.cancel();
   } else {
     downloadInfo.setState(HttpHandler.State.CANCELLED);
   }
   infoImpl.saveOrUpdate(
       downloadInfo, "downloadUrl=?", new String[] {downloadInfo.getDownloadUrl()});
 }
Esempio n. 14
0
 public void backupDownloadInfoList() throws Exception {
   for (DownloadInfo downloadInfo : downloadInfoList) {
     HttpHandler<File> handler = downloadInfo.getHandler();
     if (handler != null) {
       downloadInfo.setState(handler.getState());
     }
     infoImpl.saveOrUpdate(
         downloadInfo, "downloadUrl=?", new String[] {downloadInfo.getDownloadUrl()});
   }
 }
Esempio n. 15
0
 public void addNewDownload(
     String url,
     String fileName,
     String target,
     boolean autoResume,
     boolean autoRename,
     final RequestCallBack<File> callback)
     throws Exception {
   final DownloadInfo downloadInfo = new DownloadInfo();
   downloadInfo.setDownloadUrl(url);
   downloadInfo.setAutoRename(autoRename);
   downloadInfo.setAutoResume(autoResume);
   downloadInfo.setFileName(fileName);
   downloadInfo.setFileSavePath(target);
   downloadInfo.setId(mCount.getAndIncrement());
   HttpUtils http = new HttpUtils();
   //        http.configRequestThreadPoolSize(maxDownloadThread);
   HttpHandler<File> handler =
       http.download(
           url, target, autoResume, autoRename, new ManagerCallBack(downloadInfo, callback));
   downloadInfo.setHandler(handler);
   downloadInfo.setState(handler.getState());
   downloadInfoList.add(downloadInfo);
   infoImpl.insert(downloadInfo);
 }
 public boolean checkDownloadIng(DownloadInfo info) {
   try {
     for (DownloadInfo vo : downloadInfoList) {
       if (vo.pkg.equals(info.pkg) && vo.getVersionCode() == info.getVersionCode()) {
         return true;
       }
     }
   } catch (Exception e) {
   }
   return false;
 }
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {

    if (mDownloadInfo.getIfNeedRefreshMenu() && mDownloadInfo.getActivityID() < 0) {
      menu.add(0, MENU_ID_REFRESH, 0, R.string.menu_stats_refresh)
          .setIcon(R.drawable.ic_menu_refresh_holo_dark)
          .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    }

    return super.onCreateOptionsMenu(menu);
  }
Esempio n. 18
0
  /**
   * 根据URL获取DownloadInfo
   *
   * @param url
   * @return
   */
  public DownloadInfo getDownloadByUrl(String url) {
    Iterator<DownloadInfo> allTaskIt = mAllTasks.iterator();
    while (allTaskIt.hasNext()) {
      DownloadInfo bean = allTaskIt.next();
      if (TextUtils.equals(bean.getUrl(), url)) {
        return bean;
      }
    }

    return null;
  }
Esempio n. 19
0
 @Override
 public void onCancelled() {
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null) {
     downloadInfo.setState(handler.getState());
   }
   infoImpl.saveOrUpdate(
       downloadInfo, "downloadUrl=?", new String[] {downloadInfo.getDownloadUrl()});
   if (baseCallBack != null) {
     baseCallBack.onCancelled();
   }
 }
Esempio n. 20
0
 @Override
 public void onFailure(HttpException error, String msg) {
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null) {
     downloadInfo.setState(handler.getState());
   }
   infoImpl.saveOrUpdate(
       downloadInfo, "downloadUrl=?", new String[] {downloadInfo.getDownloadUrl()});
   if (baseCallBack != null) {
     baseCallBack.onFailure(error, msg);
   }
 }
 @Override
 protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
   final IndentingPrintWriter pw = new IndentingPrintWriter(writer, "  ");
   synchronized (mDownloads) {
     final List<Long> ids = Lists.newArrayList(mDownloads.keySet());
     Collections.sort(ids);
     for (Long id : ids) {
       final DownloadInfo info = mDownloads.get(id);
       info.dump(pw);
     }
   }
 }
  @Override
  protected void onStop() {
    Xlog.i(TAG, "onStop");
    if (!mGoToMainEntry
        && !mDownloadInfo.getIfNeedRefresh()
        && mDownloadInfo.getActivityID() < 0
        && (MainEntry.getInstance() == null || !MainEntry.getInstance().isStarted())) {
      Xlog.v(TAG, "background, show new version notification");
      mNotifyManager.showNewVersionNotification();
    }

    super.onStop();
  }
Esempio n. 23
0
 @Override
 public void onSuccess(ResponseInfo<File> responseInfo) {
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null) {
     downloadInfo.setState(handler.getState());
   }
   Log.e("TAG", "*******downloadInfo.state=" + downloadInfo.getState());
   infoImpl.saveOrUpdate(
       downloadInfo, "downloadUrl=?", new String[] {downloadInfo.getDownloadUrl()});
   if (baseCallBack != null) {
     baseCallBack.onSuccess(responseInfo);
   }
 }
 /** Removes the local copy of the info about a download. */
 private void deleteDownloadLocked(long id) {
   DownloadInfo info = mDownloads.get(id);
   if (info.mStatus == Downloads.Impl.STATUS_RUNNING) {
     info.mStatus = Downloads.Impl.STATUS_CANCELED;
   }
   if (info.mDestination != Downloads.Impl.DESTINATION_EXTERNAL && info.mFileName != null) {
     if (Constants.LOGVV) {
       Log.d(TAG, "deleteDownloadLocked() deleting " + info.mFileName);
     }
     deleteFileIfExists(info.mFileName);
   }
   mDownloads.remove(info.mId);
 }
 @Override
 public void onSuccess(ResponseInfo<File> responseInfo) {
   if (downloadInfo.getFileLength() != downloadInfo.getProgress()) { // 不一致 返回
     return;
   }
   if (downloadInfo.getAutoRenameTmp()) { // 成功后改名
     File tarFile = new File(downloadInfo.getFileTmpPath());
     if (tarFile.exists()) {
       File newFile = new File(downloadInfo.getFileSavePath());
       tarFile.renameTo(newFile);
     }
   }
   LogUtils.d(downloadInfo.getPkg() + " onSuccess");
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null) {
     downloadInfo.setState(handler.getState());
   }
   try {
     db.saveOrUpdate(downloadInfo);
   } catch (DbException e) {
     LogUtils.e(e.getMessage(), e);
   }
   if (baseCallBack != null) {
     baseCallBack.onSuccess(responseInfo);
   }
 }
 public void resumeDownload(DownloadInfo downloadInfo, final RequestCallBack<File> callback)
     throws DbException {
   HttpUtils http = new HttpUtils();
   http.configRequestThreadPoolSize(maxDownloadThread);
   HttpHandler<File> handler =
       http.download(
           downloadInfo.getDownloadUrl(),
           downloadInfo.getFileSavePath(),
           downloadInfo.isAutoResume(),
           new ManagerCallBack(downloadInfo, callback));
   downloadInfo.setHandler(handler);
   downloadInfo.setState(handler.getState());
   db.saveOrUpdate(downloadInfo);
 }
Esempio n. 27
0
 @Override
 public void onLoading(long total, long current, boolean isUploading) {
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null) {
     downloadInfo.setState(handler.getState());
   }
   downloadInfo.setFileLength(total);
   downloadInfo.setProgress(current);
   infoImpl.saveOrUpdate(
       downloadInfo, "downloadUrl=?", new String[] {downloadInfo.getDownloadUrl()});
   if (baseCallBack != null) {
     baseCallBack.onLoading(total, current, isUploading);
   }
 }
 @Override
 public void onCancelled() {
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null) {
     downloadInfo.setState(handler.getState());
   }
   try {
     db.saveOrUpdate(downloadInfo);
   } catch (DbException e) {
     LogUtils.e(e.getMessage(), e);
   }
   if (baseCallBack != null) {
     baseCallBack.onCancelled();
   }
 }
Esempio n. 29
0
  @Override
  public void nextTask() {
    synchronized (mNextTaskLockObj) {
      if (!mNextTaskLock) {
        mNextTaskLock = true;
        // TODO mDownloadingTasks 同步状态(临时解决方案)
        synchronized (mIteratorLock) {
          Iterator<DownloadInfo> downloadingIt = mDownloadingTasks.iterator();
          while (downloadingIt.hasNext()) {
            DownloadInfo b = downloadingIt.next();
            if (b.getState() == DownloadInfo.PAUSE) {
              mPausingTasks.add(b);
              try {
                downloadingIt.remove();
              } catch (Exception e) {
                Logger.e(e);
              }
            } else if (b.getState() == DownloadInfo.COMPLETE) {
              mCompleteTasks.add(b);
              try {
                downloadingIt.remove();
              } catch (Exception e) {
                Logger.e(e);
              }
            }
          }
        }
        synchronized (mIteratorLock) {
          Iterator<Map.Entry<String, DownloadHttpTask>> downloadinMapIt =
              mDownloadingTaskMap.entrySet().iterator();
          while (downloadinMapIt.hasNext()) {
            Map.Entry<String, DownloadHttpTask> entry = downloadinMapIt.next();
            DownloadHttpTask task = entry.getValue();
            if (task != null && task.isInterrupt()) {
              try {
                downloadinMapIt.remove();
              } catch (Exception e) {
                Logger.e(e);
              }
            }
          }
        }

        executeNextTask();
        mNextTaskLock = false;
      }
    }
  }
 @Override
 public void onFailure(HttpException error, String msg) {
   LogUtils.d(downloadInfo.getPkg() + " onFailure");
   HttpHandler<File> handler = downloadInfo.getHandler();
   if (handler != null) {
     downloadInfo.setState(handler.getState());
   }
   try {
     db.saveOrUpdate(downloadInfo);
   } catch (DbException e) {
     LogUtils.e(e.getMessage(), e);
   }
   if (baseCallBack != null) {
     baseCallBack.onFailure(error, msg);
   }
 }