Image Picker for Android 🤖

Overview

Android Image Picker

No config yet highly configurable image picker for Android

Android Arsenal - ImagePicker jitpack - android image picker

Screenshot

Click to see how image picker looks…

Download

Add this to your project's build.gradle

allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}

And add this to your module's build.gradle

dependencies {
	implementation 'com.github.esafirm.android-image-picker:imagepicker:x.y.z'
	// If you have a problem with Glide, please use the same Glide version or simply open an issue
	implementation 'com.github.bumptech.glide:glide:4.5.0'
}

change x.y.z to version in the release page

Usage

For full example, please refer to the sample app.

Also you can browse the issue labeled as question here

Start image picker activity

The simplest way to start

val launcher = registerImagePicker {
  // handle result here
}

launcher.launch()

Complete features of what you can do with ImagePicker

val config = ImagePickerConfig {
  mode = ImagePickerMode.SINGLE // default is multi image mode
  language = "in" // Set image picker language
  theme = R.style.ImagePickerTheme

  // set whether pick action or camera action should return immediate result or not. Only works in single mode for image picker
  returnMode = if (returnAfterCapture) ReturnMode.ALL else ReturnMode.NONE

  isFolderMode = folderMode // set folder mode (false by default)
  isIncludeVideo = includeVideo // include video (false by default)
  isOnlyVideo = onlyVideo // include video (false by default)
  arrowColor = Color.RED // set toolbar arrow up color
  folderTitle = "Folder" // folder selection title
  imageTitle = "Tap to select" // image selection title
  doneButtonText = "DONE" // done button text
  limit = 10 // max images can be selected (99 by default)
  isShowCamera = true // show camera or not (true by default)
  savePath = ImagePickerSavePath("Camera") // captured image directory name ("Camera" folder by default)
  savePath = ImagePickerSavePath(Environment.getExternalStorageDirectory().path, isRelative = false) // can be a full path

  excludedImages = images.toFiles() // don't show anything on this selected images
  selectedImages = images  // original selected images, used in multi mode
}

If you want to call it outside Activity or Fragment, you can get the Intent with createImagePickerIntent

Please note: handling in onActivityResult is not recommended since it's already deprecated in favor of the new result API

val intent = createImagePickerIntent(context, ImagePickerConfig())
startActivityForResult(intent, RC_IMAGE_PICKER)

Receive result

when you're done picking images, result will be returned on launcher callback with type List<Image>. This list cannot be null but can be empty

val launcher = registerImagePicker { result: List<Image> ->
  result.forEach { image ->
    println(image)
  }
}    

Camera Only

Use CameraOnlyConfig instead of ImagePickerConfig

val launcher = registerImagePicker { }
launcher.launch(CameraOnlyConfig())

You also still can use the DefaultCameraModule but discouraged to do it.

Wiki

Version 2.x.x

If you still use the previous version, you can check

Support Me!

I would make myself more commited to this repo and OSS works in general.

Would you help me achieving this goals?

Buy Me a Coffee at ko-fi.com

Credits

Modification License

Copyright (c) 2016 Esa Firman

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

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.

Original License

The Original Image Picker

You can find the original lincense here

