1package uo269509.favoritepath.ui;
3import static android.app.Activity.RESULT_OK;
5import android.content.Intent;
6import android.os.Bundle;
7import android.os.Handler;
8import android.os.Looper;
9import android.view.LayoutInflater;
10import android.view.View;
11import android.view.ViewGroup;
12import android.widget.Button;
13import android.widget.EditText;
14import android.widget.Toast;
16import androidx.fragment.app.Fragment;
17import androidx.recyclerview.widget.LinearLayoutManager;
18import androidx.recyclerview.widget.RecyclerView;
20import com.google.firebase.auth.FirebaseAuth;
21import com.google.firebase.firestore.DocumentReference;
22import com.google.firebase.firestore.DocumentSnapshot;
23import com.google.firebase.firestore.FirebaseFirestore;
24import com.google.firebase.firestore.QueryDocumentSnapshot;
25import com.google.firebase.firestore.WriteBatch;
26import com.google.firebase.storage.FirebaseStorage;
27import com.google.firebase.storage.StorageReference;
29import java.util.ArrayList;
30import java.util.HashMap;
32import java.util.concurrent.Executor;
33import java.util.concurrent.Executors;
35import uo269509.favoritepath.R;
36import uo269509.favoritepath.activity.RutaActivity;
37import uo269509.favoritepath.adapter.ListColeccionesAdapter;
38import uo269509.favoritepath.adapter.ListRutasAdapter;
39import uo269509.favoritepath.modelos.Coleccion;
40import uo269509.favoritepath.modelos.Ruta;
51 DocumentReference reference;
52 RecyclerView recyclerListView;
53 ArrayList<Ruta> rutas =
new ArrayList<>();
54 ArrayList<Coleccion> colecciones =
new ArrayList<>();
55 public static final int RUTA = 1;
67 super.onActivityResult(requestCode, resultCode, data);
68 if (requestCode == RUTA && resultCode == RESULT_OK) {
69 titulo = data.getStringExtra(
"coleccionBack");
79 public void onCreate(Bundle savedInstanceState) {
80 super.onCreate(savedInstanceState);
91 public View
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
92 vista = inflater.inflate(R.layout.fragment_colecciones, container,
false);
104 private void crearRuta(){
105 rutaBtn.setOnClickListener(v -> {
106 Intent i =
new Intent(getActivity(),
RutaActivity.class);
108 i.putExtra(
"coleccion",titulo);
110 i.putExtra(
"coleccion",
"Rutas propias");
111 startActivityForResult(i, RUTA);
118 private void crearColeccion(){
119 coleccionBtn.setOnClickListener(v -> {
120 String newColeccion = coleccion.getText().toString().trim();
121 if(newColeccion !=
null && !newColeccion.isEmpty()){
122 reference.get().addOnSuccessListener(documentSnapshot -> {
123 if (documentSnapshot.exists()) {
124 ArrayList<String> nombreColecciones = (ArrayList<String>) documentSnapshot.get(
"nombreColecciones");
125 if(nombreColecciones.contains(newColeccion)){
126 Toast.makeText(this.getContext(),
"Esa colección ya existe",Toast.LENGTH_SHORT).show();
128 nombreColecciones.add(newColeccion);
129 Map<String, Object> updates = new HashMap<>();
130 updates.put(
"nombreColecciones", nombreColecciones);
131 reference.update(updates);
132 coleccion.setText(
"");
133 initializeColecciones();
134 Toast.makeText(this.getContext(),
"Colección añadida correctamente",Toast.LENGTH_SHORT).show();
139 Toast.makeText(this.getContext(),
"Escriba un nombre válido",Toast.LENGTH_SHORT).show();
148 private void borrarColeccion(Coleccion coleccion) {
149 reference.collection(
"colecciones").document(coleccion.getTitulo()).collection(
"rutas").get().addOnSuccessListener(
151 WriteBatch batch = db.batch();
152 for (QueryDocumentSnapshot document : querySnapshot) {
153 for(String url: (ArrayList<String>)document.get(
"imagenes")){
154 StorageReference fileRef = FirebaseStorage.getInstance().getReferenceFromUrl(url);
157 reference.collection(
"colecciones").document(
"Rutas propias").collection(
"rutas").document(document.getId()).delete();
158 batch.delete(document.getReference());
163 reference.collection(
"colecciones").document(coleccion.getTitulo()).delete();
164 reference.get().addOnSuccessListener(documentSnapshot -> {
165 if (documentSnapshot.exists()) {
166 ArrayList<String> nombreColecciones = (ArrayList<String>) documentSnapshot.get(
"nombreColecciones");
167 nombreColecciones.remove(coleccion.getTitulo());
168 Map<String, Object> updates =
new HashMap<>();
169 updates.put(
"nombreColecciones", nombreColecciones);
170 reference.update(updates);
173 updateColecciones(coleccion);
174 Toast.makeText(this.getContext(),
"Colección borrada con éxito",Toast.LENGTH_SHORT).show();
181 private void abrirColeccion(Coleccion coleccion) {
182 titulo = coleccion.getTitulo();
189 private void init(View vista){
190 mAuth = FirebaseAuth.getInstance();
191 db = FirebaseFirestore.getInstance();
192 reference = db.collection(
"usuarios").document(mAuth.getCurrentUser().getEmail());
193 coleccion = vista.findViewById(R.id.editTextColeccion);
194 coleccionBtn = vista.findViewById(R.id.coleccionBtn);
195 rutaBtn = vista.findViewById(R.id.rutaBtn);
196 recyclerListView = vista.findViewById(R.id.recyclerView);
202 private void configureView() {
203 recyclerListView.setHasFixedSize(
true);
204 LinearLayoutManager layoutManager =
new LinearLayoutManager(getContext());
205 recyclerListView.setLayoutManager(layoutManager);
212 private void addColeccionAdapter(ArrayList<Coleccion> list) {
213 ListColeccionesAdapter lcAdapter =
new ListColeccionesAdapter(list, (coleccion, delete) -> {
215 borrarColeccion(coleccion);
217 abrirColeccion(coleccion);
220 recyclerListView.setAdapter(lcAdapter);
226 private void cargarDatosColecciones() {
227 reference.get().addOnSuccessListener(documentSnapshot -> {
228 if (documentSnapshot.exists()) {
229 ArrayList<String> nombreColecciones = (ArrayList<String>) documentSnapshot.get(
"nombreColecciones");
230 colecciones = new ArrayList<>();
231 for (String col: nombreColecciones) {
232 colecciones.add(new Coleccion(col));
243 colecciones.remove(coleccion);
244 recyclerListView.getAdapter().notifyDataSetChanged();
252 final Executor EXECUTOR = Executors.newSingleThreadExecutor();
253 final Handler HANDLER =
new Handler(Looper.getMainLooper());
254 EXECUTOR.execute(() -> {
255 cargarDatosColecciones();
257 db.collection(
"usuarios").document(mAuth.getCurrentUser().getEmail()).get().addOnSuccessListener(
258 documentSnapshot -> {
259 if(documentSnapshot.exists()){
261 addColeccionAdapter(colecciones);
274 private void borrarRuta(Ruta ruta) {
275 for(String url : ruta.getImagenes()) {
276 StorageReference fileRef = FirebaseStorage.getInstance().getReferenceFromUrl(url);
279 reference.collection(
"colecciones").document(titulo).collection(
"rutas").document(ruta.getId()).delete();
280 if(!titulo.equals(
"Rutas propias")){
281 reference.collection(
"colecciones").document(
"Rutas propias").collection(
"rutas").document(ruta.getId()).delete();
283 if(ruta.getOrigen() !=
null)
284 reference.collection(
"colecciones").document(ruta.getOrigen()).collection(
"rutas").document(ruta.getId()).delete();
287 Toast.makeText(this.getContext(),
"Ruta borrada con éxito",Toast.LENGTH_SHORT).show();
294 private void abrirRuta(Ruta ruta) {
295 Intent i =
new Intent(getActivity(), RutaActivity.class);
296 i.putExtra(
"coleccion",titulo);
297 i.putExtra(
"rutaId", ruta.getId());
298 startActivityForResult(i, RUTA);
307 recyclerListView.getAdapter().notifyDataSetChanged();
314 private void addRutaAdapter(ArrayList<Ruta> list) {
322 recyclerListView.setAdapter(lrAdapter);
330 final Executor EXECUTOR = Executors.newSingleThreadExecutor();
331 final Handler HANDLER =
new Handler(Looper.getMainLooper());
332 EXECUTOR.execute(() -> {
335 db.collection(
"usuarios").document(mAuth.getCurrentUser().getEmail()).collection(
"colecciones").document(titulo).collection(
"rutas").get().addOnSuccessListener(
336 queryDocumentSnapshots -> {
337 for(DocumentSnapshot d : queryDocumentSnapshots.getDocuments()){
338 Ruta ruta = new Ruta();
339 ruta.setId(d.getId());
340 ruta.setTitulo(d.getString(
"titulo"));
341 ruta.setDescripcion(d.getString(
"descripcion"));
342 ruta.setOrigen(d.getString(
"origen"));
343 ruta.setImagenes((ArrayList<String>) d.get(
"imagenes"));
347 addRutaAdapter(rutas);
359 if(colecciones.isEmpty()){
361 initializeColecciones();
void onCreate(Bundle savedInstanceState)
void updateColecciones(Coleccion coleccion)
void updateRutas(Ruta ruta)
void initializeColecciones()
void onActivityResult(int requestCode, int resultCode, Intent data)
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)