Skip to content

Commit

Permalink
Merge pull request Yalantis#815 from Yalantis/develop-non-native
Browse files Browse the repository at this point in the history
Release 2.2.8
  • Loading branch information
severianremi committed Jan 31, 2022
2 parents 64c8f5b + 161c792 commit 5b190f0
Show file tree
Hide file tree
Showing 23 changed files with 160 additions and 52 deletions.
49 changes: 29 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<a href="https://play.google.com/store/apps/details?id=com.yalantis.ucrop.sample&utm_source=global_co&utm_medium=prtnr&utm_content=Mar2515&utm_campaign=PartBadge&pcampaignid=MKT-AC-global-none-all-co-pr-py-PartBadges-Oct1515-1"><img alt="Get it on Google Play" src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png" width="185" height="70"/></a>

1. Include the library as local library project.
1. Include the library as a local library project.

```
allprojects {
Expand All @@ -25,9 +25,9 @@
```

``` implementation 'com.github.yalantis:ucrop:2.2.3' ``` - lightweight general solution

``` implementation 'com.github.yalantis:ucrop:2.2.3-native' ``` - get power of the native code to preserve image quality (+ about 1.5 MB to an apk size)

2. Add UCropActivity into your AndroidManifest.xml

```
Expand Down Expand Up @@ -73,15 +73,15 @@ If you want to let your users choose crop ratio dynamically, just do not call `w

uCrop builder class has method `withOptions(UCrop.Options options)` which extends library configurations.

Currently you can change:
Currently, you can change:

* image compression format (e.g. PNG, JPEG, WEBP), compression
* image compression quality [0 - 100]. PNG which is lossless, will ignore the quality setting.
* whether all gestures are enabled simultaneously
* maximum size for Bitmap that is decoded from source Uri and used within crop view. If you want to override default behaviour.
* maximum size for Bitmap that is decoded from source Uri and used within crop view. If you want to override the default behaviour.
* toggle whether to show crop frame/guidelines
* setup color/width/count of crop frame/rows/columns
* choose whether you want rectangle or oval crop area
* choose whether you want rectangle or oval(`options.setCircleDimmedLayer(true)`) crop area
* the UI colors (Toolbar, StatusBar, active widget state)
* and more...

Expand All @@ -90,20 +90,29 @@ Since version 2.2.7 in case if you need to change transport protocol, setup time
```java
new UCropInitializer().setOkHttpClient(client);
```

# Compatibility

* Library - Android ICS 4.0+ (API 14) (Android GINGERBREAD 2.3+ (API 10) for versions <= 1.3.2)
* Sample - Android ICS 4.0+ (API 14)
* CPU - armeabi armeabi-v7a x86 x86_64 arm64-v8a (for versions >= 2.1.2)

# Changelog

### Version: 2.2.8

