package com.jasonchen.microlang.workers; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.ColorDrawable; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; import com.jasonchen.microlang.R; import com.jasonchen.microlang.beans.MessageBean; import com.jasonchen.microlang.gallery.GalleryAnimationActivity; import com.jasonchen.microlang.tasks.MyAsyncTask; import com.jasonchen.microlang.utils.AnimationRect; import com.jasonchen.microlang.utils.GlobalContext; import com.jasonchen.microlang.utils.SettingUtility; import com.jasonchen.microlang.utils.TaskCache; import com.jasonchen.microlang.utils.file.FileDownloaderHttpHelper; import com.jasonchen.microlang.utils.file.FileLocationMethod; import com.jasonchen.microlang.utils.file.FileManager; import com.jasonchen.microlang.utils.image.ImageUtility; import com.jasonchen.microlang.view.WeiboDetailImageView; import java.util.ArrayList; /** * jasonchen * 2015/04/10 */ 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 picPath = FileManager.getFilePathFromUrl(msg.getBmiddle_pic(), FileLocationMethod.picture_bmiddle); if (ImageUtility.isThisBitmapCanRead(picPath) && TaskCache.isThisUrlTaskFinished(msg.getBmiddle_pic())) { onPostExecute(picPath); 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().getCurrentRunningActivity() .startActivity(intent); } }); } else { pb.setVisibility(View.INVISIBLE); view.setImageDrawable(new ColorDrawable(GlobalContext.getInstance() .getResources().getColor(R.color.gainsboro))); 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); } }