/** 停止所有任务 */ 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("任务已存在"); } }
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); }
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); }
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()}); }
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()}); } }
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); }
/** * 根据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; }
@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(); } }
@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(); }
@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); }
@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(); } }
@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); } }