package com.imagepicker.media; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.facebook.react.bridge.ReadableMap; import java.io.File; /** * Created by rusfearuth on 15.03.17. */ public class ImageConfig { public @Nullable final File original; public @Nullable final File resized; public final int maxWidth; public final int maxHeight; public final int quality; public final int rotation; public final boolean saveToCameraRoll; public ImageConfig(@Nullable final File original, @Nullable final File resized, final int maxWidth, final int maxHeight, final int quality, final int rotation, final boolean saveToCameraRoll) { this.original = original; this.resized = resized; this.maxWidth = maxWidth; this.maxHeight = maxHeight; this.quality = quality; this.rotation = rotation; this.saveToCameraRoll = saveToCameraRoll; } public @NonNull ImageConfig withMaxWidth(final int maxWidth) { return new ImageConfig( this.original, this.resized, maxWidth, this.maxHeight, this.quality, this.rotation, this.saveToCameraRoll ); } public @NonNull ImageConfig withMaxHeight(final int maxHeight) { return new ImageConfig( this.original, this.resized, this.maxWidth, maxHeight, this.quality, this.rotation, this.saveToCameraRoll ); } public @NonNull ImageConfig withQuality(final int quality) { return new ImageConfig( this.original, this.resized, this.maxWidth, this.maxHeight, quality, this.rotation, this.saveToCameraRoll ); } public @NonNull ImageConfig withRotation(final int rotation) { return new ImageConfig( this.original, this.resized, this.maxWidth, this.maxHeight, this.quality, rotation, this.saveToCameraRoll ); } public @NonNull ImageConfig withOriginalFile(@Nullable final File original) { return new ImageConfig( original, this.resized, this.maxWidth, this.maxHeight, this.quality, this.rotation, this.saveToCameraRoll ); } public @NonNull ImageConfig withResizedFile(@Nullable final File resized) { return new ImageConfig( this.original, resized, this.maxWidth, this.maxHeight, this.quality, this.rotation, this.saveToCameraRoll ); } public @NonNull ImageConfig withSaveToCameraRoll(@Nullable final boolean saveToCameraRoll) { return new ImageConfig( this.original, this.resized, this.maxWidth, this.maxHeight, this.quality, this.rotation, saveToCameraRoll ); } public @NonNull ImageConfig updateFromOptions(@NonNull final ReadableMap options) { int maxWidth = 0; if (options.hasKey("maxWidth")) { maxWidth = options.getInt("maxWidth"); } int maxHeight = 0; if (options.hasKey("maxHeight")) { maxHeight = options.getInt("maxHeight"); } int quality = 100; if (options.hasKey("quality")) { quality = (int) (options.getDouble("quality") * 100); } int rotation = 0; if (options.hasKey("rotation")) { rotation = options.getInt("rotation"); } boolean saveToCameraRoll = false; if (options.hasKey("storageOptions")) { final ReadableMap storageOptions = options.getMap("storageOptions"); if (storageOptions.hasKey("cameraRoll")) { saveToCameraRoll = storageOptions.getBoolean("cameraRoll"); } } return new ImageConfig(this.original, this.resized, maxWidth, maxHeight, quality, rotation, saveToCameraRoll); } public boolean useOriginal(int initialWidth, int initialHeight, int currentRotation) { return ((initialWidth < maxWidth && maxWidth > 0) || maxWidth == 0) && ((initialHeight < maxHeight && maxHeight > 0) || maxHeight == 0) && quality == 100 && (rotation == 0 || currentRotation == rotation); } public File getActualFile() { return resized != null ? resized: original; } }