Comments
  • Camera Captured Image is not showing in gallary in Oreo

    Camera Captured Image is not showing in gallary in Oreo

    Hello,

    Downloaded code and run in Oreo device, observed that if you capture images from camera then it is not showing in gallery, only if device OS is Oreo. Which is working fine in Nougat and Marshmallow devices.

    Any suggestion???

    opened by taskfriendinc 22
  • NoSuchFieldError

    NoSuchFieldError

    FATAL EXCEPTION: main java.lang.NoSuchFieldError: com.esafirm.imagepicker.R$id.menu_camera at com.esafirm.imagepicker.features.ImagePickerActivity.onPrepareOptionsMenu(ImagePickerActivity.java:201) at android.app.Activity.onPreparePanel(Activity.java:2600) at android.support.v4.app.FragmentActivity.onPrepareOptionsPanel(FragmentActivity.java:532) at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:521) at android.support.v7.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:93) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onPreparePanel(AppCompatDelegateImplBase.java:358) at android.support.v7.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:93) at android.support.v7.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:567) at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:455) at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:61) at android.os.Handler.handleCallback(Handler.java:808) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:5388) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:655) at dalvik.system.NativeStart.main(Native Method)

    bug help wanted 
    opened by amalive 16
  • Can not move to previous screen

    Can not move to previous screen

    I pressed the back button at folderMode(false). It will not go back to the previous screen.

    ImagePicker.create(this) .returnAfterFirst(true) .folderMode(false) .multi() .limit(10) .showCamera(false) .enableLog(false) .start(PICK_IMAGE_MULTIPLE);

    opened by pavecho 15
  • Use READ_EXTERNAL_STORAGE instead of WRITE on android11.

    Use READ_EXTERNAL_STORAGE instead of WRITE on android11.

    In android11 "write_external_storage" permission is ignored. So I change to use "read" permission instead of "write" on scoped storage devices.

    Related https://github.com/esafirm/android-image-picker/issues/361, https://github.com/esafirm/android-image-picker/issues/341

    opened by xpdlf1004 14
  • I am using 1.8.0 but i dont need glide is it possible with this library

    I am using 1.8.0 but i dont need glide is it possible with this library

    I am using fresco for image loading, and with this library glide gets added in my external libraries how to remove it?

    in your dependencies: final glideVersion = '4.5.0' implementation "com.github.bumptech.glide:glide:$glideVersion"

    is it possible to use it without glide?

    opened by amankumarjain 12
  • The image file could not be opened in targetsdkversion 29

    The image file could not be opened in targetsdkversion 29

    Expected Behavior

    Set / change profile picture

    Actual Behavior

    ERROR:The image file could not be opened

    Specifications

    • Image Picker Version: 2.1.10
    • Android OS:10
    • Phone: Nokia 8.1

    Code :

    openGallery():Promise<string>{
        return new Promise((resolve,reject)=>{
          this.checkPermission().then(granted=>{
            if (granted) {
    
              let options = {
                quality:80,
                maximumImagesCount:1
              };
    
              this.picker.getPictures(options).then(uri=>{
                console.log("URI of picked image "+uri);
                this.cropImage(uri.toString()).then(croppedImage=>{
                  resolve(croppedImage);
                }).catch(err=>{
                  reject("error in cropIMage "+JSON.stringify(err));
                  console.log("error in getPrictures_crop "+JSON.stringify(err))
                })
              }).catch(err=>{
                 reject("error in getPictures "+JSON.stringify(err));
                 console.log("getPictures "+err);
              })
            }
          })
        })
      }
    
    
    opened by codehack26 11
  • Failed to open libwvm.so: dlopen failed: library

    Failed to open libwvm.so: dlopen failed: library "libwvm.so" not found

    Hi, thanks for this very good library, really saved my life when app needs picking multiple images. However, currently I get a only one problem which specific on Xiaomi android devices:

    Failed to open libwvm.so: dlopen failed: library "libwvm.so" not found
    

    Totally have no idea why this error happen, and other device just ok. I know it's Xiaomi's problem, but I am in China and this device are so many, how to solve this anyway?

    opened by jinfagang 11
  • INTENT_EXTRA_SELECTED_IMAGES missing [Update Readme]

    INTENT_EXTRA_SELECTED_IMAGES missing [Update Readme]

    Your Readme file says, I should use ImagePickerActivity.INTENT_EXTRA_SELECTED_IMAGES constant to get array of selected images, but it's missing. From your code I can see it's "selectedImages". Maybe, you should bring it back or change Readme. Thanks.

    enhancement 
    opened by ysoftware 10
  • Fragment not attached to a context

    Fragment not attached to a context

    Expected Behavior

    Should open imager picker from fragment

    Actual Behavior

    Fragment h{9e363cc} (782f797a-94b7-4939-b68b-a5a1b80e4374) not attached to a context. App crashed

    Steps to Reproduce the Problem

    1. register lister in a fragment val launcher = registerImagePicker { imageList: List -> }
    2. navigate to the fragment (not using nav component here)

    Specifications

    • Image Picker Version: 3.0.0-beta1
    • Android OS: 10/11
    • Phone: mi Note 7 pro
    opened by anupdey99 9
  • 2.3.1 Version not working when app is in release mode

    2.3.1 Version not working when app is in release mode

    W/Glide: Load failed for /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20200528-WA0006.jpg with size [512x512] class com.bumptech.glide.load.engine.GlideException: Failed to load resource There were 3 causes: java.io.FileNotFoundException(/storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20200528-WA0006.jpg: open failed: EACCES (Permission denied)) java.io.FileNotFoundException(open failed: EACCES (Permission denied)) java.io.FileNotFoundException(open failed: EACCES (Permission denied)) call GlideException#logRootCauses(String) for more detail Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class java.io.InputStream, LOCAL There was 1 cause: java.io.FileNotFoundException(/storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20200528-WA0006.jpg: open failed: EACCES (Permission denied)) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed There was 1 cause: java.io.FileNotFoundException(/storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20200528-WA0006.jpg: open failed: EACCES (Permission denied)) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.FileNotFoundException: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20200528-WA0006.jpg: open failed: EACCES (Permission denied) Cause (2 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class android.os.ParcelFileDescriptor, LOCAL There was 1 cause: java.io.FileNotFoundException(open failed: EACCES (Permission denied)) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed There was 1 cause: java.io.FileNotFoundException(open failed: EACCES (Permission denied)) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.FileNotFoundException: open failed: EACCES (Permission denied) Cause (3 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class android.content.res.AssetFileDescriptor, LOCAL There was 1 cause: java.io.FileNotFoundException(open failed: EACCES (Permission denied)) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.FileNotFoundException: open failed: EACCES (Permission denied) I/Glide: Root cause (1 of 3) java.io.FileNotFoundException: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20200528-WA0006.jpg: open failed: EACCES (Permission denied) at libcore.io.IoBridge.open(IoBridge.java:496) at java.io.FileInputStream.(FileInputStream.java:159) at java.io.FileInputStream.(FileInputStream.java:115) at android.content.ContentResolver.openInputStream(ContentResolver.java:1187) at com.bumptech.glide.load.data.o.b(StreamLocalUriFetcher.java:74) at com.bumptech.glide.load.data.o.a(StreamLocalUriFetcher.java:50) at com.bumptech.glide.load.data.o.a(StreamLocalUriFetcher.java:13) at com.bumptech.glide.load.data.l.a(LocalUriFetcher.java:44) at com.bumptech.glide.load.model.q$a.a(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:70) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.l(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.n(DecodeJob.java:279) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919) at com.bumptech.glide.load.engine.executor.a$b$a.run(GlideExecutor.java:393) Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied) at libcore.io.Linux.open(Native Method) at libcore.io.ForwardingOs.open(ForwardingOs.java:167) at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252) at libcore.io.ForwardingOs.open(ForwardingOs.java:167) at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7255) at libcore.io.IoBridge.open(IoBridge.java:482) at java.io.FileInputStream.(FileInputStream.java:159)  at java.io.FileInputStream.(FileInputStream.java:115)  at android.content.ContentResolver.openInputStream(ContentResolver.java:1187)  at com.bumptech.glide.load.data.o.b(StreamLocalUriFetcher.java:74)  at com.bumptech.glide.load.data.o.a(StreamLocalUriFetcher.java:50)  at com.bumptech.glide.load.data.o.a(StreamLocalUriFetcher.java:13)  at com.bumptech.glide.load.data.l.a(LocalUriFetcher.java:44)  at com.bumptech.glide.load.model.q$a.a(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.l(DecodeJob.java:310)  at com.bumptech.glide.load.engine.DecodeJob.n(DecodeJob.java:279)  at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)  at java.lang.Thread.run(Thread.java:919)  at com.bumptech.glide.load.engine.executor.a$b$a.run(GlideExecutor.java:393)  Root cause (2 of 3) java.io.FileNotFoundException: open failed: EACCES (Permission denied) at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:319) at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:224) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1500) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1422) at com.bumptech.glide.load.data.i.a(FileDescriptorLocalUriFetcher.java:20) at com.bumptech.glide.load.data.i.a(FileDescriptorLocalUriFetcher.java:12) at com.bumptech.glide.load.data.l.a(LocalUriFetcher.java:44) at com.bumptech.glide.load.model.q$a.a(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:70) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.l(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.a(DecodeJob.java:408) at com.bumptech.glide.load.engine.w.a(SourceGenerator.java:160) at com.bumptech.glide.load.engine.w$a.a(SourceGenerator.java:83) at com.bumptech.glide.load.model.q$a.d(MultiModelLoader.java:167) at com.bumptech.glide.load.model.q$a.a(MultiModelLoader.java:154) at com.bumptech.glide.load.data.l.a(LocalUriFetcher.java:49) at com.bumptech.glide.load.model.q$a.a(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:70) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.l(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.n(DecodeJob.java:279) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919) at com.bumptech.glide.load.engine.executor.a$b$a.run(GlideExecutor.java:393) I/Glide: Root cause (3 of 3) java.io.FileNotFoundException: open failed: EACCES (Permission denied) at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:319) at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:224) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1500) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1422) at com.bumptech.glide.load.data.a.a(AssetFileDescriptorLocalUriFetcher.java:20) at com.bumptech.glide.load.data.a.a(AssetFileDescriptorLocalUriFetcher.java:11) at com.bumptech.glide.load.data.l.a(LocalUriFetcher.java:44) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:70) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.l(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.a(DecodeJob.java:408) at com.bumptech.glide.load.engine.w.a(SourceGenerator.java:160) at com.bumptech.glide.load.engine.w$a.a(SourceGenerator.java:83) at com.bumptech.glide.load.model.q$a.d(MultiModelLoader.java:167) at com.bumptech.glide.load.model.q$a.a(MultiModelLoader.java:154) at com.bumptech.glide.load.data.l.a(LocalUriFetcher.java:49) at com.bumptech.glide.load.model.q$a.a(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:70) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.l(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.a(DecodeJob.java:408) at com.bumptech.glide.load.engine.w.a(SourceGenerator.java:160) at com.bumptech.glide.load.engine.w$a.a(SourceGenerator.java:83) at com.bumptech.glide.load.model.q$a.d(MultiModelLoader.java:167) at com.bumptech.glide.load.model.q$a.a(MultiModelLoader.java:154) at com.bumptech.glide.load.data.l.a(LocalUriFetcher.java:49) at com.bumptech.glide.load.model.q$a.a(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:70) at com.bumptech.glide.load.engine.w.b(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.l(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.n(DecodeJob.java:279) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919) at com.bumptech.glide.load.engine.executor.a$b$a.run(GlideExecutor.java:393)

    Steps to Reproduce the Problem

    1. run in release build
    2. try to load image in glide using image.getPath()

    Specifications

    • Image Picker Version: 2.3.1
    • Android OS: 10
    • Phone: Nokia 6.1
    opened by covocisdev 9
  • Crash in android 10

    Crash in android 10

    App crashes with bellows log report

        java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter folderName
            at com.esafirm.imagepicker.model.Folder.<init>(Unknown Source:2)
            at com.esafirm.imagepicker.features.fileloader.DefaultImageFileLoader$ImageLoadRunnable.run(DefaultImageFileLoader.java:166)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
            at java.lang.Thread.run(Thread.java:919)
    

    Specifications

    • Image Picker Version: 2.4.1
    • Android OS: Android 10
    • Phone: Galaxy s20
    opened by Farhandroid 8
