Skip to content

BasemNasr/EasyMediaPicker

Repository files navigation

EasyMediaPicker

Anroid library handling media picker from camera and gallery

  • Select Image From Gallery
  • Capture Image From Gallery
  • Select Video From Gallery
  • Multi Choose Images
  • Select File From Storage
  • We can using this library for compressing images in android (befor upload it to server)
  • Compressing Image in small sizes without losing image quality
From Activity From Fragment Take Permissions
Customize Your Component Capture Image Easy Getting Media Path
Multi Choose Images

Download


Gradle:

repositories {
   maven { url 'https://jitpack.io' }
}

build.gradle (app)

  android {
   .
   .
   .
   .

    // for solving Problem duplicate class androidx.lifecycle.viewmodel found in modules add this 
    // add this only if you import the same version of lifecycle viewmodel in easypicker
    configurations {
         all {
               exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel-ktx'
           }
       }
    }

dependencies {
	implementation 'com.github.BasemNasr:EasyMediaPicker:v0.1.8'
}

Easy Way To Using Library

class MainActivity : AppCompatActivity(), OnCaptureMedia {
    private lateinit var easyPicker: EasyPicker
    var mProfileImagePath = ""
    .
    .
    .
    
    override fun onCreate(savedInstanceState: Bundle?) {
       .
       setUpImagePicker()
       btn.setOnClickListener {
            easyPicker.chooseImage()
       }
    }
    
    private fun setUpImagePicker() {
      easyPicker = EasyPicker.Builder(this@MainActivity)
                .setRequestCode(PICK_PROFILE_IMAGE)
                .setIconsAndTextColor(R.drawable.camera,R.drawable.gallery,R.color.black)
                .setSheetBackgroundColor(R.color.white)
                .setListener(this@MainActivity)
                .build()
    }
    
    override fun onCaptureMedia(request: Int, files: ArrayList<FileResource>?) {
        when (request) {
            PICK_PROFILE_IMAGE -> {
               // getting file path (file.path)
          
                val imagePath = if (files?.get(0)?.path!!.isNotEmpty()) {
                    UploadImages.resizeAndCompressImageBeforeSend(
                        this@MainActivity, files[0].path, File(files[0].path).name
                    )
                } else files[0].path

                mProfileImagePath = imagePath!!
                Glide.with(this@MainActivity).load(mProfileImagePath)
                    .into(findViewById<AppCompatImageView>(R.id.ivCaptainProfileImg))
            }
        }
    }
    
}
class PickerProfileFragment : Fragment(), OnCaptureMedia {
    private lateinit var easyPicker: FragmentEasyPicker
    var mProfileImagePath = ""
    .
    .
    .
    
    override fun onCreate(savedInstanceState: Bundle?) {
       .
       setUpImagePicker()
       btn.setOnClickListener {
            easyPicker.chooseImage()
       }
    }
    
    private fun setUpImagePicker() {
      easyPicker =  FragmentEasyPicker.Builder(this@PickerProfileFragment)
                .setRequestCode(MainActivity.PICK_PROFILE_IMAGE)
                .setListener(this@PickerProfileFragment).build()
    }
    
    override fun onCaptureMedia(request: Int, files: ArrayList<FileResource>?) {
        when (request) {
            PICK_PROFILE_IMAGE -> {
               // getting file path (file.path)
		files?.let {
                    mProfileImagePath = files[0]?.path ?: ""
                    Glide.with(requireActivity()).load(mProfileImagePath)
                        .into(requireView().findViewById<AppCompatImageView>(R.id.ivCaptainProfileImg))
                }
            }
        }
    }
    
}

Other Features

  
  // choose image
  easyPicker.chooseImage()
  
 // choose And Compress Image
  easyPicker.chooseAndCompressImage()
  
   // choose Video From Gallery
  easyPicker.chooseVideo()
  
  //choose file and getting file path
    easyPicker.chooseFile()
    
      
  //chooseMultipleImages
 private lateinit var multiImagesEasyPicker: EasyPicker
 multiImagesEasyPicker =
            EasyPicker.Builder(this@SecondFragment)
                .setRequestCode(MainActivity.PICK_IMAGES)
                .setListener(this@SecondFragment)
                .setMaxSelectionLimit(5)
                .build()
 multiImagesEasyPicker.chooseMultipleImages()



Pull requests are the best way to propose changes to the codebase (we use Github Flow). We actively welcome your pull requests:

  1. Fork the repository and create your branch from master.
  2. If you've added code that should be tested, add tests.
  3. If you've changed APIs, update the documentation.
  4. Ensure the test suite passes.
  5. Make sure your code lints.
  6. Issue that pull request!
  7. Always add a README and/or requirements.txt to your added code.

Report bugs using Github's issues

We use GitHub issues to track public bugs. Report a bug by opening a new issue it's that easy!

Great Bug Reports tend to have:

  • A quick summary and/or background
  • Steps to reproduce
    • Be specific!
    • Give sample code if you can.
  • What you expected would happen
  • What actually happens
  • Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)

People love thorough bug reports. I'm not even kidding.