When I press the button, I call this function
It is a Dialog to choose between the camera or the gallery
binding.ProfileChangeImage.setOnClickListener {
showPictureDialog()
}
private fun showPictureDialog() {
val pictureDialog = AlertDialog.Builder(requireContext())
pictureDialog.setTitle("Select Action")
val pictureDialogItems = arrayOf("Select photo from gallery", "Capture photo from camera")
pictureDialog.setItems(pictureDialogItems
) { dialog, which ->
when (which) {
0 -> choosePhotoFromGallary()
1 -> takePhotoFromCamera()
}
}
pictureDialog.show()
}
I used this code to open the camera or gallery
private fun choosePhotoFromGallary() {
val galleryIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
startActivityForResult(galleryIntent, GALLERY)
}
private fun takePhotoFromCamera() {
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(intent, CAMERA)
}
But as you can see dear the startActivityForResult function is deprecated
and finally, this is a fun onActiviyResult
override fun onActivityResult(requestCode:Int, resultCode:Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == GALLERY) {
if (data != null) {
val contentURI = data.data
try {
val bitmap = MediaStore.Images.Media.getBitmap(context?.contentResolver, contentURI)
Toast.makeText(context, "Image Saved!", Toast.LENGTH_SHORT).show()
binding.profileImage.setImageBitmap(bitmap)
}
catch (e: IOException) {
e.printStackTrace()
Toast.makeText(context, "Failed!", Toast.LENGTH_LONG).show()
}
}
}
else if (requestCode == CAMERA) {
val thumbnail = data!!.extras!!.get("data") as Bitmap
binding.profileImage.setImageBitmap(thumbnail)
Toast.makeText(context, "Image Saved!", Toast.LENGTH_SHORT).show()
}
}
but I used this code in UI, I want to implement this with MVVM.