package com.swifty.fillcolor.model; import android.content.Context; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Environment; import android.view.View; import android.widget.ImageView; import com.google.gson.Gson; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; import com.nostra13.universalimageloader.utils.DiskCacheUtils; import com.swifty.fillcolor.MyApplication; import com.swifty.fillcolor.R; import com.swifty.fillcolor.factory.AnimateFactory; import com.swifty.fillcolor.model.bean.PictureBean; import com.swifty.fillcolor.model.db.FCDBHelper; import com.swifty.fillcolor.util.ImageLoaderUtil; import com.swifty.fillcolor.util.ImageSaveUtil; import com.swifty.fillcolor.util.L; import com.swifty.fillcolor.util.MyHttpClient; import com.swifty.fillcolor.util.NetWorkUtil; import com.swifty.fillcolor.view.MyProgressDialog; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import java.io.File; import java.util.ArrayList; import java.util.List; /** * Created by Swifty.Wang on 2015/8/10. */ public class GridViewActivityModel { private final String CATEGORY = "categoryid"; private String root = Environment.getExternalStorageDirectory().getPath() + "/MyFCWorks/"; private static GridViewActivityModel gridViewActivityModel; List<PictureBean.Picture> pictureBeans; private OnLoadPicFinishListener onLoadPicFinishListener; private GridViewActivityModel() { } public static GridViewActivityModel getInstance() { if (gridViewActivityModel == null) { gridViewActivityModel = new GridViewActivityModel(); } return gridViewActivityModel; } public void showGridLocalImageAsyn(ImageView imageView, String url) { if (hasSavedFile(url)) { AsynImageLoader.showImageAsynWithoutCache(imageView, "file:/" + root + url.hashCode() + ".png"); } else { AsynImageLoader.showImageAsynWithAllCacheOpen(imageView, url); } } public void showGridInternetImageAsyn(ImageView imageView, final ImageView tag, String url) { final String bigImageUrl = url.replace("t_", "f_").replace(".jpg", ".png"); // check have cache if have cache then add a tag if (DiskCacheUtils.findInCache(bigImageUrl, ImageLoader.getInstance().getDiskCache()) == null) { tag.setImageResource(R.drawable.ic_file_download_black_24dp); tag.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { downloadPic(tag, bigImageUrl); } }); } else { tag.setImageResource(R.drawable.ic_done_black_24dp); tag.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //do nothing just block parent listener } }); } if (hasSavedFile(ImageSaveUtil.convertImageLageUrl(bigImageUrl))) { AsynImageLoader.showImageAsynWithoutCache(imageView, "file:/" + root + ImageSaveUtil.convertImageLageUrl(bigImageUrl).hashCode() + ".png"); } else { AsynImageLoader.showImageAsynWithAllCacheOpen(imageView, url); } } private void downloadPic(final ImageView tag, String bigImageUrl) { ImageLoader.getInstance().loadImage(bigImageUrl, ImageLoaderUtil.DetailImageOptions(), new ImageLoadingListener() { @Override public void onLoadingStarted(String s, View view) { tag.setImageResource(R.drawable.ic_autorenew_black_24dp); tag.startAnimation(AnimateFactory.getInstance().rotateAnimationForever(0, 360, tag.getMeasuredWidth() / 2, tag.getMeasuredHeight() / 2)); } @Override public void onLoadingFailed(String s, View view, FailReason failReason) { tag.setImageResource(R.drawable.ic_file_download_black_24dp); tag.clearAnimation(); } @Override public void onLoadingComplete(String s, View view, Bitmap bitmap) { tag.setImageResource(R.drawable.ic_done_black_24dp); tag.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //do nothing just block parent listener } }); tag.clearAnimation(); } @Override public void onLoadingCancelled(String s, View view) { tag.setImageResource(R.drawable.ic_file_download_black_24dp); tag.clearAnimation(); } }); } public void loadPictureData(Context context, int categoryId, OnLoadPicFinishListener onLoadPicFinishListener) { this.onLoadPicFinishListener = onLoadPicFinishListener; AsyncTask asyncTask = new LoadDetailAsyn(); asyncTask.execute(context, categoryId, true); } public void refreshPictureData(Context context, int categoryId, OnLoadPicFinishListener onLoadPicFinishListener) { this.onLoadPicFinishListener = onLoadPicFinishListener; AsyncTask asyncTask = new LoadDetailAsyn(); asyncTask.execute(context, categoryId, false); } private boolean hasSavedFile(String s) { int hashCode = s.hashCode(); String path = root + hashCode + ".png"; File file = new File(path); if (file.exists()) { return true; } else { return false; } } private class LoadDetailAsyn extends AsyncTask { @Override protected Object doInBackground(Object[] objects) { try { Context context = (Context) objects[0]; int categoryid = (int) objects[1]; boolean useLocalCache = (boolean) objects[2]; //if not wifi read from db first if (!NetWorkUtil.isWIFI(context)) { if (useLocalCache) { pictureBeans = FCDBModel.getInstance().readPicList(context, categoryid); if (pictureBeans != null && !pictureBeans.isEmpty()) { return "SUCCESS"; } } } MyHttpClient myHttpClient = new MyHttpClient(); List<NameValuePair> params = new ArrayList<>(); params.add(new BasicNameValuePair(CATEGORY, String.valueOf(categoryid))); String ret = myHttpClient.executePostRequest(MyApplication.ThemeDetailUrl, params); L.e("ret", ret); Gson gson = new Gson(); pictureBeans = gson.fromJson(ret, PictureBean.class).getPictures(); if (pictureBeans != null && !pictureBeans.isEmpty()) { //delete current pictures FCDBModel.getInstance().deleteThisCategoryid(context, categoryid, FCDBHelper.FCIMAGETABLE); //save to db FCDBModel.getInstance().insertPics(context, categoryid, pictureBeans); return "SUCCESS"; } else { return "FAILED"; } } catch (Exception e) { L.e(e.toString()); return "FAILED"; } } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); MyProgressDialog.DismissDialog(); if ("SUCCESS".equals((String) o)) { if (onLoadPicFinishListener != null) { onLoadPicFinishListener.LoadPicFinish(pictureBeans); } } else { if (onLoadPicFinishListener != null) { onLoadPicFinishListener.LoadPicFailed((String) o); } } } } public interface OnLoadPicFinishListener { void LoadPicFinish(List<PictureBean.Picture> pictureBeans); void LoadPicFailed(String error); } }