* Merged pending pull requests with improvements and bugfixes
* Update compileSdk and targetSdk versions up to 31
* Add localizations
* Fixed [#609](https://github.com/Yalantis/uCrop/issues/609)
* Fixed [#794](https://github.com/Yalantis/uCrop/issues/794)

### Version: 2.2.3

* Several fixes including [#445](https://github.com/Yalantis/uCrop/issues/445), [#465](https://github.com/Yalantis/uCrop/issues/465) and more!
* Material design support
* Several fixes including [#445](https://github.com/Yalantis/uCrop/issues/445), [#465](https://github.com/Yalantis/uCrop/issues/465) and more!
* Material design support
* uCrop fragment as child fragment
* Added Italian language
* Added the Italian language

### Version: 2.2.2

Expand All @@ -122,7 +131,7 @@ Since version 2.2.7 in case if you need to change transport protocol, setup time
### Version: 2.1

* Fixes issue with EXIF data (images taken on front camera with Samsung devices mostly) [#130](https://github.com/Yalantis/uCrop/issues/130) [#111](https://github.com/Yalantis/uCrop/issues/111)
* Added API to set custom set of aspect ratio options for user. [#131](https://github.com/Yalantis/uCrop/issues/131)
* Added API to set custom set of aspect ratio options for the user. [#131](https://github.com/Yalantis/uCrop/issues/131)
* Added API to set all configs via UCrop.Options class. [#126](https://github.com/Yalantis/uCrop/issues/126)
* Added ABI x86_64 support. [#105](https://github.com/Yalantis/uCrop/issues/105)

Expand All @@ -131,7 +140,7 @@ Since version 2.2.7 in case if you need to change transport protocol, setup time
* Native image crop (able to crop high-resolution images, e.g. 16MP & 32MP images on Nexus 5X).
* WebP compression format is not supported at the moment (choose JPEG or PNG).
* Now library copies EXIF data to cropped image (size and orientation are updated).

### Version: 1.5

* Introduced "Freestyle" crop (you can resize crop rectangle by dragging it corners) [#32](https://github.com/Yalantis/uCrop/issues/32)
Expand All @@ -140,21 +149,21 @@ Since version 2.2.7 in case if you need to change transport protocol, setup time

### Version: 1.4

* Introduced http(s) Uri support!
* Image is cropped in background thread.
* Introduced HTTP(s) Uri support!
* Image is cropped in a background thread.
* Showing loader while Bitmap is processed (both loading and cropping).
* Several bug fixes.
* Couple new things to configure.
* Updated minSdkVersion to Android ICS 4.0 (no reason to support couple percents of old phones).

### Version: 1.3

* Image is loaded in background thread. Better error-handling for image decoding.
* Image is loaded in a background thread. Better error-handling for image decoding.
* Improved EXIF data support (rotation and mirror).
* Small UI updates.
* Couple new things to configure.
* Sample updated with possibility to choose custom aspect ratio.

* Sample updated with the possibility to choose custom aspect ratio.

### Version: 1.2

Expand All @@ -170,7 +179,7 @@ Since version 2.2.7 in case if you need to change transport protocol, setup time

### Let us know!

We’d be really happy if you sent us links to your projects where you use our component. Just send an email to github@yalantis.com And do let us know if you have any questions or suggestion regarding the library.
We’d be really happy if you sent us links to your projects where you use our component. Just send an email to github@yalantis.com And do let us know if you have any questions or suggestion regarding the library.

#### Apps using uCrop

Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ buildscript {
}

repositories {
jcenter()
mavenCentral()
maven {
url 'https://maven.google.com/'
name 'Google'
Expand All @@ -28,7 +28,7 @@ allprojects {
group = GROUP

repositories {
jcenter()
mavenCentral()
maven {
url 'https://maven.google.com/'
name 'Google'
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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.5-non-native
VERSION_CODE=25
VERSION_NAME=2.2.8-native
VERSION_CODE=26
GROUP=com.yalantis

POM_DESCRIPTION=Android Library for cropping images
Expand Down
6 changes: 3 additions & 3 deletions sample/build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 29
buildToolsVersion '28.0.3'
compileSdkVersion 31
buildToolsVersion '30.0.3'
defaultConfig {
applicationId "com.yalantis.ucrop.sample"
minSdkVersion 14
targetSdkVersion 29
targetSdkVersion 31
versionCode 13
versionName "1.2.4"
}
Expand Down
3 changes: 2 additions & 1 deletion sample/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@

<activity
android:name=".SampleActivity"
android:screenOrientation="portrait">
android:screenOrientation="portrait"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -605,12 +605,14 @@ Tune everything (ノ◕ヮ◕)ノ*:・゚✧
options.setActiveControlsWidgetColor(ContextCompat.getColor(this, R.color.your_color_res));
// Aspect ratio options
options.setAspectRatioOptions(1,
options.setAspectRatioOptions(2,
new AspectRatio("WOW", 1, 2),
new AspectRatio("MUCH", 3, 4),
new AspectRatio("RATIO", CropImageView.DEFAULT_ASPECT_RATIO, CropImageView.DEFAULT_ASPECT_RATIO),
new AspectRatio("SO", 16, 9),
new AspectRatio("ASPECT", 1, 1));
options.withAspectRatio(CropImageView.DEFAULT_ASPECT_RATIO, CropImageView.DEFAULT_ASPECT_RATIO);
options.useSourceImageAspectRatio();
*/

Expand Down
10 changes: 5 additions & 5 deletions ucrop/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ apply plugin: 'com.android.library'
apply from: '../mavenpush.gradle'

android {
compileSdkVersion 29
buildToolsVersion '28.0.3'
compileSdkVersion 31
buildToolsVersion '30.0.2'

defaultConfig {
minSdkVersion 14
targetSdkVersion 29
versionCode 25
versionName "2.2.5-non-native"
targetSdkVersion 31
versionCode 26
versionName "2.2.8-native"

vectorDrawables.useSupportLibrary = true
}
Expand Down
4 changes: 2 additions & 2 deletions ucrop/src/main/java/com/yalantis/ucrop/UCrop.java
Original file line number Diff line number Diff line change
Expand Up @@ -487,9 +487,9 @@ public void setFreeStyleCropEnabled(boolean enabled) {
* @param aspectRatio - list of aspect ratio options that are available to user
*/
public void setAspectRatioOptions(int selectedByDefault, AspectRatio... aspectRatio) {
if (selectedByDefault > aspectRatio.length) {
if (selectedByDefault >= aspectRatio.length) {
throw new IllegalArgumentException(String.format(Locale.US,
"Index [selectedByDefault = %d] cannot be higher than aspect ratio options count [count = %d].",
"Index [selectedByDefault = %d] (0-based) cannot be higher or equal than aspect ratio options count [count = %d].",
selectedByDefault, aspectRatio.length));
}
mOptionBundle.putInt(EXTRA_ASPECT_RATIO_SELECTED_BY_DEFAULT, selectedByDefault);
Expand Down
13 changes: 7 additions & 6 deletions ucrop/src/main/java/com/yalantis/ucrop/UCropActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -255,20 +255,21 @@ private void processOptions(@NonNull Intent intent) {
mOverlayView.setCropGridStrokeWidth(intent.getIntExtra(UCrop.Options.EXTRA_CROP_GRID_STROKE_WIDTH, getResources().getDimensionPixelSize(R.dimen.ucrop_default_crop_grid_stoke_width)));

// Aspect ratio options
float aspectRatioX = intent.getFloatExtra(UCrop.EXTRA_ASPECT_RATIO_X, 0);
float aspectRatioY = intent.getFloatExtra(UCrop.EXTRA_ASPECT_RATIO_Y, 0);
float aspectRatioX = intent.getFloatExtra(UCrop.EXTRA_ASPECT_RATIO_X, -1);
float aspectRatioY = intent.getFloatExtra(UCrop.EXTRA_ASPECT_RATIO_Y, -1);

int aspectRationSelectedByDefault = intent.getIntExtra(UCrop.Options.EXTRA_ASPECT_RATIO_SELECTED_BY_DEFAULT, 0);
ArrayList<AspectRatio> aspectRatioList = intent.getParcelableArrayListExtra(UCrop.Options.EXTRA_ASPECT_RATIO_OPTIONS);

if (aspectRatioX > 0 && aspectRatioY > 0) {
if (aspectRatioX >= 0 && aspectRatioY >= 0) {
if (mWrapperStateAspectRatio != null) {
mWrapperStateAspectRatio.setVisibility(View.GONE);
}
mGestureCropImageView.setTargetAspectRatio(aspectRatioX / aspectRatioY);
float targetAspectRatio = aspectRatioX / aspectRatioY;
mGestureCropImageView.setTargetAspectRatio(Float.isNaN(targetAspectRatio) ? CropImageView.SOURCE_IMAGE_ASPECT_RATIO : targetAspectRatio);
} else if (aspectRatioList != null && aspectRationSelectedByDefault < aspectRatioList.size()) {
mGestureCropImageView.setTargetAspectRatio(aspectRatioList.get(aspectRationSelectedByDefault).getAspectRatioX() /
aspectRatioList.get(aspectRationSelectedByDefault).getAspectRatioY());
float targetAspectRatio = aspectRatioList.get(aspectRationSelectedByDefault).getAspectRatioX() / aspectRatioList.get(aspectRationSelectedByDefault).getAspectRatioY();
mGestureCropImageView.setTargetAspectRatio(Float.isNaN(targetAspectRatio) ? CropImageView.SOURCE_IMAGE_ASPECT_RATIO : targetAspectRatio);
} else {
mGestureCropImageView.setTargetAspectRatio(CropImageView.SOURCE_IMAGE_ASPECT_RATIO);
}
Expand Down
13 changes: 7 additions & 6 deletions ucrop/src/main/java/com/yalantis/ucrop/UCropFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -236,20 +236,21 @@ private void processOptions(@NonNull Bundle bundle) {
mOverlayView.setCropGridStrokeWidth(bundle.getInt(UCrop.Options.EXTRA_CROP_GRID_STROKE_WIDTH, getResources().getDimensionPixelSize(R.dimen.ucrop_default_crop_grid_stoke_width)));

// Aspect ratio options
float aspectRatioX = bundle.getFloat(UCrop.EXTRA_ASPECT_RATIO_X, 0);
float aspectRatioY = bundle.getFloat(UCrop.EXTRA_ASPECT_RATIO_Y, 0);
float aspectRatioX = bundle.getFloat(UCrop.EXTRA_ASPECT_RATIO_X, -1);
float aspectRatioY = bundle.getFloat(UCrop.EXTRA_ASPECT_RATIO_Y, -1);

int aspectRationSelectedByDefault = bundle.getInt(UCrop.Options.EXTRA_ASPECT_RATIO_SELECTED_BY_DEFAULT, 0);
ArrayList<AspectRatio> aspectRatioList = bundle.getParcelableArrayList(UCrop.Options.EXTRA_ASPECT_RATIO_OPTIONS);

if (aspectRatioX > 0 && aspectRatioY > 0) {
if (aspectRatioX >= 0 && aspectRatioY >= 0) {
if (mWrapperStateAspectRatio != null) {
mWrapperStateAspectRatio.setVisibility(View.GONE);
}
mGestureCropImageView.setTargetAspectRatio(aspectRatioX / aspectRatioY);
float targetAspectRatio = aspectRatioX / aspectRatioY;
mGestureCropImageView.setTargetAspectRatio(Float.isNaN(targetAspectRatio) ? CropImageView.SOURCE_IMAGE_ASPECT_RATIO : targetAspectRatio);
} else if (aspectRatioList != null && aspectRationSelectedByDefault < aspectRatioList.size()) {
mGestureCropImageView.setTargetAspectRatio(aspectRatioList.get(aspectRationSelectedByDefault).getAspectRatioX() /
aspectRatioList.get(aspectRationSelectedByDefault).getAspectRatioY());
float targetAspectRatio = aspectRatioList.get(aspectRationSelectedByDefault).getAspectRatioX() / aspectRatioList.get(aspectRationSelectedByDefault).getAspectRatioY();
mGestureCropImageView.setTargetAspectRatio(Float.isNaN(targetAspectRatio) ? CropImageView.SOURCE_IMAGE_ASPECT_RATIO : targetAspectRatio);
} else {
mGestureCropImageView.setTargetAspectRatio(CropImageView.SOURCE_IMAGE_ASPECT_RATIO);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class GestureCropImageView extends CropImageView {

private float mMidPntX, mMidPntY;

private boolean mIsRotateEnabled = true, mIsScaleEnabled = true;
private boolean mIsRotateEnabled = true, mIsScaleEnabled = true, mIsGestureEnabled = true;
private int mDoubleTapScaleSteps = 5;

public GestureCropImageView(Context context) {
Expand Down Expand Up @@ -52,6 +52,14 @@ public boolean isRotateEnabled() {
return mIsRotateEnabled;
}

public void setGestureEnabled(boolean gestureEnabled) {
mIsGestureEnabled = gestureEnabled;
}

public boolean isGestureEnabled() {
return mIsGestureEnabled;
}

public void setDoubleTapScaleSteps(int doubleTapScaleSteps) {
mDoubleTapScaleSteps = doubleTapScaleSteps;
}
Expand All @@ -77,7 +85,9 @@ public boolean onTouchEvent(MotionEvent event) {
mMidPntY = (event.getY(0) + event.getY(1)) / 2;
}

mGestureDetector.onTouchEvent(event);
if (mIsGestureEnabled) {
mGestureDetector.onTouchEvent(event);
}

if (mIsScaleEnabled) {
mScaleDetector.onTouchEvent(event);
Expand Down
2 changes: 1 addition & 1 deletion ucrop/src/main/res/drawable/ucrop_ic_rotate.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
<path
android:fillColor="#000"
android:fillType="evenOdd"
android:pathData="M19.761,5.566a10.084,10.084 0,0 0,-2.307 -2.011A10.02,10.02 0,0 0,12.083 2a9.983,9.983 0,0 0,-7.106 2.943,9.983 9.983,0 0,0 -2.943,7.106 9.983,9.983 0,0 0,2.943 7.106,9.983 9.983,0 0,0 7.106,2.943 9.99,9.99 0,0 0,5.732 -1.794,10.034 10.034,0 0,0 3.63,-4.6l-2.284,-0.893a7.553,7.553 0,0 1,-7.078 4.834c-4.189,0 -7.596,-3.408 -7.596,-7.596 0,-4.189 3.407,-7.596 7.596,-7.596 2.12,0 4.08,0.861 5.488,2.338l-2.67,1.493 3.482,2.074 3.482,2.075 0.056,-4.053 0.055,-4.053 -2.215,1.239z" />
android:pathData="M 19.761,5.566 C 15.791825,0.49517195 7.1049248,0.96194642 3.7237612,6.4638227 -0.33837992,12.033745 3.3097107,20.843671 10.121424,21.908979 c 4.572019,1.06054 9.956288,-1.892196 11.2181,-6.246218 C 20.613349,15.378841 19.887175,15.09492 19.161,14.811 17.787681,18.760509 12.866024,20.703386 9.1288906,19.047063 5.9906393,17.775571 3.9999147,14.236171 4.5746701,10.893626 5.0470831,7.426033 8.1929546,4.5782223 11.692652,4.4629013 13.866935,4.33846 16.076584,5.2031434 17.571,6.791 c -0.89,0.4976667 -1.78,0.9953333 -2.67,1.493 2.321563,1.3826149 4.642896,2.765615 6.964,4.149 0.03752,-2.7019929 0.07452,-5.4039929 0.111,-8.106 -0.738333,0.413 -1.476667,0.826 -2.215,1.239 z" />
</vector>
2 changes: 1 addition & 1 deletion ucrop/src/main/res/drawable/ucrop_ic_rotate_unselected.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
<path
android:fillColor="#000"
android:fillType="evenOdd"
android:pathData="M19.761,5.566a10.084,10.084 0,0 0,-2.307 -2.011A10.02,10.02 0,0 0,12.083 2a9.983,9.983 0,0 0,-7.106 2.943,9.983 9.983,0 0,0 -2.943,7.106 9.983,9.983 0,0 0,2.943 7.106,9.983 9.983,0 0,0 7.106,2.943 9.99,9.99 0,0 0,5.732 -1.794,10.034 10.034,0 0,0 3.63,-4.6l-2.284,-0.893a7.553,7.553 0,0 1,-7.078 4.834c-4.189,0 -7.596,-3.408 -7.596,-7.596 0,-4.189 3.407,-7.596 7.596,-7.596 2.12,0 4.08,0.861 5.488,2.338l-2.67,1.493 3.482,2.074 3.482,2.075 0.056,-4.053 0.055,-4.053 -2.215,1.239z" />
android:pathData="M 19.761,5.566 C 15.791825,0.49517195 7.1049248,0.96194642 3.7237612,6.4638227 -0.33837992,12.033745 3.3097107,20.843671 10.121424,21.908979 c 4.572019,1.06054 9.956288,-1.892196 11.2181,-6.246218 C 20.613349,15.378841 19.887175,15.09492 19.161,14.811 17.787681,18.760509 12.866024,20.703386 9.1288906,19.047063 5.9906393,17.775571 3.9999147,14.236171 4.5746701,10.893626 5.0470831,7.426033 8.1929546,4.5782223 11.692652,4.4629013 13.866935,4.33846 16.076584,5.2031434 17.571,6.791 c -0.89,0.4976667 -1.78,0.9953333 -2.67,1.493 2.321563,1.3826149 4.642896,2.765615 6.964,4.149 0.03752,-2.7019929 0.07452,-5.4039929 0.111,-8.106 -0.738333,0.413 -1.476667,0.826 -2.215,1.239 z" />
</vector>
4 changes: 4 additions & 0 deletions ucrop/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,8 @@
<string name="ucrop_label_edit_photo">Foto editieren</string>
<string name="ucrop_label_original">Original</string>
<string name="ucrop_menu_crop">Zuschneiden</string>

<string name="ucrop_rotate">Rotieren</string>
<string name="ucrop_scale">Skalieren</string>
<string name="ucrop_crop">Zuschneiden</string>
</resources>
13 changes: 13 additions & 0 deletions ucrop/src/main/res/values-fa/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

<resources>

<string name="ucrop_label_original">اصلی</string>
<string name="ucrop_label_edit_photo">ویرایش عکس</string>

<string name="ucrop_menu_crop">برش</string>

<string name="ucrop_rotate">چرخش</string>
<string name="ucrop_scale">اندازه</string>
<string name="ucrop_crop">برش</string>

</resources>
12 changes: 12 additions & 0 deletions ucrop/src/main/res/values-in/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<resources>

<string name="ucrop_label_original">Asli</string>
<string name="ucrop_label_edit_photo">Edit Foto</string>

<string name="ucrop_menu_crop">Pangkas</string>

<string name="ucrop_rotate">Memutar</string>
<string name="ucrop_scale">Skala</string>
<string name="ucrop_crop">Pangkas</string>

</resources>
4 changes: 4 additions & 0 deletions ucrop/src/main/res/values-nl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,8 @@
<string name="ucrop_label_original">Origineel</string>
<string name="ucrop_label_edit_photo">Foto bewerken</string>
<string name="ucrop_menu_crop">Bijsnijden</string>

<string name="ucrop_rotate">Draaien</string>
<string name="ucrop_scale">Schalen</string>
<string name="ucrop_crop">Bijsnijden</string>
</resources>
12 changes: 12 additions & 0 deletions ucrop/src/main/res/values-pt/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<resources>

<string name="ucrop_label_original">Original</string>
<string name="ucrop_label_edit_photo">Editar Foto</string>

<string name="ucrop_menu_crop">Cortar</string>

<string name="ucrop_rotate">Girar</string>
<string name="ucrop_scale">Tamanho</string>
<string name="ucrop_crop">Cortar</string>

</resources>
Loading

0 comments on commit 5b190f0

Please sign in to comment.