Releases(3.0.0)
  • 3.0.0(Nov 11, 2022)

    Highlight

    • New API to run the image picker and get the result
    val launcher = registerImagePicker { result: List<Image> ->
      result.forEach { image ->
        println(image)
      }
    }    
    
    • Multiple bugfixes 🐛
    • Android Q support 🤖
    • Updates on the tooling (AGP, KGP) 📓
    • More translations 🎏

    Thanks to all the contributors that can make this happen!

    What's Changed

    • Fix display video duration cause app crash when targeting to sdk 29 and fix display media file under root in folder mode by @wiwuwa in https://github.com/esafirm/android-image-picker/pull/331
    • Japanese support by @kckuo920248 in https://github.com/esafirm/android-image-picker/pull/332
    • Refactor kotlin by @esafirm in https://github.com/esafirm/android-image-picker/pull/338
    • Refactor launcher by @esafirm in https://github.com/esafirm/android-image-picker/pull/342
    • update readme by @esafirm in https://github.com/esafirm/android-image-picker/pull/343
    • Fix memory leak by @esafirm in https://github.com/esafirm/android-image-picker/pull/344
    • Toolbar Done button visibility. by @dilip786 in https://github.com/esafirm/android-image-picker/pull/347
    • set target and compile sdk to 30 by @esafirm in https://github.com/esafirm/android-image-picker/pull/353
    • Hash code and equals by @esafirm in https://github.com/esafirm/android-image-picker/pull/354
    • fix fragment not attached to context exception by @michaelsam94 in https://github.com/esafirm/android-image-picker/pull/363
    • Optimize load images by @esafirm in https://github.com/esafirm/android-image-picker/pull/364
    • custom ui adjustment by @esafirm in https://github.com/esafirm/android-image-picker/pull/365
    • fix on crash camera only cancel by @esafirm in https://github.com/esafirm/android-image-picker/pull/366
    • fix sort on q by @esafirm in https://github.com/esafirm/android-image-picker/pull/369
    • Fix stuff by @esafirm in https://github.com/esafirm/android-image-picker/pull/370
    • camera only back press crash fixed by @shamsshykh in https://github.com/esafirm/android-image-picker/pull/398
    • Add Swedish translation by @ghostbear in https://github.com/esafirm/android-image-picker/pull/386
    • Add spanish and catalan translations by @pballart in https://github.com/esafirm/android-image-picker/pull/376
    • Add camera permission english string (#405) by @alessandrotedd in https://github.com/esafirm/android-image-picker/pull/406
    • add vi language by @chihung93 in https://github.com/esafirm/android-image-picker/pull/407
    • Fix - Change barista dependency by @esafirm in https://github.com/esafirm/android-image-picker/pull/415
    • Add permission check for android13 by @masato1230 in https://github.com/esafirm/android-image-picker/pull/404
    • fix deprecated pickCamera by @chihung93 in https://github.com/esafirm/android-image-picker/pull/408
    • BugFix: Image count visible in the folder mode when moved from one folder to another by @kavitamp in https://github.com/esafirm/android-image-picker/pull/410
    • upgrade AGP and Kotlin version by @esafirm in https://github.com/esafirm/android-image-picker/pull/416
    • Code cleanup by @esafirm in https://github.com/esafirm/android-image-picker/pull/421

    New Contributors

    • @wiwuwa made their first contribution in https://github.com/esafirm/android-image-picker/pull/331
    • @kckuo920248 made their first contribution in https://github.com/esafirm/android-image-picker/pull/332
    • @dilip786 made their first contribution in https://github.com/esafirm/android-image-picker/pull/347
    • @michaelsam94 made their first contribution in https://github.com/esafirm/android-image-picker/pull/363
    • @shamsshykh made their first contribution in https://github.com/esafirm/android-image-picker/pull/398
    • @ghostbear made their first contribution in https://github.com/esafirm/android-image-picker/pull/386
    • @pballart made their first contribution in https://github.com/esafirm/android-image-picker/pull/376
    • @alessandrotedd made their first contribution in https://github.com/esafirm/android-image-picker/pull/406
    • @chihung93 made their first contribution in https://github.com/esafirm/android-image-picker/pull/407
    • @masato1230 made their first contribution in https://github.com/esafirm/android-image-picker/pull/404
    • @kavitamp made their first contribution in https://github.com/esafirm/android-image-picker/pull/410

    Full Changelog: https://github.com/esafirm/android-image-picker/compare/2.4.2...3.0.0

    Source code(tar.gz)
    Source code(zip)
  • 3.0.0-beta1(Apr 24, 2021)

  • 2.4.5(Mar 18, 2021)

    • Fix folder name & image name NPE https://github.com/esafirm/android-image-picker/pull/316
    • Add optional save image functionality https://github.com/esafirm/android-image-picker/pull/312
    • Fix Display Video Crash https://github.com/esafirm/android-image-picker/commit/a26b0f657d51927cfd6b322098dd9280bc025c26
    • Japanese support https://github.com/esafirm/android-image-picker/pull/332

    Thanks to all the contributors! 🔥

    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Oct 3, 2020)

    • Add getUri() for convenient #285
    • Fixes for Android Q #290 #293
    • Fixed some typo #291
    • Show video duration on the image picker #271
    • Use github workflow instead of CircleCI
    • Migrate sample to Kotlin #295

    Thanks to @hjchin @sr1dh4r @xpdlf1004 @LinX64 for the PR 🔥

    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(May 22, 2020)

  • 2.2.0(Oct 13, 2019)

  • 2.1.0(Aug 4, 2019)

  • 2.0.0(Feb 26, 2019)

    • ImagePicker is now in Fragment and you can use it in custom UI (please see sample)
    • Remove Retrolambda
    • Compatibility with Glide 4.9.0
    • Add Option to exclude GIF from image picker
    • Bug fixes and improvements

    Also, we integrate our repo with CircleCi and add issue templating, because we want to improve our development experience in general

    Source code(tar.gz)
    Source code(zip)
  • 1.13.1(Jun 18, 2018)

  • 1.13.0(Jul 21, 2018)

    • Back arrow support RTL
    • Update to AGP 3.1 and Gradle 4.4
    • Add Arabic translation
    • Better permissions handling for cameraOnly mode
    • Basic video support
    • Set language programmatically
    • Some internal changes
    Source code(tar.gz)
    Source code(zip)
  • 1.12.0(Jan 17, 2018)

    BREAKING CHANGES!!!

    • [New] Return Mode API returnMode
    Define the ImagePicker return behaviour
    1. ReturnMode.NONE -> When image is picked, ImagePickerActivity will not dismissed even in Single Mode
    2. ReturnMode.ALL -> When image is picked dismiss then deliver result
    3. ReturnMode.CAMERA_ONLY -> When image is picked with Camera, dismiss then deliver the result
    4. ReturnMode.GALLERY_ONLY -> Same as CAMERA_ONLY but with Gallery
    

    So if you want to mimic the setReturnAfterFirst behavior, all you have to do is

    ImagePicker.create(activity).setReturnMode(ReturnMode.ALL).start()
    
    • setReturnAfterFirst is now obsolete
    • [New] set toolbar arrow color with toolbarArrowColor(int color)
    • Rename ImagePicker methods
      • folderTitle -> toolbarFolderTitle
      • imageTitle -> toolbarImageTitle
    • Add capability to start without a request code

    So instead of this

    ImagePicker.cameraOnly().start(RC_CAMERA /* int */);
    

    Now you can do this

    ImagePicker.cameraOnly().start()
    

    BUT, you have to handle the result with the helper method from ImagePicker

     @Override
       protected void onActivityResult(int requestCode, final int resultCode, Intent data) {
           if (ImagePicker.shouldHandle(requestCode, resultCode, data)) {
               // do your things
           }
           super.onActivityResult(requestCode, resultCode, data);
       }
    

    You can still use the usual result check if you define the request code by yourself.

    • Add convenience method ImagePicker.getFirstImageOrNull(Intent data) to fetch only first image from the result or return null
    Source code(tar.gz)
    Source code(zip)
  • 1.11.0(Jan 11, 2018)

    Now you can exclude image from being shown in the picker

    ImagePicker.create(this)
        .exclude(image)           // exclude everything in `List<Image>`
        .excludeFiles(files)      // or you can exclude everything in `List<File>` 
        .start(RQ)
    
    Source code(tar.gz)
    Source code(zip)
  • 1.10.1(Jan 11, 2018)

  • 1.10.0(Jan 5, 2018)

  • 1.8.0(Sep 2, 2017)

    Enhancement

    • https://github.com/esafirm/android-image-picker/issues/70 - Now if nothing is selected and you define your image title explicitly, the toolbar will show the defined title.

    • https://github.com/esafirm/android-image-picker/pull/69 - Add French translation. Thanks @Jerome67000

    Breaking Changes

    ImagePickerConfigFactory.create() and ImagePicker.init() don't take Context anymore

    Source code(tar.gz)
    Source code(zip)
  • 1.7.5(Jul 30, 2017)

    Bug Fix

    • https://github.com/esafirm/android-image-picker/issues/65
    • Cannot unselect image that passed from the builder

    New Feature

    • Set the full path for saving camera Image
    public ImagePicker imageFullDirectory(String fullPath) {
            config.setImageFullDirectory(fullPath);
            return this;
        }
    

    Internal

    • Excluding unnecessary Android Support modules
    Source code(tar.gz)
    Source code(zip)
  • 1.7.4(Jul 9, 2017)

  • 1.7.3(Jul 5, 2017)

    Changelog:

    1. Fix back button issue when setFolderMode set to true
    2. Expose ImagePickerConfig in ImagePicker. Now you can override getConfig() before called by getIntent()
    Source code(tar.gz)
    Source code(zip)
  • v1.7.2(May 27, 2017)

    • Fix SnackBar issue when permission is not granted
    • Add toggle log feature.
    ImagePicker.enableLog(false)
    

    Also highlighting the previous changes in 1.6.0

    • Adding custom ImageLoader
    • Removing traditional intent stater
    Source code(tar.gz)
    Source code(zip)
  • 1.5.0(Apr 2, 2017)

    Add theme support

    Usage:

    ImagePicker imagePicker = ImagePicker.create(this)
                    .theme(R.style.ImagePickerTheme)
                    .start(RC_IMAGE_PICKER);
    

    Where ImagePickerTheme extend from ef_BaseTheme

    See example for more reference.

    Source code(tar.gz)
    Source code(zip)
  • 1.4.1(Mar 30, 2017)

