package net.alhazmy13.mediapicker.Image; import android.annotation.TargetApi; import android.app.Activity; import android.content.Intent; import android.os.Build; import android.os.Environment; import java.lang.ref.WeakReference; /** * Created by Alhazmy13 on 10/26/15. * MediaPicker */ public class ImagePicker { public static final int IMAGE_PICKER_REQUEST_CODE = 42141; public static final String EXTRA_IMAGE_PATH = "EXTRA_IMAGE_PATH"; private final ImageConfig imageConfig; public ImagePicker(Builder builder) { // Required WeakReference<Activity> context = builder.context; // Optional imageConfig = builder.imageConfig; Intent callingIntent = ImageActivity.getCallingIntent(context.get(), imageConfig); context.get().startActivityForResult(callingIntent, IMAGE_PICKER_REQUEST_CODE); } public static class Builder implements ImagePickerBuilderBase { // Required params private final WeakReference<Activity> context; private ImageConfig imageConfig; public Builder(Activity context) { this.context = new WeakReference<>(context); this.imageConfig = new ImageConfig(); } @Override public ImagePicker.Builder compressLevel(ComperesLevel compressLevel) { this.imageConfig.compressLevel = compressLevel; return this; } @Override public ImagePicker.Builder mode(Mode mode) { this.imageConfig.mode = mode; return this; } @Override public ImagePicker.Builder directory(String directory) { this.imageConfig.directory = directory; return this; } @Override public ImagePicker.Builder directory(Directory directory) { switch (directory) { case DEFAULT: this.imageConfig.directory = Environment.getExternalStorageDirectory() + ImageTags.Tags.IMAGE_PICKER_DIR; break; default: break; } return this; } @Override public ImagePicker.Builder extension(Extension extension) { this.imageConfig.extension = extension; return this; } @Override public ImagePicker.Builder scale(int minWidth, int minHeight) { this.imageConfig.reqHeight = minHeight; this.imageConfig.reqWidth = minWidth; return this; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) @Override public ImagePicker.Builder allowMultipleImages(boolean allowMultiple) { this.imageConfig.allowMultiple = allowMultiple; return this; } @Override public ImagePicker.Builder enableDebuggingMode(boolean debug) { this.imageConfig.debug = debug; return this; } @Override public ImagePicker build() { return new ImagePicker(this); } public Activity getContext() { return context.get(); } } public enum Extension { PNG(".png"), JPG(".jpg"); private final String value; Extension(String value) { this.value = value; } public String getValue() { return value; } } public enum ComperesLevel { HARD(20), MEDIUM(50), SOFT(80), NONE(100); private final int value; ComperesLevel(int value) { this.value = value; } public int getValue() { return value; } public static ComperesLevel getEnum(int value) { for (ComperesLevel v : values()) if (v.getValue() == value) return v; throw new IllegalArgumentException(); } } public enum Mode { CAMERA(0), GALLERY(1), CAMERA_AND_GALLERY(2); private final int value; Mode(int value) { this.value = value; } public int getValue() { return value; } } public enum Directory { DEFAULT(0); private final int value; Directory(int value) { this.value = value; } public int getValue() { return value; } } }