Skip to content

Commit

Permalink
Merge pull request #203 from burhanrashid52/release.1.0.0
Browse files Browse the repository at this point in the history
Release.1.0.0
  • Loading branch information
burhanrashid52 authored Dec 12, 2019
2 parents 024a27d + df42f44 commit a3b3267
Show file tree
Hide file tree
Showing 37 changed files with 225 additions and 136 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,8 @@ new TextStyleBuilder()
- New : Bumped support version to 28
- Removed : All Deprecated methods
- Test : Added test cases for `BrushDrawingView` with 100% code coverage

## 1.0.0
- New : Migrating the support libraries to AndroidX
- New : Bumped target sdk version to 29
- Test : Adding UI to test for the library
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# PhotoEditor

[![CircleCI](https://circleci.com/gh/burhanrashid52/PhotoEditor.svg?style=svg)](https://circleci.com/gh/burhanrashid52/PhotoEditor)
[![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)
[![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)
[![AndroidArsenal](https://img.shields.io/badge/Android%20Arsenal-PhotoEditor-blue.svg)](https://android-arsenal.com/details/1/6736)
[![AndroidDevDigest](https://img.shields.io/badge/AndroidDev%20Digest-%23185-brightgreen.svg)](https://www.androiddevdigest.com/digest-185)
[![AwesomeAndroid](https://img.shields.io/badge/Awesome%20Android-%2397-red.svg)](https://android.libhunt.com/newsletter/97)
Expand Down Expand Up @@ -30,11 +30,14 @@ A Photo Editor library with simple, easy support for image editing using Paints,
- Easy image editing


## AndroidX
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 :)


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

Expand Down
23 changes: 12 additions & 11 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 28
compileSdkVersion 29
defaultConfig {
applicationId "com.burhanrashid52.photoeditor"
minSdkVersion 14
targetSdkVersion 28
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
Expand All @@ -20,18 +20,19 @@ android {

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

testImplementation 'junit:junit:4.12'

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test:rules:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.2.0'
}

// make sure this line comes *after* you apply the Android plugin
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,107 @@
package com.burhanrashid52.photoeditor;

import android.support.test.filters.LargeTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.content.Context;

import androidx.test.espresso.contrib.RecyclerViewActions;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;

import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import java.util.ArrayList;

import ja.burhanrashid52.photoeditor.PhotoEditor;

import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertFalse;


@RunWith(AndroidJUnit4.class)
@LargeTest
public class EditImageActivityTest {

@Rule
public ActivityTestRule<EditImageActivity> mActivityRule = new ActivityTestRule<>(EditImageActivity.class);
public ActivityTestRule<EditImageActivity> mActivityRule = new ActivityTestRule<>(EditImageActivity.class, false, false);

@Test
public void checkIfActivityIsLaunched() {
mActivityRule.launchActivity(null);
onView(withText(R.string.app_name)).check(matches(isDisplayed()));
}

@Test
public void checkIfBrushIsEnabledWhenClickedOnBrushTool() {
EditImageActivity editImageActivity = mActivityRule.launchActivity(null);
assertFalse(editImageActivity.mPhotoEditor.getBrushDrawableMode());
onView(withText(R.string.label_brush)).perform(click());
assertTrue(editImageActivity.mPhotoEditor.getBrushDrawableMode());
}

@Test
public void checkIfEraserIsEnabledWhenClickedOnEraserTool() {
mActivityRule.launchActivity(null);
onView(withText(R.string.label_eraser)).perform(click());
onView(withText(R.string.label_eraser_mode)).check(matches(isDisplayed()));
}

@Test
public void checkIfEmojiIsDisplayedWhenEmojiIsSelected() {
Context context = mActivityRule.launchActivity(null);
ArrayList<String> emojis = PhotoEditor.getEmojis(context);
int emojiPosition = 1;
String emojiUnicode = emojis.get(emojiPosition);
onView(withText(R.string.label_emoji)).perform(click());
onView(withId(R.id.rvEmoji))
.perform(RecyclerViewActions.actionOnItemAtPosition(emojiPosition, click()));
onView(withText(emojiUnicode)).check(matches(isDisplayed()));
}

@Ignore("Flacky test. Need to optimize")
public void checkIfDiscardDialogIsNotDisplayedWhenCacheIsEmpty() {
EditImageActivity editImageActivity = mActivityRule.launchActivity(null);
assertTrue(editImageActivity.mPhotoEditor.isCacheEmpty());
onView(withId(R.id.imgClose)).perform(click());
assertTrue(editImageActivity.isDestroyed());
}

@Test
public void checkIfDiscardDialogIsDisplayedWhenCacheIsNotEmpty() {
EditImageActivity editImageActivity = mActivityRule.launchActivity(null);
assertTrue(editImageActivity.mPhotoEditor.isCacheEmpty());
onView(withText(R.string.label_emoji)).perform(click());
onView(withId(R.id.rvEmoji))
.perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
onView(withId(R.id.imgClose)).perform(click());
onView(withText(R.string.msg_save_image)).check(matches(isDisplayed()));
}

@Test
public void checkIfUndoRedoIsWorkingCorrectWhenClickedOnUndoRedo() throws InterruptedException {
EditImageActivity editImageActivity = mActivityRule.launchActivity(null);
ArrayList<String> emojisUnicodes = PhotoEditor.getEmojis(editImageActivity);

//Add Emoji
onView(withText(R.string.label_emoji)).perform(click());
onView(withId(R.id.rvEmoji)).perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
onView(withText(emojisUnicodes.get(0))).check(matches(isDisplayed()));

// Undo the Emoji
onView(withId(R.id.imgUndo)).perform(click());
onView(withText(emojisUnicodes.get(0))).check(doesNotExist());

// Redo the Emoji
onView(withId(R.id.imgRedo)).perform(click());
onView(withText(emojisUnicodes.get(0))).check(matches(isDisplayed()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,21 @@
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.constraint.ConstraintLayout;
import android.support.constraint.ConstraintSet;
import android.support.transition.ChangeBounds;
import android.support.transition.TransitionManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.animation.AnticipateOvershootInterpolator;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.transition.ChangeBounds;
import androidx.transition.TransitionManager;

import com.burhanrashid52.photoeditor.base.BaseActivity;
import com.burhanrashid52.photoeditor.filters.FilterListener;
import com.burhanrashid52.photoeditor.filters.FilterViewAdapter;
Expand Down Expand Up @@ -51,7 +52,7 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList
public static final String EXTRA_IMAGE_PATHS = "extra_image_paths";
private static final int CAMERA_REQUEST = 52;
private static final int PICK_REQUEST = 53;
private PhotoEditor mPhotoEditor;
PhotoEditor mPhotoEditor;
private PhotoEditorView mPhotoEditorView;
private PropertiesBSFragment mPropertiesBSFragment;
private EmojiBSFragment mEmojiBSFragment;
Expand Down Expand Up @@ -250,6 +251,7 @@ public void onFailure(@NonNull Exception exception) {

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CAMERA_REQUEST:
Expand Down Expand Up @@ -293,7 +295,6 @@ public void onBrushSizeChanged(int brushSize) {
public void onEmojiClick(String emojiUnicode) {
mPhotoEditor.addEmoji(emojiUnicode);
mTxtCurrentTool.setText(R.string.label_emoji);

}

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

private void showSaveDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you want to exit without saving image ?");
builder.setMessage(getString(R.string.msg_save_image));
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Expand Down Expand Up @@ -363,7 +364,7 @@ public void onDone(String inputText, int colorCode) {
break;
case ERASER:
mPhotoEditor.brushEraser();
mTxtCurrentTool.setText(R.string.label_eraser);
mTxtCurrentTool.setText(R.string.label_eraser_mode);
break;
case FILTER:
mTxtCurrentTool.setText(R.string.label_filter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import android.annotation.SuppressLint;
import android.app.Dialog;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.BottomSheetDialogFragment;
import android.support.design.widget.CoordinatorLayout;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import androidx.annotation.NonNull;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.burhanrashid52.photoeditor;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetDialogFragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.BottomSheetDialogFragment;
import android.support.design.widget.CoordinatorLayout;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.core.content.ContextCompat;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

import android.app.ProgressDialog;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import androidx.annotation.NonNull;
import com.google.android.material.snackbar.Snackbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.burhanrashid52.photoeditor.base;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand Down
Loading

0 comments on commit a3b3267

Please sign in to comment.