| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package com.example.snapshots
- import android.annotation.SuppressLint
- import android.app.Activity
- import android.content.Intent
- import android.net.Uri
- import android.os.Bundle
- import android.provider.MediaStore
- import androidx.fragment.app.Fragment
- import android.view.LayoutInflater
- import android.view.View
- import android.view.ViewGroup
- import androidx.activity.result.contract.ActivityResultContracts
- import com.example.snapshots.databinding.FragmentAddBinding
- import com.google.android.material.snackbar.Snackbar
- import com.google.firebase.auth.FirebaseAuth
- import com.google.firebase.database.DatabaseReference
- import com.google.firebase.database.FirebaseDatabase
- import com.google.firebase.storage.FirebaseStorage
- import com.google.firebase.storage.StorageReference
- class AddFragment : Fragment() {
- private lateinit var mBinding: FragmentAddBinding
- private val PATHSNAPSHOT = "snapshots"
- private lateinit var mStorageReference: StorageReference
- private lateinit var mDatabaseReferenceRef: DatabaseReference
- private var mPhotoSelectedUri: Uri? = null
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- mBinding = FragmentAddBinding.inflate(inflater, container, false)
- return mBinding.root
- }
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- mBinding.btnPost.setOnClickListener { postSnapshot() }
- mBinding.btnSelect.setOnClickListener { openGallery() }
- mStorageReference = FirebaseStorage.getInstance().reference
- mDatabaseReferenceRef = FirebaseDatabase.getInstance().reference.child(PATHSNAPSHOT) // Obtiene el nodo "snapshot"
- }
- private val galleryResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
- if (it.resultCode == Activity.RESULT_OK) {
- mPhotoSelectedUri = it.data?.data
- with(mBinding) {
- btnSelect.visibility = View.INVISIBLE
- imgPhoto.setImageURI(mPhotoSelectedUri)
- tilTitle.visibility = View.VISIBLE
- tvMessage.text = getString(R.string.post_message_valid_title)
- }
- }
- }
- private fun openGallery() {
- val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
- galleryResult.launch(intent)
- }
- @SuppressLint("SetTextI18n")
- private fun postSnapshot() {
- mBinding.progressBar.visibility = View.VISIBLE
- val key = mDatabaseReferenceRef.push().key!!
- val pathString = FirebaseAuth.getInstance().currentUser!!.uid
- val storageRef = mStorageReference.child(PATHSNAPSHOT).child(pathString).child(key)
- if (mPhotoSelectedUri !== null) {
- storageRef.putFile(mPhotoSelectedUri!!)
- .addOnProgressListener {
- val progress = (100 * it.bytesTransferred / it.totalByteCount).toDouble()
- mBinding.progressBar.progress = progress.toInt()
- mBinding.tvMessage.text = "$progress%"
- }
- .addOnCompleteListener {
- mBinding.progressBar.visibility = View.INVISIBLE
- }
- .addOnSuccessListener {
- Snackbar.make(mBinding.root, "Instantanea publicada", Snackbar.LENGTH_SHORT).show()
- it.storage.downloadUrl.addOnSuccessListener { url ->
- saveSnapshot(key, url.toString(), mBinding.etTitle.text.toString())
- with(mBinding) {
- tilTitle.visibility = View.GONE
- tvMessage.text = getString(R.string.select_image_text)
- imgPhoto.setImageURI(null)
- btnSelect.visibility = View.VISIBLE
- }
- }
- }
- .addOnFailureListener {
- Snackbar.make(mBinding.root, "Error: ${it.message}", Snackbar.LENGTH_SHORT).show()
- }
- }
- }
- private fun saveSnapshot (key: String, url: String, title: String) {
- val snapshot = Snapshot(title = title, photoUrl = url)
- mDatabaseReferenceRef.child(key).setValue(snapshot)
- }
- }
|