package com.luck.picture.lib.compress; import android.content.Context; import android.text.TextUtils; import com.yalantis.ucrop.entity.LocalMedia; import java.io.File; import java.util.List; /** * author:luck * project:PictureSelector * email:893855882@qq.com * data:16/12/31 */ public class CompressImageOptions implements CompressInterface { private CompressImageUtil compressImageUtil; private List<LocalMedia> images; private CompressInterface.CompressListener listener; public static CompressInterface compress(Context context, CompressConfig config, List<LocalMedia> images, CompressInterface.CompressListener listener) { if (config.getLubanOptions() != null) { return new LuBanCompress(context,config,images,listener); } else { return new CompressImageOptions(context, config, images, listener); } } private CompressImageOptions(Context context, CompressConfig config, List<LocalMedia> images, CompressInterface.CompressListener listener) { compressImageUtil = new CompressImageUtil(context, config); this.images = images; this.listener = listener; } @Override public void compress() { if (images == null || images.isEmpty()) listener.onCompressError(images, " images is null"); for (LocalMedia image : images) { if (image == null) { listener.onCompressError(images, " There are pictures of compress is null."); return; } } compress(images.get(0)); } private void compress(final LocalMedia image) { String path = ""; if (image.isCut()) { path = image.getCutPath(); } else { path = image.getPath(); } if (TextUtils.isEmpty(path)) { continueCompress(image, false); return; } File file = new File(path); if (file == null || !file.exists() || !file.isFile()) { continueCompress(image, false); return; } compressImageUtil.compress(path, new CompressImageUtil.CompressListener() { @Override public void onCompressSuccess(String imgPath) { image.setCompressPath(imgPath); continueCompress(image, true); } @Override public void onCompressFailed(String imgPath, String msg) { continueCompress(image, false, msg); } }); } private void continueCompress(LocalMedia image, boolean preSuccess, String... message) { image.setCompressed(preSuccess); int index = images.indexOf(image); boolean isLast = index == images.size() - 1; if (isLast) { handleCompressCallBack(message); } else { compress(images.get(index + 1)); } } private void handleCompressCallBack(String... message) { if (message.length > 0) { listener.onCompressError(images, message[0]); return; } for (LocalMedia image : images) { if (!image.isCompressed()) { listener.onCompressError(images, image.getCompressPath() + " is compress failures"); return; } } listener.onCompressSuccess(images); } }