From 83ef4c0b94ab98602d8cee7f13865e25e74fa812 Mon Sep 17 00:00:00 2001 From: Esa Firman Date: Sun, 30 Jul 2017 10:21:15 +0700 Subject: [PATCH 1/7] Add toggle folder mode in sample --- sample/src/main/java/com/esafirm/sample/MainActivity.java | 3 ++- sample/src/main/res/layout/activity_main.xml | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/sample/src/main/java/com/esafirm/sample/MainActivity.java b/sample/src/main/java/com/esafirm/sample/MainActivity.java index 00007865..b01d5754 100644 --- a/sample/src/main/java/com/esafirm/sample/MainActivity.java +++ b/sample/src/main/java/com/esafirm/sample/MainActivity.java @@ -117,11 +117,12 @@ public void start() { final boolean returnAfterCapture = ((Switch) findViewById(R.id.ef_switch_return_after_capture)).isChecked(); final boolean isSingleMode = ((Switch) findViewById(R.id.ef_switch_single)).isChecked(); final boolean useCustomImageLoader = ((Switch) findViewById(R.id.ef_switch_imageloader)).isChecked(); + final boolean folderMode = ((Switch) findViewById(R.id.ef_switch_folder_mode)).isChecked(); ImagePicker imagePicker = ImagePicker.create(this) .theme(R.style.ImagePickerTheme) .returnAfterFirst(returnAfterCapture) // set whether pick action or camera action should return immediate result or not. Only works in single mode for image picker - .folderMode(false) // set folder mode (false by default) + .folderMode(folderMode) // set folder mode (false by default) .folderTitle("Folder") // folder selection title .imageTitle("Tap to select"); // image selection title diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 650fc5e1..7a1d980d 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -26,6 +26,14 @@ android:layout_marginBottom="@dimen/activity_vertical_margin" android:text="Return After First "/> + + + Date: Sun, 30 Jul 2017 10:23:10 +0700 Subject: [PATCH 2/7] Fix duplicated folder https://github.com/esafirm/android-image-picker/issues/65 --- .../com/esafirm/imagepicker/adapter/FolderPickerAdapter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/imagepicker/src/main/java/com/esafirm/imagepicker/adapter/FolderPickerAdapter.java b/imagepicker/src/main/java/com/esafirm/imagepicker/adapter/FolderPickerAdapter.java index 367c9909..8d79aeaa 100644 --- a/imagepicker/src/main/java/com/esafirm/imagepicker/adapter/FolderPickerAdapter.java +++ b/imagepicker/src/main/java/com/esafirm/imagepicker/adapter/FolderPickerAdapter.java @@ -54,6 +54,7 @@ public void onBindViewHolder(final FolderViewHolder holder, int position) { public void setData(List folders) { if (folders != null) { + this.folders.clear(); this.folders.addAll(folders); } notifyDataSetChanged(); From 3c3a9c00e1ab082ac2849e1ce0dadd37ab4ef021 Mon Sep 17 00:00:00 2001 From: Esa Firman Date: Sun, 30 Jul 2017 10:42:09 +0700 Subject: [PATCH 3/7] Bump build tools Add dependency for release binary check --- sample/build.gradle | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/sample/build.gradle b/sample/build.gradle index cadf690c..3fa78a7b 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 25 - buildToolsVersion '25.0.0' + buildToolsVersion '25.0.3' defaultConfig { applicationId "com.esafirm.imagepicker.sample" @@ -19,10 +19,19 @@ android { } } +repositories { + maven { url "https://jitpack.io" } +} + dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.0.0' - compile project(':imagepicker') + + /* Development */ compile project(':rximagepicker') + compile project(':imagepicker') + + /* Release Check */ +// final imagePickerVersion = '1.7.4' +// compile "com.github.esafirm.android-image-picker:imagepicker:${imagePickerVersion}" +// compile("com.github.esafirm.android-image-picker:rximagepicker:${imagePickerVersion}") } From 801fdbf3341e635d75d6f0a0dc1bbae48244305f Mon Sep 17 00:00:00 2001 From: Esa Firman Date: Sun, 30 Jul 2017 10:50:14 +0700 Subject: [PATCH 4/7] =?UTF-8?q?Update=20the=20readme=20=F0=9F=93=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 89b29597..f232fa35 100644 --- a/README.md +++ b/README.md @@ -21,10 +21,9 @@ And add this to your module's `build.gradle` ```groovy dependencies { - compile 'com.github.bumptech.glide:glide:3.7.0' - compile 'com.github.esafirm.android-image-picker:imagepicker:x.y.z@aar' + compile 'com.github.esafirm.android-image-picker:imagepicker:x.y.z' // for experimental rx picker - compile 'com.github.esafirm.android-image-picker:rximagepicker:x.y.z@aar' + compile 'com.github.esafirm.android-image-picker:rximagepicker:x.y.z' } ``` @@ -119,7 +118,11 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` +<<<<<<< HEAD ## Original License +======= +##Original License +>>>>>>> Update the readme 📚 [The Original Image Picker](https://github.com/nguyenhoanglam/ImagePicker) From 3e04b9a482fde1eb9145b3679b2188c3ed40982a Mon Sep 17 00:00:00 2001 From: Esa Firman Date: Sun, 30 Jul 2017 10:50:38 +0700 Subject: [PATCH 5/7] Exlucde unnecessary module from appcompat --- imagepicker/build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/imagepicker/build.gradle b/imagepicker/build.gradle index 06489524..7c639f6c 100644 --- a/imagepicker/build.gradle +++ b/imagepicker/build.gradle @@ -32,8 +32,11 @@ dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' final supportLibraryVersion = '25.3.1' - compile "com.android.support:appcompat-v7:$supportLibraryVersion" compile "com.android.support:recyclerview-v7:$supportLibraryVersion" + compile("com.android.support:appcompat-v7:$supportLibraryVersion") { + exclude module: 'animated-vector-drawable' + exclude module: 'support-media-compat' + } testCompile 'junit:junit:4.12' } From 7bcb045e272133f5d888dba424a524d79cb44a30 Mon Sep 17 00:00:00 2001 From: Esa Firman Date: Sun, 30 Jul 2017 11:22:28 +0700 Subject: [PATCH 6/7] Add full path of directory as an option for saving image --- .../imagepicker/features/ImagePicker.java | 5 ++ .../features/ImagePickerConfig.java | 22 +++++--- .../features/ImagePickerConfigFactory.java | 2 +- .../features/ImagePickerSavePath.java | 53 +++++++++++++++++++ .../imagepicker/helper/ImagePickerUtils.java | 15 +++--- imagepicker/src/main/res/values/strings.xml | 3 -- .../java/com/esafirm/sample/MainActivity.java | 2 + 7 files changed, 84 insertions(+), 18 deletions(-) create mode 100644 imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerSavePath.java diff --git a/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePicker.java b/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePicker.java index 01a7f50f..4dd18bee 100644 --- a/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePicker.java +++ b/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePicker.java @@ -129,6 +129,11 @@ public ImagePicker imageDirectory(String directory) { return this; } + public ImagePicker imageFullDirectory(String fullPath) { + config.setImageFullDirectory(fullPath); + return this; + } + public ImagePicker theme(@StyleRes int theme) { config.setTheme(theme); return this; diff --git a/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerConfig.java b/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerConfig.java index e5fa17da..488720b9 100644 --- a/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerConfig.java +++ b/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerConfig.java @@ -15,7 +15,7 @@ public class ImagePickerConfig implements Parcelable { private String folderTitle; private String imageTitle; - private String imageDirectory; + private ImagePickerSavePath savePath; private int mode; private int limit; @@ -94,12 +94,20 @@ public void setFolderMode(boolean folderMode) { this.folderMode = folderMode; } - public String getImageDirectory() { - return imageDirectory; + public ImagePickerSavePath getImageDirectory() { + return savePath; } - public void setImageDirectory(String imageDirectory) { - this.imageDirectory = imageDirectory; + public void setSavePath(ImagePickerSavePath savePath) { + this.savePath = savePath; + } + + public void setImageDirectory(String dirName) { + savePath = new ImagePickerSavePath(dirName, false); + } + + public void setImageFullDirectory(String path) { + savePath = new ImagePickerSavePath(path, true); } public void setTheme(@StyleRes int theme) { @@ -132,7 +140,7 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeTypedList(this.selectedImages); dest.writeString(this.folderTitle); dest.writeString(this.imageTitle); - dest.writeString(this.imageDirectory); + dest.writeParcelable(this.savePath, flags); dest.writeInt(this.mode); dest.writeInt(this.limit); dest.writeInt(this.theme); @@ -146,7 +154,7 @@ protected ImagePickerConfig(Parcel in) { this.selectedImages = in.createTypedArrayList(Image.CREATOR); this.folderTitle = in.readString(); this.imageTitle = in.readString(); - this.imageDirectory = in.readString(); + this.savePath = in.readParcelable(ImagePickerSavePath.class.getClassLoader()); this.mode = in.readInt(); this.limit = in.readInt(); this.theme = in.readInt(); diff --git a/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerConfigFactory.java b/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerConfigFactory.java index ae09ade1..ee33a2c0 100644 --- a/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerConfigFactory.java +++ b/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerConfigFactory.java @@ -18,7 +18,7 @@ public static ImagePickerConfig createDefault(Context context) { config.setFolderTitle(context.getString(R.string.ef_title_folder)); config.setImageTitle(context.getString(R.string.ef_title_select_image)); config.setSelectedImages(new ArrayList<>()); - config.setImageDirectory(context.getString(R.string.ef_image_directory)); + config.setSavePath(ImagePickerSavePath.DEFAULT); config.setReturnAfterFirst(true); config.setImageLoader(new DefaultImageLoader()); return config; diff --git a/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerSavePath.java b/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerSavePath.java new file mode 100644 index 00000000..8ed28abf --- /dev/null +++ b/imagepicker/src/main/java/com/esafirm/imagepicker/features/ImagePickerSavePath.java @@ -0,0 +1,53 @@ +package com.esafirm.imagepicker.features; + +import android.os.Parcel; +import android.os.Parcelable; + +public class ImagePickerSavePath implements Parcelable { + + public static final ImagePickerSavePath DEFAULT = new ImagePickerSavePath("Camera", false); + + private final String path; + private final boolean isFullPath; + + public ImagePickerSavePath(String path, boolean isFullPath) { + this.path = path; + this.isFullPath = isFullPath; + } + + public String getPath() { + return path; + } + + public boolean isFullPath() { + return isFullPath; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.path); + dest.writeByte(this.isFullPath ? (byte) 1 : (byte) 0); + } + + protected ImagePickerSavePath(Parcel in) { + this.path = in.readString(); + this.isFullPath = in.readByte() != 0; + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public ImagePickerSavePath createFromParcel(Parcel source) { + return new ImagePickerSavePath(source); + } + + @Override + public ImagePickerSavePath[] newArray(int size) { + return new ImagePickerSavePath[size]; + } + }; +} diff --git a/imagepicker/src/main/java/com/esafirm/imagepicker/helper/ImagePickerUtils.java b/imagepicker/src/main/java/com/esafirm/imagepicker/helper/ImagePickerUtils.java index 9f4f1ed8..8cae2e7b 100644 --- a/imagepicker/src/main/java/com/esafirm/imagepicker/helper/ImagePickerUtils.java +++ b/imagepicker/src/main/java/com/esafirm/imagepicker/helper/ImagePickerUtils.java @@ -6,8 +6,8 @@ import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Environment; -import android.util.Log; +import com.esafirm.imagepicker.features.ImagePickerSavePath; import com.esafirm.imagepicker.model.Image; import java.io.File; @@ -19,16 +19,17 @@ public class ImagePickerUtils { - private static final String TAG = "ImageUtils"; - - public static File createImageFile(String directory) { + public static File createImageFile(ImagePickerSavePath savePath) { // External sdcard location - File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), directory); + final String path = savePath.getPath(); + File mediaStorageDir = savePath.isFullPath() + ? new File(path) + : new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), path); // Create the storage directory if it does not exist if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { - Log.d(TAG, "Oops! Failed create " + directory + " directory"); + IpLogger.getInstance().d("Oops! Failed create " + path); return null; } } @@ -41,7 +42,7 @@ public static File createImageFile(String directory) { try { imageFile = File.createTempFile(imageFileName, ".jpg", mediaStorageDir); } catch (IOException e) { - Log.d(TAG, "Oops! Failed create " + imageFileName + " file"); + IpLogger.getInstance().d("Oops! Failed create " + imageFileName + " file"); } return imageFile; } diff --git a/imagepicker/src/main/res/values/strings.xml b/imagepicker/src/main/res/values/strings.xml index d5f22801..b88bd372 100644 --- a/imagepicker/src/main/res/values/strings.xml +++ b/imagepicker/src/main/res/values/strings.xml @@ -25,7 +25,4 @@ GIF - - Camera - diff --git a/sample/src/main/java/com/esafirm/sample/MainActivity.java b/sample/src/main/java/com/esafirm/sample/MainActivity.java index b01d5754..b5c071c4 100644 --- a/sample/src/main/java/com/esafirm/sample/MainActivity.java +++ b/sample/src/main/java/com/esafirm/sample/MainActivity.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; +import android.os.Environment; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; @@ -139,6 +140,7 @@ public void start() { imagePicker.limit(10) // max images can be selected (99 by default) .showCamera(true) // show camera or not (true by default) .imageDirectory("Camera") // captured image directory name ("Camera" folder by default) + .imageFullDirectory(Environment.getExternalStorageDirectory().getPath()) // can be full path .origin(images) // original selected images, used in multi mode .start(RC_CODE_PICKER); // start image picker activity with request code } From 3be3cba8cd11d7986450535857ff21ef3101ca7c Mon Sep 17 00:00:00 2001 From: Esa Firman Date: Sun, 30 Jul 2017 11:28:17 +0700 Subject: [PATCH 7/7] Fix image not get unselected if the source is from builder --- .../main/java/com/esafirm/imagepicker/model/Image.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/imagepicker/src/main/java/com/esafirm/imagepicker/model/Image.java b/imagepicker/src/main/java/com/esafirm/imagepicker/model/Image.java index deb78f28..f9f9119a 100644 --- a/imagepicker/src/main/java/com/esafirm/imagepicker/model/Image.java +++ b/imagepicker/src/main/java/com/esafirm/imagepicker/model/Image.java @@ -39,6 +39,15 @@ public void setPath(String path) { this.path = path; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Image image = (Image) o; + return image.getPath().equalsIgnoreCase(getPath()); + } + /* --------------------------------------------------- */ /* > Parcelable */ /* --------------------------------------------------- */