Owner
Esa Firman
I use Vim to write my commit messages.
Esa Firman
Easy to use and configurable library to Pick an image from the Gallery or Capture image using Camera.

Easy to use and configurable library to Pick an image from the Gallery or Capture image using Camera.

Simform Solutions 201 Jan 5, 2023
With the Help of this libray you can pic image from camera, gallery, it's support image cropping as well and you can pic PDF

FilePicker This project aims to provide an ultimate and flexible image picking from Gallery, Camera and cropping experience as well as PDF picking fro

Raj Pratap Singh Jadon 3 Nov 24, 2022
Media Picker is an Android Libary that lets you to select multiple images or video

Media Picker Please let me know if your application go to production via this link Media Picker is an Android Libary that lets you to select multiple

Abdullah Alhazmy 264 Nov 10, 2022
Unicorn File Picker is a library designed to package a powerful file selector for android.

A simple, documented, and contribution-friendly File Picker for Android.

Abhishek Tiwari 62 Dec 5, 2022
Built the ccp code on compose. Country Code Picker is an android library which provides an easy way to search and select country or international phone code.

Built the ccp code on compose. Country Code Picker is an android library which provides an easy way to search and select country or international phone code.

utku glsvn 7 Oct 23, 2022
Block picker is Android app to help Minecraft player choose blocks for their build.

