diff --git a/app/build.gradle b/app/build.gradle index 5dd0015..b508b2d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 + compileSdkVersion 29 defaultConfig { applicationId "gun0912.tedbottompickerdemo" minSdkVersion 16 - targetSdkVersion 26 + targetSdkVersion 29 versionCode 1 versionName "1.0.0" multiDexEnabled true @@ -39,13 +39,13 @@ repositories { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') testImplementation 'junit:junit:4.12' - implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'androidx.appcompat:appcompat:1.0.2' implementation project(':tedbottompicker') - implementation 'com.android.support:multidex:1.0.3' + implementation 'androidx.multidex:multidex:2.0.1' implementation 'gun0912.ted:tedpermission:2.2.0' - implementation 'com.github.bumptech.glide:glide:4.7.1' - annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1' + implementation "com.github.bumptech.glide:glide:$glide_version" + annotationProcessor "com.github.bumptech.glide:compiler:$glide_version" debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3' diff --git a/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java b/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java index 754e98e..f869c2b 100644 --- a/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java +++ b/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java @@ -3,7 +3,6 @@ import android.Manifest; import android.net.Uri; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; @@ -14,11 +13,14 @@ import android.widget.ImageView; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + import com.bumptech.glide.Glide; import com.bumptech.glide.RequestManager; import com.bumptech.glide.request.RequestOptions; import com.gun0912.tedpermission.PermissionListener; import com.gun0912.tedpermission.TedPermission; +import com.theartofdev.edmodo.cropper.CropImageView; import java.util.ArrayList; import java.util.List; @@ -64,6 +66,8 @@ public void onPermissionGranted() { //.setPeekHeight(getResources().getDisplayMetrics().heightPixels/2) .setSelectedUri(selectedUri) //.showVideoMedia() + .setCropper(true) + .setResize(500, 500, CropImageView.RequestSizeOptions.RESIZE_INSIDE) .setPeekHeight(1200) .show(uri -> { Log.d("ted", "uri: " + uri); @@ -105,6 +109,9 @@ public void onPermissionGranted() { TedBottomPicker.with(MainActivity.this) //.setPeekHeight(getResources().getDisplayMetrics().heightPixels/2) .setPeekHeight(1600) + .setCropper(true) + .setCropperRatio(1, 1) + .setResize(500, 500, CropImageView.RequestSizeOptions.RESIZE_INSIDE) .showTitle(false) .setCompleteButtonText("Done") .setEmptySelectionText("No Select") @@ -114,7 +121,6 @@ public void onPermissionGranted() { showUriList(uriList); }); - } @Override diff --git a/app/src/main/java/gun0912/tedbottompickerdemo/MyApplication.java b/app/src/main/java/gun0912/tedbottompickerdemo/MyApplication.java index ae7ee41..74a29f3 100644 --- a/app/src/main/java/gun0912/tedbottompickerdemo/MyApplication.java +++ b/app/src/main/java/gun0912/tedbottompickerdemo/MyApplication.java @@ -1,7 +1,8 @@ package gun0912.tedbottompickerdemo; import android.app.Application; -import android.support.multidex.MultiDexApplication; + +import androidx.multidex.MultiDexApplication; import com.squareup.leakcanary.LeakCanary; diff --git a/build.gradle b/build.gradle index f3f92b4..9c82403 100644 --- a/build.gradle +++ b/build.gradle @@ -1,21 +1,26 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ext.glide_version = '4.9.0' repositories { jcenter() google() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.2' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3' + classpath 'com.android.tools.build:gradle:3.4.2' + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' } + } allprojects { repositories { jcenter() google() + maven { url "https://jitpack.io" } + } group = GROUP diff --git a/gradle.properties b/gradle.properties index 76e05fe..df08931 100644 --- a/gradle.properties +++ b/gradle.properties @@ -29,3 +29,5 @@ LIBRARY_DESCRIPTION = 'TedBottomPicker is simple image picker using bottom sheet POM_ARTIFACT_ID=tedbottompicker POM_NAME=TedBottomPicker +android.enableJetifier=true +android.useAndroidX=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ec6dc00..04bd6f8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ -#Wed Jun 05 20:54:30 KST 2019 +#Thu Sep 05 11:11:10 NPT 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.1.1-all.zip + diff --git a/tedbottompicker/build.gradle b/tedbottompicker/build.gradle index b94dd0e..72c7084 100644 --- a/tedbottompicker/build.gradle +++ b/tedbottompicker/build.gradle @@ -3,12 +3,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 27 + compileSdkVersion 29 defaultConfig { minSdkVersion 16 - targetSdkVersion 24 + targetSdkVersion 29 versionCode 1 versionName "1.0" } @@ -45,14 +45,19 @@ repositories { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' - implementation 'com.android.support:appcompat-v7:27.1.1' - api 'com.android.support:design:27.1.1' - implementation 'com.android.support:support-annotations:27.1.1' - javadocDeps 'com.android.support:support-annotations:27.1.1' - implementation 'com.github.bumptech.glide:glide:4.9.0' - annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' + implementation 'androidx.appcompat:appcompat:1.0.2' + api 'com.google.android.material:material:1.0.0' + implementation 'androidx.annotation:annotation:1.1.0' + javadocDeps 'androidx.annotation:annotation:1.1.0' + implementation "com.github.bumptech.glide:glide:$glide_version" + annotationProcessor "com.github.bumptech.glide:compiler:$glide_version" + implementation 'gun0912.ted:tedonactivityresult:1.0.6' implementation "io.reactivex.rxjava2:rxjava:2.2.6" + api 'com.theartofdev.edmodo:android-image-cropper:2.8.0' + + + } apply from: rootProject.file('publish.gradle') \ No newline at end of file diff --git a/tedbottompicker/proguard-rules.pro b/tedbottompicker/proguard-rules.pro index 39552e4..296c806 100644 --- a/tedbottompicker/proguard-rules.pro +++ b/tedbottompicker/proguard-rules.pro @@ -23,4 +23,5 @@ } # for DexGuard only --keepresourcexmlelements manifest/application/meta-data@value=GlideModule \ No newline at end of file +-keepresourcexmlelements manifest/application/meta-data@value=GlideModule +-keep class androidx.appcompat.widget.** { *; } diff --git a/tedbottompicker/src/main/AndroidManifest.xml b/tedbottompicker/src/main/AndroidManifest.xml index 016b06c..82a9df3 100644 --- a/tedbottompicker/src/main/AndroidManifest.xml +++ b/tedbottompicker/src/main/AndroidManifest.xml @@ -5,7 +5,7 @@ @@ -13,6 +13,8 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> + diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/GridSpacingItemDecoration.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/GridSpacingItemDecoration.java index 87e1526..b728e4e 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/GridSpacingItemDecoration.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/GridSpacingItemDecoration.java @@ -1,9 +1,10 @@ package gun0912.tedbottompicker; import android.graphics.Rect; -import android.support.v7.widget.RecyclerView; import android.view.View; +import androidx.recyclerview.widget.RecyclerView; + /** * Created by TedPark on 2016. 8. 30.. */ diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java index cc6e8cf..0804179 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java @@ -1,6 +1,7 @@ package gun0912.tedbottompicker; -import android.support.v4.app.FragmentActivity; + +import androidx.fragment.app.FragmentActivity; public class TedBottomPicker extends TedBottomSheetDialogFragment { diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomSheetDialogFragment.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomSheetDialogFragment.java index ac9e277..2ee3423 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomSheetDialogFragment.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomSheetDialogFragment.java @@ -1,7 +1,6 @@ package gun0912.tedbottompicker; import android.Manifest; -import android.app.Activity; import android.app.Dialog; import android.content.Intent; import android.content.pm.PackageManager; @@ -13,23 +12,6 @@ import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; -import android.support.annotation.ColorRes; -import android.support.annotation.DimenRes; -import android.support.annotation.DrawableRes; -import android.support.annotation.IntDef; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.design.widget.BottomSheetBehavior; -import android.support.design.widget.BottomSheetDialogFragment; -import android.support.design.widget.CoordinatorLayout; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.content.ContextCompat; -import android.support.v4.content.FileProvider; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -40,10 +22,30 @@ import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.ColorRes; +import androidx.annotation.DimenRes; +import androidx.annotation.DrawableRes; +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.content.ContextCompat; +import androidx.core.content.FileProvider; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; +import com.google.android.material.bottomsheet.BottomSheetBehavior; +import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.gun0912.tedonactivityresult.TedOnActivityResult; import com.gun0912.tedonactivityresult.listener.OnActivityResultListener; +import com.theartofdev.edmodo.cropper.CropImage; +import com.theartofdev.edmodo.cropper.CropImageView; import java.io.File; import java.io.IOException; @@ -58,6 +60,8 @@ import gun0912.tedbottompicker.adapter.GalleryAdapter; import gun0912.tedbottompicker.util.RealPathUtil; +import static android.app.Activity.RESULT_OK; + public class TedBottomSheetDialogFragment extends BottomSheetDialogFragment { private static final String EXTRA_CAMERA_IMAGE_URI = "camera_image_uri"; @@ -280,12 +284,26 @@ private void complete(final Uri uri) { } } else { - builder.onImageSelectedListener.onImageSelected(uri); - dismissAllowingStateLoss(); + if (builder.setCropper) { + openCropper(uri); + } else { + builder.onImageSelectedListener.onImageSelected(uri); + dismissAllowingStateLoss(); + } } } + private void openCropper(Uri uri) { + CropImage.ActivityBuilder bi = CropImage.activity(uri); + if (builder.ratioX > 0) { + bi.setAspectRatio(builder.ratioX, builder.ratioY); + } + if (builder.resizeWidth > 0) + bi.setRequestedSize(builder.resizeWidth, builder.resizeHeight, builder.resizeOption); + bi.start(getContext(), this); + } + private void addUri(final Uri uri) { if (selectedUriList.size() == builder.selectMaxCount) { String message; @@ -298,8 +316,15 @@ private void addUri(final Uri uri) { Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show(); return; } + if (builder.setCropper) { + openCropper(uri); + } else { + setToLayout(uri); + } + } + private void setToLayout(Uri uri) { selectedUriList.add(uri); final View rootView = LayoutInflater.from(getActivity()).inflate(R.layout.tedbottompicker_selected_item, null); @@ -345,6 +370,26 @@ public void onClick(View v) { } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) { + CropImage.ActivityResult result = CropImage.getActivityResult(data); + if (resultCode == RESULT_OK) { + Uri resultUri = result.getUri(); + if (isMultiSelect()) setToLayout(resultUri); + else { + builder.onImageSelectedListener.onImageSelected(resultUri); + dismissAllowingStateLoss(); + + } + + } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) { + Exception error = result.getError(); + errorMessage(error.getMessage()); + } + } + } + private void removeImage(Uri uri) { selectedUriList.remove(uri); @@ -409,7 +454,7 @@ private void startCameraIntent() { .setListener(new OnActivityResultListener() { @Override public void onActivityResult(int resultCode, Intent data) { - if (resultCode == Activity.RESULT_OK) { + if (resultCode == RESULT_OK) { onActivityResultCamera(cameraImageUri); } } @@ -507,7 +552,7 @@ private void startGalleryIntent() { .setListener(new OnActivityResultListener() { @Override public void onActivityResult(int resultCode, Intent data) { - if (resultCode == Activity.RESULT_OK) { + if (resultCode == RESULT_OK) { onActivityResultGallery(data); } } @@ -630,6 +675,12 @@ public abstract static class BaseBuilder { private int spacing = 1; private boolean includeEdgeSpacing = false; private int peekHeight = -1; + private boolean setCropper = false; + private int resizeWidth = 0; + private int resizeHeight = 0; + private CropImageView.RequestSizeOptions resizeOption = CropImageView.RequestSizeOptions.NONE; + private int ratioX = 0; + private int ratioY = 0; private int titleBackgroundResId; private int selectMaxCount = Integer.MAX_VALUE; private int selectMinCount = 0; @@ -747,6 +798,24 @@ public T setPeekHeight(int peekHeight) { return (T) this; } + public T setCropper(boolean setCropper) { + this.setCropper = setCropper; + return (T) this; + } + + public T setCropperRatio(int ratioX, int ratioY) { + this.ratioX = ratioX; + this.ratioY = ratioY; + return (T) this; + } + + public T setResize(int resizeWidth, int resizeHeight, CropImageView.RequestSizeOptions resizeOption) { + this.resizeWidth = resizeWidth; + this.resizeHeight = resizeHeight; + this.resizeOption = resizeOption; + return (T) this; + } + public T setPeekHeightResId(@DimenRes int dimenResId) { this.peekHeight = fragmentActivity.getResources().getDimensionPixelSize(dimenResId); return (T) this; diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedRxBottomPicker.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedRxBottomPicker.java index fc9a8e0..95c20b2 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedRxBottomPicker.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedRxBottomPicker.java @@ -1,7 +1,8 @@ package gun0912.tedbottompicker; import android.net.Uri; -import android.support.v4.app.FragmentActivity; + +import androidx.fragment.app.FragmentActivity; import java.util.List; diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java index 89e93a2..309cb8b 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java @@ -5,14 +5,15 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.provider.MediaStore; -import android.support.annotation.IntDef; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; + import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedEmptyRecyclerView.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedEmptyRecyclerView.java index d31c0ed..9d58502 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedEmptyRecyclerView.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedEmptyRecyclerView.java @@ -1,12 +1,13 @@ package gun0912.tedbottompicker.view; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.View; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + public class TedEmptyRecyclerView extends RecyclerView { @Nullable View emptyView; diff --git a/tedbottompicker/src/main/res/layout/tedbottompicker_content_view.xml b/tedbottompicker/src/main/res/layout/tedbottompicker_content_view.xml index bf5b154..3441f4c 100644 --- a/tedbottompicker/src/main/res/layout/tedbottompicker_content_view.xml +++ b/tedbottompicker/src/main/res/layout/tedbottompicker_content_view.xml @@ -117,7 +117,7 @@ /> --> -