From 9cf77f5d625077c6ce31e2d74eb1ccddb8ee5755 Mon Sep 17 00:00:00 2001 From: kirill Date: Mon, 18 Mar 2019 15:52:30 +0200 Subject: [PATCH 01/15] Updated dependencies and migration to androidx --- build.gradle | 6 +-- gradle.properties | 4 +- gradle/wrapper/gradle-wrapper.properties | 4 +- sample/build.gradle | 16 +++---- sample/src/main/AndroidManifest.xml | 2 +- .../yalantis/ucrop/sample/BaseActivity.java | 11 ++--- .../yalantis/ucrop/sample/ResultActivity.java | 13 +++--- .../yalantis/ucrop/sample/SampleActivity.java | 15 ++++--- .../src/main/res/layout/activity_result.xml | 2 +- .../src/main/res/layout/activity_sample.xml | 12 +++--- ucrop/build.gradle | 12 +++--- .../main/java/com/yalantis/ucrop/UCrop.java | 43 +++++-------------- .../com/yalantis/ucrop/UCropActivity.java | 19 ++++---- .../com/yalantis/ucrop/UCropFragment.java | 17 ++++---- .../ucrop/callback/BitmapCropCallback.java | 3 +- .../ucrop/callback/BitmapLoadCallback.java | 5 ++- .../com/yalantis/ucrop/model/AspectRatio.java | 3 +- .../yalantis/ucrop/task/BitmapCropTask.java | 7 +-- .../yalantis/ucrop/task/BitmapLoadTask.java | 6 +-- .../yalantis/ucrop/util/BitmapLoadUtils.java | 7 +-- .../com/yalantis/ucrop/util/FileUtils.java | 3 +- .../ucrop/util/ImageHeaderParser.java | 3 +- .../ucrop/util/RotationGestureDetector.java | 3 +- .../yalantis/ucrop/view/CropImageView.java | 7 +-- .../com/yalantis/ucrop/view/OverlayView.java | 9 ++-- .../ucrop/view/TransformImageView.java | 11 ++--- .../com/yalantis/ucrop/view/UCropView.java | 7 +-- .../view/widget/AspectRatioTextView.java | 13 +++--- .../widget/HorizontalProgressWheelView.java | 5 ++- .../res/layout/ucrop_activity_photobox.xml | 4 +- ucrop/src/main/res/layout/ucrop_controls.xml | 9 ++-- .../res/layout/ucrop_layout_rotate_wheel.xml | 7 +-- ucrop/src/main/res/values/styles.xml | 4 +- 33 files changed, 148 insertions(+), 144 deletions(-) diff --git a/build.gradle b/build.gradle index 9a0c7da21..2688ca725 100644 --- a/build.gradle +++ b/build.gradle @@ -9,14 +9,14 @@ 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' - constraints = '1.0.2' + support = '1.1.0-alpha02' + constraints = '1.1.3' } } diff --git a/gradle.properties b/gradle.properties index 11d90f9cf..652b18125 100644 --- a/gradle.properties +++ b/gradle.properties @@ -30,4 +30,6 @@ POM_LICENCE_NAME=The Apache Software License, Version 2.0 POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0 POM_LICENCE_DIST=repo POM_DEVELOPER_ID=yalantis -POM_DEVELOPER_NAME=Yalantis \ No newline at end of file +POM_DEVELOPER_NAME=Yalantis +android.useAndroidX=true +android.enableJetifier=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9900a61ad..0aae864a6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Apr 05 11:34:38 EEST 2018 +#Mon Mar 18 15:02:35 EET 2019 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..0e9a8e572 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,14 +1,14 @@ 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 - versionCode 11 - versionName "1.2.3" + targetSdkVersion 28 + versionCode 12 + versionName "1.2.4" } flavorDimensions "default" buildTypes { @@ -35,8 +35,8 @@ 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 "androidx.appcompat:appcompat:1.1.0-alpha02" + implementation "androidx.core:core:1.0.1" + implementation "androidx.constraintlayout:constraintlayout:1.1.3" implementation project(':ucrop') } \ No newline at end of file diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index eac8f2f04..940116d88 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -12,7 +12,7 @@ android:label="@string/app_name" android:theme="@style/AppTheme"> diff --git a/sample/src/main/java/com/yalantis/ucrop/sample/BaseActivity.java b/sample/src/main/java/com/yalantis/ucrop/sample/BaseActivity.java index e754819ea..d06dc8dfc 100644 --- a/sample/src/main/java/com/yalantis/ucrop/sample/BaseActivity.java +++ b/sample/src/main/java/com/yalantis/ucrop/sample/BaseActivity.java @@ -1,11 +1,12 @@ package com.yalantis.ucrop.sample; import android.content.DialogInterface; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; /** * Created by Oleksii Shliama (https://github.com/shliama). diff --git a/sample/src/main/java/com/yalantis/ucrop/sample/ResultActivity.java b/sample/src/main/java/com/yalantis/ucrop/sample/ResultActivity.java index ea736c6a4..7d7d935f2 100755 --- a/sample/src/main/java/com/yalantis/ucrop/sample/ResultActivity.java +++ b/sample/src/main/java/com/yalantis/ucrop/sample/ResultActivity.java @@ -15,12 +15,6 @@ import android.os.Build; import android.os.Bundle; import android.os.Environment; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.NotificationCompat; -import android.support.v4.content.FileProvider; -import android.support.v7.app.ActionBar; -import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -35,6 +29,13 @@ import java.util.Calendar; import java.util.List; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.widget.Toolbar; +import androidx.core.app.ActivityCompat; +import androidx.core.app.NotificationCompat; +import androidx.core.content.FileProvider; + import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION; import static android.content.Intent.FLAG_GRANT_WRITE_URI_PERMISSION; 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..acd0d13cf 100644 --- a/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java +++ b/sample/src/main/java/com/yalantis/ucrop/sample/SampleActivity.java @@ -11,13 +11,6 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.support.annotation.ColorInt; -import android.support.annotation.DrawableRes; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.ActionBar; -import android.support.v7.widget.Toolbar; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; @@ -43,6 +36,14 @@ import java.util.Locale; import java.util.Random; +import androidx.annotation.ColorInt; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.widget.Toolbar; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + /** * Created by Oleksii Shliama (https://github.com/shliama). */ diff --git a/sample/src/main/res/layout/activity_result.xml b/sample/src/main/res/layout/activity_result.xml index 5d888e289..27d854983 100755 --- a/sample/src/main/res/layout/activity_result.xml +++ b/sample/src/main/res/layout/activity_result.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" android:orientation="vertical"> - - - + android:visibility="gone" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + - \ No newline at end of file + \ No newline at end of file diff --git a/ucrop/build.gradle b/ucrop/build.gradle index 21e4f5ffa..6844656ae 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-non-native" @@ -32,7 +32,7 @@ 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' + implementation 'androidx.appcompat:appcompat:1.1.0-alpha02' + implementation 'androidx.exifinterface:exifinterface:1.1.0-alpha01' + implementation 'com.squareup.okhttp3:okhttp:3.11.0' } diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java index d6cd45a10..61d019ef9 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java @@ -1,21 +1,11 @@ package com.yalantis.ucrop; -import android.annotation.TargetApi; -import android.app.Activity; -import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.os.Parcelable; -import android.support.annotation.ColorInt; -import android.support.annotation.DrawableRes; -import android.support.annotation.FloatRange; -import android.support.annotation.IntRange; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import com.yalantis.ucrop.model.AspectRatio; @@ -23,6 +13,15 @@ import java.util.Arrays; import java.util.Locale; +import androidx.annotation.ColorInt; +import androidx.annotation.DrawableRes; +import androidx.annotation.FloatRange; +import androidx.annotation.IntRange; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; + /** * Created by Oleksii Shliama (https://github.com/shliama). *

@@ -124,7 +123,7 @@ public UCrop withOptions(@NonNull Options options) { * * @param activity Activity to receive result */ - public void start(@NonNull Activity activity) { + public void start(@NonNull AppCompatActivity activity) { start(activity, REQUEST_CROP); } @@ -134,7 +133,7 @@ public void start(@NonNull Activity activity) { * @param activity Activity to receive result * @param requestCode requestCode for result */ - public void start(@NonNull Activity activity, int requestCode) { + public void start(@NonNull AppCompatActivity activity, int requestCode) { activity.startActivityForResult(getIntent(activity), requestCode); } @@ -147,36 +146,16 @@ public void start(@NonNull Context context, @NonNull Fragment fragment) { start(context, fragment, REQUEST_CROP); } - /** - * Send the crop Intent from a support library Fragment - * - * @param fragment Fragment to receive result - */ - public void start(@NonNull Context context, @NonNull android.support.v4.app.Fragment fragment) { - start(context, fragment, REQUEST_CROP); - } - /** * Send the crop Intent with a custom request code * * @param fragment Fragment to receive result * @param requestCode requestCode for result */ - @TargetApi(Build.VERSION_CODES.HONEYCOMB) public void start(@NonNull Context context, @NonNull Fragment fragment, int requestCode) { fragment.startActivityForResult(getIntent(context), requestCode); } - /** - * Send the crop Intent with a custom request code - * - * @param fragment Fragment to receive result - * @param requestCode requestCode for result - */ - public void start(@NonNull Context context, @NonNull android.support.v4.app.Fragment fragment, int requestCode) { - fragment.startActivityForResult(getIntent(context), requestCode); - } - /** * Get Intent to start {@link UCropActivity} * diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java index 36b8b85f7..aae381b02 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java @@ -9,15 +9,6 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.support.annotation.ColorInt; -import android.support.annotation.DrawableRes; -import android.support.annotation.IdRes; -import android.support.annotation.IntDef; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; import android.view.Menu; @@ -50,6 +41,16 @@ import java.util.List; import java.util.Locale; +import androidx.annotation.ColorInt; +import androidx.annotation.DrawableRes; +import androidx.annotation.IdRes; +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.core.content.ContextCompat; + /** * Created by Oleksii Shliama (https://github.com/shliama). */ diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java index 2e64450c4..ee4260cb6 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java @@ -6,13 +6,6 @@ import android.graphics.PorterDuff; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.ColorInt; -import android.support.annotation.IdRes; -import android.support.annotation.IntDef; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -41,7 +34,15 @@ import java.util.List; import java.util.Locale; -import static android.app.Activity.RESULT_OK; +import androidx.annotation.ColorInt; +import androidx.annotation.IdRes; +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import static androidx.appcompat.app.AppCompatActivity.RESULT_OK; @SuppressWarnings("ConstantConditions") public class UCropFragment extends Fragment { diff --git a/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapCropCallback.java b/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapCropCallback.java index afe82e43d..c3a712767 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapCropCallback.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapCropCallback.java @@ -1,7 +1,8 @@ package com.yalantis.ucrop.callback; import android.net.Uri; -import android.support.annotation.NonNull; + +import androidx.annotation.NonNull; public interface BitmapCropCallback { diff --git a/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapLoadCallback.java b/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapLoadCallback.java index b66d87eb4..91815bd0f 100755 --- a/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapLoadCallback.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapLoadCallback.java @@ -1,11 +1,12 @@ package com.yalantis.ucrop.callback; import android.graphics.Bitmap; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import com.yalantis.ucrop.model.ExifInfo; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + public interface BitmapLoadCallback { void onBitmapLoaded(@NonNull Bitmap bitmap, @NonNull ExifInfo exifInfo, @NonNull String imageInputPath, @Nullable String imageOutputPath); diff --git a/ucrop/src/main/java/com/yalantis/ucrop/model/AspectRatio.java b/ucrop/src/main/java/com/yalantis/ucrop/model/AspectRatio.java index 65ca4548c..2a76e425d 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/model/AspectRatio.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/model/AspectRatio.java @@ -2,7 +2,8 @@ import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.Nullable; + +import androidx.annotation.Nullable; /** * Created by Oleksii Shliama [https://github.com/shliama] on 6/24/16. 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 51bc106ef..5c729e36b 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java @@ -6,9 +6,6 @@ import android.graphics.RectF; 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; @@ -25,6 +22,10 @@ import java.io.OutputStream; import java.lang.ref.WeakReference; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.exifinterface.media.ExifInterface; + /** * Crops part of image that fills the crop bounds. *

diff --git a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapLoadTask.java b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapLoadTask.java index d869e9816..c836fdd11 100755 --- a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapLoadTask.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapLoadTask.java @@ -10,9 +10,6 @@ import android.os.AsyncTask; import android.os.Build; import android.os.ParcelFileDescriptor; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.util.Log; @@ -29,6 +26,9 @@ import java.io.InputStream; import java.io.OutputStream; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; 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 f90befe43..77d08996d 100755 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java @@ -7,9 +7,6 @@ import android.graphics.Matrix; import android.graphics.Point; import android.net.Uri; -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; @@ -21,6 +18,10 @@ import java.io.IOException; import java.io.InputStream; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.exifinterface.media.ExifInterface; + /** * Created by Oleksii Shliama (https://github.com/shliama). */ diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/FileUtils.java b/ucrop/src/main/java/com/yalantis/ucrop/util/FileUtils.java index 54d52fe2c..913bf8c4e 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/FileUtils.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/FileUtils.java @@ -25,7 +25,6 @@ import android.os.Environment; import android.provider.DocumentsContract; import android.provider.MediaStore; -import android.support.annotation.NonNull; import android.text.TextUtils; import android.util.Log; @@ -36,6 +35,8 @@ import java.nio.channels.FileChannel; import java.util.Locale; +import androidx.annotation.NonNull; + /** * @author Peli * @author paulburke (ipaulpro) 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 d3283cffe..ebde7c5eb 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,6 @@ package com.yalantis.ucrop.util; -import android.support.media.ExifInterface; import android.text.TextUtils; import android.util.Log; @@ -40,6 +39,8 @@ import java.nio.ByteOrder; import java.nio.charset.Charset; +import androidx.exifinterface.media.ExifInterface; + /** * A class for parsing the exif orientation from an image header. */ diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/RotationGestureDetector.java b/ucrop/src/main/java/com/yalantis/ucrop/util/RotationGestureDetector.java index 4fd8e5c38..302a8942b 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/RotationGestureDetector.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/RotationGestureDetector.java @@ -1,8 +1,9 @@ package com.yalantis.ucrop.util; -import android.support.annotation.NonNull; import android.view.MotionEvent; +import androidx.annotation.NonNull; + public class RotationGestureDetector { private static final int INVALID_POINTER_INDEX = -1; diff --git a/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java index caa85c8dc..8496df76a 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java @@ -6,9 +6,6 @@ import android.graphics.Matrix; import android.graphics.RectF; import android.graphics.drawable.Drawable; -import android.support.annotation.IntRange; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.util.AttributeSet; import com.yalantis.ucrop.R; @@ -23,6 +20,10 @@ import java.lang.ref.WeakReference; import java.util.Arrays; +import androidx.annotation.IntRange; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + /** * Created by Oleksii Shliama (https://github.com/shliama). *

diff --git a/ucrop/src/main/java/com/yalantis/ucrop/view/OverlayView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/OverlayView.java index 5954f5f39..eb5397015 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/OverlayView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/OverlayView.java @@ -8,10 +8,6 @@ import android.graphics.RectF; import android.graphics.Region; import android.os.Build; -import android.support.annotation.ColorInt; -import android.support.annotation.IntDef; -import android.support.annotation.IntRange; -import android.support.annotation.NonNull; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; @@ -23,6 +19,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import androidx.annotation.ColorInt; +import androidx.annotation.IntDef; +import androidx.annotation.IntRange; +import androidx.annotation.NonNull; + /** * Created by Oleksii Shliama (https://github.com/shliama). *

diff --git a/ucrop/src/main/java/com/yalantis/ucrop/view/TransformImageView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/TransformImageView.java index 294039ef7..91d348b2f 100755 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/TransformImageView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/TransformImageView.java @@ -6,12 +6,8 @@ import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.support.annotation.IntRange; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.util.AttributeSet; import android.util.Log; -import android.widget.ImageView; import com.yalantis.ucrop.callback.BitmapLoadCallback; import com.yalantis.ucrop.model.ExifInfo; @@ -19,13 +15,18 @@ import com.yalantis.ucrop.util.FastBitmapDrawable; import com.yalantis.ucrop.util.RectUtils; +import androidx.annotation.IntRange; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatImageView; + /** * Created by Oleksii Shliama (https://github.com/shliama). *

* This class provides base logic to setup the image, transform it with matrix (move, scale, rotate), * and methods to get current matrix state. */ -public class TransformImageView extends ImageView { +public class TransformImageView extends AppCompatImageView { private static final String TAG = "TransformImageView"; 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..81a49aceb 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/UCropView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/UCropView.java @@ -3,7 +3,6 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.RectF; -import android.support.annotation.NonNull; import android.util.AttributeSet; import android.view.LayoutInflater; import android.widget.FrameLayout; @@ -12,6 +11,8 @@ import com.yalantis.ucrop.callback.CropBoundsChangeListener; import com.yalantis.ucrop.callback.OverlayViewChangeListener; +import androidx.annotation.NonNull; + public class UCropView extends FrameLayout { private GestureCropImageView mGestureCropImageView; @@ -25,8 +26,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/java/com/yalantis/ucrop/view/widget/AspectRatioTextView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/widget/AspectRatioTextView.java index 43397f49d..a0ec024b6 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 @@ -8,13 +8,9 @@ import android.graphics.Paint; import android.graphics.Rect; import android.os.Build; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.util.AttributeSet; import android.view.Gravity; -import android.widget.TextView; import com.yalantis.ucrop.R; import com.yalantis.ucrop.model.AspectRatio; @@ -22,10 +18,15 @@ import java.util.Locale; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.content.ContextCompat; + /** * Created by Oleksii Shliama (https://github.com/shliama). */ -public class AspectRatioTextView extends TextView { +public class AspectRatioTextView extends AppCompatTextView { private final Rect mCanvasClipBounds = new Rect(); private Paint mDotPaint; @@ -51,7 +52,7 @@ public AspectRatioTextView(Context context, AttributeSet attrs, int defStyleAttr @TargetApi(Build.VERSION_CODES.LOLLIPOP) public AspectRatioTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); + super(context, attrs, defStyleAttr); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ucrop_AspectRatioTextView); init(a); } 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..236a25238 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 @@ -6,14 +6,15 @@ import android.graphics.Paint; import android.graphics.Rect; import android.os.Build; -import android.support.annotation.ColorInt; -import android.support.v4.content.ContextCompat; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import com.yalantis.ucrop.R; +import androidx.annotation.ColorInt; +import androidx.core.content.ContextCompat; + /** * Created by Oleksii Shliama (https://github.com/shliama). */ diff --git a/ucrop/src/main/res/layout/ucrop_activity_photobox.xml b/ucrop/src/main/res/layout/ucrop_activity_photobox.xml index 7434c4a4b..f0ef3d0c2 100644 --- a/ucrop/src/main/res/layout/ucrop_activity_photobox.xml +++ b/ucrop/src/main/res/layout/ucrop_activity_photobox.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + - + + app:srcCompat="@drawable/ucrop_ic_scale" /> @@ -59,7 +60,7 @@ + app:srcCompat="@drawable/ucrop_ic_crop" /> @@ -70,7 +71,7 @@ + app:srcCompat="@drawable/ucrop_ic_rotate" /> 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..49b231211 100644 --- a/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml +++ b/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml @@ -1,6 +1,7 @@ + app:srcCompat="@drawable/ucrop_ic_reset" /> @@ -42,7 +43,7 @@ + app:srcCompat="@drawable/ucrop_ic_angle" /> diff --git a/ucrop/src/main/res/values/styles.xml b/ucrop/src/main/res/values/styles.xml index fbeb4c4ba..8821a0ea2 100644 --- a/ucrop/src/main/res/values/styles.xml +++ b/ucrop/src/main/res/values/styles.xml @@ -13,14 +13,14 @@ 0dp match_parent 1 - ?attr/selectableItemBackground + ?attr/selectableItemBackground true From ce3edc52243253760d9335971725afe649fd61ce Mon Sep 17 00:00:00 2001 From: AlexZandR Date: Fri, 6 Sep 2019 16:20:05 +0300 Subject: [PATCH 02/15] Updated gradle version --- build.gradle | 11 +---------- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/build.gradle b/build.gradle index 2688ca725..2f643119f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,3 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - buildscript { repositories { jcenter() @@ -9,14 +7,7 @@ buildscript { } } dependencies { - 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 = '1.1.0-alpha02' - constraints = '1.1.3' + classpath 'com.android.tools.build:gradle:3.5.0' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0aae864a6..4e45728a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Mar 18 15:02:35 EET 2019 +#Fri Sep 06 15:42:38 EEST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip From 3db208112229a36a8647340b1028982382c9e90e Mon Sep 17 00:00:00 2001 From: AlexZandR Date: Fri, 6 Sep 2019 16:21:43 +0300 Subject: [PATCH 03/15] Updated androidX dependencies versions --- gradle.properties | 3 +-- sample/build.gradle | 4 ++-- ucrop/build.gradle | 6 +++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index 652b18125..93c64c3c2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -31,5 +31,4 @@ POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0 POM_LICENCE_DIST=repo POM_DEVELOPER_ID=yalantis POM_DEVELOPER_NAME=Yalantis -android.useAndroidX=true -android.enableJetifier=true \ No newline at end of file +android.useAndroidX=true \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index 0e9a8e572..36da326d6 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -35,8 +35,8 @@ android { } dependencies { - implementation "androidx.appcompat:appcompat:1.1.0-alpha02" - implementation "androidx.core:core:1.0.1" + implementation "androidx.appcompat:appcompat:1.1.0" + implementation "androidx.core:core:1.1.0" implementation "androidx.constraintlayout:constraintlayout:1.1.3" implementation project(':ucrop') } \ No newline at end of file diff --git a/ucrop/build.gradle b/ucrop/build.gradle index 6844656ae..b927c9b07 100644 --- a/ucrop/build.gradle +++ b/ucrop/build.gradle @@ -32,7 +32,7 @@ android { } dependencies { - implementation 'androidx.appcompat:appcompat:1.1.0-alpha02' - implementation 'androidx.exifinterface:exifinterface:1.1.0-alpha01' - implementation 'com.squareup.okhttp3:okhttp:3.11.0' + implementation "androidx.appcompat:appcompat:1.1.0" + implementation 'androidx.exifinterface:exifinterface:1.1.0-beta01' + implementation 'com.squareup.okhttp3:okhttp:3.12.1' } From 37a98399734549021ec8d778d66081f6d5365fb6 Mon Sep 17 00:00:00 2001 From: AlexZandR Date: Fri, 6 Sep 2019 16:24:02 +0300 Subject: [PATCH 04/15] Updated version code --- gradle.properties | 4 ++-- sample/build.gradle | 2 +- ucrop/build.gradle | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index 93c64c3c2..d13941087 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.2-non-native +VERSION_CODE=24 GROUP=com.yalantis POM_DESCRIPTION=Android Library for cropping images diff --git a/sample/build.gradle b/sample/build.gradle index 36da326d6..ce8dda607 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -7,7 +7,7 @@ android { applicationId "com.yalantis.ucrop.sample" minSdkVersion 14 targetSdkVersion 28 - versionCode 12 + versionCode 13 versionName "1.2.4" } flavorDimensions "default" diff --git a/ucrop/build.gradle b/ucrop/build.gradle index b927c9b07..d4a6c4dcd 100644 --- a/ucrop/build.gradle +++ b/ucrop/build.gradle @@ -8,7 +8,7 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 28 - versionCode 23 + versionCode 24 versionName "2.2.2-non-native" vectorDrawables.useSupportLibrary = true From c08dc502ec7860b262d84eedf79441347e1ee459 Mon Sep 17 00:00:00 2001 From: kirill Date: Thu, 28 Mar 2019 09:55:08 +0200 Subject: [PATCH 05/15] Bottom controls changed (cherry picked from commit 779b0845d1afd9ded5a872687ec2a694ace8f772) --- .../main/java/com/yalantis/ucrop/UCrop.java | 1 + .../com/yalantis/ucrop/UCropActivity.java | 24 ++++++-- .../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 | 58 ++++++++++++------ .../res/layout/ucrop_layout_rotate_wheel.xml | 17 ++--- ucrop/src/main/res/values/colors.xml | 7 ++- ucrop/src/main/res/values/strings.xml | 3 + ucrop/src/main/res/values/styles.xml | 12 ++++ 57 files changed, 213 insertions(+), 37 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/src/main/java/com/yalantis/ucrop/UCrop.java b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java index 61d019ef9..93d6b2169 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java @@ -262,6 +262,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 36384f53d..76f95ac99 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java @@ -73,7 +73,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; @@ -84,6 +84,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; @@ -105,6 +106,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}; @@ -275,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); @@ -292,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); @@ -385,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)); } @@ -579,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 zcmV+^1lIeBP)Px&<4Ht8RCod9n_EZ}Q5eTvD~d8ptWe6phU_NDmPN`XE?T5+rniB3S4`QBtPe%yRpE!OCIT)^8r#alZ4xpFK14 zKQrh5pEGA>&wP`Y7eXYH$x?6`yaDgPRZtc}Q^G$a!b`w=kRH9Ps1Cn{Ic@=>FQq%- zEQ={sIc`$8hePm7$AC=5kF1P`)yn)34m>o%F^kyVhA9h1;Qg1)VHnb(P*M!19aH8j zxY4E{QU=u?pozDTDx$4e(RxHy0U1CwA-Cqairq$=g2-ynr*Q<148-NpR;*|}B5S}G zpos*e*^1ppn}W!t;2Y4y3rI7gtys}|MAm}u8b{zf1Eq@HMw^1jRbT*U;whvV(N?Tz zJtEhEpBhKtJOa}cyNxylksH7u(8NPX@?>i}5V;Bb(l`R=0hnUj5!4}aEBFmGaSzgD zA55u3=#a({IJZH852ox4U`hwvi9VRJ8==~ef5{VkFr`uJ2)tWhybq=v3}DI)xZ`{< zBp*F8X51=>Vo&fE&y0X$#?K zh&&g-l(X5I_;&1M3Dl-ub zuWQDX1L^w2(I()V8REl!I>QMmxFLqDbys*+K7=VpUCnaId}f7QHa^D=E}s@LKzc~G z&rYEIK4?vOAch=EEqM6biRM~*M{i1dJ_~IuYy*9%m7e^zqjM$t`(3@mPi>4P@>f~z zHc_0gEuh`!f%dK5O}HB|V}M^zgVgZUy)XG$DCu>rENpib32O@I&JS9LZccfGY-ZTYxs% zPR5oRx4x+|;o&AeLx%X?Tp%7|;wIss4SJ!Y9Qz!ihIVxavtMrOoH-1_Fq2$ZK#O-NFI zC|^3{deU{IZ+4{Px=k4Z#9RCodHom;3~M;XVH<0X|ev0{Y~Y*-Z16TC!TqEd#~HsIUoF)S#$a3|NYmTS+i#Cv@2FD+p+@JvH~l69Q<|Sc8f5*h)qfhVXd$x zfU+xI3UERB1>vM{Y7wWEzAE(2`g8-{Bz0~RwhG&X+l5s^9riCdIVKzx=7cAOe+$>V zO-X_6!mPk7{%=cQEXHJPI9zkKK@mSBJSVgzx;G9S-~y+Kw~dPMpm0&}1nH_APH=WGXf1^;<*fl*UJS^}KUvhSr7_I*m>~GT7e4XL7*#kC1F@|3$PMzc+Rh6*1@`z&8)GomyujGGJc)_edToW+9T#$f;!pfhp_R2(Im;6<5^Jw)Mr?Sq940<%a3S>73K4_jusDd7 zn0sOOi^Z_D^jWpJrx$GVNWc}&sT)De#NMgx)95LZ)EyCS=#=GXgToo_!{S4OPK>*s zBFEl&S0~Ks9h4Y|B^7Jye+e@~2%S^?7GYA1Scu8H2`oow(u%PINIh^l+#J9-y}?`5gRdje+g()2#pwTfxL)#gEKoOS$q?f7*l@b#Akh+#AQceMU7Zf&jhrp)i{ju#Ak;vNe|py;fOi4JF4vfk0a&Nf_DRU976-|*aGdwI_*6y2j1PSa<=ns`6(ayLb?#TwpAkVgiwx?n~-a0QSNWo zXgHE>RIf{dISNxw46E29Y8>{r{4*-=a_j1e55Kcj0#sY?6cr88va&s<9wtXBtgq;=j^-)xN4WuoNO|8A4pt?+K^-m%q41XfZdGS$|6$>>;}5^QUAFm5 z7$!cP_6b#OzdD#sVTzV$nr-}0DRf|Y*6~qi>o**q=KE>Yze8x+a>VDEkoyo0`JxRP zSxjMyrdc+nR^F>N-%rP}J?b2iD(9b4{oBVGU`XFw@o6`zp;0+5uF({2huRLch&f;h z8EZ?mIP$k0|2F3DRsXidwsj_Lh!0;h@|N4}IRVY8k%ff5_ zE2mjo;v1KFWh|C3Mcbrtis$`Gd1ta`^~%)Y9;A;6YpS~)=+Ua4U5F1|wDPv3Xzbcv)x?CT`r_pdP^ws|>mN8{8jm^E zzopbK=dvsDjhpvk#zw?7g0;ZIbhq1M{0eTuW6rq7;TNi}^5fpF#YYu1GyY*ZM`g?i z(A&dqj&-Q9Y)Za+pg)FiV@ZH)wz#3o+7G z#-DZSA=Vf1(F)Db&bWtZbV7g5Y5a4Qw`FhCK&kU}g7}F*yR!93eB*|8q41VR>np~e zzS$>n1P%Bj@)CsfYe&RR1G^zZf&b|EchCD~O~lVf5uQVq12~8E86Ien^FO zhr;wrvBnLTaSp?IOvt00hc6STk27Dit{B>td2Vx zX4s9Qo}1K#eN=-Q*Dyuv0eea%VI#}Gcc5i^1?>NiI=qZuD(zByR6@HLKeQgOGb)KS zE(Th*Td-Qg{Yr>&OOxmo_|PAuGp(xJ}=>2nzbSzoUPn9;sB zP5Qh9^JyR}%G2S9#h+wLT;^Hgm$Xi=&8~ znQyzDcZ&Bj4tI;=i%l!-`2VuQ3$3qM_!n@>3QMVXNLOlB+hxwo4-eMvE8hK=LDPe<@B=ZX3Cu!zV^Eo+aI;d@3R)_e;g(dTOAq+Uo^UdL2 zYusS!O=vVm>!{7CG$d>JCO^v8DZT~u9%a1QM@;;iUOvt=X_Y_9LuRjFqKE0@4KZy( ze53k4WjMMB;|TK?Rre`t+(3$E;dqu${w(DVr_;+S=P;~JYf^mU`F>^23l@AiWjXkm zHLfv5D>N&Q$2A(e#xD+D5@H>9y1lAbv?0E+`k*p@7h*9{_KL7WsMF9YHXhodanfd0 z8|yru?3G{HrufEci!$ECBG!Kj9}()Zc{z${h_*v*yIRCLvyW!4J&tuDzVW?N8HA3- zM%h1vHmD`r zv@$ua_h)-~t>He$m-%l?d}H(pW%z1lWIKC!;eOgqnnTv>V%2$-`+ObR6b)jXlEBbwKQ)7GWOE(5@C^?;JW0^K9p~)H2G_ zazf0htt^_=Y6s*k6h6$KQ{D1^wC^>2(5iOh6fgDLOkTBbs(sY{IV48!sD??2Mng|L zM-8h`$MZrs`@{T6)lKqEAU0wQV-E9ZQwWXP-SY0eyg-K8F^S6&F{NfcnxIW9HltCz zBUf$$&xA>OFcS+gg|j`(qXn9@YWHijkVHAp4uNgjQa55q?RJP8EjlsYXv@NvuaBrr z?i+I_K{$iL8SdqH%GYSnsd4vH%MpZmRj+b()M-GAT)pE3y8*=9*~~8sG^2vlgV{)P zVpxjb-UU z;bDRIfF*6LwTFdELO8qnn1>@=;XHA+Q4t*!E((1UA5L(Cn z&+|6hx%KG=l*M4z6z*oGbzKPTP)Px+_(?=TRCodHoC&B_MHI(1(^qa-DuqZqHMg(`vvA9WB0~}-p^bt>g)pqppu#K& zE6k!rOxlgeFtIEuvPGVXnT1iN=2B>xS-Dh}xun+b|M0%<`_kHic-+S-O zIcLr}-`trqGxyoNS!t<;<}U($K(CXi<=P&!18qSo@Eh2lfp2+U3qAv?F9|g-a;s`@ zAh-ey2ZO+AAQ$=<;cY;{Tn(0hy`Z9~FW$@o+kqS|B#xqgDYzP__m(w{!umQ;$biM^ z-bdT>KsQiUq+fp>h;y!(bw{w}3D6m&n$E+z<)E0s@oDP-w#@`>K&t3;teFEe{`fdl zD&F1Lso^CRq+YiHlqwiW+dYBJ4}lh-WHf=64}zplq(N>K_IE9I1W%#CxdjZIeiXfC zTfx_0JJU}gw}6&!g(AHj*MhHruYCdkKgf;;VbTx17z8}QRqJsRX$`v& z1cJWTcaS~b)KY$!WbZhz3HaJ7evP$~?*JYJO2l1yHdAh*$Ki4*$X2!kxv{1e3d5wg zW(GI}ve}whuOMnEm{}fv-bj5`(tsHjvfiuLwaco#I1D{$=1X9;-O8t-B9_jjR?8o& z!hml!GMX{dL|QGq1OglLas49BLFGBV8v=)sxhYO*3hM60hI|B1I<%P^Ni(VOX-J9g zz({TBs<;(%loj~+=i*%xv7wml1!#`^r#P>=N17+qG!C&AzH4rMZ ztA?HRz~ZNsXF;%IGQt=PZK`UbDMwm~(fz?4K+Cv%P(v(sq0JI?9r{!PDdSiGa@|l+ zlHTkbUZ;Xi~la3d3uF=yEHq>H2XGmSx0?27JY)z1HcrZ<56Ea zt^oEjO2uv-8g-a!OcLcv4HA(V9Ves=Bn>Ss-5&&zYLW2JqgsQ>R)Z^*>4L3 zn&|%s=$u7|RL$yuE6dI->mcSPY8(NjF@H5KihSxASyROo3g8~2|C-X9C?f(2;I@pi zs7LFXIZD1F%N4+_M$axV@>Lz10+TsmxSqFHU1W?7*T8qk7{qQyomIo8SNI56WAu2m zk*{jl6hKj3{lD4&(W!qEIU+EOGS|50Dy#H#W&*L$27=eZL1!IWB)bBZSvD8GN~P8~ z_A8Lj`oL7@zQciuo`NegSgvO&)~Qw{l8!uGJ}cF`3&i?;NrbRV;T(7?jauQ5HjQ2W z24&indJ~KUPSUwYz#Mng%w1_?;Z&pVii^IvandA8;{q41`_QSOJPW&Hwl-D5{zcvI zgD>(J#L|t!il>xkyc$`pR8D8!VZY+;?{6gSc$ns)Ok+aic;L{T#-iyS{_0#P>u1fH z%75@ssxI9Flp|e=(K_pi>v7?_N32ec_fV<^^jC}Rt;$ovcOiEC4#EM7yH|eL$;b9( z9?I3QzF5~7S`O3`BdrUEAgJn8UZh42f zN~~9npL#vgNTV@IhvimZ#J3xq2@;dmgFX$4S3TFe%O|!lyI^xz?gcu>_4Vbd?CRq= zlr(Ni(6Bxe)2!7Rl#-MrYkc+%ocJHim*M(?E899T%D^4Sj?0%J9(we{KMZ`*l&}xa zdbDL??FZL>5N^chUjN_97*k8RF)47jfS-VmePP}u$hH7^Cw*X}Y&_hU@BIekr-QRW zK1sVt&w*U+TaJ#Jd>WRiYXAjGDt!Z&$*+%dWb6zu2xwE+hcv8Q59Wf6AX9&m=N0H_ z2h60|DG4c;Qli~0iExCB*45vEE#P}_0H`+|1xh12hR}!mt{|T@A7!@#*-;eIE4UIQ z`K8k&a|9nI7bRkjMl{gQ0!i|#Gz3w9G(N=PSJ8_ur^THh4MDNmun2p*6g^Tg4Yr|f zHqe-5b)pn}>#=VHNG)lAe-D%*IB{)i4LlVTB)>y%-l;zt7lTrdkGrtp0pPWl2Y+g) zHDrU*1eAeRXI2aIaYQOtS>3jhEB07*qoM6N<$f_2#KZ2$lO 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 f0ef3d0c2..63fe5d5ad 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" /> @@ -30,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 49b231211..da6d553bf 100644 --- a/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml +++ b/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml @@ -2,26 +2,27 @@ + 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" /> #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 8821a0ea2..132bfce2b 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 7705ae6b86f4e939b3a3b304c15d6ec7bd563de9 Mon Sep 17 00:00:00 2001 From: kirill Date: Thu, 28 Mar 2019 19:34:41 +0200 Subject: [PATCH 06/15] Not great solution (cherry picked from commit 47684c6eab71bd12c08530dfc3ee480d771cea9b) --- .../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 76f95ac99..09e19377b 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java @@ -15,6 +15,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; @@ -73,7 +74,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 236a25238..fc7d9b3d8 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 @@ -26,6 +26,7 @@ public class HorizontalProgressWheelView extends View { private float mLastTouchedPosition; private Paint mProgressLinePaint; + private Paint mProgressMiddleLinePaint; private int mProgressLineWidth, mProgressLineHeight; private int mProgressLineMargin; @@ -97,7 +98,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)))); @@ -113,8 +113,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); } @@ -128,7 +127,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); @@ -137,7 +136,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 63fe5d5ad..281c17ac7 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 da6d553bf..3a251ed6f 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 132bfce2b..4603333b8 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 fcf81210c99af8e8df90d649e5afead3d10e3ba6 Mon Sep 17 00:00:00 2001 From: kirill Date: Fri, 29 Mar 2019 10:39:04 +0200 Subject: [PATCH 07/15] Activity redesign ready (cherry picked from commit 5c37c47fe8b21390c75ec98904b2084d26ec1024) --- .../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 09e19377b..38f23a6eb 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java @@ -11,11 +11,11 @@ import android.os.Bundle; 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 281c17ac7..0ed5f6d82 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 858921359ed9795341052ebd1961f4216eccc204 Mon Sep 17 00:00:00 2001 From: kirill Date: Fri, 29 Mar 2019 11:42:02 +0200 Subject: [PATCH 08/15] Fragment redesign ready (cherry picked from commit 005a019a8b0a0eb6778a03091217db4fea9e95bb) --- .../java/com/yalantis/ucrop/UCropActivity.java | 4 ++-- .../java/com/yalantis/ucrop/UCropFragment.java | 17 +++++++++++------ .../main/res/layout/ucrop_fragment_photobox.xml | 10 +++++++++- ucrop/src/main/res/values/colors.xml | 1 + 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java index 38f23a6eb..cbf6060e6 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 909532dae..c9fc99ffb 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java @@ -54,6 +54,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) @@ -126,7 +127,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)); @@ -135,8 +137,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); @@ -289,9 +294,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/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 6a683094069c30d3f0002a18eda4800d75a6e58c Mon Sep 17 00:00:00 2001 From: kirill Date: Sun, 31 Mar 2019 17:45:42 +0300 Subject: [PATCH 09/15] Dot placed little upper (cherry picked from commit ef97e61117643633993cb2d7932f667da031d2bc) --- .../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 a0ec024b6..29e6d3a58 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 @@ -28,6 +28,7 @@ */ public class AspectRatioTextView extends AppCompatTextView { + private final float MARGIN_MULTIPLIER = 1.5f; private final Rect mCanvasClipBounds = new Rect(); private Paint mDotPaint; private int mDotSize; @@ -94,8 +95,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 e4b9cb818c92889d6ebb731ec2f27044ba17fa0c Mon Sep 17 00:00:00 2001 From: kirill Date: Mon, 1 Apr 2019 13:48:53 +0300 Subject: [PATCH 10/15] Applied bottom navigation to UCropFragment and added external api for navigation color filter (cherry picked from commit 5b388ebff874a5df39c1128ea94eb9fcc19adc43) --- .../main/java/com/yalantis/ucrop/UCrop.java | 9 ++++++++- .../com/yalantis/ucrop/UCropFragment.java | 19 ++++++++++++++++++- 2 files changed, 26 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 93d6b2169..e0d423634 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCrop.java @@ -426,12 +426,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 c9fc99ffb..0773be6f7 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java @@ -54,7 +54,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) @@ -63,11 +62,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; @@ -75,6 +76,8 @@ public class UCropFragment extends Fragment { private boolean mShowBottomControls; + private Transition mControlsTransition; + private UCropView mUCropView; private GestureCropImageView mGestureCropImageView; private OverlayView mOverlayView; @@ -143,6 +146,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); @@ -470,6 +476,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) { @@ -479,6 +487,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 d13b4abed6e40be41bdf58d1a46c412df578c4c5 Mon Sep 17 00:00:00 2001 From: AlexZandR Date: Mon, 9 Sep 2019 11:06:43 +0300 Subject: [PATCH 11/15] Fixed androidx transition dependencies --- build.gradle | 8 ++++++++ ucrop/build.gradle | 7 ++++--- ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java | 3 +++ ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java | 3 +++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 2f643119f..cbd5640a7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,12 @@ buildscript { + ext { + androidx_appcompat_version = "1.1.0" + androidx_core_version = "1.1.0" + androidx_exifinterface_version = "1.1.0-beta01" + androidx_transition_version = "1.2.0-rc01" + constraintlayout_version = "1.1.3" + } + repositories { jcenter() maven { diff --git a/ucrop/build.gradle b/ucrop/build.gradle index d4a6c4dcd..c29656f81 100644 --- a/ucrop/build.gradle +++ b/ucrop/build.gradle @@ -32,7 +32,8 @@ android { } dependencies { - implementation "androidx.appcompat:appcompat:1.1.0" - implementation 'androidx.exifinterface:exifinterface:1.1.0-beta01' - implementation 'com.squareup.okhttp3:okhttp:3.12.1' + implementation "androidx.appcompat:appcompat:${androidx_appcompat_version}" + implementation "androidx.exifinterface:exifinterface:${androidx_exifinterface_version}" + implementation "androidx.transition:transition:${androidx_transition_version}" + implementation "com.squareup.okhttp3:okhttp:3.12.1" } diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java index cbf6060e6..ae920f266 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java @@ -51,6 +51,9 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; +import androidx.transition.AutoTransition; +import androidx.transition.Transition; +import androidx.transition.TransitionManager; /** * Created by Oleksii Shliama (https://github.com/shliama). diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java index 0773be6f7..6d086be4c 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java @@ -41,6 +41,9 @@ import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; +import androidx.transition.AutoTransition; +import androidx.transition.Transition; +import androidx.transition.TransitionManager; import static androidx.appcompat.app.AppCompatActivity.RESULT_OK; From 3a93d082b2676217ed9d552d975a0c5cc540da5c Mon Sep 17 00:00:00 2001 From: AlexZandR Date: Tue, 10 Sep 2019 18:36:28 +0300 Subject: [PATCH 12/15] Applied new color schema to uCrop controls --- .../com/yalantis/ucrop/UCropActivity.java | 2 +- .../color/ucrop_scale_text_view_selector.xml | 4 +-- ucrop/src/main/res/drawable/ucrop_ic_crop.xml | 3 +- .../res/drawable/ucrop_ic_crop_unselected.xml | 4 +-- .../src/main/res/drawable/ucrop_ic_rotate.xml | 3 +- .../drawable/ucrop_ic_rotate_unselected.xml | 4 +-- .../src/main/res/drawable/ucrop_ic_scale.xml | 3 +- .../drawable/ucrop_ic_scale_unselected.xml | 4 +-- ucrop/src/main/res/layout/ucrop_controls.xml | 1 - .../res/layout/ucrop_layout_rotate_wheel.xml | 7 +++-- .../res/layout/ucrop_layout_scale_wheel.xml | 14 ++++----- ucrop/src/main/res/values/colors.xml | 31 +++++++++++++------ ucrop/src/main/res/values/styles.xml | 2 +- 13 files changed, 48 insertions(+), 34 deletions(-) diff --git a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java index ae920f266..a48969fcc 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java @@ -450,7 +450,7 @@ private void setupAspectRatioWidget(@NonNull Intent intent) { wrapperAspectRatio = (FrameLayout) getLayoutInflater().inflate(R.layout.ucrop_aspect_ratio, null); wrapperAspectRatio.setLayoutParams(lp); aspectRatioTextView = ((AspectRatioTextView) wrapperAspectRatio.getChildAt(0)); - aspectRatioTextView.setActiveColor(mActiveWidgetColor); + aspectRatioTextView.setActiveColor(mActiveControlsWidgetColor); aspectRatioTextView.setAspectRatio(aspectRatio); wrapperAspectRatioList.addView(wrapperAspectRatio); diff --git a/ucrop/src/main/res/color/ucrop_scale_text_view_selector.xml b/ucrop/src/main/res/color/ucrop_scale_text_view_selector.xml index c5bde1a52..8ef59ece0 100644 --- a/ucrop/src/main/res/color/ucrop_scale_text_view_selector.xml +++ b/ucrop/src/main/res/color/ucrop_scale_text_view_selector.xml @@ -1,5 +1,5 @@ - - + + diff --git a/ucrop/src/main/res/drawable/ucrop_ic_crop.xml b/ucrop/src/main/res/drawable/ucrop_ic_crop.xml index a85a66c36..616027e3a 100644 --- a/ucrop/src/main/res/drawable/ucrop_ic_crop.xml +++ b/ucrop/src/main/res/drawable/ucrop_ic_crop.xml @@ -1,10 +1,11 @@ diff --git a/ucrop/src/main/res/drawable/ucrop_ic_crop_unselected.xml b/ucrop/src/main/res/drawable/ucrop_ic_crop_unselected.xml index e931bc08c..7a2bdbc7d 100644 --- a/ucrop/src/main/res/drawable/ucrop_ic_crop_unselected.xml +++ b/ucrop/src/main/res/drawable/ucrop_ic_crop_unselected.xml @@ -1,11 +1,11 @@ diff --git a/ucrop/src/main/res/drawable/ucrop_ic_rotate.xml b/ucrop/src/main/res/drawable/ucrop_ic_rotate.xml index 01da8e0e1..509d7b156 100644 --- a/ucrop/src/main/res/drawable/ucrop_ic_rotate.xml +++ b/ucrop/src/main/res/drawable/ucrop_ic_rotate.xml @@ -1,10 +1,11 @@ diff --git a/ucrop/src/main/res/drawable/ucrop_ic_rotate_unselected.xml b/ucrop/src/main/res/drawable/ucrop_ic_rotate_unselected.xml index be4d9ea4b..55f7a3ff9 100644 --- a/ucrop/src/main/res/drawable/ucrop_ic_rotate_unselected.xml +++ b/ucrop/src/main/res/drawable/ucrop_ic_rotate_unselected.xml @@ -1,11 +1,11 @@ diff --git a/ucrop/src/main/res/drawable/ucrop_ic_scale.xml b/ucrop/src/main/res/drawable/ucrop_ic_scale.xml index e038d52da..6c7985bb7 100644 --- a/ucrop/src/main/res/drawable/ucrop_ic_scale.xml +++ b/ucrop/src/main/res/drawable/ucrop_ic_scale.xml @@ -1,10 +1,11 @@ diff --git a/ucrop/src/main/res/drawable/ucrop_ic_scale_unselected.xml b/ucrop/src/main/res/drawable/ucrop_ic_scale_unselected.xml index 988b8d24d..c9de9facc 100644 --- a/ucrop/src/main/res/drawable/ucrop_ic_scale_unselected.xml +++ b/ucrop/src/main/res/drawable/ucrop_ic_scale_unselected.xml @@ -1,11 +1,11 @@ diff --git a/ucrop/src/main/res/layout/ucrop_controls.xml b/ucrop/src/main/res/layout/ucrop_controls.xml index 451fcaf1a..c396ac6ae 100644 --- a/ucrop/src/main/res/layout/ucrop_controls.xml +++ b/ucrop/src/main/res/layout/ucrop_controls.xml @@ -101,6 +101,5 @@ android:text="@string/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 3a251ed6f..54d57ae61 100644 --- a/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml +++ b/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml @@ -5,13 +5,13 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" - tools:showIn="@layout/ucrop_activity_photobox" + tools:showIn="@layout/ucrop_controls" tools:visibility="visible"> + tools:text="100°" /> + android:tint="@color/ucrop_color_widget_rotate_angle" + android:src="@drawable/ucrop_ic_angle" /> diff --git a/ucrop/src/main/res/layout/ucrop_layout_scale_wheel.xml b/ucrop/src/main/res/layout/ucrop_layout_scale_wheel.xml index b4d95ea62..b5c29a531 100644 --- a/ucrop/src/main/res/layout/ucrop_layout_scale_wheel.xml +++ b/ucrop/src/main/res/layout/ucrop_layout_scale_wheel.xml @@ -1,20 +1,20 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:showIn="@layout/ucrop_controls" + tools:visibility="gone"> + android:text="100%" /> + android:layout_below="@+id/text_view_scale" /> \ No newline at end of file diff --git a/ucrop/src/main/res/values/colors.xml b/ucrop/src/main/res/values/colors.xml index 526e544af..0c4078131 100644 --- a/ucrop/src/main/res/values/colors.xml +++ b/ucrop/src/main/res/values/colors.xml @@ -1,18 +1,29 @@ + + #000 + #FF6300 + #20242F + #B3BECE + #FFF + - #fff + @color/ucrop_color_white #f5f5f5 - #000000 - #000 - #FFFFFF - #FFFFFF - #512DA8 - #673AB7 - #000 - #000000 - #000 + @color/ucrop_color_black + @color/ucrop_color_black + @color/ucrop_color_white + @color/ucrop_color_blaze_orange + @color/ucrop_color_heather + @color/ucrop_color_blaze_orange + @color/ucrop_color_ebony_clay + @color/ucrop_color_blaze_orange + @color/ucrop_color_ebony_clay + @color/ucrop_color_ebony_clay + @color/ucrop_color_blaze_orange + @color/ucrop_color_ebony_clay + @color/ucrop_color_black #80ffffff diff --git a/ucrop/src/main/res/values/styles.xml b/ucrop/src/main/res/values/styles.xml index 4603333b8..8104cb44a 100644 --- a/ucrop/src/main/res/values/styles.xml +++ b/ucrop/src/main/res/values/styles.xml @@ -39,7 +39,7 @@ wrap_content true bold - @color/ucrop_color_widget_background + @color/ucrop_color_widget_text @dimen/ucrop_margit_top_widget_text @dimen/ucrop_text_size_widget_text From 83636c1b04ad815ec49cf7357d07c6bcb19688cb Mon Sep 17 00:00:00 2001 From: AlexZandR Date: Wed, 11 Sep 2019 15:38:49 +0300 Subject: [PATCH 13/15] Apply UI improvements --- .../main/res/drawable-hdpi/ucrop_ic_angle.png | Bin 1080 -> 1625 bytes .../main/res/drawable-mdpi/ucrop_ic_angle.png | Bin 657 -> 1040 bytes .../res/drawable-xhdpi/ucrop_ic_angle.png | Bin 1432 -> 2231 bytes .../res/drawable-xxhdpi/ucrop_ic_angle.png | Bin 2243 -> 3557 bytes .../res/drawable-xxxhdpi/ucrop_ic_angle.png | Bin 3179 -> 4750 bytes ucrop/src/main/res/layout/ucrop_controls.xml | 1 - ucrop/src/main/res/values/dimens.xml | 4 +++- ucrop/src/main/res/values/styles.xml | 6 +++--- 8 files changed, 6 insertions(+), 5 deletions(-) diff --git a/ucrop/src/main/res/drawable-hdpi/ucrop_ic_angle.png b/ucrop/src/main/res/drawable-hdpi/ucrop_ic_angle.png index 218d560940177dee5d3a935a0a31a67bae528ea5..c80994d71ddf04486249cfec74ea695208538843 100644 GIT binary patch literal 1625 zcmV-f2B!ImP)Px*6G=otR9Fe^S8Z%lRTzHHZM#8Xe8?Q)0(52VfWlfB9}zL`j}nO>{ul_xXb3U* z6$6QcAI3~W0x>#%XhI|yq8P(h6omu@qk{y;bY&edq3zu|2@nWE#>cv??LEimw7cD1 zZ@a?APfpUF_q<={Iq!MTd(I_#)E-4(coAU3Gbi$RY6_z4(s+t%R^ohqA=y~Ypa(ZtF5i&Qtoj1wp+!d&8m8| z*PuUud>}xM>2sG*f`0@6iw1ZZY{2LuF-t8YUM#ryl36U?NbtS7G+Bzej7;6K#6C~IrMC2CeF^JBSBxtb^Vm5Rc=;myS=4x!QO}6dLgJtR{^k@I-RXovN3gD*{p>V zweD!W4hCofiq%#X3ALu=d z;bDTA=Ju`71Wi>6EI+ol`Y&YyGDQeQO!?-!L+wbusX%kZQ990Hth_Fl&xbO+2Dvqb z6!u#r6xd~ST2}6>!D5y{#sn!xIzngm>2inLS4UiINR3&iQfTpJf-)ubo_$AVCc(f; zVYJH#ro4RKoCJxJIJ(bCrzmtg%gVi3*6xYm-Bs15X7sp>b2n3j zND)aMfSC#yPQY&D$k>j{od?QXzAap^ok`aUyT-ZA>`S6S6P%k4PcBGiCtT_7Q!ey) zsz)0Q+rurp6;j?tZcV^6UTo2~Qm$~NgY!gRWJF=whEai}nazGX&C5fWwhR$E*B2Ys ztKFUr`v#+rcC~p2#_~sq(y!Pqe>mLKj@%Fqm$wV|gfp$r$pN}YZ8>!V@-%xe!URYN z3z9DN;7e%Y85j=$vW+uPxZ}hc2^`bu+T&PtwE>T!^2M z?M;f^{(&wZa_?|^w>rwbLjIg?-%_KanwlEpbJZwH)0LIakIKxyv@j2mbz|M``OdhA zU&Ir{hJENjA)IBXJ$YOXPi)#U=`Ixd8%Zj*CS9Z0-Hl$~A>T*Cn~F%@llgq)oJ4-! zbj88}Bx&-2hA)V(+QZH3^Eu2Vce>|nVCR>2sLj$})|MBLv`T(KaQYg> zW{JT|59oSDVU2jm2N~l%oTDl+QGuiH#fy9?`cY|p#xB_KjtYkZfiy1*abJLRyE3=$ zO+2tZ1hC0EFJF&(bq{rG%Y?DkI=|l^&#RwLAyY2vkUyZVz}@>gO6OBJeZ`qN;77r0 zRG8RfQ$`;Q22UAY0A_6?=Yb+*G}P&2%_6N7uS*-iDOR$!2ZMh_9^|^veLd>$Cj$Qi X{G3sA^-|E!00000NkvXXu0mjf20;T> literal 1080 zcmV-81jqY{P)Px&@<~KNR9Fekm`i9~RTPF((_(8=O@-R}s3w$3DTo70pzS1rnTX=R7Y+&mXPu@m zojB;EDo!M!G+>7gw1XDGLMb$*1L>fkI8g@)O~7asZ3fzheSP1}UYDKgN$$D#o@jsg z?^Lfzu^CdRor<9j>1WJ3*If@kJ!fH8_+)g z3D$6zgYXYnl+;qTS^9hcd!g70U#w{r{_G*v42(o>qhEj{a1cHVd*DOx8Mq7XhhM{+ zF#4IS_Fv#(SP7h_V=!)V4gEv-7%U5G)r97taqcAfC9-2YN`wg*37$aT4BN#!bo>WK zyzko$6#X2*2^dfQel)Zx-=yD-6fcsz&UJU2@oL>-ik+IbI|)SJmC)Kf1%HE)q;d;v z3oeof)aeKoC9n{eWRX<BbQK8ZcY zIxh0|T=xJ7tVgl!Pk26zxg6s{hYPuJ3Eh(;Zl?YmG)o6BR$tizR=bPOaY+c%4hON0N-uJ6+&A zo@}orIe;`#NAzKM7S`bE_9Y-tCdujK{5;Z!%vWMeUBnCN>Td>5B&R#dsqXJhazst! zwnp9Q3w#s`(g(hnUAL>|@oOgO%R zzh7YfBsDqhuO$6ylHVj*iHMq-PSIXyA?iMSSHphz6tq-6gW}}8sQ(t#qz@;4m>11| zM{#i)%WmdH5j|;)A!Aj$y@U;Q0m9yRLM?F0FNV0VQ!B?}^nVa#Z|ZN1&!Yk9Ohq#K z1ag0UO2HS5_!9IxrVR3ti$wASBSwCNPGOYcZ(B<^h_{`~zN&3V{`NT!o!Z4POhY6V zQd`Sd?w4K{mZc%p+r}Px#*;3`=R@0xHFm7>L##1&W!F`I(&mZn%r83CtNwFf6A5{A z{ta6>Fq%GxBN|h0ox1AXo_w_{3*QBfz&RMT{&CsPt@yc^X0n^O;d?TTz(MHN(*r&F z`r&SP0G@$2U?k_O*z0iF;P&J`8XJDxxQv{o-+ORb-jImKaP)Px&%1J~)R7ef&R9$QoRTMsF?krm@+jd*F1_;_MGgG7_o$VHl@qv=QfR;26cmb-9 zN{Bw0kPvv3SBNHr=#w!q(TX9&pV&mxXk)}?=@KBT-DO)4ZB?K{=~B8oGskn6-p&3% zoA~03H<>x-p7Wi1?)kd_|F0D?fGg-B9*+l{`)!OMAp50(}pF+b7dWyCh#?9_xT_{nVW~Z-@_m znGGEVeWnTexK0m`xo!bhtwMc%A=d}!zsCBVM5H6aVvlXr4-E}@X8#X=ScCYu|Dok%1eDB!=PqTH~l zq4g*MZ3j&pNnO2^lseP2?Z%dM`}X{!7Z*H$QJRh9iesBJ0DmccwE^)@Ilz z!!1vr4>zw{6-9-`vSWJV|v%y^^J3BgF3gx|A z6Cpj|o?pvx-zwT8I7k$c{8T1+jEVdzRw;soy8KfAQcxiT1>a}h$@{qKU848WyP#0xqMC(zZ|WIVDP}eHyp>0obOkoM)z)M$Wd`nwX1pv zpLCI$+nHwfb1rxnxp)DgX?w3vjDKBwe5E96*~iGIzR>E>zAINoXUnw}5lBTkeJKSf zUg5jT_vOnr(>~MQ8GokSNb!cz6N{SmFdzO7H^IhvH`kzaiq=G+6td860Y2h)DaOuZ z3;zrV{PshR`3UE28&B63iRXDaCrCS-$&CLk_vPz}4kSpn;*IIqz2w2`e9Vj7o~xBH z*Jh5Le4z{YKz5drSJP!3l!K+Sn}0e{AW?_9=3KuzCWr37U;hBJw{O}P?XwI30000< KMNUMnLSTZ7z3;C8 literal 657 zcmV;C0&e|@P)Px%OG!jQR7efAmb+_IK@^9L3cf`P6*ed#LaYQ|V3A;D;lE(2t!)&7pxyQndrLtg zC}<(6EW}1ZLWp)MqJ>(hpdzt|&+prv6DGQI?_D21`0mV}bMD+bbI#1&p;h%7BIF?K zgBGlYx9~9Wo%XM_lMyb$EBI019rkJ14QhX{8SFYm_$OF`YcL68uo*VOD4c|w;EOE6 z9k>OJwVucsaDW@I7wUABfSCQ$y5QXJgTBGp+*r{!f6hFX`78Z(74ge1m(H7-J}7S7 zK<5~ohgoomD`hd5BbV;K%c`>&N;z`5obg@gfZHKg_%30zfI{2pSXj&QMicDXmlQd1 zQ2Xz*z=dQxmF)W0!WQVj1RRI14s$iY^6sZ$jQZn^9mL=6sp#i#udfY9Ui~77?+qi+0dv!>E?VX91@M?^gTIHNs3x1*LBzb}vhu=b z+s>W+`v2m%G9|83QEQTCk#-4AgZt?o3@T?ekWBs{pO}2`_*&<-%Ko2xJohl7U+l-Q zwQ}@=a|*l1j7#eQJqcsr--1mr3fiuMr-(~`1}bxgzo=b!tkU@8=M@)y_un*BmOB2f rn!JfIhrpS&z^Z!#kHG!axG;VKog9f_q@BU>00000NkvXXu0mjf2{=M~ diff --git a/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_angle.png b/ucrop/src/main/res/drawable-xhdpi/ucrop_ic_angle.png index 27d131876233d17191c9dc5d5c670aa9b3e28d3c..5b1e05380ef3301e4b5dc448fd38ab1c6ef9fbcf 100644 GIT binary patch literal 2231 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 Rza9Vp002ovPDHLkV1jE!BPjp? diff --git a/ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_angle.png b/ucrop/src/main/res/drawable-xxxhdpi/ucrop_ic_angle.png index 68eb67e05e2ed971f34b1674bf478da04090b09b..290311dccf532cfc1eb5aff47062ad9c2e58ca93 100644 GIT binary patch literal 4750 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 literal 3179 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 R&HVrX002ovPDHLkV1i4+A>{x7 diff --git a/ucrop/src/main/res/layout/ucrop_controls.xml b/ucrop/src/main/res/layout/ucrop_controls.xml index c396ac6ae..0cce4d129 100644 --- a/ucrop/src/main/res/layout/ucrop_controls.xml +++ b/ucrop/src/main/res/layout/ucrop_controls.xml @@ -67,7 +67,6 @@ style="@style/ucrop_TextViewWidget" android:text="@string/ucrop_crop" /> - 72dp 3dp 13sp - 10sp + 11sp + 10dp + 4dp 50dp 40dp 30dp diff --git a/ucrop/src/main/res/values/styles.xml b/ucrop/src/main/res/values/styles.xml index 8104cb44a..a535d31c9 100644 --- a/ucrop/src/main/res/values/styles.xml +++ b/ucrop/src/main/res/values/styles.xml @@ -40,7 +40,7 @@ true bold @color/ucrop_color_widget_text - @dimen/ucrop_margit_top_widget_text + @dimen/ucrop_margin_top_widget_text @dimen/ucrop_text_size_widget_text @@ -48,10 +48,10 @@ wrap_content wrap_content true - @dimen/ucrop_margit_top_widget_text + @dimen/ucrop_margin_top_controls_text @color/ucrop_color_widget_active bold - @dimen/ucrop_text_size_widget_text + @dimen/ucrop_text_size_controls_text \ No newline at end of file From 14bd3361343c057cb2ed7a01d6865c3a0ab9dedb Mon Sep 17 00:00:00 2001 From: AlexZandR Date: Wed, 11 Sep 2019 13:33:53 +0300 Subject: [PATCH 14/15] Added ripple effect to rotate controls --- .../src/main/res/layout/ucrop_layout_rotate_wheel.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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 54d57ae61..72e818ac2 100644 --- a/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml +++ b/ucrop/src/main/res/layout/ucrop_layout_rotate_wheel.xml @@ -26,7 +26,8 @@ + android:layout_centerVertical="true" + android:background="?attr/selectableItemBackground"> + android:layout_centerVertical="true" + android:background="?attr/selectableItemBackground"> + android:src="@drawable/ucrop_ic_angle" + android:tint="@color/ucrop_color_widget_rotate_angle" /> From e9e473d3f9beaa70ab8061566b2a082cf03b5c7e Mon Sep 17 00:00:00 2001 From: AlexZandR Date: Thu, 12 Sep 2019 17:25:52 +0300 Subject: [PATCH 15/15] Execute AsyncTask in a parallel manner --- .../main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java | 4 +++- .../src/main/java/com/yalantis/ucrop/view/CropImageView.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) 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 77d08996d..467ad43a4 100755 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java @@ -7,6 +7,7 @@ import android.graphics.Matrix; import android.graphics.Point; import android.net.Uri; +import android.os.AsyncTask; import android.util.Log; import android.view.Display; import android.view.WindowManager; @@ -34,7 +35,8 @@ public static void decodeBitmapInBackground(@NonNull Context context, int requiredWidth, int requiredHeight, BitmapLoadCallback loadCallback) { - new BitmapLoadTask(context, uri, outputUri, requiredWidth, requiredHeight, loadCallback).execute(); + new BitmapLoadTask(context, uri, outputUri, requiredWidth, requiredHeight, loadCallback) + .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } public static Bitmap transformBitmap(@NonNull Bitmap bitmap, @NonNull Matrix transformMatrix) { diff --git a/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java index 8496df76a..2edfd61da 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java @@ -6,6 +6,7 @@ import android.graphics.Matrix; import android.graphics.RectF; import android.graphics.drawable.Drawable; +import android.os.AsyncTask; import android.util.AttributeSet; import com.yalantis.ucrop.R; @@ -83,7 +84,8 @@ public void cropAndSaveImage(@NonNull Bitmap.CompressFormat compressFormat, int compressFormat, compressQuality, getImageInputPath(), getImageOutputPath(), getExifInfo()); - new BitmapCropTask(getContext(), getViewBitmap(), imageState, cropParameters, cropCallback).execute(); + new BitmapCropTask(getContext(), getViewBitmap(), imageState, cropParameters, cropCallback) + .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } /**