Обновленный модуль по работе с фотографиями (take picture pick from gallery) - sashatinkoff/A18 GitHub Wiki

  1. Добавить в проект pics.x.x.x.aar

  2. В модуле pics убрал жесткую привязку к MVVM и другим модулям A18. Ниже показан пример как добавить обработку рисунков в ваши Activity и ViewModel

     private val pictureHandler = PictureHandler(application)
     val pictureResults = MutableLiveData<PictureHandler.PictureResults>()
     fun camera(activity: Activity) = pictureHandler.takePicture(activity)
     fun gallery(activity: Activity) = pictureHandler.pickGallery(activity)
     fun onResult(requestCode: Int, data: Intent?) = io {
         pictureResults.postValue(pictureHandler.result(requestCode, data))
     }
    

Код в блоке io выполняется в контексте корутин Dispatchers.IO. Вы можете использовать любой способ работы с потоками, начиная от AsyncTask, заканчивая Rx, корутинами или вообще выполнять задачу в Main потоке (что не очень рекомендуется)

MainActivity выглядит следующим образом

private fun pictures() {
    btnCamer.setOnClickListener { viewmodel.camera(this) }
    btnGallery.setOnClickListener { viewmodel.gallery(this) }
}

 viewmodel.pictureResults.observe(this, Observer { results ->
        results.list.firstOrNull()?.apply {
            imageview.setImageBitmap(BitmapFactory.decodeFile(localPath))
        }
    })

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    viewmodel.onResult(requestCode, data)
    super.onActivityResult(requestCode, resultCode, data)
}

При желании, для получения рисунков из галереи вы можете поменять объект Intent, применив в нему декоратор как указано ниже

      fun gallery(activity: Activity) = pictureHandler.pickGallery(activity, decorIntent = { intent -> intent.... })