package cn.mutils.app.media;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v4.content.CursorLoader;
import java.io.File;
import cn.mutils.app.ui.core.IActivityExecutor;
import cn.mutils.app.util.AppUtil;
import cn.mutils.core.event.IListener;
/**
* Pick photo by system call
*/
@SuppressWarnings({"StringBufferReplaceableByString", "UnnecessaryInterfaceModifier"})
public class PickPhotoTask extends MediaTask {
public static interface PickPhotoListener extends IListener {
void onComplete(Uri uri);
}
public static final int EXPECT_WIDTH = 768;
public static final int EXPECT_HEIGHT = 1024;
public PickPhotoTask(IActivityExecutor executor, int requestCode) {
super(executor, requestCode);
}
public boolean pickPhoto() {
if (mLocked) {
return false;
}
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
mExecutor.startActivityForResult(intent, mRequestCode);
mExecutor.addOnActivityResultListener(mOnActivityResultListener);
mLocked = true;
return true;
}
public void setListener(PickPhotoListener listener) {
super.setListener(listener);
}
@Override
protected void onActivityResult(Context context, int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) {
return;
}
CursorLoader cursorLoader = new CursorLoader(mExecutor.getContext(), data.getData(),
new String[]{MediaStore.Images.Media.DATA}, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();
if (!cursor.moveToFirst()) {
return;
}
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
if (path == null || path.isEmpty()) {
return;
}
String mediaStorageDir = AppUtil.getDiskCacheDir(mExecutor.getContext(), AppUtil.TAG);
if (mediaStorageDir == null) {
return;
}
String md5 = AppUtil.md5(path);
if (md5.isEmpty()) {
return;
}
StringBuilder sb = new StringBuilder();
sb.append(mediaStorageDir);
sb.append("IMG_");
sb.append(md5);
sb.append(".jpg");
String output = sb.toString();
if (AppUtil.compress(path, output, EXPECT_WIDTH, EXPECT_HEIGHT)) {
PickPhotoListener listener = getListener(PickPhotoListener.class);
if (listener != null) {
listener.onComplete(Uri.fromFile(new File(output)));
}
}
}
}