Block Picker Ever trying to make a build in Minecraft and you just can't find the perfect color palette? Block Picker will help jumpstart your creativ

Ramim Alam 2 May 8, 2022
A super file picker framework.

一款超强的文件选择框架。A super file picker framework. 功能: 文件选择 支持多种类型文件选择 支持多个文件同时选择 如何添加 Gradle添加: 1.在Project的build.gradle中添加仓库地址

null 7 Jul 16, 2022
Wheel Picker With Kotlin

WheelPicker Including in your project Gradle Add below codes to your project build.gradle file. buildscript { repositories { mavenCentral(

Clapp Studio 8 Jan 16, 2022
An Android library for picking location in Bangladesh

BDLocationChooser An Android library for picking location in Bangladesh Example Screenshot : Implement Library The library is available on JitPack, fo

Sharif Rafid Ur Rahman 9 Jun 26, 2022
AndroidFilePicker - android library which will help you to pick any type of media file in your application

AndroidFilePicker is android library which will help you to pick any type of media file in your application. No need to manage any kind of extra permission or result method override. Just create library class instance and use it or also modify ui as your requirement.

null 4 Sep 12, 2022
FilePicker - Android library to facilitate files picking up process and ability to convert them to request bodies

FilePicker - Android library to facilitate files picking up process and ability to convert them to request bodies

Ahmed Atwa 26 Dec 14, 2022
Facebook-Styled-Image-Picker - Facebook Styled Image Picker

Facebook-Styled-Image-Picker Facebook Styled Gallery Files picker. One or multip

Hashim Tahir 11 Sep 27, 2022
Awesome Image Picker library will pick images/gifs with beautiful interface. Supports image or gif, Single and Multiple Image selection.

Awesome Image Picker Awesome Image Picker library will pick images/gifs with beautiful interface. Supports image or gif, Single and Multiple Image sel

Prabhakar Thota 162 Sep 13, 2022
Image Picker with Customizable UI for Android, Pick an image from Gallery

Image Picker A Image Picker Library for Android (Supports Android 12) with fully

null 2 May 29, 2022
Big image viewer supporting pan and zoom, with very little memory usage and full featured image loading choices. Powered by Subsampling Scale Image View, Fresco, Glide, and Picasso. Even with gif and webp support! 🍻

BigImageViewer Big image viewer supporting pan and zoom, with very little memory usage and full featured image loading choices. Powered by Subsampling

Piasy 3.9k Dec 30, 2022
Android Country Picker is a Kotlin-first, flexible and powerful Android library that allows to integrate Country Picker with just a few lines.

1. Add dependency dependencies { implementation 'com.hbb20:android-country-picker:X.Y.Z' } For latest version, 2. Decide your use-case

Harsh B. Bhakta 65 Dec 6, 2022
Picker-kt - Media picker library powered by Jetpack Compose

ANDROID LIBRARY PickerKT A media picker library for Android apps powered by Jetp

Tanawin Wichit 20 Jan 2, 2023
Image Picker for Android 🤖

Android Image Picker No config yet highly configurable image picker for Android Screenshot Click to see how image picker looks… Download Add this to y

Esa Firman 1k Jan 7, 2023
Instagram like Image Picker for Android

ImagePicker A simple Instagram like library to select images from the gallery and camera. Screenshot Usage For full example, please refer to the sampl

Akvelon 21 Sep 28, 2022
Image Picker library for Android

Ronnie-Image-Picker Asks for Camera and storage permission and return uri of the images taken or picked from the gallery. Min Api Level: 16 Build Syst

Ronnie Otieno 33 Nov 19, 2022