Skip to content

Commit a3b3267

Browse files
Merge pull request #203 from burhanrashid52/release.1.0.0
Release.1.0.0
2 parents 024a27d + df42f44 commit a3b3267

37 files changed

+225
-136
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,8 @@ new TextStyleBuilder()
5353
- New : Bumped support version to 28
5454
- Removed : All Deprecated methods
5555
- Test : Added test cases for `BrushDrawingView` with 100% code coverage
56+
57+
## 1.0.0
58+
- New : Migrating the support libraries to AndroidX
59+
- New : Bumped target sdk version to 29
60+
- Test : Adding UI to test for the library

README.md

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# PhotoEditor
22

33
[![CircleCI](https://circleci.com/gh/burhanrashid52/PhotoEditor.svg?style=svg)](https://circleci.com/gh/burhanrashid52/PhotoEditor)
4-
[![Downloads](https://img.shields.io/badge/Download-0.4.0-blue.svg)](https://bintray.com/burhanrashid52/maven/photoeditor) ![API](https://img.shields.io/badge/API-14%2B-brightgreen.svg) [![JavaDoc](https://img.shields.io/badge/JavaDoc-PhotoEditor-blue.svg)](https://burhanrashid52.github.io/PhotoEditor/) [![Uplabs](https://img.shields.io/badge/Uplabs-PhotoEditor-orange.svg)](https://www.uplabs.com/posts/photoeditor)
4+
[![Downloads](https://img.shields.io/badge/Download-1.0.0-blue.svg)](https://bintray.com/burhanrashid52/maven/photoeditor) ![API](https://img.shields.io/badge/API-14%2B-brightgreen.svg) [![JavaDoc](https://img.shields.io/badge/JavaDoc-PhotoEditor-blue.svg)](https://burhanrashid52.github.io/PhotoEditor/) [![Uplabs](https://img.shields.io/badge/Uplabs-PhotoEditor-orange.svg)](https://www.uplabs.com/posts/photoeditor)
55
[![AndroidArsenal](https://img.shields.io/badge/Android%20Arsenal-PhotoEditor-blue.svg)](https://android-arsenal.com/details/1/6736)
66
[![AndroidDevDigest](https://img.shields.io/badge/AndroidDev%20Digest-%23185-brightgreen.svg)](https://www.androiddevdigest.com/digest-185)
77
[![AwesomeAndroid](https://img.shields.io/badge/Awesome%20Android-%2397-red.svg)](https://android.libhunt.com/newsletter/97)
@@ -30,11 +30,14 @@ A Photo Editor library with simple, easy support for image editing using Paints,
3030
- Easy image editing
3131

3232

33+
## AndroidX
34+
PhotoEditor ```v.1.0.0``` is a migration to androidX and dropping the support of older support library. There are no API changes. If you find any issue migrating to v.1.0.0 , please follow this [Guide](https://developer.android.com/jetpack/androidx/migrate). If you still facing the issue than you can always rollback to v.0.4.0. Any fix in PR are Welcome :)
35+
3336

3437
## Getting Started
3538
To start with this, we need to simply add the dependencies in the gradle file of our app module like this
3639
```java
37-
implementation 'ja.burhanrashid52:photoeditor:0.4.0'
40+
implementation 'ja.burhanrashid52:photoeditor:1.0.0'
3841
```
3942
or we can also import the :photoeditor module from sample for further customization
4043

app/build.gradle

+12-11
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
apply plugin: 'com.android.application'
22

33
android {
4-
compileSdkVersion 28
4+
compileSdkVersion 29
55
defaultConfig {
66
applicationId "com.burhanrashid52.photoeditor"
77
minSdkVersion 14
8-
targetSdkVersion 28
8+
targetSdkVersion 29
99
versionCode 1
1010
versionName "1.0"
11-
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
11+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1212
}
1313
buildTypes {
1414
release {
@@ -20,18 +20,19 @@ android {
2020

2121
dependencies {
2222
implementation fileTree(include: ['*.jar'], dir: 'libs')
23-
implementation 'com.android.support:appcompat-v7:28.0.0'
24-
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
25-
implementation 'com.android.support:design:28.0.0'
26-
implementation 'ja.burhanrashid52:photoeditor:0.4.0'
23+
implementation 'androidx.appcompat:appcompat:1.1.0'
24+
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
25+
implementation 'com.google.android.material:material:1.0.0'
26+
implementation 'ja.burhanrashid52:photoeditor:1.0.0'
2727
//implementation project(':photoeditor')
28-
implementation 'com.android.support:cardview-v7:28.0.0'
28+
implementation 'androidx.cardview:cardview:1.0.0'
2929

3030
testImplementation 'junit:junit:4.12'
3131

32-
androidTestImplementation 'com.android.support.test:runner:1.0.2'
33-
androidTestImplementation 'com.android.support.test:rules:1.0.2'
34-
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
32+
androidTestImplementation 'androidx.test:runner:1.2.0'
33+
androidTestImplementation 'androidx.test:rules:1.2.0'
34+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
35+
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.2.0'
3536
}
3637

3738
// make sure this line comes *after* you apply the Android plugin
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,107 @@
11
package com.burhanrashid52.photoeditor;
22

3-
import android.support.test.filters.LargeTest;
4-
import android.support.test.rule.ActivityTestRule;
5-
import android.support.test.runner.AndroidJUnit4;
3+
import android.content.Context;
64

5+
import androidx.test.espresso.contrib.RecyclerViewActions;
6+
import androidx.test.filters.LargeTest;
7+
import androidx.test.rule.ActivityTestRule;
8+
import androidx.test.runner.AndroidJUnit4;
9+
10+
import org.junit.Ignore;
711
import org.junit.Rule;
812
import org.junit.Test;
913
import org.junit.runner.RunWith;
1014

11-
import static android.support.test.espresso.Espresso.onView;
12-
import static android.support.test.espresso.assertion.ViewAssertions.matches;
13-
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
14-
import static android.support.test.espresso.matcher.ViewMatchers.withText;
15+
import java.util.ArrayList;
16+
17+
import ja.burhanrashid52.photoeditor.PhotoEditor;
18+
19+
import static androidx.test.espresso.Espresso.onView;
20+
import static androidx.test.espresso.action.ViewActions.click;
21+
import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
22+
import static androidx.test.espresso.assertion.ViewAssertions.matches;
23+
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
24+
import static androidx.test.espresso.matcher.ViewMatchers.withId;
25+
import static androidx.test.espresso.matcher.ViewMatchers.withText;
26+
import static junit.framework.TestCase.assertTrue;
27+
import static org.junit.Assert.assertFalse;
1528

1629

1730
@RunWith(AndroidJUnit4.class)
1831
@LargeTest
1932
public class EditImageActivityTest {
2033

2134
@Rule
22-
public ActivityTestRule<EditImageActivity> mActivityRule = new ActivityTestRule<>(EditImageActivity.class);
35+
public ActivityTestRule<EditImageActivity> mActivityRule = new ActivityTestRule<>(EditImageActivity.class, false, false);
2336

2437
@Test
2538
public void checkIfActivityIsLaunched() {
39+
mActivityRule.launchActivity(null);
2640
onView(withText(R.string.app_name)).check(matches(isDisplayed()));
2741
}
42+
43+
@Test
44+
public void checkIfBrushIsEnabledWhenClickedOnBrushTool() {
45+
EditImageActivity editImageActivity = mActivityRule.launchActivity(null);
46+
assertFalse(editImageActivity.mPhotoEditor.getBrushDrawableMode());
47+
onView(withText(R.string.label_brush)).perform(click());
48+
assertTrue(editImageActivity.mPhotoEditor.getBrushDrawableMode());
49+
}
50+
51+
@Test
52+
public void checkIfEraserIsEnabledWhenClickedOnEraserTool() {
53+
mActivityRule.launchActivity(null);
54+
onView(withText(R.string.label_eraser)).perform(click());
55+
onView(withText(R.string.label_eraser_mode)).check(matches(isDisplayed()));
56+
}
57+
58+
@Test
59+
public void checkIfEmojiIsDisplayedWhenEmojiIsSelected() {
60+
Context context = mActivityRule.launchActivity(null);
61+
ArrayList<String> emojis = PhotoEditor.getEmojis(context);
62+
int emojiPosition = 1;
63+
String emojiUnicode = emojis.get(emojiPosition);
64+
onView(withText(R.string.label_emoji)).perform(click());
65+
onView(withId(R.id.rvEmoji))
66+
.perform(RecyclerViewActions.actionOnItemAtPosition(emojiPosition, click()));
67+
onView(withText(emojiUnicode)).check(matches(isDisplayed()));
68+
}
69+
70+
@Ignore("Flacky test. Need to optimize")
71+
public void checkIfDiscardDialogIsNotDisplayedWhenCacheIsEmpty() {
72+
EditImageActivity editImageActivity = mActivityRule.launchActivity(null);
73+
assertTrue(editImageActivity.mPhotoEditor.isCacheEmpty());
74+
onView(withId(R.id.imgClose)).perform(click());
75+
assertTrue(editImageActivity.isDestroyed());
76+
}
77+
78+
@Test
79+
public void checkIfDiscardDialogIsDisplayedWhenCacheIsNotEmpty() {
80+
EditImageActivity editImageActivity = mActivityRule.launchActivity(null);
81+
assertTrue(editImageActivity.mPhotoEditor.isCacheEmpty());
82+
onView(withText(R.string.label_emoji)).perform(click());
83+
onView(withId(R.id.rvEmoji))
84+
.perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
85+
onView(withId(R.id.imgClose)).perform(click());
86+
onView(withText(R.string.msg_save_image)).check(matches(isDisplayed()));
87+
}
88+
89+
@Test
90+
public void checkIfUndoRedoIsWorkingCorrectWhenClickedOnUndoRedo() throws InterruptedException {
91+
EditImageActivity editImageActivity = mActivityRule.launchActivity(null);
92+
ArrayList<String> emojisUnicodes = PhotoEditor.getEmojis(editImageActivity);
93+
94+
//Add Emoji
95+
onView(withText(R.string.label_emoji)).perform(click());
96+
onView(withId(R.id.rvEmoji)).perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
97+
onView(withText(emojisUnicodes.get(0))).check(matches(isDisplayed()));
98+
99+
// Undo the Emoji
100+
onView(withId(R.id.imgUndo)).perform(click());
101+
onView(withText(emojisUnicodes.get(0))).check(doesNotExist());
102+
103+
// Redo the Emoji
104+
onView(withId(R.id.imgRedo)).perform(click());
105+
onView(withText(emojisUnicodes.get(0))).check(matches(isDisplayed()));
106+
}
28107
}

app/src/main/java/com/burhanrashid52/photoeditor/ColorPickerAdapter.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
import android.graphics.drawable.LayerDrawable;
88
import android.graphics.drawable.ShapeDrawable;
99
import android.graphics.drawable.shapes.OvalShape;
10-
import android.support.annotation.NonNull;
11-
import android.support.v4.content.ContextCompat;
12-
import android.support.v7.widget.RecyclerView;
10+
import androidx.annotation.NonNull;
11+
import androidx.core.content.ContextCompat;
12+
import androidx.recyclerview.widget.RecyclerView;
1313
import android.view.LayoutInflater;
1414
import android.view.View;
1515
import android.view.ViewGroup;

app/src/main/java/com/burhanrashid52/photoeditor/EditImageActivity.java

+13-12
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,21 @@
1010
import android.os.Bundle;
1111
import android.os.Environment;
1212
import android.provider.MediaStore;
13-
import android.support.annotation.NonNull;
14-
import android.support.constraint.ConstraintLayout;
15-
import android.support.constraint.ConstraintSet;
16-
import android.support.transition.ChangeBounds;
17-
import android.support.transition.TransitionManager;
18-
import android.support.v7.app.AlertDialog;
19-
import android.support.v7.widget.LinearLayoutManager;
20-
import android.support.v7.widget.RecyclerView;
2113
import android.util.Log;
2214
import android.view.View;
2315
import android.view.animation.AnticipateOvershootInterpolator;
2416
import android.widget.ImageView;
2517
import android.widget.TextView;
2618

19+
import androidx.annotation.NonNull;
20+
import androidx.appcompat.app.AlertDialog;
21+
import androidx.constraintlayout.widget.ConstraintLayout;
22+
import androidx.constraintlayout.widget.ConstraintSet;
23+
import androidx.recyclerview.widget.LinearLayoutManager;
24+
import androidx.recyclerview.widget.RecyclerView;
25+
import androidx.transition.ChangeBounds;
26+
import androidx.transition.TransitionManager;
27+
2728
import com.burhanrashid52.photoeditor.base.BaseActivity;
2829
import com.burhanrashid52.photoeditor.filters.FilterListener;
2930
import com.burhanrashid52.photoeditor.filters.FilterViewAdapter;
@@ -51,7 +52,7 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList
5152
public static final String EXTRA_IMAGE_PATHS = "extra_image_paths";
5253
private static final int CAMERA_REQUEST = 52;
5354
private static final int PICK_REQUEST = 53;
54-
private PhotoEditor mPhotoEditor;
55+
PhotoEditor mPhotoEditor;
5556
private PhotoEditorView mPhotoEditorView;
5657
private PropertiesBSFragment mPropertiesBSFragment;
5758
private EmojiBSFragment mEmojiBSFragment;
@@ -250,6 +251,7 @@ public void onFailure(@NonNull Exception exception) {
250251

251252
@Override
252253
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
254+
super.onActivityResult(requestCode, resultCode, data);
253255
if (resultCode == RESULT_OK) {
254256
switch (requestCode) {
255257
case CAMERA_REQUEST:
@@ -293,7 +295,6 @@ public void onBrushSizeChanged(int brushSize) {
293295
public void onEmojiClick(String emojiUnicode) {
294296
mPhotoEditor.addEmoji(emojiUnicode);
295297
mTxtCurrentTool.setText(R.string.label_emoji);
296-
297298
}
298299

299300
@Override
@@ -311,7 +312,7 @@ public void isPermissionGranted(boolean isGranted, String permission) {
311312

312313
private void showSaveDialog() {
313314
AlertDialog.Builder builder = new AlertDialog.Builder(this);
314-
builder.setMessage("Are you want to exit without saving image ?");
315+
builder.setMessage(getString(R.string.msg_save_image));
315316
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
316317
@Override
317318
public void onClick(DialogInterface dialog, int which) {
@@ -363,7 +364,7 @@ public void onDone(String inputText, int colorCode) {
363364
break;
364365
case ERASER:
365366
mPhotoEditor.brushEraser();
366-
mTxtCurrentTool.setText(R.string.label_eraser);
367+
mTxtCurrentTool.setText(R.string.label_eraser_mode);
367368
break;
368369
case FILTER:
369370
mTxtCurrentTool.setText(R.string.label_filter);

app/src/main/java/com/burhanrashid52/photoeditor/EmojiBSFragment.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import android.annotation.SuppressLint;
44
import android.app.Dialog;
5-
import android.support.annotation.NonNull;
6-
import android.support.design.widget.BottomSheetBehavior;
7-
import android.support.design.widget.BottomSheetDialogFragment;
8-
import android.support.design.widget.CoordinatorLayout;
9-
import android.support.v7.widget.GridLayoutManager;
10-
import android.support.v7.widget.RecyclerView;
5+
import androidx.annotation.NonNull;
6+
import com.google.android.material.bottomsheet.BottomSheetBehavior;
7+
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
8+
import androidx.coordinatorlayout.widget.CoordinatorLayout;
9+
import androidx.recyclerview.widget.GridLayoutManager;
10+
import androidx.recyclerview.widget.RecyclerView;
1111
import android.view.LayoutInflater;
1212
import android.view.View;
1313
import android.view.ViewGroup;

app/src/main/java/com/burhanrashid52/photoeditor/PropertiesBSFragment.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.burhanrashid52.photoeditor;
22

33
import android.os.Bundle;
4-
import android.support.annotation.NonNull;
5-
import android.support.annotation.Nullable;
6-
import android.support.design.widget.BottomSheetDialogFragment;
7-
import android.support.v7.widget.LinearLayoutManager;
8-
import android.support.v7.widget.RecyclerView;
4+
import androidx.annotation.NonNull;
5+
import androidx.annotation.Nullable;
6+
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
7+
import androidx.recyclerview.widget.LinearLayoutManager;
8+
import androidx.recyclerview.widget.RecyclerView;
99
import android.view.LayoutInflater;
1010
import android.view.View;
1111
import android.view.ViewGroup;

app/src/main/java/com/burhanrashid52/photoeditor/StickerBSFragment.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
import android.graphics.Bitmap;
66
import android.graphics.BitmapFactory;
77
import android.os.Bundle;
8-
import android.support.annotation.NonNull;
9-
import android.support.annotation.Nullable;
10-
import android.support.design.widget.BottomSheetBehavior;
11-
import android.support.design.widget.BottomSheetDialogFragment;
12-
import android.support.design.widget.CoordinatorLayout;
13-
import android.support.v7.widget.GridLayoutManager;
14-
import android.support.v7.widget.RecyclerView;
8+
import androidx.annotation.NonNull;
9+
import androidx.annotation.Nullable;
10+
import com.google.android.material.bottomsheet.BottomSheetBehavior;
11+
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
12+
import androidx.coordinatorlayout.widget.CoordinatorLayout;
13+
import androidx.recyclerview.widget.GridLayoutManager;
14+
import androidx.recyclerview.widget.RecyclerView;
1515
import android.view.LayoutInflater;
1616
import android.view.View;
1717
import android.view.ViewGroup;

app/src/main/java/com/burhanrashid52/photoeditor/TextEditorDialogFragment.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
import android.content.Context;
55
import android.graphics.drawable.ColorDrawable;
66
import android.os.Bundle;
7-
import android.support.annotation.ColorInt;
8-
import android.support.annotation.NonNull;
9-
import android.support.annotation.Nullable;
10-
import android.support.v4.app.DialogFragment;
11-
import android.support.v4.content.ContextCompat;
12-
import android.support.v7.app.AppCompatActivity;
13-
import android.support.v7.widget.LinearLayoutManager;
14-
import android.support.v7.widget.RecyclerView;
7+
import androidx.annotation.ColorInt;
8+
import androidx.annotation.NonNull;
9+
import androidx.annotation.Nullable;
10+
import androidx.fragment.app.DialogFragment;
11+
import androidx.core.content.ContextCompat;
12+
import androidx.appcompat.app.AppCompatActivity;
13+
import androidx.recyclerview.widget.LinearLayoutManager;
14+
import androidx.recyclerview.widget.RecyclerView;
1515
import android.text.TextUtils;
1616
import android.view.LayoutInflater;
1717
import android.view.View;

app/src/main/java/com/burhanrashid52/photoeditor/base/BaseActivity.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import android.app.ProgressDialog;
44
import android.content.pm.PackageManager;
5-
import android.support.annotation.NonNull;
6-
import android.support.design.widget.Snackbar;
7-
import android.support.v4.app.ActivityCompat;
8-
import android.support.v4.content.ContextCompat;
9-
import android.support.v7.app.AppCompatActivity;
5+
import androidx.annotation.NonNull;
6+
import com.google.android.material.snackbar.Snackbar;
7+
import androidx.core.app.ActivityCompat;
8+
import androidx.core.content.ContextCompat;
9+
import androidx.appcompat.app.AppCompatActivity;
1010
import android.view.View;
1111
import android.view.Window;
1212
import android.view.WindowManager;

app/src/main/java/com/burhanrashid52/photoeditor/base/BaseFragment.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.burhanrashid52.photoeditor.base;
22

33
import android.os.Bundle;
4-
import android.support.annotation.NonNull;
5-
import android.support.annotation.Nullable;
6-
import android.support.v4.app.Fragment;
4+
import androidx.annotation.NonNull;
5+
import androidx.annotation.Nullable;
6+
import androidx.fragment.app.Fragment;
77
import android.view.LayoutInflater;
88
import android.view.View;
99
import android.view.ViewGroup;

0 commit comments

Comments
 (0)