@@ -35,6 +35,7 @@ import com.google.firebase.auth.FirebaseAuth
3535import com.google.firebase.firestore.*
3636import com.google.firebase.ktx.Firebase
3737import com.google.firebase.storage.FirebaseStorage
38+ import com.google.firebase.storage.StorageException
3839
3940class MainActivity : AppCompatActivity (), OnProductListener, MainAux {
4041 private lateinit var bind: ActivityMainBinding
@@ -325,6 +326,8 @@ class MainActivity : AppCompatActivity(), OnProductListener, MainAux {
325326 0 -> confirmDelete(product)
326327 1 -> {
327328 productSelected= product
329+ // En un dispositivo huawei(mate 10p lite) no funciona la badera ACTION_PICK con la combinación de EXTRA_ALLOW_MULTIPLE
330+ // así que lo cambiamos por ACTION_GET_CONTENT, no es muy amigable pero funciona
328331 val intent= Intent (Intent .ACTION_GET_CONTENT , MediaStore .Images .Media .EXTERNAL_CONTENT_URI )
329332 intent.type = " image/*"
330333 intent.putExtra(Intent .EXTRA_ALLOW_MULTIPLE , true )
@@ -341,25 +344,39 @@ class MainActivity : AppCompatActivity(), OnProductListener, MainAux {
341344 .setTitle(R .string.delete_dialog_title)
342345 .setMessage(R .string.delete_dialog_msg)
343346 .setPositiveButton(R .string.delete_dialog_confirm){ _,_->
344- val db= FirebaseFirestore .getInstance()
345347
346- val dbRef= db.collection(COLLECTION_PRODUCT )
347348 product.id?.let {id->
348349 product.imgUrl?.let {url->
349- val photoRef= FirebaseStorage .getInstance().getReferenceFromUrl(url)
350- photoRef
351- // FirebaseStorage.getInstance().reference.child(Constants.PRODUCT_IMAGE).child(id)
352- .delete()
353- .addOnSuccessListener {
354- dbRef.document(id)
355- .delete()
356- .addOnFailureListener {
357- Toast .makeText(this , " Error al eliminar registro" , Toast .LENGTH_SHORT ).show()
350+ // usamos el try catch en el caso de que la url de la imagen esté vacía
351+ // ya que estamos eliminando por referencia de url
352+ // si salta la excepción pasamos a eliminar el registro del producto directamente en el catch
353+ try {
354+ val photoRef= FirebaseStorage .getInstance().getReferenceFromUrl(url)
355+ photoRef
356+ // FirebaseStorage.getInstance().reference.child(Constants.PRODUCT_IMAGE).child(id)
357+ .delete()
358+ .addOnSuccessListener {
359+ deleteProductFromFirestore(id)
360+ }
361+ .addOnFailureListener {
362+ // Si la imágen ya no está en storage no nos permitirá eliminar el registro del producto
363+ // entonces tomamos la excepción desde este listener e intentamos borrar el registro
364+ // ya que la imagen no estará disponible
365+ if ((it as StorageException ).errorCode== StorageException .ERROR_OBJECT_NOT_FOUND )
366+ {
367+ deleteProductFromFirestore(id)
368+ }else {
369+ Toast .makeText(
370+ this ,
371+ " Error al eliminar imagen" ,
372+ Toast .LENGTH_SHORT
373+ ).show()
358374 }
359- }
360- .addOnFailureListener {
361- Toast .makeText(this , " Error al eliminar imagen" , Toast .LENGTH_SHORT ).show()
362- }
375+ }
376+ } catch (e: Exception ) {
377+ e.printStackTrace()
378+ deleteProductFromFirestore(id)
379+ }
363380
364381
365382 }
@@ -371,6 +388,15 @@ class MainActivity : AppCompatActivity(), OnProductListener, MainAux {
371388 .show()
372389
373390 }
391+ private fun deleteProductFromFirestore (productId : String ){
392+ val db= FirebaseFirestore .getInstance()
393+ val dbRef= db.collection(COLLECTION_PRODUCT )
394+ dbRef.document(productId)
395+ .delete()
396+ .addOnFailureListener {
397+ Toast .makeText(this , " Error al eliminar registro" , Toast .LENGTH_SHORT ).show()
398+ }
399+ }
374400
375401 override fun getProductSelected (): Product ? = productSelected
376402}
0 commit comments