package org.qii.weiciyuan.support.asyncdrawable; import org.qii.weiciyuan.bean.MessageBean; import org.qii.weiciyuan.support.file.FileDownloaderHttpHelper; import org.qii.weiciyuan.support.file.FileLocationMethod; import org.qii.weiciyuan.support.file.FileManager; import org.qii.weiciyuan.support.gallery.GalleryAnimationActivity; import org.qii.weiciyuan.support.imageutility.ImageUtility; import org.qii.weiciyuan.support.lib.AnimationRect; import org.qii.weiciyuan.support.lib.MyAsyncTask; import org.qii.weiciyuan.support.lib.WeiboDetailImageView; import org.qii.weiciyuan.support.settinghelper.SettingUtility; import org.qii.weiciyuan.support.utils.GlobalContext; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; import java.util.ArrayList; /** * User: qii * Date: 13-2-8 * insert progress update listener into download worker if it exists * or create a new download worker */ public class MsgDetailReadWorker extends MyAsyncTask<Void, Integer, String> { private WeiboDetailImageView view; private ProgressBar pb; private Button retry; private MessageBean msg; public MsgDetailReadWorker(WeiboDetailImageView view, MessageBean msg) { this.view = view; this.pb = this.view.getProgressBar(); this.msg = msg; this.retry = view.getRetryButton(); retry.setVisibility(View.INVISIBLE); String oriPath = FileManager .getFilePathFromUrl(msg.getOriginal_pic(), FileLocationMethod.picture_large); if (ImageUtility.isThisBitmapCanRead(oriPath) && TaskCache.isThisUrlTaskFinished(msg.getOriginal_pic())) { onPostExecute(oriPath); cancel(true); return; } String middlePath = FileManager .getFilePathFromUrl(msg.getBmiddle_pic(), FileLocationMethod.picture_bmiddle); if (ImageUtility.isThisBitmapCanRead(middlePath) && TaskCache.isThisUrlTaskFinished(msg.getBmiddle_pic())) { onPostExecute(middlePath); cancel(true); return; } pb.setVisibility(View.VISIBLE); pb.setIndeterminate(true); } public void setView(WeiboDetailImageView view) { this.view = view; this.pb = this.view.getProgressBar(); this.retry = view.getRetryButton(); retry.setVisibility(View.INVISIBLE); } @Override protected String doInBackground(Void... arg) { if (isCancelled()) { return null; } if (SettingUtility.getEnableBigPic()) { boolean result = TaskCache .waitForPictureDownload(msg.getOriginal_pic(), downloadListener, FileManager.generateDownloadFileName(msg.getOriginal_pic()), FileLocationMethod.picture_large); return result ? FileManager .getFilePathFromUrl(msg.getOriginal_pic(), FileLocationMethod.picture_large) : null; } else { boolean result = TaskCache .waitForPictureDownload(msg.getBmiddle_pic(), downloadListener, FileManager.generateDownloadFileName(msg.getBmiddle_pic()), FileLocationMethod.picture_bmiddle); return result ? FileManager .getFilePathFromUrl(msg.getBmiddle_pic(), FileLocationMethod.picture_bmiddle) : null; } } FileDownloaderHttpHelper.DownloadListener downloadListener = new FileDownloaderHttpHelper.DownloadListener() { @Override public void pushProgress(int progress, int max) { onProgressUpdate(progress, max); } }; @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); if (this.getStatus() == Status.RUNNING) { pb.setVisibility(View.VISIBLE); pb.setIndeterminate(false); Integer progress = values[0]; Integer max = values[1]; pb.setMax(max); pb.setProgress(progress); } } @Override protected void onCancelled(String bitmap) { pb.setVisibility(View.INVISIBLE); super.onCancelled(bitmap); } @Override protected void onPostExecute(String path) { retry.setVisibility(View.INVISIBLE); pb.setIndeterminate(true); if (!TextUtils.isEmpty(path)) { if (!path.endsWith(".gif")) { readNormalPic(path); } else { view.setGif(path); } pb.setVisibility(View.INVISIBLE); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AnimationRect rect = AnimationRect.buildFromImageView(view.getImageView()); ArrayList<AnimationRect> animationRectArrayList = new ArrayList<AnimationRect>(); animationRectArrayList.add(rect); Intent intent = GalleryAnimationActivity .newIntent(msg, animationRectArrayList, 0); GlobalContext.getInstance().getActivity().startActivity(intent); } }); } else { pb.setVisibility(View.INVISIBLE); view.setImageDrawable(new ColorDrawable(Color.TRANSPARENT)); retry.setVisibility(View.VISIBLE); retry.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MsgDetailReadWorker picTask = new MsgDetailReadWorker(view, msg); picTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } }); } } private void readNormalPic(String path) { Bitmap bitmap = ImageUtility.readNormalPic(path, 2000, 2000); view.setTag(true); view.getImageView().setTag(true); view.setVisibility(View.VISIBLE); view.setImageBitmap(bitmap); view.setAlpha(0.0f); view.animate().alpha(1.0f).setDuration(200); } }