From 14745d214cedb100e1aaad4152691daa46ba106a Mon Sep 17 00:00:00 2001 From: "koichi.kukino" Date: Mon, 22 Jan 2018 15:13:13 +0900 Subject: [PATCH 1/4] Add Size Filter --- README.md | 12 ++++ .../com/laevatein/SelectionSpecBuilder.java | 60 +++++++++++++++++++ .../internal/entity/ErrorViewSpec.java | 38 +++++++++++- .../internal/entity/SelectionSpec.java | 24 ++++++++ .../internal/entity/UncapableCause.java | 12 ++++ .../internal/utils/PhotoMetadataUtils.java | 25 +++++++- laevatein/src/main/res/values/strings.xml | 1 + .../laevatein/SelectionSpecBuilderTest.java | 9 +++ .../com/laevatein/sample/LSampleActivity.java | 1 + 9 files changed, 180 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f3b34a2..a39e40c 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,18 @@ Laevatein.from(this) .forResult(REQUEST_CODE_CHOOSE); ``` +### Selectable photo size limitation + +Set selectable photo size by pixel with `size(int, int)`. +Default is `0 <= pixels <= Integer.MAX_VALUE`. + +```java +Laevatein.from(this) + .choose(MimeType.of(MimeType.JPEG)) + .size(300, Integer.MAX_VALUE) // minimum = 300px, max = Integer.MAX_VALUEpx, so 300px <= count <= Integer.MAX_VALUEpx; + .forResult(REQUEST_CODE_CHOOSE); +``` + ### Use custom cell layout Set your layout and ids for the image cell with `bindEachImageWith(int, int, int)`. diff --git a/laevatein/src/main/java/com/laevatein/SelectionSpecBuilder.java b/laevatein/src/main/java/com/laevatein/SelectionSpecBuilder.java index 14299c6..5b63d5c 100644 --- a/laevatein/src/main/java/com/laevatein/SelectionSpecBuilder.java +++ b/laevatein/src/main/java/com/laevatein/SelectionSpecBuilder.java @@ -62,6 +62,8 @@ public final class SelectionSpecBuilder { private ErrorViewResources mCountOverErrorSpec; private ErrorViewResources mUnderQualityErrorSpec; private ErrorViewResources mOverQualityErrorSpec; + private ErrorViewResources mUnderSizeErrorSpec; + private ErrorViewResources mOverSizeErrorSpec; private ErrorViewResources mTypeErrorSpec; private DialogResources mConfirmDialogSpec; private boolean mOpenDrawer = true; @@ -243,6 +245,50 @@ public SelectionSpecBuilder overQuality(ErrorViewResources.ViewType type, int er return this; } + /** + * Sets the error view specification for the error of size un-satisfaction. + * @param type error view type. + * @param errorMessageId an error message resource id. + * @return the specification builder context. + */ + public SelectionSpecBuilder underSize(ErrorViewResources.ViewType type, int errorMessageId) { + return underSize(type, -1, errorMessageId); + } + + /** + * Sets the error view specification for the error of size un-satisfaction. + * @param type error view type. + * @param errorTitleId an error title resource id. If type is not {@see ErrorViewResources.ViewType.DIALOG}, this parameter is ignored. + * @param errorMessageId an error message resource id. + * @return the specification builder context. + */ + public SelectionSpecBuilder underSize(ErrorViewResources.ViewType type, int errorTitleId, int errorMessageId) { + mUnderSizeErrorSpec = type.createSpec(errorTitleId, errorMessageId); + return this; + } + + /** + * Sets the error view specification for the error of size un-satisfaction.. + * @param type error view type. + * @param errorMessageId an error message resource id. + * @return the specification builder context. + */ + public SelectionSpecBuilder overSize(ErrorViewResources.ViewType type, int errorMessageId) { + return overSize(type, -1, errorMessageId); + } + + /** + * Sets the error view specification for the error of size un-satisfaction.. + * @param type error view type. + * @param errorTitleId an error title resource id. If type is not {@see ErrorViewResources.ViewType.DIALOG}, this parameter is ignored. + * @param errorMessageId an error message resource id. + * @return the specification builder context. + */ + public SelectionSpecBuilder overSize(ErrorViewResources.ViewType type, int errorTitleId, int errorMessageId) { + mOverSizeErrorSpec = type.createSpec(errorTitleId, errorMessageId); + return this; + } + /** * Sets the error view specification for the error of type validation. * @param type error view type. @@ -297,6 +343,18 @@ public SelectionSpecBuilder quality(int minPixel, int maxPixel) { return this; } + /** + * Sets the limitation of a selectable image size by pixel count around side. + * @param minPixel minimum value to select. + * @param maxPixel maximum value to select. + * @return the specification builder context. + */ + public SelectionSpecBuilder size(int minPixel, int maxPixel) { + mSelectionSpec.setMinSidePixels(minPixel); + mSelectionSpec.setMaxSidePixels(maxPixel); + return this; + } + /** * Sets the Activity instead of PhotoSelectionActivity * @param photoSelectionActivityClass an Activity called on photo selecting @@ -400,6 +458,8 @@ public void forResultWithTransition(int requestCode, View view) { .setCountOverSpec(mCountOverErrorSpec) .setOverQualitySpec(mOverQualityErrorSpec) .setUnderQualitySpec(mUnderQualityErrorSpec) + .setOverSizeSpec(mOverSizeErrorSpec) + .setUnderSizeSpec(mUnderSizeErrorSpec) .setTypeSpec(mTypeErrorSpec) .setConfirmSpec(mConfirmDialogSpec) .create(); diff --git a/laevatein/src/main/java/com/laevatein/internal/entity/ErrorViewSpec.java b/laevatein/src/main/java/com/laevatein/internal/entity/ErrorViewSpec.java index a5b13a0..6af01b0 100644 --- a/laevatein/src/main/java/com/laevatein/internal/entity/ErrorViewSpec.java +++ b/laevatein/src/main/java/com/laevatein/internal/entity/ErrorViewSpec.java @@ -29,6 +29,8 @@ public ErrorViewSpec[] newArray(int size) { private final ErrorViewResources mCountOverErrorSpec; private final ErrorViewResources mUnderQualitySpec; private final ErrorViewResources mOverQualitySpec; + private final ErrorViewResources mUnderSizeSpec; + private final ErrorViewResources mOverSizeSpec; private final ErrorViewResources mTypeErrorSpec; private final DialogResources mBackConfirmSpec; @@ -37,17 +39,22 @@ public ErrorViewSpec[] newArray(int size) { mCountOverErrorSpec = source.readParcelable(ErrorViewResources.class.getClassLoader()); mUnderQualitySpec = source.readParcelable(ErrorViewResources.class.getClassLoader()); mOverQualitySpec = source.readParcelable(ErrorViewResources.class.getClassLoader()); + mUnderSizeSpec = source.readParcelable(ErrorViewResources.class.getClassLoader()); + mOverSizeSpec = source.readParcelable(ErrorViewResources.class.getClassLoader()); mTypeErrorSpec = source.readParcelable(ErrorViewResources.class.getClassLoader()); mBackConfirmSpec = source.readParcelable(DialogResources.class.getClassLoader()); } /* package */ ErrorViewSpec(ErrorViewResources countUnderSpec, ErrorViewResources countOverSpec, ErrorViewResources underQualitySpec, ErrorViewResources overQualitySpec, + ErrorViewResources underSizeSpec, ErrorViewResources overSizeSpec, ErrorViewResources typeErrorSpec, DialogResources backConfirmSpec) { mCountUnderErrorSpec = countUnderSpec; mCountOverErrorSpec = countOverSpec; mUnderQualitySpec = underQualitySpec; mOverQualitySpec = overQualitySpec; + mUnderSizeSpec = underSizeSpec; + mOverSizeSpec = overSizeSpec; mTypeErrorSpec = typeErrorSpec; mBackConfirmSpec = backConfirmSpec; } @@ -63,6 +70,8 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeParcelable(mCountOverErrorSpec, flags); dest.writeParcelable(mUnderQualitySpec, flags); dest.writeParcelable(mOverQualitySpec, flags); + dest.writeParcelable(mUnderSizeSpec, flags); + dest.writeParcelable(mOverSizeSpec, flags); dest.writeParcelable(mTypeErrorSpec, flags); dest.writeParcelable(mBackConfirmSpec, flags); } @@ -83,6 +92,14 @@ public ErrorViewResources getOverQualitySpec() { return mOverQualitySpec; } + public ErrorViewResources getUnderSizeSpec() { + return mUnderSizeSpec; + } + + public ErrorViewResources getOverSizeSpec() { + return mOverSizeSpec; + } + public ErrorViewResources getTypeErrorSpec() { return mTypeErrorSpec; } @@ -96,6 +113,8 @@ public static class Builder { private ErrorViewResources mCountOverSpec; private ErrorViewResources mUnderQualitySpec; private ErrorViewResources mOverQualitySpec; + private ErrorViewResources mUnderSizeSpec; + private ErrorViewResources mOverSizeSpec; private ErrorViewResources mTypeSpec; private DialogResources mBackSpec; @@ -119,6 +138,16 @@ public Builder setOverQualitySpec(ErrorViewResources spec) { return this; } + public Builder setUnderSizeSpec(ErrorViewResources spec) { + mUnderSizeSpec = spec; + return this; + } + + public Builder setOverSizeSpec(ErrorViewResources spec) { + mOverSizeSpec = spec; + return this; + } + public Builder setTypeSpec(ErrorViewResources spec) { mTypeSpec = spec; return this; @@ -142,13 +171,20 @@ public ErrorViewSpec create() { if (mOverQualitySpec == null) { mOverQualitySpec = ErrorViewResources.ViewType.DIALOG.createSpec(-1, R.string.l_error_quality); } + if (mUnderSizeSpec == null) { + mUnderSizeSpec = ErrorViewResources.ViewType.DIALOG.createSpec(-1, R.string.l_error_size); + } + if (mOverSizeSpec == null) { + mOverSizeSpec = ErrorViewResources.ViewType.DIALOG.createSpec(-1, R.string.l_error_size); + } if (mTypeSpec == null) { mTypeSpec = ErrorViewResources.ViewType.DIALOG.createSpec(-1, R.string.l_error_invalid_format); } if (mBackSpec == null) { mBackSpec = new DialogResources(R.string.l_confirm_dialog_title, R.string.l_confirm_dialog_message); } - return new ErrorViewSpec(mCountUnderSpec, mCountOverSpec, mUnderQualitySpec, mOverQualitySpec, mTypeSpec, mBackSpec); + return new ErrorViewSpec(mCountUnderSpec, mCountOverSpec, mUnderQualitySpec, + mOverQualitySpec, mUnderSizeSpec, mOverSizeSpec, mTypeSpec, mBackSpec); } } } diff --git a/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java b/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java index 685fea8..ad2ec51 100644 --- a/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java +++ b/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java @@ -47,6 +47,8 @@ public SelectionSpec[] newArray(int size) { private int mMinSelectable; private long mMinPixels; private long mMaxPixels; + private long mMinSidePixels; + private long mMaxSidePixels; private Set mMimeTypeSet; public SelectionSpec() { @@ -54,6 +56,8 @@ public SelectionSpec() { mMaxSelectable = 1; mMinPixels = 0L; mMaxPixels = Long.MAX_VALUE; + mMinSidePixels = 0L; + mMaxSidePixels = Long.MAX_VALUE; } /* package */ SelectionSpec(Parcel source) { @@ -61,6 +65,8 @@ public SelectionSpec() { mMaxSelectable = source.readInt(); mMinPixels = source.readLong(); mMaxPixels = source.readLong(); + mMinSidePixels = source.readLong(); + mMaxSidePixels = source.readLong(); List list = new ArrayList<>(); source.readList(list, MimeType.class.getClassLoader()); mMimeTypeSet = EnumSet.copyOf(list); @@ -77,6 +83,8 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mMaxSelectable); dest.writeLong(mMinPixels); dest.writeLong(mMaxPixels); + dest.writeLong(mMinSidePixels); + dest.writeLong(mMaxSidePixels); dest.writeList(new ArrayList<>(mMimeTypeSet)); } @@ -96,6 +104,14 @@ public void setMaxPixels(long maxPixels) { mMaxPixels = maxPixels; } + public void setMinSidePixels(long mMinSidePixels) { + this.mMinSidePixels = mMinSidePixels; + } + + public void setMaxSidePixels(long mMaxSidePixels) { + this.mMaxSidePixels = mMaxSidePixels; + } + public void setMimeTypeSet(Set set) { mMimeTypeSet = set; } @@ -116,6 +132,14 @@ public long getMaxPixels() { return mMaxPixels; } + public long getMinSidePixels() { + return mMinSidePixels; + } + + public long getMaxSidePixels() { + return mMaxSidePixels; + } + public Set getMimeTypeSet() { return mMimeTypeSet; } diff --git a/laevatein/src/main/java/com/laevatein/internal/entity/UncapableCause.java b/laevatein/src/main/java/com/laevatein/internal/entity/UncapableCause.java index ded39bd..5634989 100644 --- a/laevatein/src/main/java/com/laevatein/internal/entity/UncapableCause.java +++ b/laevatein/src/main/java/com/laevatein/internal/entity/UncapableCause.java @@ -40,6 +40,18 @@ public ErrorViewResources getErrorResources(ErrorViewSpec spec) { return spec.getOverQualitySpec(); } }, + UNDER_SIZE { + @Override + public ErrorViewResources getErrorResources(ErrorViewSpec spec) { + return spec.getUnderSizeSpec(); + } + }, + OVER_SIZE { + @Override + public ErrorViewResources getErrorResources(ErrorViewSpec spec) { + return spec.getOverSizeSpec(); + } + }, FILE_TYPE { @Override public ErrorViewResources getErrorResources(ErrorViewSpec spec) { diff --git a/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java b/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java index 0023eef..9510fc4 100644 --- a/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java +++ b/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java @@ -44,7 +44,6 @@ */ public final class PhotoMetadataUtils { public static final String TAG = PhotoMetadataUtils.class.getSimpleName(); - private static final int MAX_WIDTH = 1600; private static final String SCHEME_CONTENT = "content"; private PhotoMetadataUtils() { @@ -103,6 +102,12 @@ public static UncapableCause isAcceptable(Context context, SelectionSpec spec, U if (!hasOverAtLeastQuality(context, spec, uri)) { return UncapableCause.UNDER_QUALITY; } + if (!isShorterThanMaxSize(context, spec, uri)) { + return UncapableCause.OVER_SIZE; + } + if (!isLongerThanMinSize(context, spec, uri)) { + return UncapableCause.UNDER_SIZE; + } return null; } @@ -124,6 +129,24 @@ public static boolean hasUnderAtMostQuality(Context context, SelectionSpec spec, return pixels <= spec.getMaxPixels(); } + public static boolean isLongerThanMinSize(Context context, SelectionSpec spec, Uri uri) { + if (context == null) { + return false; + } + Point p = PhotoMetadataUtils.getBitmapBound(context.getContentResolver(), uri); + Log.d("Size", "x = " + p.x + "y = " + p.y); + return p.x >= spec.getMinSidePixels() && p.y >= spec.getMinSidePixels(); + } + + public static boolean isShorterThanMaxSize(Context context, SelectionSpec spec, Uri uri) { + if (context == null) { + return false; + } + + Point p = PhotoMetadataUtils.getBitmapBound(context.getContentResolver(), uri); + return p.x <= spec.getMaxSidePixels() && p.y <= spec.getMaxSidePixels(); + } + public static boolean isSelectableType(Context context, SelectionSpec spec, Uri uri) { if (context == null) { return false; diff --git a/laevatein/src/main/res/values/strings.xml b/laevatein/src/main/res/values/strings.xml index 2541186..cbb6ae7 100644 --- a/laevatein/src/main/res/values/strings.xml +++ b/laevatein/src/main/res/values/strings.xml @@ -12,6 +12,7 @@ Not allowed to select this photo due to invalid file format. Not allowed to select this photo due to not enough quality. + Not allowed to select this photo due to not suitable size. All Photos Selected Photos diff --git a/laevatein/src/test/java/com/laevatein/SelectionSpecBuilderTest.java b/laevatein/src/test/java/com/laevatein/SelectionSpecBuilderTest.java index cc43fe9..6c204a2 100644 --- a/laevatein/src/test/java/com/laevatein/SelectionSpecBuilderTest.java +++ b/laevatein/src/test/java/com/laevatein/SelectionSpecBuilderTest.java @@ -87,6 +87,15 @@ public void quality() throws Exception { mLatch.await(); } + @Test + public void size() throws Exception { + mBuilder = mBuilder.size(0, 100); + assertNotNull(mBuilder); + + mBuilder.forResult(MOCK_REQUEST_CODE); + mLatch.await(); + } + @Test public void resume() throws Exception { mBuilder = mBuilder.resume(new ArrayList()); diff --git a/sample/src/main/java/com/laevatein/sample/LSampleActivity.java b/sample/src/main/java/com/laevatein/sample/LSampleActivity.java index f5acb9f..2a9db4f 100644 --- a/sample/src/main/java/com/laevatein/sample/LSampleActivity.java +++ b/sample/src/main/java/com/laevatein/sample/LSampleActivity.java @@ -71,6 +71,7 @@ void startPhotoSelect() { .choose(MimeType.of(MimeType.JPEG)) .count(10, 10) .quality(300000, Integer.MAX_VALUE) + .size(300, Integer.MAX_VALUE) .resume(mSelected) .capture(true) .countUnder(ErrorViewResources.ViewType.SNACKBAR, R.string.error_count_under) From 277d2fae8381fcbfb20f0b599fefd1a16fb8394f Mon Sep 17 00:00:00 2001 From: "koichi.kukino" Date: Mon, 22 Jan 2018 15:19:04 +0900 Subject: [PATCH 2/4] Remove Log --- .../java/com/laevatein/internal/utils/PhotoMetadataUtils.java | 1 - 1 file changed, 1 deletion(-) diff --git a/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java b/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java index 9510fc4..293a6e4 100644 --- a/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java +++ b/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java @@ -134,7 +134,6 @@ public static boolean isLongerThanMinSize(Context context, SelectionSpec spec, U return false; } Point p = PhotoMetadataUtils.getBitmapBound(context.getContentResolver(), uri); - Log.d("Size", "x = " + p.x + "y = " + p.y); return p.x >= spec.getMinSidePixels() && p.y >= spec.getMinSidePixels(); } From ebeb6c07ec3b35f009305662fa34321303338d6a Mon Sep 17 00:00:00 2001 From: "koichi.kukino" Date: Mon, 22 Jan 2018 17:20:37 +0900 Subject: [PATCH 3/4] Divide it into width and height --- README.md | 14 +++++- .../com/laevatein/SelectionSpecBuilder.java | 27 +++++++--- .../internal/entity/SelectionSpec.java | 50 +++++++++++++------ .../internal/utils/PhotoMetadataUtils.java | 4 +- .../com/laevatein/sample/LSampleActivity.java | 2 +- 5 files changed, 71 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index a39e40c..11f28c3 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,19 @@ Default is `0 <= pixels <= Integer.MAX_VALUE`. ```java Laevatein.from(this) .choose(MimeType.of(MimeType.JPEG)) - .size(300, Integer.MAX_VALUE) // minimum = 300px, max = Integer.MAX_VALUEpx, so 300px <= count <= Integer.MAX_VALUEpx; + .size(300, 400) // minimum width = 300px, minimum height = 400px; + .forResult(REQUEST_CODE_CHOOSE); +``` + +### Selectable photo size limitation + +Set selectable photo size by pixel with `size(int, int, int, int)`. +Default is `0 <= pixels <= Integer.MAX_VALUE`. + +```java +Laevatein.from(this) + .choose(MimeType.of(MimeType.JPEG)) + .size(300, 400, Integer.MAX_VALUE, Integer.MAX_VALUE) // minimum width = 300px, minimum height = 400px, max width = Integer.MAX_VALUEpx, max height = Integer.MAX_VALUEpx; .forResult(REQUEST_CODE_CHOOSE); ``` diff --git a/laevatein/src/main/java/com/laevatein/SelectionSpecBuilder.java b/laevatein/src/main/java/com/laevatein/SelectionSpecBuilder.java index 5b63d5c..21a1555 100644 --- a/laevatein/src/main/java/com/laevatein/SelectionSpecBuilder.java +++ b/laevatein/src/main/java/com/laevatein/SelectionSpecBuilder.java @@ -344,14 +344,29 @@ public SelectionSpecBuilder quality(int minPixel, int maxPixel) { } /** - * Sets the limitation of a selectable image size by pixel count around side. - * @param minPixel minimum value to select. - * @param maxPixel maximum value to select. + * Sets the limitation of a selectable image size by pixel count minimum. + * + * @param minWidth minimum width value to select. + * @param minHeight minimum width value to select. + * @return the specification builder context. + */ + public SelectionSpecBuilder size(int minWidth, int minHeight) { + size(minWidth, minHeight, Integer.MAX_VALUE, Integer.MAX_VALUE); + return this; + } + + /** + * Sets the limitation of a selectable image size by pixel count minimum and maximum. + * + * @param minWidth minimum width value to select. + * @param minHeight minimum width value to select. + * @param maxWidth maximum height value to select. + * @param maxHeight maximum height value to select. * @return the specification builder context. */ - public SelectionSpecBuilder size(int minPixel, int maxPixel) { - mSelectionSpec.setMinSidePixels(minPixel); - mSelectionSpec.setMaxSidePixels(maxPixel); + public SelectionSpecBuilder size(int minWidth, int minHeight, int maxWidth, int maxHeight) { + mSelectionSpec.setMinSize(minWidth, minHeight); + mSelectionSpec.setMaxSize(maxWidth, maxHeight); return this; } diff --git a/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java b/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java index ad2ec51..e676cbd 100644 --- a/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java +++ b/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java @@ -47,8 +47,10 @@ public SelectionSpec[] newArray(int size) { private int mMinSelectable; private long mMinPixels; private long mMaxPixels; - private long mMinSidePixels; - private long mMaxSidePixels; + private long mMinWidthPixels; + private long mMinHeightPixels; + private long mMaxWidthPixels; + private long mMaxHeightPixels; private Set mMimeTypeSet; public SelectionSpec() { @@ -56,8 +58,10 @@ public SelectionSpec() { mMaxSelectable = 1; mMinPixels = 0L; mMaxPixels = Long.MAX_VALUE; - mMinSidePixels = 0L; - mMaxSidePixels = Long.MAX_VALUE; + mMinWidthPixels = 0L; + mMinHeightPixels = 0L; + mMaxWidthPixels = Long.MAX_VALUE; + mMaxHeightPixels = Long.MAX_VALUE; } /* package */ SelectionSpec(Parcel source) { @@ -65,8 +69,10 @@ public SelectionSpec() { mMaxSelectable = source.readInt(); mMinPixels = source.readLong(); mMaxPixels = source.readLong(); - mMinSidePixels = source.readLong(); - mMaxSidePixels = source.readLong(); + mMinWidthPixels = source.readLong(); + mMinHeightPixels = source.readLong(); + mMaxWidthPixels = source.readLong(); + mMaxHeightPixels = source.readLong(); List list = new ArrayList<>(); source.readList(list, MimeType.class.getClassLoader()); mMimeTypeSet = EnumSet.copyOf(list); @@ -83,8 +89,10 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mMaxSelectable); dest.writeLong(mMinPixels); dest.writeLong(mMaxPixels); - dest.writeLong(mMinSidePixels); - dest.writeLong(mMaxSidePixels); + dest.writeLong(mMinWidthPixels); + dest.writeLong(mMinHeightPixels); + dest.writeLong(mMaxWidthPixels); + dest.writeLong(mMaxHeightPixels); dest.writeList(new ArrayList<>(mMimeTypeSet)); } @@ -104,12 +112,14 @@ public void setMaxPixels(long maxPixels) { mMaxPixels = maxPixels; } - public void setMinSidePixels(long mMinSidePixels) { - this.mMinSidePixels = mMinSidePixels; + public void setMinSize(int minWidthPixels, int minHeightPixels) { + this.mMinWidthPixels = minWidthPixels; + this.mMinHeightPixels = minHeightPixels; } - public void setMaxSidePixels(long mMaxSidePixels) { - this.mMaxSidePixels = mMaxSidePixels; + public void setMaxSize(int maxWidthPixels, int maxHeightPixels) { + this.mMaxWidthPixels = maxWidthPixels; + this.mMaxHeightPixels = maxHeightPixels; } public void setMimeTypeSet(Set set) { @@ -132,12 +142,20 @@ public long getMaxPixels() { return mMaxPixels; } - public long getMinSidePixels() { - return mMinSidePixels; + public long getMinWidthPixels() { + return mMinWidthPixels; } - public long getMaxSidePixels() { - return mMaxSidePixels; + public long getMinHeightPixels() { + return mMinHeightPixels; + } + + public long getMaxWidthPixels() { + return mMaxWidthPixels; + } + + public long getMaxHeightPixels() { + return mMaxHeightPixels; } public Set getMimeTypeSet() { diff --git a/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java b/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java index 293a6e4..cfdae2d 100644 --- a/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java +++ b/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java @@ -134,7 +134,7 @@ public static boolean isLongerThanMinSize(Context context, SelectionSpec spec, U return false; } Point p = PhotoMetadataUtils.getBitmapBound(context.getContentResolver(), uri); - return p.x >= spec.getMinSidePixels() && p.y >= spec.getMinSidePixels(); + return p.x >= spec.getMinWidthPixels() && p.y >= spec.getMinHeightPixels(); } public static boolean isShorterThanMaxSize(Context context, SelectionSpec spec, Uri uri) { @@ -143,7 +143,7 @@ public static boolean isShorterThanMaxSize(Context context, SelectionSpec spec, } Point p = PhotoMetadataUtils.getBitmapBound(context.getContentResolver(), uri); - return p.x <= spec.getMaxSidePixels() && p.y <= spec.getMaxSidePixels(); + return p.x <= spec.getMaxWidthPixels() && p.y <= spec.getMaxHeightPixels(); } public static boolean isSelectableType(Context context, SelectionSpec spec, Uri uri) { diff --git a/sample/src/main/java/com/laevatein/sample/LSampleActivity.java b/sample/src/main/java/com/laevatein/sample/LSampleActivity.java index 2a9db4f..a0563e9 100644 --- a/sample/src/main/java/com/laevatein/sample/LSampleActivity.java +++ b/sample/src/main/java/com/laevatein/sample/LSampleActivity.java @@ -71,7 +71,7 @@ void startPhotoSelect() { .choose(MimeType.of(MimeType.JPEG)) .count(10, 10) .quality(300000, Integer.MAX_VALUE) - .size(300, Integer.MAX_VALUE) + .size(300, 300) .resume(mSelected) .capture(true) .countUnder(ErrorViewResources.ViewType.SNACKBAR, R.string.error_count_under) From dd08f6c2be3352814acda13da1df2ce343c7cf72 Mon Sep 17 00:00:00 2001 From: "koichi.kukino" Date: Mon, 22 Jan 2018 17:44:20 +0900 Subject: [PATCH 4/4] Fixed review points --- .../internal/entity/SelectionSpec.java | 40 +++++++++---------- .../internal/utils/PhotoMetadataUtils.java | 8 ++-- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java b/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java index e676cbd..d3e7c98 100644 --- a/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java +++ b/laevatein/src/main/java/com/laevatein/internal/entity/SelectionSpec.java @@ -47,10 +47,10 @@ public SelectionSpec[] newArray(int size) { private int mMinSelectable; private long mMinPixels; private long mMaxPixels; - private long mMinWidthPixels; - private long mMinHeightPixels; - private long mMaxWidthPixels; - private long mMaxHeightPixels; + private int mMinWidthPixels; + private int mMinHeightPixels; + private int mMaxWidthPixels; + private int mMaxHeightPixels; private Set mMimeTypeSet; public SelectionSpec() { @@ -58,10 +58,10 @@ public SelectionSpec() { mMaxSelectable = 1; mMinPixels = 0L; mMaxPixels = Long.MAX_VALUE; - mMinWidthPixels = 0L; - mMinHeightPixels = 0L; - mMaxWidthPixels = Long.MAX_VALUE; - mMaxHeightPixels = Long.MAX_VALUE; + mMinWidthPixels = 0; + mMinHeightPixels = 0; + mMaxWidthPixels = Integer.MAX_VALUE; + mMaxHeightPixels = Integer.MAX_VALUE; } /* package */ SelectionSpec(Parcel source) { @@ -69,10 +69,10 @@ public SelectionSpec() { mMaxSelectable = source.readInt(); mMinPixels = source.readLong(); mMaxPixels = source.readLong(); - mMinWidthPixels = source.readLong(); - mMinHeightPixels = source.readLong(); - mMaxWidthPixels = source.readLong(); - mMaxHeightPixels = source.readLong(); + mMinWidthPixels = source.readInt(); + mMinHeightPixels = source.readInt(); + mMaxWidthPixels = source.readInt(); + mMaxHeightPixels = source.readInt(); List list = new ArrayList<>(); source.readList(list, MimeType.class.getClassLoader()); mMimeTypeSet = EnumSet.copyOf(list); @@ -89,10 +89,10 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mMaxSelectable); dest.writeLong(mMinPixels); dest.writeLong(mMaxPixels); - dest.writeLong(mMinWidthPixels); - dest.writeLong(mMinHeightPixels); - dest.writeLong(mMaxWidthPixels); - dest.writeLong(mMaxHeightPixels); + dest.writeInt(mMinWidthPixels); + dest.writeInt(mMinHeightPixels); + dest.writeInt(mMaxWidthPixels); + dest.writeInt(mMaxHeightPixels); dest.writeList(new ArrayList<>(mMimeTypeSet)); } @@ -142,19 +142,19 @@ public long getMaxPixels() { return mMaxPixels; } - public long getMinWidthPixels() { + public int getMinWidthPixels() { return mMinWidthPixels; } - public long getMinHeightPixels() { + public int getMinHeightPixels() { return mMinHeightPixels; } - public long getMaxWidthPixels() { + public int getMaxWidthPixels() { return mMaxWidthPixels; } - public long getMaxHeightPixels() { + public int getMaxHeightPixels() { return mMaxHeightPixels; } diff --git a/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java b/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java index cfdae2d..acb38b4 100644 --- a/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java +++ b/laevatein/src/main/java/com/laevatein/internal/utils/PhotoMetadataUtils.java @@ -102,10 +102,10 @@ public static UncapableCause isAcceptable(Context context, SelectionSpec spec, U if (!hasOverAtLeastQuality(context, spec, uri)) { return UncapableCause.UNDER_QUALITY; } - if (!isShorterThanMaxSize(context, spec, uri)) { + if (!isSmallerThanMaxSize(context, spec, uri)) { return UncapableCause.OVER_SIZE; } - if (!isLongerThanMinSize(context, spec, uri)) { + if (!isLargerThanMinSize(context, spec, uri)) { return UncapableCause.UNDER_SIZE; } return null; @@ -129,7 +129,7 @@ public static boolean hasUnderAtMostQuality(Context context, SelectionSpec spec, return pixels <= spec.getMaxPixels(); } - public static boolean isLongerThanMinSize(Context context, SelectionSpec spec, Uri uri) { + public static boolean isLargerThanMinSize(Context context, SelectionSpec spec, Uri uri) { if (context == null) { return false; } @@ -137,7 +137,7 @@ public static boolean isLongerThanMinSize(Context context, SelectionSpec spec, U return p.x >= spec.getMinWidthPixels() && p.y >= spec.getMinHeightPixels(); } - public static boolean isShorterThanMaxSize(Context context, SelectionSpec spec, Uri uri) { + public static boolean isSmallerThanMaxSize(Context context, SelectionSpec spec, Uri uri) { if (context == null) { return false; }