package cn.mutils.app.media; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.provider.MediaStore; import java.io.File; import cn.mutils.app.ui.core.IActivityExecutor; import cn.mutils.app.util.AppUtil; import cn.mutils.core.event.IListener; /** * Crop photo by system call */ @SuppressWarnings({"UnnecessaryInterfaceModifier", "StringBufferReplaceableByString"}) public class CropPhotoTask extends MediaTask { public static interface CropPhotoListener extends IListener { void onComplete(Uri uri); } protected Uri mExtraOutput; public CropPhotoTask(IActivityExecutor executor, int requestCode) { super(executor, requestCode); } public boolean cropPhoto(Uri uri, int width, int height) { if (mLocked) { return false; } mExtraOutput = generateExtraOutput(uri, width, height); if (mExtraOutput == null) { return false; } Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", width); intent.putExtra("aspectY", height); intent.putExtra("outputX", width); intent.putExtra("outputY", height); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, mExtraOutput); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); mExecutor.startActivityForResult(intent, mRequestCode); mExecutor.addOnActivityResultListener(mOnActivityResultListener); mLocked = true; return false; } public void setListener(CropPhotoListener listener) { super.setListener(listener); } protected Uri generateExtraOutput(Uri uri, int width, int height) { try { String mediaStorageDir = AppUtil.getDiskCacheDir(mExecutor.getContext(), AppUtil.TAG); if (mediaStorageDir == null) { return null; } String md5 = AppUtil.md5(uri.getPath()); if (md5.isEmpty()) { return null; } StringBuilder sb = new StringBuilder(); sb.append(mediaStorageDir); sb.append("IMG_"); sb.append(md5); sb.append("_"); sb.append(width); sb.append("x"); sb.append(height); sb.append(".jpg"); return Uri.fromFile(new File(sb.toString())); } catch (Exception e) { return null; } } @Override protected void onActivityResult(Context context, int requestCode, int resultCode, Intent data) { if (resultCode != Activity.RESULT_OK) { return; } if (AppUtil.compress(mExtraOutput.getPath())) { CropPhotoListener listener = getListener(CropPhotoListener.class); if (listener != null) { listener.onComplete(mExtraOutput); } } } }