From 8e77b7bac3e61012b20d20d11bc331c63cef988b Mon Sep 17 00:00:00 2001 From: Jesse Li Date: Tue, 17 Apr 2018 13:19:16 -0400 Subject: [PATCH 01/23] Add support exifinterface lib --- ucrop/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/ucrop/build.gradle b/ucrop/build.gradle index da52e52e8..6b4977f43 100644 --- a/ucrop/build.gradle +++ b/ucrop/build.gradle @@ -37,5 +37,6 @@ android { dependencies { implementation 'com.android.support:appcompat-v7:27.1.0' + implementation 'com.android.support:exifinterface:27.1.0' implementation 'com.squareup.okhttp3:okhttp:3.8.1' } From 8dd1e9c7a3f1a0e84dca54d0575a10d194068785 Mon Sep 17 00:00:00 2001 From: Jesse Li Date: Tue, 17 Apr 2018 13:20:50 -0400 Subject: [PATCH 02/23] Use support ExifInterface --- .../java/com/yalantis/ucrop/task/BitmapCropTask.java | 2 +- .../java/com/yalantis/ucrop/util/BitmapLoadUtils.java | 2 +- .../com/yalantis/ucrop/util/ImageHeaderParser.java | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java index 1a10b8604..3cf3f33d3 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java @@ -3,7 +3,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.RectF; -import android.media.ExifInterface; +import android.support.media.ExifInterface; import android.net.Uri; import android.os.AsyncTask; import android.support.annotation.NonNull; diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java b/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java index b277cb801..c64f5f96e 100755 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java @@ -6,7 +6,7 @@ import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Point; -import android.media.ExifInterface; +import android.support.media.ExifInterface; import android.net.Uri; import android.os.Build; import android.support.annotation.NonNull; diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/ImageHeaderParser.java b/ucrop/src/main/java/com/yalantis/ucrop/util/ImageHeaderParser.java index 3707bfe91..3c20d6a20 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/ImageHeaderParser.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/ImageHeaderParser.java @@ -30,7 +30,7 @@ package com.yalantis.ucrop.util; -import android.media.ExifInterface; +import android.support.media.ExifInterface; import android.text.TextUtils; import android.util.Log; @@ -377,7 +377,7 @@ public int read(byte[] buffer, int byteCount) throws IOException { public static void copyExif(ExifInterface originalExif, int width, int height, String imageOutputPath) { String[] attributes = new String[]{ - ExifInterface.TAG_APERTURE, + ExifInterface.TAG_F_NUMBER, ExifInterface.TAG_DATETIME, ExifInterface.TAG_DATETIME_DIGITIZED, ExifInterface.TAG_EXPOSURE_TIME, @@ -392,12 +392,12 @@ public static void copyExif(ExifInterface originalExif, int width, int height, S ExifInterface.TAG_GPS_LONGITUDE_REF, ExifInterface.TAG_GPS_PROCESSING_METHOD, ExifInterface.TAG_GPS_TIMESTAMP, - ExifInterface.TAG_ISO, + ExifInterface.TAG_ISO_SPEED_RATINGS, ExifInterface.TAG_MAKE, ExifInterface.TAG_MODEL, ExifInterface.TAG_SUBSEC_TIME, - ExifInterface.TAG_SUBSEC_TIME_DIG, - ExifInterface.TAG_SUBSEC_TIME_ORIG, + ExifInterface.TAG_SUBSEC_TIME_DIGITIZED, + ExifInterface.TAG_SUBSEC_TIME_ORIGINAL, ExifInterface.TAG_WHITE_BALANCE }; From 7bf45fab0589f5576603693ca9d705202cb51dd8 Mon Sep 17 00:00:00 2001 From: Jesse Li Date: Tue, 17 Apr 2018 13:21:24 -0400 Subject: [PATCH 03/23] Update deprecated tag --- .../main/java/com/yalantis/ucrop/util/ImageHeaderParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/ImageHeaderParser.java b/ucrop/src/main/java/com/yalantis/ucrop/util/ImageHeaderParser.java index 3c20d6a20..d3283cffe 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/ImageHeaderParser.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/ImageHeaderParser.java @@ -392,7 +392,7 @@ public static void copyExif(ExifInterface originalExif, int width, int height, S ExifInterface.TAG_GPS_LONGITUDE_REF, ExifInterface.TAG_GPS_PROCESSING_METHOD, ExifInterface.TAG_GPS_TIMESTAMP, - ExifInterface.TAG_ISO_SPEED_RATINGS, + ExifInterface.TAG_PHOTOGRAPHIC_SENSITIVITY, ExifInterface.TAG_MAKE, ExifInterface.TAG_MODEL, ExifInterface.TAG_SUBSEC_TIME, From 1338d811cd86c2d955afca29ebd62b30865020d2 Mon Sep 17 00:00:00 2001 From: Jesse Li Date: Tue, 17 Apr 2018 13:21:53 -0400 Subject: [PATCH 04/23] Optimize imports --- .../src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java | 2 +- .../src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java index 3cf3f33d3..dc866cbb5 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java @@ -3,11 +3,11 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.RectF; -import android.support.media.ExifInterface; import android.net.Uri; import android.os.AsyncTask; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.media.ExifInterface; import android.util.Log; import com.yalantis.ucrop.callback.BitmapCropCallback; diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java b/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java index c64f5f96e..f90befe43 100755 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java @@ -6,11 +6,10 @@ import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Point; -import android.support.media.ExifInterface; import android.net.Uri; -import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.media.ExifInterface; import android.util.Log; import android.view.Display; import android.view.WindowManager; From 91bf702812fa69a9e70ac5886eba675fc6f21a84 Mon Sep 17 00:00:00 2001 From: beigirad Date: Tue, 19 Mar 2019 23:25:07 +0330 Subject: [PATCH 05/23] compatibled for using in fragment --- .../src/main/java/com/yalantis/ucrop/UCropFragment.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java index 2e64450c4..ef29f137a 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java @@ -95,12 +95,13 @@ public static UCropFragment newInstance(Bundle uCrop) { @Override public void onAttach(Context context) { super.onAttach(context); - try { + if (getParentFragment() instanceof UCropFragmentCallback) + callback = (UCropFragmentCallback) getParentFragment(); + else if (context instanceof UCropFragmentCallback) callback = (UCropFragmentCallback) context; - } catch (ClassCastException e) { - throw new ClassCastException(context.toString() + else + throw new IllegalArgumentException(context.toString() + " must implement UCropFragmentCallback"); - } } public void setCallback(UCropFragmentCallback callback) { From 239190c79f5cdccea220b8784169ef538a4841d5 Mon Sep 17 00:00:00 2001 From: kirill Date: Mon, 25 Mar 2019 10:39:38 +0200 Subject: [PATCH 06/23] Fixed crash in UCrop.getOutputCropAspectRatio(data) --- ucrop/src/main/java/com/yalantis/ucrop/UCrop.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java index d6cd45a10..e0e9e13c3 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java @@ -237,7 +237,7 @@ public static int getOutputImageHeight(@NonNull Intent intent) { * @return aspect ratio as a floating point value (x:y) - so it will be 1 for 1:1 or 4/3 for 4:3 */ public static float getOutputCropAspectRatio(@NonNull Intent intent) { - return intent.getParcelableExtra(EXTRA_OUTPUT_CROP_ASPECT_RATIO); + return intent.getFloatExtra(EXTRA_OUTPUT_CROP_ASPECT_RATIO, 0f); } /** From 336127ecfea2b387e20e08f0900e0f929a5626c6 Mon Sep 17 00:00:00 2001 From: kirill Date: Mon, 25 Mar 2019 11:26:08 +0200 Subject: [PATCH 07/23] branch init --- ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java index 3de4ef54f..b41a51566 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java @@ -90,7 +90,6 @@ protected Throwable doInBackground(Void... params) { return new NullPointerException("CurrentImageRect is empty"); } - try { crop(); mViewBitmap = null; @@ -101,7 +100,6 @@ protected Throwable doInBackground(Void... params) { return null; } - private boolean crop() throws IOException { // Downsize if needed if (mMaxResultImageSizeX > 0 && mMaxResultImageSizeY > 0) { From ffe7b490cb690ff5782e3e5d7c589ce3301788b9 Mon Sep 17 00:00:00 2001 From: kirill Date: Mon, 25 Mar 2019 11:34:14 +0200 Subject: [PATCH 08/23] Fixed crash in UCrop.getOutputCropAspectRatio(data) for native variant --- ucrop/src/main/java/com/yalantis/ucrop/UCrop.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java index d6cd45a10..e0e9e13c3 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java @@ -237,7 +237,7 @@ public static int getOutputImageHeight(@NonNull Intent intent) { * @return aspect ratio as a floating point value (x:y) - so it will be 1 for 1:1 or 4/3 for 4:3 */ public static float getOutputCropAspectRatio(@NonNull Intent intent) { - return intent.getParcelableExtra(EXTRA_OUTPUT_CROP_ASPECT_RATIO); + return intent.getFloatExtra(EXTRA_OUTPUT_CROP_ASPECT_RATIO, 0f); } /** From 57fb8238bbaffadbede387d0549737afb765f410 Mon Sep 17 00:00:00 2001 From: kirill Date: Tue, 26 Mar 2019 18:29:22 +0200 Subject: [PATCH 09/23] Added support of ucrop fragment inside fragment --- .../src/main/java/com/yalantis/ucrop/UCropFragment.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java index 2e64450c4..ef29f137a 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java @@ -95,12 +95,13 @@ public static UCropFragment newInstance(Bundle uCrop) { @Override public void onAttach(Context context) { super.onAttach(context); - try { + if (getParentFragment() instanceof UCropFragmentCallback) + callback = (UCropFragmentCallback) getParentFragment(); + else if (context instanceof UCropFragmentCallback) callback = (UCropFragmentCallback) context; - } catch (ClassCastException e) { - throw new ClassCastException(context.toString() + else + throw new IllegalArgumentException(context.toString() + " must implement UCropFragmentCallback"); - } } public void setCallback(UCropFragmentCallback callback) { From 779b0845d1afd9ded5a872687ec2a694ace8f772 Mon Sep 17 00:00:00 2001 From: kirill Date: Thu, 28 Mar 2019 09:55:08 +0200 Subject: [PATCH 10/23] Bottom controls changed --- ucrop/build.gradle | 1 + .../main/java/com/yalantis/ucrop/UCrop.java | 1 + .../com/yalantis/ucrop/UCropActivity.java | 27 ++++++-- .../main/res/drawable-hdpi/ucrop_ic_crop.png | Bin 414 -> 0 bytes .../main/res/drawable-hdpi/ucrop_ic_cross.png | Bin 433 -> 0 bytes .../main/res/drawable-hdpi/ucrop_ic_next.png | Bin 461 -> 0 bytes .../main/res/drawable-hdpi/ucrop_ic_reset.png | Bin 980 -> 0 bytes .../res/drawable-hdpi/ucrop_ic_rotate.png | Bin 770 -> 0 bytes .../main/res/drawable-hdpi/ucrop_ic_scale.png | Bin 265 -> 0 bytes .../main/res/drawable-ldpi/ucrop_ic_crop.png | Bin 305 -> 0 bytes .../main/res/drawable-ldpi/ucrop_ic_cross.png | Bin 235 -> 0 bytes .../main/res/drawable-ldpi/ucrop_ic_next.png | Bin 244 -> 0 bytes .../main/res/drawable-ldpi/ucrop_ic_reset.png | Bin 455 -> 0 bytes .../res/drawable-ldpi/ucrop_ic_rotate.png | Bin 380 -> 0 bytes .../main/res/drawable-ldpi/ucrop_ic_scale.png | Bin 256 -> 0 bytes .../main/res/drawable-mdpi/ucrop_ic_crop.png | Bin 325 -> 0 bytes .../main/res/drawable-mdpi/ucrop_ic_cross.png | Bin 301 -> 0 bytes .../main/res/drawable-mdpi/ucrop_ic_next.png | Bin 303 -> 0 bytes .../main/res/drawable-mdpi/ucrop_ic_reset.png | Bin 556 -> 0 bytes .../res/drawable-mdpi/ucrop_ic_rotate.png | Bin 506 -> 0 bytes .../main/res/drawable-mdpi/ucrop_ic_scale.png | Bin 197 -> 0 bytes .../main/res/drawable-xhdpi/ucrop_ic_crop.png | Bin 601 -> 0 bytes .../res/drawable-xhdpi/ucrop_ic_cross.png | Bin 555 -> 0 bytes .../main/res/drawable-xhdpi/ucrop_ic_next.png | Bin 555 -> 0 bytes .../res/drawable-xhdpi/ucrop_ic_reset.png | Bin 1295 -> 0 bytes .../res/drawable-xhdpi/ucrop_ic_rotate.png | Bin 1011 -> 0 bytes .../res/drawable-xhdpi/ucrop_ic_scale.png | Bin 267 -> 0 bytes .../res/drawable-xxhdpi/ucrop_ic_crop.png | Bin 827 -> 0 bytes .../res/drawable-xxhdpi/ucrop_ic_cross.png | Bin 811 -> 0 bytes .../res/drawable-xxhdpi/ucrop_ic_next.png | Bin 840 -> 0 bytes .../res/drawable-xxhdpi/ucrop_ic_reset.png | Bin 2095 -> 0 bytes .../res/drawable-xxhdpi/ucrop_ic_rotate.png | Bin 1544 -> 0 bytes .../res/drawable-xxhdpi/ucrop_ic_scale.png | Bin 352 -> 0 bytes .../res/drawable-xxxhdpi/ucrop_ic_crop.png | Bin 1175 -> 0 bytes .../res/drawable-xxxhdpi/ucrop_ic_cross.png | Bin 1042 -> 0 bytes .../res/drawable-xxxhdpi/ucrop_ic_next.png | Bin 1065 -> 0 bytes .../res/drawable-xxxhdpi/ucrop_ic_reset.png | Bin 3029 -> 0 bytes .../res/drawable-xxxhdpi/ucrop_ic_rotate.png | Bin 2110 -> 0 bytes .../res/drawable-xxxhdpi/ucrop_ic_scale.png | Bin 443 -> 0 bytes ucrop/src/main/res/drawable/ucrop_crop.xml | 7 ++ ucrop/src/main/res/drawable/ucrop_ic_crop.xml | 10 +++ .../res/drawable/ucrop_ic_crop_unselected.xml | 11 ++++ .../src/main/res/drawable/ucrop_ic_cross.xml | 10 +++ ucrop/src/main/res/drawable/ucrop_ic_next.xml | 10 +++ .../src/main/res/drawable/ucrop_ic_reset.xml | 10 +++ .../src/main/res/drawable/ucrop_ic_rotate.xml | 10 +++ .../drawable/ucrop_ic_rotate_unselected.xml | 11 ++++ .../src/main/res/drawable/ucrop_ic_scale.xml | 10 +++ .../drawable/ucrop_ic_scale_unselected.xml | 11 ++++ ucrop/src/main/res/drawable/ucrop_rotate.xml | 7 ++ ucrop/src/main/res/drawable/ucrop_scale.xml | 7 ++ .../ucrop_wrapper_controls_selector.xml | 11 ++++ .../res/layout/ucrop_activity_photobox.xml | 3 +- ucrop/src/main/res/layout/ucrop_controls.xml | 61 ++++++++++++------ .../res/layout/ucrop_layout_rotate_wheel.xml | 24 +++---- ucrop/src/main/res/values/colors.xml | 7 +- ucrop/src/main/res/values/strings.xml | 3 + ucrop/src/main/res/values/styles.xml | 12 ++++ 58 files changed, 223 insertions(+), 41 deletions(-) delete mode 100644 ucrop/src/main/res/drawable-hdpi/ucrop_ic_crop.png delete mode 100644 ucrop/src/main/res/drawable-hdpi/ucrop_ic_cross.png delete mode 100644 ucrop/src/main/res/drawable-hdpi/ucrop_ic_next.png delete mode 100644 ucrop/src/main/res/drawable-hdpi/ucrop_ic_reset.png delete mode 100644 ucrop/src/main/res/drawable-hdpi/ucrop_ic_rotate.png delete mode 100644 ucrop/src/main/res/drawable-hdpi/ucrop_ic_scale.png delete mode 100644 ucrop/src/main/res/drawable-ldpi/ucrop_ic_crop.png delete mode 100644 ucrop/src/main/res/drawable-ldpi/ucrop_ic_cross.png delete mode 100644 ucrop/src/main/res/drawable-ldpi/ucrop_ic_next.png delete mode 100644 ucrop/src/main/res/drawable-ldpi/ucrop_ic_reset.png delete mode 100644 ucrop/src/main/res/drawable-ldpi/ucrop_ic_rotate.png delete mode 100644 ucrop/src/main/res/drawable-ldpi/ucrop_ic_scale.png delete mode 100644 ucrop/src/main/res/drawable-mdpi/ucrop_ic_crop.png delete mode 100644 ucrop/src/main/res/drawable-mdpi/ucrop_ic_cross.png delete mode 100644 ucrop/src/main/res/drawable-mdpi/ucrop_ic_next.png delete mode 100644 ucrop/src/main/res/drawable-mdpi/ucrop_ic_reset.png delete mode 100644 ucrop/src/main/res/drawable-mdpi/ucrop_ic_rotate.png delete mode 100644 ucrop/src/main/res/drawable-mdpi/ucrop_ic_scale.png delete mode 100644 ucrop/src/main/res/drawable-xhdpi/ucrop_ic_crop.png delete mode 100644 ucrop/src/main/res/drawable-xhdpi/ucrop_ic_cross.png delete mode 100644 ucrop/src/main/res/drawable-xhdpi/ucrop_ic_next.png delete mode 100644 ucrop/src/main/res/drawable-xhdpi/ucrop_ic_reset.png delete mode 100644 ucrop/src/main/res/drawable-xhdpi/ucrop_ic_rotate.png delete mode 100644 ucrop/src/main/res/drawable-xhdpi/ucrop_ic_scale.png delete mode 100644 ucrop/src/main/res/drawable-xxhdpi/ucrop_ic_crop.png delete mode 100644 ucrop/src/main/res/drawable-xxhdpi/ucrop_ic_cross.png delete mode 100644 ucrop/src/main/res/drawable-xxhdpi/ucrop_ic_next.png delete mode 100644 ucrop/src/main/res/drawable-xxhdpi/ucrop_ic_reset.png delete mode 100644 ucrop/src/main/res/drawable-xxhdpi/ucrop_ic_rotate.png delete mode 100644 ucrop/src/main/res/drawable-xxhdpi/ucrop_ic_scale.png delete mode 100644 ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_crop.png delete mode 100644 ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_cross.png delete mode 100644 ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_next.png delete mode 100644 ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_reset.png delete mode 100644 ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_rotate.png delete mode 100644 ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_scale.png create mode 100644 ucrop/src/main/res/drawable/ucrop_crop.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_ic_crop.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_ic_crop_unselected.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_ic_cross.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_ic_next.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_ic_reset.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_ic_rotate.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_ic_rotate_unselected.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_ic_scale.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_ic_scale_unselected.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_rotate.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_scale.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_wrapper_controls_selector.xml diff --git a/ucrop/build.gradle b/ucrop/build.gradle index 6b4977f43..2c14768c1 100644 --- a/ucrop/build.gradle +++ b/ucrop/build.gradle @@ -37,6 +37,7 @@ android { dependencies { implementation 'com.android.support:appcompat-v7:27.1.0' + implementation 'com.android.support:design:27.1.0' implementation 'com.android.support:exifinterface:27.1.0' implementation 'com.squareup.okhttp3:okhttp:3.8.1' } diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java index d6cd45a10..af7aae85c 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java @@ -283,6 +283,7 @@ public static class Options { public static final String EXTRA_TOOL_BAR_COLOR = EXTRA_PREFIX + ".ToolbarColor"; public static final String EXTRA_STATUS_BAR_COLOR = EXTRA_PREFIX + ".StatusBarColor"; public static final String EXTRA_UCROP_COLOR_WIDGET_ACTIVE = EXTRA_PREFIX + ".UcropColorWidgetActive"; + public static final String EXTRA_UCROP_COLOR_CONTROLS_WIDGET_ACTIVE = EXTRA_PREFIX + ".UcropColorControlsWidgetActive"; public static final String EXTRA_UCROP_WIDGET_COLOR_TOOLBAR = EXTRA_PREFIX + ".UcropToolbarWidgetColor"; public static final String EXTRA_UCROP_TITLE_TEXT_TOOLBAR = EXTRA_PREFIX + ".UcropToolbarTitleText"; diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java index 36b8b85f7..a6d52399a 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java @@ -14,6 +14,9 @@ import android.support.annotation.IdRes; import android.support.annotation.IntDef; import android.support.annotation.NonNull; +import android.support.transition.AutoTransition; +import android.support.transition.Transition; +import android.support.transition.TransitionManager; import android.support.v4.content.ContextCompat; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; @@ -72,7 +75,7 @@ public class UCropActivity extends AppCompatActivity { } private static final String TAG = "UCropActivity"; - + private static final long CONTROLS_ANIMATION_DURATION = 100; private static final int TABS_COUNT = 3; private static final int SCALE_WIDGET_SENSITIVITY_COEFFICIENT = 15000; private static final int ROTATE_WIDGET_SENSITIVITY_COEFFICIENT = 42; @@ -83,6 +86,7 @@ public class UCropActivity extends AppCompatActivity { private int mToolbarColor; private int mStatusBarColor; private int mActiveWidgetColor; + private int mActiveControlsWidgetColor; private int mToolbarWidgetColor; @ColorInt private int mRootViewBackgroundColor; @@ -104,6 +108,8 @@ public class UCropActivity extends AppCompatActivity { private TextView mTextViewRotateAngle, mTextViewScalePercent; private View mBlockingView; + private Transition mControlsTransition; + private Bitmap.CompressFormat mCompressFormat = DEFAULT_COMPRESS_FORMAT; private int mCompressQuality = DEFAULT_COMPRESS_QUALITY; private int[] mAllowedGestures = new int[]{SCALE, ROTATE, ALL}; @@ -272,7 +278,9 @@ private void processOptions(@NonNull Intent intent) { private void setupViews(@NonNull Intent intent) { mStatusBarColor = intent.getIntExtra(UCrop.Options.EXTRA_STATUS_BAR_COLOR, ContextCompat.getColor(this, R.color.ucrop_color_statusbar)); mToolbarColor = intent.getIntExtra(UCrop.Options.EXTRA_TOOL_BAR_COLOR, ContextCompat.getColor(this, R.color.ucrop_color_toolbar)); - mActiveWidgetColor = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_COLOR_WIDGET_ACTIVE, ContextCompat.getColor(this, R.color.ucrop_color_widget_active)); + mActiveWidgetColor = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_COLOR_WIDGET_ACTIVE, ContextCompat.getColor(this, R.color.ucrop_color_widget_rotate_mid_line)); + mActiveControlsWidgetColor = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_COLOR_CONTROLS_WIDGET_ACTIVE, ContextCompat.getColor(this, R.color.ucrop_color_widget_active)); + mToolbarWidgetColor = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_WIDGET_COLOR_TOOLBAR, ContextCompat.getColor(this, R.color.ucrop_color_toolbar_widget)); mToolbarCancelDrawable = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_WIDGET_CANCEL_DRAWABLE, R.drawable.ucrop_ic_cross); mToolbarCropDrawable = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_WIDGET_CROP_DRAWABLE, R.drawable.ucrop_ic_done); @@ -289,6 +297,9 @@ private void setupViews(@NonNull Intent intent) { ViewGroup photoBox = findViewById(R.id.ucrop_photobox); View.inflate(this, R.layout.ucrop_controls, photoBox); + mControlsTransition = new AutoTransition(); + mControlsTransition.setDuration(CONTROLS_ANIMATION_DURATION); + mWrapperStateAspectRatio = findViewById(R.id.state_aspect_ratio); mWrapperStateAspectRatio.setOnClickListener(mStateClickListener); mWrapperStateRotate = findViewById(R.id.state_rotate); @@ -382,9 +393,9 @@ private void setupStatesWrapper() { ImageView stateRotateImageView = findViewById(R.id.image_view_state_rotate); ImageView stateAspectRatioImageView = findViewById(R.id.image_view_state_aspect_ratio); - stateScaleImageView.setImageDrawable(new SelectedStateListDrawable(stateScaleImageView.getDrawable(), mActiveWidgetColor)); - stateRotateImageView.setImageDrawable(new SelectedStateListDrawable(stateRotateImageView.getDrawable(), mActiveWidgetColor)); - stateAspectRatioImageView.setImageDrawable(new SelectedStateListDrawable(stateAspectRatioImageView.getDrawable(), mActiveWidgetColor)); + stateScaleImageView.setImageDrawable(new SelectedStateListDrawable(stateScaleImageView.getDrawable(), mActiveControlsWidgetColor)); + stateRotateImageView.setImageDrawable(new SelectedStateListDrawable(stateRotateImageView.getDrawable(), mActiveControlsWidgetColor)); + stateAspectRatioImageView.setImageDrawable(new SelectedStateListDrawable(stateAspectRatioImageView.getDrawable(), mActiveControlsWidgetColor)); } @@ -576,6 +587,12 @@ private void setWidgetState(@IdRes int stateViewId) { mLayoutRotate.setVisibility(stateViewId == R.id.state_rotate ? View.VISIBLE : View.GONE); mLayoutScale.setVisibility(stateViewId == R.id.state_scale ? View.VISIBLE : View.GONE); + TransitionManager.beginDelayedTransition((ViewGroup) findViewById(R.id.ucrop_photobox), mControlsTransition); + + mWrapperStateScale.findViewById(R.id.text_view_scale).setVisibility(stateViewId == R.id.state_scale ? View.VISIBLE : View.GONE); + mWrapperStateAspectRatio.findViewById(R.id.text_view_crop).setVisibility(stateViewId == R.id.state_aspect_ratio ? View.VISIBLE : View.GONE); + mWrapperStateRotate.findViewById(R.id.text_view_rotate).setVisibility(stateViewId == R.id.state_rotate ? View.VISIBLE : View.GONE); + if (stateViewId == R.id.state_scale) { setAllowedGestures(0); } else if (stateViewId == R.id.state_rotate) { diff --git a/ucrop/src/main/res/drawable-hdpi/ucrop_ic_crop.png b/ucrop/src/main/res/drawable-hdpi/ucrop_ic_crop.png deleted file mode 100644 index a12fdfc7ca270c1b268bc0613d5e84b73206a387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414 zcmV;P0b%}$P)Px$SV=@dR7ef&mOT$aF%*VrkNqU53oWhQ`mRTBZTi@`FG2N%yKJhT&||U~bGNW^{xJl=ngUUe){rOz2*L2py>J zXyC1a@HY2h1vM50yiou`doU_0cnyG@BcWXqpNa-v0bqlY9R<8l&@=iSk`f9Io&zA6 z6537xV!Z07*qo IM6N<$g5Px$Ye_^wR5%fxlRYm4Q51&9vVw?+_;DJIMy1iH6e^91g2EOQGzyJGp-?Ck5{2kB zeuan-0X0MaHdC$G~Jp8J68grv1(oq#mZ0Q?lueJ`DBTsHviju+9r z17*97ARUmL^vL0(aK3;ZM0DTLe9Z~80yRKx2|YScwypEvoJs$fN4Wg<00000NkvXXu0mjf1Kh*9 diff --git a/ucrop/src/main/res/drawable-hdpi/ucrop_ic_next.png b/ucrop/src/main/res/drawable-hdpi/ucrop_ic_next.png deleted file mode 100644 index d1b1cddb7306f944b98ff31789ecf436d448ac34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$uHP)Px$he@}kO-ygcWzESn@8t7ms7tvXP!C#|G9Hto?EFHBhT}0IDkW#G|K#Km~Vqdi(=gG zVo+dQg$JEPzK0Qm)Zc>f6g+~)Ek(`mWKdu{1J62%d;>!UslNr|1$Y6CD~f)D-V|YbT8-f-$i}K64{syQEuz9u zc5-&i#&8avbiz+PpXL@(VJe$xxO2Px&j!8s8R9Fekmpf|}K^TT}Aw?vG2pSAZ5JANYq5%uB*usDy7FJg2{09nwh+vb# zUJL(2e#8N53qcSBBN&W##T$y6=<~$=4wKF9IlIRdeBnJiJM&#$X12#n^ z`zYhDpuUPqVGeUSX6{X}xZ==rn-(!i#}laY2Y3qhLn=m5&QuZRGN!pV75HpEu*S3M zoY}|N)7rtZ41qosR~P1t{AwARNjfI%Xn+&g#_lv|Q!%D8X9$`Zu_wWB z(yr6|fss=k@Lch%YJxPU!UkS4mnD|T;{FH?_!#bib+Kj1oTa8kor;NNIzyb#P*IQI z6s&^`BYo7+U9l$HzDx|UHjwfA1)AU?^n~vRzb>`!ZhIX(lV;ln!tX2%Ysq*I z;7-^Jr3Yi3tD}yXNPLdQH>jxluzc&O@D@Za)oDEb`)5T`}Q%k%mWuzUQMef0`qf*4$e#PR|O|d8sfu&AXzUsiw$q zxB-oy!W`x@XK}1+HZ^)41VUA3Wa)J%w}ItnU-sy>#_AnpjaY1Jn#LtCJ&KCzpOW6at!gY6brbg}yk zxCT94{nE>zJ8vSV?F>4mjkfwoV;HLyxGg;^;_!?lb)Nd@Te-Cv8yHUYEc8!-mtlM* zq{8fTOdD+*El>J!gl}Vv;$fXk<({iNJPx%yh%hsR7efgmfMR>aTLdA+;U5~6^1C~$>e3qtx!|r$%9)-JWx_f9;SKFOdgac zl*=E16vmA3qDfJj2ZV$)F>d7=4U_xlJ6XGRmOcBNv(Guos?YhY-}SOd#p7R-dP@E-c17kZ!z2B9JuMf6U13cpI^1Aa$fI^>dOq8>u21*6|bVt1EY zc@F{KhbgLQybo9465Iy;%UIa@XBe9ZUY7Ze>Bmqk$hV!?*TV#JbnQs=6`1!F~m5l_x1}o;42jl-oWuBx#9vB_wZ7VFfyT}%O+YPC99sx4bd*a4c+M05~n zx~;fQl*VMVa%BoB-h%RLpXdUu?;&a9*9xoE?LsG3H6&gvF8ZW;0&O0?_+jsmQ(s4% zKjVMW|Lan*38OD8{Q%@WleZJAsr5OJ(@&K{SiPfk?d7vmz0-}8FzbQ!?|iPzGhWL} zFW(19*BN^dvOcPx#!%0LzR7ef&Rof1LAPBYAhufEzv}D9Uag*_2ZZ70@Px#>q$gGR45gtkWCH&K@f$<&&C1l9KjjHC0sy)tw=<|LI?>9E+FpU01_(~-~twI z;rDx!=}FBDBY4R-UG=KErn_@qR1eYuY@>D}>)_O~3H!6rqh$f-c&q+Ai<>4N5UWQ6 zd|mlERJfbm`EFHR1AJxpPJ>uWANH_Q5=cEwD4IM7ql+fnVX7`cr#XV^q4Ht$I+$a( zp#>!^mb!giclpi20x!m23k`+)^USS#q&6S0WU~u-doyk>Po-q& ho_$iajPW0CGsKqu`mkL((I4nw22WQ%mvv4FO#sURS)~8~ diff --git a/ucrop/src/main/res/drawable-ldpi/ucrop_ic_next.png b/ucrop/src/main/res/drawable-ldpi/ucrop_ic_next.png deleted file mode 100644 index 732e9a78021601cdc34efd1b58cca0f095db1545..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp@K+MCz1|)ZGH@^v_7>k44ofy`glX(f`tn+kn4ABtn zy|j_5DL~{{VJnw%hf_-xQ+4Y+#ez(aBh%(BU)r8gT2P>|Xz9w8$2qmv|Ci?Fl`qo& zv#07@xx>1uc@f8EF#Ab#ZqpO=`*29qd9G0CAf>+dDnKi+;+)3*8O@Wg0?TEyeNm8TutF3A1l rO`hI3XMyc2?mPdun%qSu$ZuuMYwDWE;j{b&(B%xCu6{1-oD!MPx$fk{L`R5%f>lsifTQ4~NEQFH@h6a2K=*u+wZRyKYcK`d<49Rye465N2;DPk#z z3$PZnvPmO0;t#CiIm3J7n@_;P3y1rEGjrcfnvHsC5^h5WTA`$ezJ)vJhghzLa_iUF z#C(8jSb*<6JM6ld>{0s;i#7!*4BJ;ruirf>-%f1Y$9RMB5GY)~ zv2-EF@Z+9@`huFrb0jWrVIgDHzx+fz%vJC(pW-X03yPbGF>}^fYfmQG)kP<0Kl2zS x;0EH3d9%y#3`gKC=2CZ%N#kwkz@PruegKY#PSq%yrg8uP002ovPDHLkV1kkB$DRNH diff --git a/ucrop/src/main/res/drawable-ldpi/ucrop_ic_rotate.png b/ucrop/src/main/res/drawable-ldpi/ucrop_ic_rotate.png deleted file mode 100644 index d812eada9cb4ae213c7b9c4e767b4e944624e3fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmV-?0fYXDP)Px$Hc3Q5R45gdl1nQ_Q51$ZxeSy`iUAXev4P|-7)VjRUtnh7ANUFWfecJc%$O(?*~`peqnX<;53%bA}KM_vVe z@&aKj21l&FH9Eyw^rhw};;^Jyp~pj|Hv`+zzIB45p`nfPsS1(Kf*55rDV>!NKOBwp7eGTb1^obrD>A-j-eqL zdfD881%FYGP&q{(@d8+XfMKYT=Qson@(TNK6=QQ}FaVkIZQkQLczrhbGi-tRdMK=> aJm(h(B~D)ZycH|}0000Px#x=BPqR45gtk&6w3FbqUP)j_gJJxVue*rcPtCfOu?hhiymQ33U&!=KzaA5u!G z?a=6rFp4kTy(?DY(sPA6hNb5#ae)y=L$57Qfv>$^ zC4qQ|Xx7xzkXXl#M}5<)(2+@=UJwm#r;|BSizAF8YT5@Px#|4BqaR5%gMle-E6F%U)9H$D-u^K)$cR3BJqEm#Pmg&^4YAC@Y5uVj`n*+4dH z;lOp0%*@H`teYgRy>LXe+>rOAiO33?RJ|$T0baa@#=ep~9kv14Laf<9?9{PPU>B7; zi1~!3Bf4XwB|v?awSF2Hq3rZyCHxXl#Cj;cX+Q%TE$Og>^O~g*_E$)9f|`+JUZQP? z%>`n7X?!$r0KnNm7Vz~Vz&?sk1~7-`e^+LoyF(8AXkaq~gNp-lW_yTTOd6iVHa!=C@H5N0NaEt9_8|vFy*%<4hqL*q{Xg&x XLTy*-2Ix#i00000NkvXXu0mjftQ3jQ diff --git a/ucrop/src/main/res/drawable-mdpi/ucrop_ic_cross.png b/ucrop/src/main/res/drawable-mdpi/ucrop_ic_cross.png deleted file mode 100644 index a2da5b9605c244be8dc3f7b6b82839bbea48b68e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 301 zcmV+|0n+}7P)Px#=Sf6CR45gNkU-;6uG znK68IdiTz~$2{Y`qU<@^-k-43fIx}|GZkb9tvr`mEKvs%t1t&;1AbcOSwd1D?oiZV z3CbFx0aMiwUhi|pGn4BKR-ouq|68)FvDgH?QCUF#n@qBkWgoU+k(|69%LNmh^GW@1 z`WyA#>9eJN8Qkj~=#?o{vIb8Wq$TwoID#^Pazf@oMzRHFT{wX5sC@n8CfUi}0Im|=LL`sUuP5g^00000NkvXXu0mjfYpHuI diff --git a/ucrop/src/main/res/drawable-mdpi/ucrop_ic_next.png b/ucrop/src/main/res/drawable-mdpi/ucrop_ic_next.png deleted file mode 100644 index 8f972bb0b0e6ffc11b7fd6db031b1d2d613176a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmV+~0nq-5P)Px#=}AOER5%fxlg$bNQ5c42upsgqHU5eVa1+YXecDns%7R#k!h%F8dl z&3NmXbNbHvo;l5Y$MXz@VK{*mR1KTGM0g3(0V=lJu}ZK8Cy;hfbXe^&!2m8GZ6I$a z9IFHya06)#IfvCQ6KumBqy=Q{gkzOp2Oc2JAtS5LWW+ddfRvk z2I`GZlkJ(uyNCpm@ZIjESSOH~4HBTcG6nPRy#PpTPx$=1D|BR7efAmAy*?K@i0gKfuCTA*~Q=^}nzc3$GVDo6{m`ZNwr9Vk6jCD2U`w z(OPRwEu<4g-|yH7dw08ciEL8McA)IOwyDwBF zjs{x9pxxSYgD!&zSS|r)Vx2e=XyK1`R&fSgqAFa711c0ZuvFDlujsI{+0@yD0k-~E#5|Ok0?_Z`gCZI^XLA;98CPZxblnSc3 u43l$e6M+^VE(|N^IQvNLtN0|6IEr7Cp^zLaCOl*S0000Px$v`IukR5%fxlS?Z_Q546ISGfui%7hX51Tr8a8JGwoiIM?IDMLPii87)*GEz)D zN=l}rD3lnuSES_aDg)*9`yXd(ySeuq=U>15SZnRI_c?oQ$N5_sn44i1P9P3XunY6h z3h59?jYJ*6rw>v59q>y!iLDVP(@^3W@9CFd88#sXMUW2#&;k*VPr16`N5hQFscsne zK;nibxQT&&g^6Ebtgm_jR}Hiupa40_z)!gZY=cRv{#lFka}Pm=TPO!Vl@c%o?_ei< z&_W&G7<*;#Q5yaUFl+2y2XZDor^+HrhJdOg?f~qBS6aL885cGAr*vrp@CZtL3C^`Q z8Pz1DRAw`9mPunuL$@4ODl^q!m2TMmZu%glLRd6*f|6c9F$9(FU=OtR4)nfVwb7bWZZR(WHm7W}@veed*Pj?YW;vsb z^@5VA9>)%tWJ>H-i=L5@4C7$$bj*AWVxZVcsDWxQnrF}nZ^n?=cVSQ|ncb81dJsbp ws4{X0?1OcPgOaN7&tU@wAp)VL4TP`00JrRbxCH?eL;wH)07*qoM6N<$f->FJ6aWAK diff --git a/ucrop/src/main/res/drawable-mdpi/ucrop_ic_scale.png b/ucrop/src/main/res/drawable-mdpi/ucrop_ic_scale.png deleted file mode 100644 index ac363b773e6af9c3f35fb84fad39537e0b1b6120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1IgdQTU}5DUS# zlOJ*&P~d3Ee)BiJa`qv|gL6+#`Wt1C)%CpGbMMwN+xbzkDk*0bx#HS;8SaYshTSPW z#p!=Z?ud%3^W@F`9F2yhZUr}13UA({C1Y}E@#`tk|5y)u`>W=jlKB5_OKkgIkqHX~ v{{>h7oFe&f+Sekd#hvfGE}oiIbV%Bck=x)LPx%6G=otR9Fe^mdQ#3K@>&fh;E#~g}VqMh#&}p3qeG1A?U(|3pf6jzvIqX&@T`X z98hsU#R2tPvBOKnq$}y9%0(_*x?Wks>Gxt+<#OrzWXPBCVEU9yBZis1iSyV?Apu7q zI>k!J3C`nGg#sLfdhE zzzywrd~Es(P5Txx+RCKLT~;xm?4BxjS*gSt9822Umb!$aou1y3-r|lsLcK_$AsY8d z;PG5%%m%h=cueyj;{F%+_)pEPG4=!7lG?V`&a7GiSJ~NxJEHGj0ImS??!X)p>#7zV za2bd<2SjiKxXtMgUgAXnk`H;3se@lQ9&rH|0MMzFfaxi?ew-*;26aq5V+*%WY~chM z1#p&)pRk47Bkself&sGDOr(_B1sMfXqJ)qBTP-kpCU!>c~rhda^72~(1uRtQTE53ZiKPIch nd^Q2IX1|%iW(KonAnW{Zu6{}==lPf700000NkvXXu0mjf#Z?y8 diff --git a/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_cross.png b/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_cross.png deleted file mode 100644 index 443430be6ca9441a87f425e7ddf919bfd3978e4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VG9P)Px$1lZSYSb#8dhrrp=DQ&Fc<C ziWAIa2F$%g0)Il|W;A@60c-wdJljWZJW?17Co#dG?-)}Tgq{PJ$o>J120AsMqCbZ$*s>nj1; tC=JsW!?YJ&SaVrhU^JM4_QANc&>vgK7ef1)vvU9d002ovPDHLkV1gGf_lN)h diff --git a/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_next.png b/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_next.png deleted file mode 100644 index 6cd8e2942b27b49dffdabe4f8bfa707870d8c3c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VG9P)Px$ikbyYC>tduYABSXM9oUcMz(hR zN482$6G}=V-yh?5Wa@Ui*W%pkol{TmJdG?Q?C0Xc+5QOJdjU|Mv9xq<5rQ&vo4y6XsY4cDcR3md_7-x1~tuG3UbAO;`~K#Tc8 z#B+jHyF>31E}JCDxx6Mp&bW3+Q-dnwDPc-=9GYqnplaF1VeO~k6Da`uUlb~pI>x15 zg2?xmp=spOEa!hHxvQRl221;hzQET~vH18cZ*U06E#9uf_--CWoJWED1KYLd8HrEh zJO*SZv8x#0&7+9(6nL`}&~JK1;?tPP>L^RJS+X###CP*3Vm1%#l~MXd&q#b4vt?kf zigIt7jqm1B#B3edCBKpM9=I^uwiD3H<3!$*J3fusjw8eqTzbzmn6(1?hbbHTaQwIY thoU2hEXT6fq+b}zqk}BOr=T}9!8gSWIeF7u+t&a9002ovPDHLkV1kMG{TToN diff --git a/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_reset.png b/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_reset.png deleted file mode 100644 index 15f8a7b2dfaa10150985fa89a0d04114e313e4f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1295 zcmV+q1@QWbP)Px($w@>(RA>d&n!RfkK@`RP2odoE5k$0*fDkaG5d8!4z<^>3u@FIQY;0_-(x|Xt zWkM{p5J3eoC~0cs;4t%M=H7c| zcjnH#mn>Pb$g#90{ax}iAnq3X#9nc|xJCqD#E;^%I3?Z}ABo?^1w*$Y9}vgIPvWmg zVuLL{@HKDXtsN3)#8}Z;IZ&;qje2Q1NKOm-m6KE=gL5;GRQznJ1=4KGFy%y4V zE?9%)aWi65h1UFbweJ_Z#HzsmkhoV&$Ktc!*l0_SQPV$g8k%_0S}5CWQ9E}S#@!QF zh-HD8%c8|(5^12pr&u%w!F^;#G-pY0)ZY`-ugyCeSLQC07Ej#J1dx%4rVEY1cx)OQ z#OauKNS$kHqb4qz#%*)qh#iIaC77MLyZ=CdGov&1n!C4J9Tgt0qXcAS# zn;x`TthSWu53VsA9Z{ZljtOu{M6jU_@%TcUO<=^FQ{HtQnQ6)!r0NK~=zI|5LUT-A z;&JEGJepgWR?TMCXtl;w5PC&4Ka}T0pXX`I%QouHMMJ&jAI&X%P|Z4eTdnaG*8Vl; z%Y0f{MLcTIX1>te!Z+2dV|A;wT!mD6!}&A6RmGzQZRQWnnc0HAvfz~FDxAg}H4wZC zSf)YLwS+<&)}9#UiD2~NjhRcRu1y@;u#?i~Cox=H@2rsx=c{cK*O5j;;&~(7R`0vO zOy;;)28U#152G!ORyoK*%O<^HS1RyB7aS4C#8_k=WM!`sMZ}xPRjND|?Fq8kk6LHJ zGV>}?<}w!}-t>_MpNM`EN363$+3)OTUFNXmifWEe(U5~O;>{gDkvtVG)(_PWTW3y* zCbL27EEN4hQ$@T5U8f4)Z%xp5)el-{pybVU{6f>MK{KK`O;itouYER#GQD9#Hla5D ze(*vxU!PTHpM;R8(Z-<>twH!SmGz~5NS5ZTtauB)L6w(He@uWUokrm=^%$}|{HvX4 zw$W!`3~vEauL?vT5&Hs;@Q((2U})>jZacoTj( z;g}Sgh@rHn<|yDJ5%K9C6fuci3)mBWV_P6jM~?XZ5>c?h)}OHEmsrHC9i&)tu?6xa zH^niL!>}RtiacFNy&=-a7=NquKJZP9IRys^Lj1MEizrja7d|^4QW{emxQ~#l$3_3U zYS9T`gDpNX?>6eoMO`!QQj`I4kGM@_$^7^K>>-T{kKbbuEk9UMI9UJy002ovPDHLk FV1j=5W~~4K diff --git a/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_rotate.png b/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_rotate.png deleted file mode 100644 index d10f0c9967614aa0c74a5b7b72792f18d642ab10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1011 zcmVPx&tw}^dR9Fekm|KWVQ5eV1xEsTWh`~G{9wsTbF!G?hh!Eu#qEPZ652DmOhzOx3 zCB=hsNt8>?gUjT83z6KLK^V6Y8qB!={$^IKvu5pc=A5&)GhhAATI*Zi`o8b%z1H4q z?VMQp(vzVRVJsAY+9DS|H1LG-DqMl{@B<>1JiM=jYw#QXq`+Hjx5FR^UE1Jr8N7j1 zlJeQ=kL`oL5Q-Gzr2>4xGSSuHb48{ZF2sQxH8qi1Y(J%7FTcm23;3j$Pbpms*anFb zQ{rW?1T?R@f)Op0{-8y)3zAKZyV!ICBb}&hfY(OhmRnE+CHIBCwUF-)O3>CHo&pab z$nPEcdcac9f|6Y|G?Mvff}9+rPmhvxr4<9U*uH`O=|EzKi$uvXscILpi$ zBN(pR=f-i{uk0`_Y4~n|lAB>0hEyMgpP%3+Ww)Q(u@(gwud$6nsCU3e3Dkg{jIUm4 z;WEn8;=c-ll9T?1 zCT=mfa@18s(B6yBfv^>H+kK)t89NN_zZm1Qj!;*G?{ZHbmlRV!Zi0Q)kp-DaO#5-C zU3jb#+yvXHBTJG;+>P)Z%5(Tp#=XFZl5GoG+1V7$&uL2FI=EM`k2;!zXccRzyP{KC zvyh+!wL@+eq6BYwGMVhrWlhza$nG4}MnT)6|0zQW)+#9AO*-5pmj@X~px3TRj}`5p z*F!&ulM-5Pg74Ag$5};a~(d9n%`UHW7WoqnB(E5P`*%V+5APbkjN`lcS<$H5+G*L9GYT5p=t zuio#wLG#-7XX@|JYlF}v>4;U(Eiex6VY3c~gLXweQBt$v1SC2veWZUFq$IkPrC<_D zRMuhl6fVOl(Cf1b5{)r^_puuQY0F|p)`D>uW_bv|`qY-O6yjkIXrY9Wpsw0@2wjTs zcmQf3okY(vZVu>6Lz5(Eawi+CGs`%b1Y@B9^Z~#Xz5Fl1MJR)ZkdmaEpf8A$?g_b2 h-9Wa_HKY--`~|zM6`W#-XkGvS002ovPDHLkV1h|w=?VY< diff --git a/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_scale.png b/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_scale.png deleted file mode 100644 index cdb822575c7a16594bd961e028205abf453fa78a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 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 diff --git a/ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_crop.png b/ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_crop.png deleted file mode 100644 index 8dfce883656c9aa47048f6618ea290823fa775ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1175 zcmV;I1Zew-P)Px(QAtEWRCodH+uN&6K^zD0gM;IiTarWyB}$Z%`~Chz`5XKhVPMP;6*`98SrEcUU0+|0Y?GulmSm69_~e> zl72urQ?+NRYD#wZcp}H-2X~3Myxv_9}c1k%x)yy>RwKi(|P_dMAF^fz6_6{vsa`5CtE+tA<=qS4K-ZLpE9w>^o> zi+n;GG5#k+-3DPR>xLVA>z4^J0oMVJPdYXzsXlAK)qs2Nfk)J?0OT{HbcI5DH1kiMOZf!>j-TVKL%4LPAsJ#M_M+nz9F62n{~PC?qNW zf;Ru-5i)DQ1ps)8kkC{)@pd8VQnrA6J|93RBq=A}&N{iOEK9(-nEVrjgr>@gx1)lR zvg`ooK;kh%AxSyE0NpOB4JpqGa5g6X2qB@V@}_un%m#24Ci}1<9>4o*nz8_#35^E` zwZf#F-}!BADp$2j9&kD)dLJR7sdD0NsZct}k_Ma#iF*izB;~GngiaQ43MO~AA>L-R zb4^JC@;&SwgtX#R`A4+b?HBoc0YpO!0^U8 zW+I?1jkh&0)pt7iy0N&4gt!oOV|RU7`Gu^?)R`B%a7cTOSh1D!v7ggWv|3n>kv!t{S!q<*@*{1w&|ZU+U>%}w_z zfSSVXpa8nL>0Sj;Q@9-zKsPtts{m>Ww}S%c=B9fUKuzIxPypTBbgu%aDclYUpqrcS pRRA@G+d%Px&%t=H+RA>d&np=oXVHC&5TnyvVeqQKpn=B{x;bjlSRj&Ap!h)V*wrYJ~ud%;P4$twq~=q|Fv zFN#*@4av@AaB7qRBhh_iiJug$)ZVN!yJ~||gA5vt9wJM8r)atMW|i5I4xAcfU>j;j zmiR`|QteGUGdo>4HOSyG=rOWH7e$M;H?7RfY~a)&3&x@+$P!;DTByCXW@cpzrv_Ox z4n0Gb_)O7!?M<4Qkq?|2WZ?wVfh_TnqMmz?4)Dm*iz1&2B9=>C;$3C77&HmJh*%PJ zN*2#98(?@rPcd-n4FglqD`bgx6wTD$xJ+%aaB2`E)6g4a38|Z|y_GUGVZf=Y&gg0JdA%b zLdyMgJnA2C4&(w%%O@F22xR{EIW?O!V|o$#Y9Tb%q<0ff3e~p{<4ce{UDO)k!6__c z%aA-LCXI069LN>W{YXFUj=SaHq`n`?km(CZuwF|5kJBn3EyyvjjK{sdJvrU<8ympK?zWo3Rp@`UsGv~!W! z&H0f;Z1RLF-3sX0j;wK>!lsDT*`H#u&tJ>3`y9Qytc28^MUB}LIU87*7*5A9V-K>% zX$l*(H`C0bn&H$Sv-VjDsXK|X`e4#yi3O>_IgkfDAdgc!KzmcoS-`15W*_o^JeoRW zmT&?ohS3pZjl=rp)STIv`mbe_DfS5DF)JZ;2czbAonuHYaB7Nu_2>k$#(wSf&TPmP zP7SiR0iCiEQny!o&6%b`;M5@d8_^kLjosQCo0(WBoEpSO6FO%lq;9A7R?HLy0jCD> zGZ0-s*4U=K|79iw1*Zn_)r>A#38~wnz5g;NgM?Fq_#2F_AZu*WUb)Ez4W~x&*@CVa z3FXU!8%n(#$fJxU${u-iah@5ILy`5%g95ouuAn6fhtoF_v-0J^TNcyQbXx#}fpZ{R zF@MJb83z~~oC7%mzt<8 M07*qoM6N<$f<<20TL1t6 diff --git a/ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_next.png b/ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_next.png deleted file mode 100644 index 9f6453402aa2d1cf0b98102cda7132174890bf89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1065 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 diff --git a/ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_scale.png b/ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_scale.png deleted file mode 100644 index 21fc505b9ecd6f89886dd900503cee25b1485b47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)jKx9jP7LeL$-D%zOFdm2Ln;{G z-U{?PY#`!tQKa;LG}|6V^-G<1o%Ds`UoJWM(W2^tUEkv$|Nh?n`8ncGTJ-zp*&omT z`F)wa!&@eyL8IZLl!O9T!X7rI2QyBdd$#OqvGlz|pMG3f&bFw&fpHPTv228*Kb=1X z=b!U5pHu%;Gviz?_v2425WQ?2OcLuGL8{-+U_P(c_-xJQ$?+EZO8j!U<0BexdNa*= z8Dk;#fOW}D?_?1p22WQ%mvv4FO#qZPxIzE` diff --git a/ucrop/src/main/res/drawable/ucrop_crop.xml b/ucrop/src/main/res/drawable/ucrop_crop.xml new file mode 100644 index 000000000..b0f03d506 --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_crop.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ucrop/src/main/res/drawable/ucrop_ic_crop.xml b/ucrop/src/main/res/drawable/ucrop_ic_crop.xml new file mode 100644 index 000000000..a85a66c36 --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_ic_crop.xml @@ -0,0 +1,10 @@ + + + diff --git a/ucrop/src/main/res/drawable/ucrop_ic_crop_unselected.xml b/ucrop/src/main/res/drawable/ucrop_ic_crop_unselected.xml new file mode 100644 index 000000000..e931bc08c --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_ic_crop_unselected.xml @@ -0,0 +1,11 @@ + + + diff --git a/ucrop/src/main/res/drawable/ucrop_ic_cross.xml b/ucrop/src/main/res/drawable/ucrop_ic_cross.xml new file mode 100644 index 000000000..5a38800ac --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_ic_cross.xml @@ -0,0 +1,10 @@ + + + diff --git a/ucrop/src/main/res/drawable/ucrop_ic_next.xml b/ucrop/src/main/res/drawable/ucrop_ic_next.xml new file mode 100644 index 000000000..3110210a1 --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_ic_next.xml @@ -0,0 +1,10 @@ + + + diff --git a/ucrop/src/main/res/drawable/ucrop_ic_reset.xml b/ucrop/src/main/res/drawable/ucrop_ic_reset.xml new file mode 100644 index 000000000..07e0845d7 --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_ic_reset.xml @@ -0,0 +1,10 @@ + + + diff --git a/ucrop/src/main/res/drawable/ucrop_ic_rotate.xml b/ucrop/src/main/res/drawable/ucrop_ic_rotate.xml new file mode 100644 index 000000000..01da8e0e1 --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_ic_rotate.xml @@ -0,0 +1,10 @@ + + + diff --git a/ucrop/src/main/res/drawable/ucrop_ic_rotate_unselected.xml b/ucrop/src/main/res/drawable/ucrop_ic_rotate_unselected.xml new file mode 100644 index 000000000..be4d9ea4b --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_ic_rotate_unselected.xml @@ -0,0 +1,11 @@ + + + diff --git a/ucrop/src/main/res/drawable/ucrop_ic_scale.xml b/ucrop/src/main/res/drawable/ucrop_ic_scale.xml new file mode 100644 index 000000000..e038d52da --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_ic_scale.xml @@ -0,0 +1,10 @@ + + + diff --git a/ucrop/src/main/res/drawable/ucrop_ic_scale_unselected.xml b/ucrop/src/main/res/drawable/ucrop_ic_scale_unselected.xml new file mode 100644 index 000000000..988b8d24d --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_ic_scale_unselected.xml @@ -0,0 +1,11 @@ + + + diff --git a/ucrop/src/main/res/drawable/ucrop_rotate.xml b/ucrop/src/main/res/drawable/ucrop_rotate.xml new file mode 100644 index 000000000..9fe531363 --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_rotate.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ucrop/src/main/res/drawable/ucrop_scale.xml b/ucrop/src/main/res/drawable/ucrop_scale.xml new file mode 100644 index 000000000..05a1ad83c --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_scale.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ucrop/src/main/res/drawable/ucrop_wrapper_controls_selector.xml b/ucrop/src/main/res/drawable/ucrop_wrapper_controls_selector.xml new file mode 100644 index 000000000..2ff536129 --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_wrapper_controls_selector.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/ucrop/src/main/res/layout/ucrop_activity_photobox.xml b/ucrop/src/main/res/layout/ucrop_activity_photobox.xml index 7434c4a4b..a047a8a36 100644 --- a/ucrop/src/main/res/layout/ucrop_activity_photobox.xml +++ b/ucrop/src/main/res/layout/ucrop_activity_photobox.xml @@ -3,7 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/ucrop_photobox" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:animateLayoutChanges="true"> - + + android:layout_above="@+id/wrapper_states"> + layout="@layout/ucrop_layout_rotate_wheel" /> + layout="@layout/ucrop_layout_scale_wheel" /> @@ -29,7 +30,7 @@ android:layout_width="match_parent" android:layout_height="@dimen/ucrop_height_divider_shadow" android:layout_above="@+id/wrapper_states" - android:background="@drawable/ucrop_shadow_upside"/> + android:background="@drawable/ucrop_shadow_upside" /> - + android:gravity="center" + android:orientation="vertical" + app:srcCompat="@drawable/ucrop_crop" /> - + - + + + app:srcCompat="@drawable/ucrop_rotate" /> - + - + + + app:srcCompat="@drawable/ucrop_scale" /> + + - + diff --git a/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml b/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml index b4877894c..7b5a78668 100644 --- a/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml +++ b/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml @@ -1,26 +1,28 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" + tools:showIn="@layout/ucrop_activity_photobox" + tools:visibility="visible"> + android:text="100°" /> + android:background="@drawable/ucrop_wrapper_controls_selector" /> + app:srcCompat="@drawable/ucrop_ic_reset" /> @@ -42,7 +44,7 @@ + android:src="@drawable/ucrop_ic_angle" /> diff --git a/ucrop/src/main/res/values/colors.xml b/ucrop/src/main/res/values/colors.xml index 3df81aebd..e74d9f7c8 100644 --- a/ucrop/src/main/res/values/colors.xml +++ b/ucrop/src/main/res/values/colors.xml @@ -6,10 +6,11 @@ #CC5833 #fff #000 - #FF6E40 - #fff + #FFFFFF + #512DA8 + #673AB7 #000 - #808080 + #5e2fbc #000 diff --git a/ucrop/src/main/res/values/strings.xml b/ucrop/src/main/res/values/strings.xml index 5254f38aa..47594105c 100644 --- a/ucrop/src/main/res/values/strings.xml +++ b/ucrop/src/main/res/values/strings.xml @@ -7,5 +7,8 @@ Both input and output Uri must be specified Therefore, override color resource (ucrop_color_toolbar_widget) in your app to make it work on pre-L devices + Rotate + Scale + Crop diff --git a/ucrop/src/main/res/values/styles.xml b/ucrop/src/main/res/values/styles.xml index fbeb4c4ba..c2ff5c16b 100644 --- a/ucrop/src/main/res/values/styles.xml +++ b/ucrop/src/main/res/values/styles.xml @@ -15,6 +15,8 @@ 1 ?attr/selectableItemBackground true + center + vertical + + \ No newline at end of file From 47684c6eab71bd12c08530dfc3ee480d771cea9b Mon Sep 17 00:00:00 2001 From: kirill Date: Thu, 28 Mar 2019 19:34:41 +0200 Subject: [PATCH 11/23] Not great solution --- .../com/yalantis/ucrop/UCropActivity.java | 22 ++++++++----- .../widget/HorizontalProgressWheelView.java | 12 ++++--- .../ucrop_wrapper_controls_selector.xml | 11 ------- .../drawable/ucrop_wrapper_controls_shape.xml | 10 ++++++ .../res/layout/ucrop_activity_photobox.xml | 32 +++++++++++++++---- ucrop/src/main/res/layout/ucrop_controls.xml | 22 +++++++------ .../res/layout/ucrop_layout_rotate_wheel.xml | 3 +- ucrop/src/main/res/values/colors.xml | 8 ++--- ucrop/src/main/res/values/dimens.xml | 1 + ucrop/src/main/res/values/styles.xml | 3 +- 10 files changed, 78 insertions(+), 46 deletions(-) delete mode 100644 ucrop/src/main/res/drawable/ucrop_wrapper_controls_selector.xml create mode 100644 ucrop/src/main/res/drawable/ucrop_wrapper_controls_shape.xml diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java index a6d52399a..d77ffc706 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java @@ -27,6 +27,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.ViewStub; import android.view.Window; import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; @@ -75,7 +76,7 @@ public class UCropActivity extends AppCompatActivity { } private static final String TAG = "UCropActivity"; - private static final long CONTROLS_ANIMATION_DURATION = 100; + private static final long CONTROLS_ANIMATION_DURATION = 50; private static final int TABS_COUNT = 3; private static final int SCALE_WIDGET_SENSITIVITY_COEFFICIENT = 15000; private static final int ROTATE_WIDGET_SENSITIVITY_COEFFICIENT = 42; @@ -294,8 +295,8 @@ private void setupViews(@NonNull Intent intent) { initiateRootViews(); if (mShowBottomControls) { - ViewGroup photoBox = findViewById(R.id.ucrop_photobox); - View.inflate(this, R.layout.ucrop_controls, photoBox); + ViewStub v = findViewById(R.id.stub); + v.inflate(); mControlsTransition = new AutoTransition(); mControlsTransition.setDuration(CONTROLS_ANIMATION_DURATION); @@ -587,11 +588,7 @@ private void setWidgetState(@IdRes int stateViewId) { mLayoutRotate.setVisibility(stateViewId == R.id.state_rotate ? View.VISIBLE : View.GONE); mLayoutScale.setVisibility(stateViewId == R.id.state_scale ? View.VISIBLE : View.GONE); - TransitionManager.beginDelayedTransition((ViewGroup) findViewById(R.id.ucrop_photobox), mControlsTransition); - - mWrapperStateScale.findViewById(R.id.text_view_scale).setVisibility(stateViewId == R.id.state_scale ? View.VISIBLE : View.GONE); - mWrapperStateAspectRatio.findViewById(R.id.text_view_crop).setVisibility(stateViewId == R.id.state_aspect_ratio ? View.VISIBLE : View.GONE); - mWrapperStateRotate.findViewById(R.id.text_view_rotate).setVisibility(stateViewId == R.id.state_rotate ? View.VISIBLE : View.GONE); + changeSelectedTab(stateViewId); if (stateViewId == R.id.state_scale) { setAllowedGestures(0); @@ -602,6 +599,15 @@ private void setWidgetState(@IdRes int stateViewId) { } } + private void changeSelectedTab(int stateViewId) { + TransitionManager.beginDelayedTransition((ViewGroup) findViewById(R.id.ucrop_photobox), mControlsTransition); + + mWrapperStateScale.findViewById(R.id.text_view_scale).setVisibility(stateViewId == R.id.state_scale ? View.VISIBLE : View.GONE); + mWrapperStateAspectRatio.findViewById(R.id.text_view_crop).setVisibility(stateViewId == R.id.state_aspect_ratio ? View.VISIBLE : View.GONE); + mWrapperStateRotate.findViewById(R.id.text_view_rotate).setVisibility(stateViewId == R.id.state_rotate ? View.VISIBLE : View.GONE); + + } + private void setAllowedGestures(int tab) { mGestureCropImageView.setScaleEnabled(mAllowedGestures[tab] == ALL || mAllowedGestures[tab] == SCALE); mGestureCropImageView.setRotateEnabled(mAllowedGestures[tab] == ALL || mAllowedGestures[tab] == ROTATE); diff --git a/ucrop/src/main/java/com/yalantis/ucrop/view/widget/HorizontalProgressWheelView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/widget/HorizontalProgressWheelView.java index 42f1cd740..ed724f70a 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/widget/HorizontalProgressWheelView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/widget/HorizontalProgressWheelView.java @@ -25,6 +25,7 @@ public class HorizontalProgressWheelView extends View { private float mLastTouchedPosition; private Paint mProgressLinePaint; + private Paint mProgressMiddleLinePaint; private int mProgressLineWidth, mProgressLineHeight; private int mProgressLineMargin; @@ -96,7 +97,6 @@ protected void onDraw(Canvas canvas) { int linesCount = mCanvasClipBounds.width() / (mProgressLineWidth + mProgressLineMargin); float deltaX = (mTotalScrollDistance) % (float) (mProgressLineMargin + mProgressLineWidth); - mProgressLinePaint.setColor(getResources().getColor(R.color.ucrop_color_progress_wheel_line)); for (int i = 0; i < linesCount; i++) { if (i < (linesCount / 4)) { mProgressLinePaint.setAlpha((int) (255 * (i / (float) (linesCount / 4)))); @@ -112,8 +112,7 @@ protected void onDraw(Canvas canvas) { mCanvasClipBounds.centerY() + mProgressLineHeight / 4.0f, mProgressLinePaint); } - mProgressLinePaint.setColor(mMiddleLineColor); - canvas.drawLine(mCanvasClipBounds.centerX(), mCanvasClipBounds.centerY() - mProgressLineHeight / 2.0f, mCanvasClipBounds.centerX(), mCanvasClipBounds.centerY() + mProgressLineHeight / 2.0f, mProgressLinePaint); + canvas.drawLine(mCanvasClipBounds.centerX(), mCanvasClipBounds.centerY() - mProgressLineHeight / 2.0f, mCanvasClipBounds.centerX(), mCanvasClipBounds.centerY() + mProgressLineHeight / 2.0f, mProgressMiddleLinePaint); } @@ -127,7 +126,7 @@ private void onScrollEvent(MotionEvent event, float distance) { } private void init() { - mMiddleLineColor = ContextCompat.getColor(getContext(), R.color.ucrop_color_progress_wheel_line); + mMiddleLineColor = ContextCompat.getColor(getContext(), R.color.ucrop_color_widget_rotate_mid_line); mProgressLineWidth = getContext().getResources().getDimensionPixelSize(R.dimen.ucrop_width_horizontal_wheel_progress_line); mProgressLineHeight = getContext().getResources().getDimensionPixelSize(R.dimen.ucrop_height_horizontal_wheel_progress_line); @@ -136,7 +135,12 @@ private void init() { mProgressLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mProgressLinePaint.setStyle(Paint.Style.STROKE); mProgressLinePaint.setStrokeWidth(mProgressLineWidth); + mProgressLinePaint.setColor(getResources().getColor(R.color.ucrop_color_progress_wheel_line)); + mProgressMiddleLinePaint = new Paint(mProgressLinePaint); + mProgressMiddleLinePaint.setColor(mMiddleLineColor); + mProgressMiddleLinePaint.setStrokeCap(Paint.Cap.ROUND); + mProgressMiddleLinePaint.setStrokeWidth(getContext().getResources().getDimensionPixelSize(R.dimen.ucrop_width_middle_wheel_progress_line)); } public interface ScrollingListener { diff --git a/ucrop/src/main/res/drawable/ucrop_wrapper_controls_selector.xml b/ucrop/src/main/res/drawable/ucrop_wrapper_controls_selector.xml deleted file mode 100644 index 2ff536129..000000000 --- a/ucrop/src/main/res/drawable/ucrop_wrapper_controls_selector.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/ucrop/src/main/res/drawable/ucrop_wrapper_controls_shape.xml b/ucrop/src/main/res/drawable/ucrop_wrapper_controls_shape.xml new file mode 100644 index 000000000..b44a0f0b1 --- /dev/null +++ b/ucrop/src/main/res/drawable/ucrop_wrapper_controls_shape.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/ucrop/src/main/res/layout/ucrop_activity_photobox.xml b/ucrop/src/main/res/layout/ucrop_activity_photobox.xml index a047a8a36..d185e20a1 100644 --- a/ucrop/src/main/res/layout/ucrop_activity_photobox.xml +++ b/ucrop/src/main/res/layout/ucrop_activity_photobox.xml @@ -3,8 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/ucrop_photobox" android:layout_width="match_parent" - android:layout_height="match_parent" - android:animateLayoutChanges="true"> + android:layout_height="match_parent"> + android:layout_height="wrap_content" + android:layout_above="@+id/tt" + android:layout_below="@+id/toolbar"> + + + + diff --git a/ucrop/src/main/res/layout/ucrop_controls.xml b/ucrop/src/main/res/layout/ucrop_controls.xml index 6b12dcbbf..de6ca434d 100644 --- a/ucrop/src/main/res/layout/ucrop_controls.xml +++ b/ucrop/src/main/res/layout/ucrop_controls.xml @@ -1,20 +1,26 @@ - + + android:layout_height="@dimen/ucrop_height_wrapper_controls"> + + + android:orientation="horizontal" /> - + diff --git a/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml b/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml index 7b5a78668..6994701f3 100644 --- a/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml +++ b/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml @@ -21,8 +21,7 @@ android:layout_toStartOf="@+id/wrapper_rotate_by_angle" android:layout_toLeftOf="@+id/wrapper_rotate_by_angle" android:layout_toEndOf="@+id/wrapper_reset_rotate" - android:layout_toRightOf="@+id/wrapper_reset_rotate" - android:background="@drawable/ucrop_wrapper_controls_selector" /> + android:layout_toRightOf="@+id/wrapper_reset_rotate" /> - #FF6E40 - #CC5833 - #fff + #fff + #f5f5f5 + #000000 #000 #FFFFFF #512DA8 #673AB7 #000 - #5e2fbc + #000000 #000 diff --git a/ucrop/src/main/res/values/dimens.xml b/ucrop/src/main/res/values/dimens.xml index f7db77c7e..e7ef4e581 100644 --- a/ucrop/src/main/res/values/dimens.xml +++ b/ucrop/src/main/res/values/dimens.xml @@ -5,6 +5,7 @@ 8dp 20dp 2dp + 4dp 10dp 64dp 72dp diff --git a/ucrop/src/main/res/values/styles.xml b/ucrop/src/main/res/values/styles.xml index c2ff5c16b..9eb4bdc88 100644 --- a/ucrop/src/main/res/values/styles.xml +++ b/ucrop/src/main/res/values/styles.xml @@ -38,8 +38,9 @@ wrap_content wrap_content true + bold + @color/ucrop_color_widget_background @dimen/ucrop_margit_top_widget_text - @color/ucrop_color_widget_text @dimen/ucrop_text_size_widget_text From 5c37c47fe8b21390c75ec98904b2084d26ec1024 Mon Sep 17 00:00:00 2001 From: kirill Date: Fri, 29 Mar 2019 10:39:04 +0200 Subject: [PATCH 12/23] Activity redesign ready --- .../com/yalantis/ucrop/UCropActivity.java | 10 ++++++--- .../main/res/drawable/ucrop_shadow_upside.xml | 2 +- .../res/layout/ucrop_activity_photobox.xml | 22 +++++-------------- ucrop/src/main/res/layout/ucrop_controls.xml | 15 ++++++++----- 4 files changed, 23 insertions(+), 26 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java index d77ffc706..8a1057533 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java @@ -23,11 +23,11 @@ import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.ViewStub; import android.view.Window; import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; @@ -295,8 +295,12 @@ private void setupViews(@NonNull Intent intent) { initiateRootViews(); if (mShowBottomControls) { - ViewStub v = findViewById(R.id.stub); - v.inflate(); + + ViewGroup viewGroup = findViewById(R.id.ucrop_photobox); + ViewGroup wrapper = viewGroup.findViewById(R.id.controls_wrapper); + wrapper.setVisibility(View.VISIBLE); + wrapper.setBackgroundColor(mRootViewBackgroundColor); + LayoutInflater.from(this).inflate(R.layout.ucrop_controls, wrapper, true); mControlsTransition = new AutoTransition(); mControlsTransition.setDuration(CONTROLS_ANIMATION_DURATION); diff --git a/ucrop/src/main/res/drawable/ucrop_shadow_upside.xml b/ucrop/src/main/res/drawable/ucrop_shadow_upside.xml index 0be54272f..3a05b825c 100644 --- a/ucrop/src/main/res/drawable/ucrop_shadow_upside.xml +++ b/ucrop/src/main/res/drawable/ucrop_shadow_upside.xml @@ -2,6 +2,6 @@ android:shape="rectangle"> \ No newline at end of file diff --git a/ucrop/src/main/res/layout/ucrop_activity_photobox.xml b/ucrop/src/main/res/layout/ucrop_activity_photobox.xml index d185e20a1..235e782c3 100644 --- a/ucrop/src/main/res/layout/ucrop_activity_photobox.xml +++ b/ucrop/src/main/res/layout/ucrop_activity_photobox.xml @@ -17,7 +17,7 @@ style="@style/TextAppearance.Widget.AppCompat.Toolbar.Title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" + android:layout_gravity="start" android:text="@string/ucrop_label_edit_photo" android:textColor="@color/ucrop_color_toolbar_widget" /> @@ -27,7 +27,7 @@ android:id="@+id/ucrop_frame" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_above="@+id/tt" + android:layout_above="@+id/controls_wrapper" android:layout_below="@+id/toolbar"> - - - diff --git a/ucrop/src/main/res/layout/ucrop_controls.xml b/ucrop/src/main/res/layout/ucrop_controls.xml index de6ca434d..451fcaf1a 100644 --- a/ucrop/src/main/res/layout/ucrop_controls.xml +++ b/ucrop/src/main/res/layout/ucrop_controls.xml @@ -1,5 +1,5 @@ - + android:layout_height="@dimen/ucrop_height_wrapper_controls" + android:layout_alignParentTop="true" + android:layout_marginBottom="0dp"> + android:layout_height="8dp" + android:layout_alignBottom="@+id/wrapper_controls" + android:src="@drawable/ucrop_shadow_upside" /> - + From 005a019a8b0a0eb6778a03091217db4fea9e95bb Mon Sep 17 00:00:00 2001 From: kirill Date: Fri, 29 Mar 2019 11:42:02 +0200 Subject: [PATCH 13/23] Fragment redesign ready --- .../java/com/yalantis/ucrop/UCropActivity.java | 4 ++-- .../java/com/yalantis/ucrop/UCropFragment.java | 17 +++++++++++------ .../java/com/yalantis/ucrop/view/UCropView.java | 4 ++-- .../main/res/layout/ucrop_fragment_photobox.xml | 10 +++++++++- ucrop/src/main/res/values/colors.xml | 1 + 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java index 8a1057533..14e79a7e6 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java @@ -279,8 +279,8 @@ private void processOptions(@NonNull Intent intent) { private void setupViews(@NonNull Intent intent) { mStatusBarColor = intent.getIntExtra(UCrop.Options.EXTRA_STATUS_BAR_COLOR, ContextCompat.getColor(this, R.color.ucrop_color_statusbar)); mToolbarColor = intent.getIntExtra(UCrop.Options.EXTRA_TOOL_BAR_COLOR, ContextCompat.getColor(this, R.color.ucrop_color_toolbar)); - mActiveWidgetColor = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_COLOR_WIDGET_ACTIVE, ContextCompat.getColor(this, R.color.ucrop_color_widget_rotate_mid_line)); - mActiveControlsWidgetColor = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_COLOR_CONTROLS_WIDGET_ACTIVE, ContextCompat.getColor(this, R.color.ucrop_color_widget_active)); + mActiveWidgetColor = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_COLOR_WIDGET_ACTIVE, ContextCompat.getColor(this, R.color.ucrop_color_widget_background)); + mActiveControlsWidgetColor = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_COLOR_CONTROLS_WIDGET_ACTIVE, ContextCompat.getColor(this, R.color.ucrop_color_active_controls_color)); mToolbarWidgetColor = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_WIDGET_COLOR_TOOLBAR, ContextCompat.getColor(this, R.color.ucrop_color_toolbar_widget)); mToolbarCancelDrawable = intent.getIntExtra(UCrop.Options.EXTRA_UCROP_WIDGET_CANCEL_DRAWABLE, R.drawable.ucrop_ic_cross); diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java index ef29f137a..db5cfa5da 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java @@ -53,6 +53,7 @@ public class UCropFragment extends Fragment { public static final int SCALE = 1; public static final int ROTATE = 2; public static final int ALL = 3; + private int mActiveControlsWidgetColor; @IntDef({NONE, SCALE, ROTATE, ALL}) @Retention(RetentionPolicy.SOURCE) @@ -125,7 +126,8 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c public void setupViews(View view, Bundle args) { - mActiveWidgetColor = args.getInt(UCrop.Options.EXTRA_UCROP_COLOR_WIDGET_ACTIVE, ContextCompat.getColor(getContext(), R.color.ucrop_color_widget_active)); + mActiveWidgetColor = args.getInt(UCrop.Options.EXTRA_UCROP_COLOR_WIDGET_ACTIVE, ContextCompat.getColor(getContext(), R.color.ucrop_color_widget_background)); + mActiveControlsWidgetColor = args.getInt(UCrop.Options.EXTRA_UCROP_COLOR_WIDGET_ACTIVE, ContextCompat.getColor(getContext(), R.color.ucrop_color_widget_active)); mLogoColor = args.getInt(UCrop.Options.EXTRA_UCROP_LOGO_COLOR, ContextCompat.getColor(getContext(), R.color.ucrop_color_default_logo)); mShowBottomControls = !args.getBoolean(UCrop.Options.EXTRA_HIDE_BOTTOM_CONTROLS, false); mRootViewBackgroundColor = args.getInt(UCrop.Options.EXTRA_UCROP_ROOT_VIEW_BACKGROUND_COLOR, ContextCompat.getColor(getContext(), R.color.ucrop_color_crop_background)); @@ -134,8 +136,11 @@ public void setupViews(View view, Bundle args) { callback.loadingProgress(true); if (mShowBottomControls) { - ViewGroup photoBox = view.findViewById(R.id.ucrop_photobox); - View.inflate(getContext(), R.layout.ucrop_controls, photoBox); + + ViewGroup wrapper = view.findViewById(R.id.controls_wrapper); + wrapper.setVisibility(View.VISIBLE); + wrapper.setBackgroundColor(mRootViewBackgroundColor); + LayoutInflater.from(getContext()).inflate(R.layout.ucrop_controls, wrapper, true); mWrapperStateAspectRatio = view.findViewById(R.id.state_aspect_ratio); mWrapperStateAspectRatio.setOnClickListener(mStateClickListener); @@ -288,9 +293,9 @@ private void setupStatesWrapper(View view) { ImageView stateRotateImageView = view.findViewById(R.id.image_view_state_rotate); ImageView stateAspectRatioImageView = view.findViewById(R.id.image_view_state_aspect_ratio); - stateScaleImageView.setImageDrawable(new SelectedStateListDrawable(stateScaleImageView.getDrawable(), mActiveWidgetColor)); - stateRotateImageView.setImageDrawable(new SelectedStateListDrawable(stateRotateImageView.getDrawable(), mActiveWidgetColor)); - stateAspectRatioImageView.setImageDrawable(new SelectedStateListDrawable(stateAspectRatioImageView.getDrawable(), mActiveWidgetColor)); + stateScaleImageView.setImageDrawable(new SelectedStateListDrawable(stateScaleImageView.getDrawable(), mActiveControlsWidgetColor)); + stateRotateImageView.setImageDrawable(new SelectedStateListDrawable(stateRotateImageView.getDrawable(), mActiveControlsWidgetColor)); + stateAspectRatioImageView.setImageDrawable(new SelectedStateListDrawable(stateAspectRatioImageView.getDrawable(), mActiveControlsWidgetColor)); } private void setupAspectRatioWidget(@NonNull Bundle bundle, View view) { diff --git a/ucrop/src/main/java/com/yalantis/ucrop/view/UCropView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/UCropView.java index 5de97f3d0..4b77f2d66 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/UCropView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/UCropView.java @@ -25,8 +25,8 @@ public UCropView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); LayoutInflater.from(context).inflate(R.layout.ucrop_view, this, true); - mGestureCropImageView = (GestureCropImageView) findViewById(R.id.image_view_crop); - mViewOverlay = (OverlayView) findViewById(R.id.view_overlay); + mGestureCropImageView = findViewById(R.id.image_view_crop); + mViewOverlay = findViewById(R.id.view_overlay); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ucrop_UCropView); mViewOverlay.processStyledAttributes(a); diff --git a/ucrop/src/main/res/layout/ucrop_fragment_photobox.xml b/ucrop/src/main/res/layout/ucrop_fragment_photobox.xml index ac529dc51..a2ff0467a 100644 --- a/ucrop/src/main/res/layout/ucrop_fragment_photobox.xml +++ b/ucrop/src/main/res/layout/ucrop_fragment_photobox.xml @@ -9,7 +9,7 @@ android:id="@+id/ucrop_frame" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_above="@+id/wrapper_controls" + android:layout_above="@+id/controls_wrapper" android:background="@color/ucrop_color_crop_background"> + + diff --git a/ucrop/src/main/res/values/colors.xml b/ucrop/src/main/res/values/colors.xml index 8d473a01a..526e544af 100644 --- a/ucrop/src/main/res/values/colors.xml +++ b/ucrop/src/main/res/values/colors.xml @@ -7,6 +7,7 @@ #000000 #000 #FFFFFF + #FFFFFF #512DA8 #673AB7 #000 From ef97e61117643633993cb2d7932f667da031d2bc Mon Sep 17 00:00:00 2001 From: kirill Date: Sun, 31 Mar 2019 17:45:42 +0300 Subject: [PATCH 14/23] Dot placed little upper --- .../yalantis/ucrop/view/widget/AspectRatioTextView.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/view/widget/AspectRatioTextView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/widget/AspectRatioTextView.java index 43397f49d..3083e55fb 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/widget/AspectRatioTextView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/widget/AspectRatioTextView.java @@ -27,6 +27,7 @@ */ public class AspectRatioTextView extends TextView { + private final float MARGIN_MULTIPLIER = 1.5f; private final Rect mCanvasClipBounds = new Rect(); private Paint mDotPaint; private int mDotSize; @@ -93,8 +94,11 @@ protected void onDraw(Canvas canvas) { if (isSelected()) { canvas.getClipBounds(mCanvasClipBounds); - canvas.drawCircle((mCanvasClipBounds.right - mCanvasClipBounds.left) / 2.0f, mCanvasClipBounds.bottom - mDotSize, - mDotSize / 2, mDotPaint); + + float x = (mCanvasClipBounds.right - mCanvasClipBounds.left) / 2.0f; + float y = (mCanvasClipBounds.bottom - mCanvasClipBounds.top / 2f) - mDotSize * MARGIN_MULTIPLIER; + + canvas.drawCircle(x, y, mDotSize / 2f, mDotPaint); } } From 5b388ebff874a5df39c1128ea94eb9fcc19adc43 Mon Sep 17 00:00:00 2001 From: kirill Date: Mon, 1 Apr 2019 13:48:53 +0300 Subject: [PATCH 15/23] Applied bottom navigation to UCropFragment and added external api for navigation color filter --- .../main/java/com/yalantis/ucrop/UCrop.java | 9 +++++++- .../com/yalantis/ucrop/UCropFragment.java | 22 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java index af7aae85c..af6111a7d 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java @@ -447,12 +447,19 @@ public void setStatusBarColor(@ColorInt int color) { } /** - * @param color - desired resolved color of the active and selected widget (default is orange) and progress wheel middle line + * @param color - desired resolved color of the progress wheel middle line (default is violet) */ public void setActiveWidgetColor(@ColorInt int color) { mOptionBundle.putInt(EXTRA_UCROP_COLOR_WIDGET_ACTIVE, color); } + /** + * @param color - desired resolved color of the active and selected widget (default is white) + */ + public void setActiveControlsWidgetColor(@ColorInt int color) { + mOptionBundle.putInt(EXTRA_UCROP_COLOR_CONTROLS_WIDGET_ACTIVE, color); + } + /** * @param color - desired resolved color of Toolbar text and buttons (default is darker orange) */ diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java index db5cfa5da..cd59e6992 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java @@ -11,6 +11,9 @@ import android.support.annotation.IntDef; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.transition.AutoTransition; +import android.support.transition.Transition; +import android.support.transition.TransitionManager; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import android.text.TextUtils; @@ -53,7 +56,6 @@ public class UCropFragment extends Fragment { public static final int SCALE = 1; public static final int ROTATE = 2; public static final int ALL = 3; - private int mActiveControlsWidgetColor; @IntDef({NONE, SCALE, ROTATE, ALL}) @Retention(RetentionPolicy.SOURCE) @@ -62,11 +64,13 @@ public class UCropFragment extends Fragment { public static final String TAG = "UCropFragment"; + private static final long CONTROLS_ANIMATION_DURATION = 50; private static final int TABS_COUNT = 3; private static final int SCALE_WIDGET_SENSITIVITY_COEFFICIENT = 15000; private static final int ROTATE_WIDGET_SENSITIVITY_COEFFICIENT = 42; private UCropFragmentCallback callback; + private int mActiveControlsWidgetColor; private int mActiveWidgetColor; @ColorInt private int mRootViewBackgroundColor; @@ -74,6 +78,8 @@ public class UCropFragment extends Fragment { private boolean mShowBottomControls; + private Transition mControlsTransition; + private UCropView mUCropView; private GestureCropImageView mGestureCropImageView; private OverlayView mOverlayView; @@ -142,6 +148,9 @@ public void setupViews(View view, Bundle args) { wrapper.setBackgroundColor(mRootViewBackgroundColor); LayoutInflater.from(getContext()).inflate(R.layout.ucrop_controls, wrapper, true); + mControlsTransition = new AutoTransition(); + mControlsTransition.setDuration(CONTROLS_ANIMATION_DURATION); + mWrapperStateAspectRatio = view.findViewById(R.id.state_aspect_ratio); mWrapperStateAspectRatio.setOnClickListener(mStateClickListener); mWrapperStateRotate = view.findViewById(R.id.state_rotate); @@ -469,6 +478,8 @@ private void setWidgetState(@IdRes int stateViewId) { mLayoutRotate.setVisibility(stateViewId == R.id.state_rotate ? View.VISIBLE : View.GONE); mLayoutScale.setVisibility(stateViewId == R.id.state_scale ? View.VISIBLE : View.GONE); + changeSelectedTab(stateViewId); + if (stateViewId == R.id.state_scale) { setAllowedGestures(0); } else if (stateViewId == R.id.state_rotate) { @@ -478,6 +489,15 @@ private void setWidgetState(@IdRes int stateViewId) { } } + private void changeSelectedTab(int stateViewId) { + if (getView() != null) { + TransitionManager.beginDelayedTransition((ViewGroup) getView().findViewById(R.id.ucrop_photobox), mControlsTransition); + } + mWrapperStateScale.findViewById(R.id.text_view_scale).setVisibility(stateViewId == R.id.state_scale ? View.VISIBLE : View.GONE); + mWrapperStateAspectRatio.findViewById(R.id.text_view_crop).setVisibility(stateViewId == R.id.state_aspect_ratio ? View.VISIBLE : View.GONE); + mWrapperStateRotate.findViewById(R.id.text_view_rotate).setVisibility(stateViewId == R.id.state_rotate ? View.VISIBLE : View.GONE); + } + private void setAllowedGestures(int tab) { mGestureCropImageView.setScaleEnabled(mAllowedGestures[tab] == ALL || mAllowedGestures[tab] == SCALE); mGestureCropImageView.setRotateEnabled(mAllowedGestures[tab] == ALL || mAllowedGestures[tab] == ROTATE); From a7294788b8b7a7dc2f0da97b8eea11aa8e190e23 Mon Sep 17 00:00:00 2001 From: kirill Date: Mon, 1 Apr 2019 17:43:22 +0300 Subject: [PATCH 16/23] Dependencies versions update --- build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 2 +- sample/build.gradle | 8 ++++---- ucrop/build.gradle | 18 +++++++++++------- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index 9a0c7da21..3197b24c0 100644 --- a/build.gradle +++ b/build.gradle @@ -9,13 +9,13 @@ buildscript { } } dependencies { - classpath 'com.android.tools.build:gradle:3.1.0' + classpath 'com.android.tools.build:gradle:3.3.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } ext { - support = '27.1.0' + support = '28.0.0' constraints = '1.0.2' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 024b03710..9b5171cc0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 8012fd242..8a9b89d52 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion 28 + buildToolsVersion '28.0.3' defaultConfig { applicationId "com.yalantis.ucrop.sample" minSdkVersion 14 - targetSdkVersion 27 + targetSdkVersion 28 versionCode 11 versionName "1.2.3" } @@ -37,6 +37,6 @@ android { dependencies { implementation "com.android.support:appcompat-v7:$support" implementation "com.android.support:support-compat:$support" - implementation "com.android.support.constraint:constraint-layout:$constraints" + implementation "com.android.support.constraint:constraint-layout:1.1.3" implementation project(':ucrop') } \ No newline at end of file diff --git a/ucrop/build.gradle b/ucrop/build.gradle index 2c14768c1..f153d5c80 100644 --- a/ucrop/build.gradle +++ b/ucrop/build.gradle @@ -2,12 +2,12 @@ apply plugin: 'com.android.library' apply from: '../mavenpush.gradle' android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion 28 + buildToolsVersion '28.0.3' defaultConfig { minSdkVersion 14 - targetSdkVersion 27 + targetSdkVersion 28 versionCode 23 versionName "2.2.2-native" @@ -36,8 +36,12 @@ android { } dependencies { - implementation 'com.android.support:appcompat-v7:27.1.0' - implementation 'com.android.support:design:27.1.0' - implementation 'com.android.support:exifinterface:27.1.0' - implementation 'com.squareup.okhttp3:okhttp:3.8.1' + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:design:28.0.0' + implementation 'com.android.support:exifinterface:28.0.0' + implementation 'com.squareup.okhttp3:okhttp:3.11.0' +} + +repositories { + google() } From 91ee731c3c7573f45cf31f7de5014b59f5dfb427 Mon Sep 17 00:00:00 2001 From: kirill Date: Tue, 2 Apr 2019 18:16:52 +0300 Subject: [PATCH 17/23] Dependencies versions update --- ucrop/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/ucrop/build.gradle b/ucrop/build.gradle index 63061154a..43bd7bd06 100644 --- a/ucrop/build.gradle +++ b/ucrop/build.gradle @@ -34,6 +34,7 @@ android { dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:exifinterface:28.0.0' + implementation 'com.android.support:design:28.0.0' implementation 'com.squareup.okhttp3:okhttp:3.11.0' } From 08c0c17045920340bb3e8e62fcd149a1b9565ae7 Mon Sep 17 00:00:00 2001 From: kirill Date: Thu, 4 Apr 2019 10:23:05 +0300 Subject: [PATCH 18/23] Fixed sample crash if max cropped size > Int.MAX_VALUE --- .../yalantis/ucrop/sample/SampleActivity.java | 96 ++++++++++++------- sample/src/main/res/values/strings.xml | 1 + 2 files changed, 63 insertions(+), 34 deletions(-) diff --git a/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java b/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java index c18a2c675..6ab1b335a 100644 --- a/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java +++ b/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java @@ -121,6 +121,55 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis } } + private TextWatcher mMaxWidthSizeTextWatcher = new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + handleChangedText(true, s); + } + }; + + + private TextWatcher mAspectRatioTextWatcher = new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + mRadioGroupAspectRatio.clearCheck(); + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }; + private TextWatcher mMaxHeightSizeTextWatcher = new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + handleChangedText(false, s); + } + }; + @SuppressWarnings("ConstantConditions") private void setupUI() { findViewById(R.id.button_crop).setOnClickListener(new View.OnClickListener() { @@ -184,47 +233,26 @@ public void onStopTrackingTouch(SeekBar seekBar) { } }); - mEditTextMaxHeight.addTextChangedListener(mMaxSizeTextWatcher); - mEditTextMaxWidth.addTextChangedListener(mMaxSizeTextWatcher); + mEditTextMaxHeight.addTextChangedListener(mMaxHeightSizeTextWatcher); + mEditTextMaxWidth.addTextChangedListener(mMaxWidthSizeTextWatcher); } - - private TextWatcher mAspectRatioTextWatcher = new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - mRadioGroupAspectRatio.clearCheck(); - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - - } - - @Override - public void afterTextChanged(Editable s) { - - } - }; - - private TextWatcher mMaxSizeTextWatcher = new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - - } - - @Override - public void afterTextChanged(Editable s) { - if (s != null && !s.toString().trim().isEmpty()) { + private void handleChangedText(Boolean isWidth, Editable s) { + if (s != null && !s.toString().trim().isEmpty()) { + try { if (Integer.valueOf(s.toString()) < UCrop.MIN_SIZE) { Toast.makeText(SampleActivity.this, String.format(getString(R.string.format_max_cropped_image_size), UCrop.MIN_SIZE), Toast.LENGTH_SHORT).show(); } + } catch (Throwable t) { + if (isWidth) { + mEditTextMaxWidth.setText(s.delete(s.length() - 1, s.length())); + } else { + mEditTextMaxHeight.setText(s.delete(s.length() - 1, s.length())); + } + Toast.makeText(SampleActivity.this, getString(R.string.format_max_cropped_image_size_resolution), Toast.LENGTH_SHORT).show(); } } - }; + } private void pickFromGallery() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml index c77ebb6b4..77044f37c 100644 --- a/sample/src/main/res/values/strings.xml +++ b/sample/src/main/res/values/strings.xml @@ -33,6 +33,7 @@ Quality: %d %1$dx%2$d px Max cropped image size cannot be less then %d + Too big resolution Permission needed Storage read permission is needed to pick files. From cd20315e9f8b221332a0041ef04e52f30e2dc057 Mon Sep 17 00:00:00 2001 From: kirill Date: Thu, 4 Apr 2019 13:31:57 +0300 Subject: [PATCH 19/23] Changed crash fix implementation --- .../yalantis/ucrop/sample/SampleActivity.java | 45 ++++--------------- .../src/main/res/layout/include_settings.xml | 2 + 2 files changed, 10 insertions(+), 37 deletions(-) diff --git a/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java b/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java index 6ab1b335a..f8d30f2e2 100644 --- a/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java +++ b/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java @@ -121,22 +121,6 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis } } - private TextWatcher mMaxWidthSizeTextWatcher = new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - - } - - @Override - public void afterTextChanged(Editable s) { - handleChangedText(true, s); - } - }; - private TextWatcher mAspectRatioTextWatcher = new TextWatcher() { @Override @@ -154,7 +138,7 @@ public void afterTextChanged(Editable s) { } }; - private TextWatcher mMaxHeightSizeTextWatcher = new TextWatcher() { + private TextWatcher mMaxSizeTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -166,7 +150,11 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { @Override public void afterTextChanged(Editable s) { - handleChangedText(false, s); + if (s != null && !s.toString().trim().isEmpty()) { + if (Integer.valueOf(s.toString()) < UCrop.MIN_SIZE) { + Toast.makeText(SampleActivity.this, String.format(getString(R.string.format_max_cropped_image_size), UCrop.MIN_SIZE), Toast.LENGTH_SHORT).show(); + } + } } }; @@ -233,25 +221,8 @@ public void onStopTrackingTouch(SeekBar seekBar) { } }); - mEditTextMaxHeight.addTextChangedListener(mMaxHeightSizeTextWatcher); - mEditTextMaxWidth.addTextChangedListener(mMaxWidthSizeTextWatcher); - } - - private void handleChangedText(Boolean isWidth, Editable s) { - if (s != null && !s.toString().trim().isEmpty()) { - try { - if (Integer.valueOf(s.toString()) < UCrop.MIN_SIZE) { - Toast.makeText(SampleActivity.this, String.format(getString(R.string.format_max_cropped_image_size), UCrop.MIN_SIZE), Toast.LENGTH_SHORT).show(); - } - } catch (Throwable t) { - if (isWidth) { - mEditTextMaxWidth.setText(s.delete(s.length() - 1, s.length())); - } else { - mEditTextMaxHeight.setText(s.delete(s.length() - 1, s.length())); - } - Toast.makeText(SampleActivity.this, getString(R.string.format_max_cropped_image_size_resolution), Toast.LENGTH_SHORT).show(); - } - } + mEditTextMaxHeight.addTextChangedListener(mMaxSizeTextWatcher); + mEditTextMaxWidth.addTextChangedListener(mMaxSizeTextWatcher); } private void pickFromGallery() { diff --git a/sample/src/main/res/layout/include_settings.xml b/sample/src/main/res/layout/include_settings.xml index abdaae8bf..74f7a142d 100644 --- a/sample/src/main/res/layout/include_settings.xml +++ b/sample/src/main/res/layout/include_settings.xml @@ -165,6 +165,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" + android:maxLength="9" android:gravity="center" android:hint="@string/label_width" android:inputType="number" /> @@ -180,6 +181,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" + android:maxLength="9" android:gravity="center" android:hint="@string/label_height" android:inputType="number" /> From 53e220260ececb07bd54a60b99fa7cf5d99e7754 Mon Sep 17 00:00:00 2001 From: kirill Date: Thu, 4 Apr 2019 13:57:56 +0300 Subject: [PATCH 20/23] Fixed samsung hardware menu button crash --- .../main/java/com/yalantis/ucrop/sample/SampleActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java b/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java index f8d30f2e2..50bb08a76 100644 --- a/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java +++ b/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java @@ -524,7 +524,7 @@ public boolean onCreateOptionsMenu(final Menu menu) { } MenuItem menuItemCrop = menu.findItem(R.id.menu_crop); - Drawable menuItemCropIcon = ContextCompat.getDrawable(this, mToolbarCropDrawable); + Drawable menuItemCropIcon = ContextCompat.getDrawable(this, mToolbarCropDrawable == 0 ? R.drawable.ucrop_ic_done : mToolbarCropDrawable); if (menuItemCropIcon != null) { menuItemCropIcon.mutate(); menuItemCropIcon.setColorFilter(mToolbarWidgetColor, PorterDuff.Mode.SRC_ATOP); @@ -544,7 +544,7 @@ public boolean onPrepareOptionsMenu(Menu menu) { @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.menu_crop) { - if (fragment.isAdded()) + if (fragment != null && fragment.isAdded()) fragment.cropAndSaveImage(); } else if (item.getItemId() == android.R.id.home) { removeFragmentFromScreen(); From c1b67889d96df0d646118cdaf35b56b8875954b4 Mon Sep 17 00:00:00 2001 From: ukevgen Date: Thu, 4 Apr 2019 18:08:56 +0300 Subject: [PATCH 21/23] update readme and app version 2.2.3 with version code 24 --- README.md | 12 +++++++----- sample/build.gradle | 4 ++-- ucrop/build.gradle | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5bbfd1f30..d5b0e5764 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,9 @@ } ``` - ``` compile 'com.github.yalantis:ucrop:2.2.2' ``` - lightweight general solution + ``` implementation 'com.github.yalantis:ucrop:2.2.3' ``` - lightweight general solution - ``` compile 'com.github.yalantis:ucrop:2.2.2-native' ``` - get power of the native code to preserve image quality (+ about 1.5 MB to an apk size) + ``` implementation 'com.github.yalantis:ucrop:2.2.3-native' ``` - get power of the native code to preserve image quality (+ about 1.5 MB to an apk size) 2. Add UCropActivity into your AndroidManifest.xml @@ -92,10 +92,12 @@ Currently you can change: * CPU - armeabi armeabi-v7a x86 x86_64 arm64-v8a (for versions >= 2.1.2) # Changelog -### Version: 2.2.2 +### Version: 2.2.3 -* uCrop fragment added -* bugfix + * Several fixes including [#445](https://github.com/Yalantis/uCrop/issues/445), [#465](https://github.com/Yalantis/uCrop/issues/465) and more! + * Material design support + * uCrop fragment as child fragment + * Added Italian language ### Version: 2.2.2 diff --git a/sample/build.gradle b/sample/build.gradle index 8a9b89d52..37c3cc3de 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -7,8 +7,8 @@ android { applicationId "com.yalantis.ucrop.sample" minSdkVersion 14 targetSdkVersion 28 - versionCode 11 - versionName "1.2.3" + versionCode 12 + versionName "1.2.4" } flavorDimensions "default" buildTypes { diff --git a/ucrop/build.gradle b/ucrop/build.gradle index 43bd7bd06..93a73e2ad 100644 --- a/ucrop/build.gradle +++ b/ucrop/build.gradle @@ -8,8 +8,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 28 - versionCode 23 - versionName "2.2.2-non-native" + versionCode 24 + versionName "2.2.3-non-native" vectorDrawables.useSupportLibrary = true } From 6ed883e32f517a59a48fd7983fc97dbf81cce1f1 Mon Sep 17 00:00:00 2001 From: ukevgen Date: Thu, 4 Apr 2019 21:34:16 +0300 Subject: [PATCH 22/23] gradle properties sync library version --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 11d90f9cf..358b8ccfb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,8 +17,8 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -VERSION_NAME=2.2.0-native -VERSION_CODE=22 +VERSION_NAME=2.2.3-native +VERSION_CODE=24 GROUP=com.yalantis POM_DESCRIPTION=Android Library for cropping images From 765d7ac7263fc0e36dffe8f2366deeb7816911fe Mon Sep 17 00:00:00 2001 From: ukevgen Date: Thu, 4 Apr 2019 21:37:53 +0300 Subject: [PATCH 23/23] gradle properties add non-native part --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 358b8ccfb..fad32fa34 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,7 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -VERSION_NAME=2.2.3-native +VERSION_NAME=2.2.3-non-native VERSION_CODE=24 GROUP=com.yalantis