package org.qii.weiciyuan.othercomponent; import org.qii.weiciyuan.bean.MessageBean; import org.qii.weiciyuan.bean.MessageListBean; import org.qii.weiciyuan.bean.UserBean; import org.qii.weiciyuan.support.asyncdrawable.TaskCache; import org.qii.weiciyuan.support.debug.AppLogger; import org.qii.weiciyuan.support.file.FileLocationMethod; import org.qii.weiciyuan.support.file.FileManager; import org.qii.weiciyuan.support.imageutility.ImageUtility; import org.qii.weiciyuan.support.lib.VelocityListView; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.support.utils.Utility; import android.text.TextUtils; import java.util.ArrayList; import java.util.HashMap; /** * User: qii * Date: 13-12-29 */ public class WifiAutoDownloadPictureRunnable implements Runnable { private MessageListBean msgList; private static HashMap<String, Boolean> result = new HashMap<String, Boolean>(); public WifiAutoDownloadPictureRunnable(MessageListBean source, int position, int listViewScrollOrientation) { this.msgList = new MessageListBean(); switch (listViewScrollOrientation) { case VelocityListView.TOWARDS_BOTTOM: for (int i = position; i < source.getSize(); i++) { MessageBean msg = source.getItem(i); if (msg != null) { this.msgList.getItemList().add(msg); } } break; case VelocityListView.TOWARDS_TOP: for (int i = position; i >= 0; i--) { MessageBean msg = source.getItem(i); if (msg != null) { this.msgList.getItemList().add(msg); } } break; } AppLogger.i("WifiAutoDownloadPictureRunnable new Runnable"); } @Override public void run() { for (MessageBean msg : this.msgList.getItemList()) { if (!continueHandleMessage(msg)) { return; } } } private boolean continueHandleMessage(MessageBean msg) { if (Thread.currentThread().isInterrupted()) { return false; } if (!Utility.isWifi(GlobalContext.getInstance())) { return false; } if (msg == null) { return true; } Boolean done = result.get(msg.getId()); if (done != null && done) { AppLogger.i("already done skipped"); return true; } //wait until other download tasks are finished synchronized (TaskCache.backgroundWifiDownloadPicturesWorkLock) { while (!TaskCache.isDownloadTaskFinished() && !Thread.currentThread() .isInterrupted()) { try { AppLogger.i("WifiAutoDownloadPictureRunnable wait for lock"); TaskCache.backgroundWifiDownloadPicturesWorkLock.wait(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); return false; } } } AppLogger.i("WifiAutoDownloadPictureRunnable" + msg.getId() + "start"); startDownload(msg); AppLogger.i("WifiAutoDownloadPictureRunnable" + msg.getId() + "finished"); result.put(msg.getId(), true); return true; } private void startDownload(MessageBean msg) { if (!msg.isMultiPics()) { String url = msg.getOriginal_pic(); if (!TextUtils.isEmpty(url)) { downloadPic(url); } } else { ArrayList<String> urls = msg.getHighPicUrls(); for (String url : urls) { downloadPic(url); } } MessageBean reTweetedMsg = msg.getRetweeted_status(); if (reTweetedMsg != null) { if (!reTweetedMsg.isMultiPics()) { String url = reTweetedMsg.getOriginal_pic(); if (!TextUtils.isEmpty(url)) { downloadPic(url); } } else { ArrayList<String> urls = reTweetedMsg.getHighPicUrls(); for (String url : urls) { downloadPic(url); } } } UserBean user = msg.getUser(); if (user != null) { downloadAvatar(user.getAvatar_large()); } } private void downloadPic(String url) { if (TextUtils.isEmpty(url)) { return; } String path = FileManager.getFilePathFromUrl(url, FileLocationMethod.picture_large); if (ImageUtility.isThisBitmapCanRead(path) && TaskCache.isThisUrlTaskFinished(url)) { return; } TaskCache.waitForPictureDownload(url, null, path, FileLocationMethod.picture_large); } private void downloadAvatar(String url) { if (TextUtils.isEmpty(url)) { return; } String path = FileManager.getFilePathFromUrl(url, FileLocationMethod.avatar_large); if (ImageUtility.isThisBitmapCanRead(path) && TaskCache.isThisUrlTaskFinished(url)) { return; } TaskCache.waitForPictureDownload(url, null, path, FileLocationMethod.avatar_large); } }