FavoritePath
Cargando...
Buscando...
Nada coincide
ColeccionesFragment.java
1package uo269509.favoritepath.ui;
2
3import static android.app.Activity.RESULT_OK;
4
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;
15
16import androidx.fragment.app.Fragment;
17import androidx.recyclerview.widget.LinearLayoutManager;
18import androidx.recyclerview.widget.RecyclerView;
19
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;
28
29import java.util.ArrayList;
30import java.util.HashMap;
31import java.util.Map;
32import java.util.concurrent.Executor;
33import java.util.concurrent.Executors;
34
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;
41
42public class ColeccionesFragment extends Fragment {
43
44 View vista;
45 EditText coleccion;
46 Button coleccionBtn;
47 Button rutaBtn;
48 String titulo;
49 FirebaseAuth mAuth;
50 FirebaseFirestore db;
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;
56
57 public ColeccionesFragment() {}
58
65 @Override
66 public void onActivityResult(int requestCode, int resultCode, Intent data) {
67 super.onActivityResult(requestCode, resultCode, data);
68 if (requestCode == RUTA && resultCode == RESULT_OK) {
69 titulo = data.getStringExtra("coleccionBack");
71 }
72 }
73
78 @Override
79 public void onCreate(Bundle savedInstanceState) {
80 super.onCreate(savedInstanceState);
81 }
82
90 @Override
91 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
92 vista = inflater.inflate(R.layout.fragment_colecciones, container, false);
93 init(vista);
95 crearRuta();
96 crearColeccion();
97 return vista;
98 }
99
104 private void crearRuta(){
105 rutaBtn.setOnClickListener(v -> {
106 Intent i = new Intent(getActivity(), RutaActivity.class);
107 if(titulo != null)
108 i.putExtra("coleccion",titulo);
109 else
110 i.putExtra("coleccion","Rutas propias");
111 startActivityForResult(i, RUTA);
112 });
113 }
114
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();
127 }else{
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();
135 }
136 }
137 });
138 }else{
139 Toast.makeText(this.getContext(), "Escriba un nombre válido",Toast.LENGTH_SHORT).show();
140 }
141 });
142 }
143
148 private void borrarColeccion(Coleccion coleccion) {
149 reference.collection("colecciones").document(coleccion.getTitulo()).collection("rutas").get().addOnSuccessListener(
150 querySnapshot -> {
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);
155 fileRef.delete();
156 }
157 reference.collection("colecciones").document("Rutas propias").collection("rutas").document(document.getId()).delete();
158 batch.delete(document.getReference());
159 }
160 batch.commit();
161 }
162 );
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);
171 }
172 });
173 updateColecciones(coleccion);
174 Toast.makeText(this.getContext(), "Colección borrada con éxito",Toast.LENGTH_SHORT).show();
175 }
176
181 private void abrirColeccion(Coleccion coleccion) {
182 titulo = coleccion.getTitulo();
183 initializeRutas();
184 }
185
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);
197 }
198
202 private void configureView() {
203 recyclerListView.setHasFixedSize(true);
204 LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
205 recyclerListView.setLayoutManager(layoutManager);
206 }
207
212 private void addColeccionAdapter(ArrayList<Coleccion> list) {
213 ListColeccionesAdapter lcAdapter = new ListColeccionesAdapter(list, (coleccion, delete) -> {
214 if(delete){
215 borrarColeccion(coleccion);
216 }else {
217 abrirColeccion(coleccion);
218 }
219 });
220 recyclerListView.setAdapter(lcAdapter);
221 }
222
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));
233 }
234 }
235 });
236 }
237
242 public void updateColecciones(Coleccion coleccion) {
243 colecciones.remove(coleccion);
244 recyclerListView.getAdapter().notifyDataSetChanged();
245 }
246
251 public void initializeColecciones() {
252 final Executor EXECUTOR = Executors.newSingleThreadExecutor();
253 final Handler HANDLER = new Handler(Looper.getMainLooper());
254 EXECUTOR.execute(() -> {
255 cargarDatosColecciones();
256 HANDLER.post(() -> {
257 db.collection("usuarios").document(mAuth.getCurrentUser().getEmail()).get().addOnSuccessListener(
258 documentSnapshot -> {
259 if(documentSnapshot.exists()){
260 configureView();
261 addColeccionAdapter(colecciones);
262 }
263 }
264 );
265 });
266 rutas.clear();
267 });
268 }
269
274 private void borrarRuta(Ruta ruta) {
275 for(String url : ruta.getImagenes()) {
276 StorageReference fileRef = FirebaseStorage.getInstance().getReferenceFromUrl(url);
277 fileRef.delete();
278 }
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();
282 }else{
283 if(ruta.getOrigen() !=null)
284 reference.collection("colecciones").document(ruta.getOrigen()).collection("rutas").document(ruta.getId()).delete();
285 }
286 updateRutas(ruta);
287 Toast.makeText(this.getContext(), "Ruta borrada con éxito",Toast.LENGTH_SHORT).show();
288 }
289
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);
299 }
300
305 public void updateRutas(Ruta ruta) {
306 rutas.remove(ruta);
307 recyclerListView.getAdapter().notifyDataSetChanged();
308 }
309
314 private void addRutaAdapter(ArrayList<Ruta> list) {
315 ListRutasAdapter lrAdapter = new ListRutasAdapter(list, (ruta, delete) -> {
316 if(delete){
317 borrarRuta(ruta);
318 }else {
319 abrirRuta(ruta);
320 }
321 });
322 recyclerListView.setAdapter(lrAdapter);
323 }
324
329 public void initializeRutas() {
330 final Executor EXECUTOR = Executors.newSingleThreadExecutor();
331 final Handler HANDLER = new Handler(Looper.getMainLooper());
332 EXECUTOR.execute(() -> {
333 rutas.clear();
334 HANDLER.post(() -> {
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"));
344 rutas.add(ruta);
345 }
346 configureView();
347 addRutaAdapter(rutas);
348 }
349 );
350 });
351 colecciones.clear();
352 });
353 }
354
358 public boolean onBackPressed() {
359 if(colecciones.isEmpty()){
360 titulo = null;
361 initializeColecciones();
362 return false;
363 }
364 return true;
365 }
366}
void onActivityResult(int requestCode, int resultCode, Intent data)
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)