FavoritePath
Cargando...
Buscando...
Nada coincide
SolicitudesFragment.java
1package uo269509.favoritepath.ui;
2
3import android.os.Bundle;
4import android.os.Handler;
5import android.os.Looper;
6import android.view.LayoutInflater;
7import android.view.View;
8import android.view.ViewGroup;
9import android.widget.Toast;
10
11import androidx.fragment.app.Fragment;
12import androidx.recyclerview.widget.LinearLayoutManager;
13import androidx.recyclerview.widget.RecyclerView;
14
15import com.google.firebase.auth.FirebaseAuth;
16import com.google.firebase.firestore.DocumentReference;
17import com.google.firebase.firestore.DocumentSnapshot;
18import com.google.firebase.firestore.FieldValue;
19import com.google.firebase.firestore.FirebaseFirestore;
20
21import java.util.ArrayList;
22import java.util.HashMap;
23import java.util.Map;
24import java.util.concurrent.Executor;
25import java.util.concurrent.Executors;
26
27import uo269509.favoritepath.R;
28import uo269509.favoritepath.adapter.ListSolicitudesAdapter;
29import uo269509.favoritepath.modelos.Solicitud;
30
31public class SolicitudesFragment extends Fragment {
32
33 FirebaseAuth mAuth;
34 FirebaseFirestore db;
35 DocumentReference reference;
36 RecyclerView solicitudListView;
37 ArrayList<Solicitud> solicitudes = new ArrayList<>();
38
39 public SolicitudesFragment() {}
40
45 @Override
46 public void onCreate(Bundle savedInstanceState) {
47 super.onCreate(savedInstanceState);
48 }
49
57 @Override
58 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
59 View vista = inflater.inflate(R.layout.fragment_solicitudes, container, false);
60 init(vista);
62 return vista;
63 }
64
68 private void init(View vista){
69 mAuth = FirebaseAuth.getInstance();
70 db = FirebaseFirestore.getInstance();
71 reference = db.collection("usuarios").document(mAuth.getCurrentUser().getEmail());
72 solicitudListView = vista.findViewById(R.id.recyclerView);
73 }
74
79 private void aceptarSolicitud(Solicitud solicitud) {
80 if(solicitud.getRutaId() == null) { //Aquí es la solicitud de amistad
81 //añadimos a cada usuario al otro usuario como un amigo
82 Map<String, Object> camposSolicitudAmigo1 = new HashMap<>();
83 camposSolicitudAmigo1.put("email", solicitud.getTitulo());
84 reference.collection("amigos").document(solicitud.getTitulo()).set(camposSolicitudAmigo1);
85 Map<String, Object> camposSolicitudAmigo2 = new HashMap<>();
86 camposSolicitudAmigo2.put("email", mAuth.getCurrentUser().getEmail());
87 db.collection("usuarios").document(solicitud.getTitulo()).collection("amigos").document(mAuth.getCurrentUser().getEmail()).set(camposSolicitudAmigo2);
88 //eliminamos la solicitud para que ya no aparezca
89 reference.collection("solicitudes").document(solicitud.getTitulo()).delete();
90 db.collection("usuarios").document(solicitud.getTitulo()).update("nombreSolicitudes", FieldValue.arrayRemove(mAuth.getCurrentUser().getEmail()));
91 updateSolicitudes(solicitud);
92 Toast.makeText(this.getContext(), "Solicitud aceptada",Toast.LENGTH_SHORT).show();
93 }else{ // Aquí va la solicitud de ruta
94 Map<String, Object> camposRuta = new HashMap<>();
95 db.collection("usuarios").document(solicitud.getTitulo()).collection("colecciones").document("Rutas propias")
96 .collection("rutas").document(solicitud.getRutaId()).get()
97 .addOnSuccessListener(documentSnapshot -> {
98 if (documentSnapshot.exists()) {
99 camposRuta.put("titulo",documentSnapshot.getString("titulo"));
100 camposRuta.put("descripcion",documentSnapshot.getString("descripcion"));
101 camposRuta.put("publico",documentSnapshot.getBoolean("publico"));
102 camposRuta.put("circular",documentSnapshot.getBoolean("circular"));
103 camposRuta.put("imagenes",documentSnapshot.get("imagenes"));
104 camposRuta.put("puntos",documentSnapshot.get("puntos"));
105 reference.collection("colecciones").document("Rutas propias").collection("rutas").document(solicitud.getRutaId()).set(camposRuta);
106 reference.collection("solicitudes").document(solicitud.getRutaId()).delete();
107 updateSolicitudes(solicitud);
108 Toast.makeText(this.getContext(), "Solicitud aceptada",Toast.LENGTH_SHORT).show();
109 } else {
110 updateSolicitudes(solicitud);
111 Toast.makeText(this.getContext(), "El usuario ha eliminado ya esa ruta",Toast.LENGTH_SHORT).show();
112 }
113 });
114 }
115 }
116
121 private void borrarSolicitud(Solicitud solicitud) {
122 if(solicitud.getRutaId() == null) {
123 reference.collection("solicitudes").document(solicitud.getTitulo()).delete();
124 db.collection("usuarios").document(solicitud.getTitulo()).update("nombreSolicitudes", FieldValue.arrayRemove(mAuth.getCurrentUser().getEmail()));
125 }else{
126 reference.collection("solicitudes").document(solicitud.getRutaId()).delete();
127 }
128 updateSolicitudes(solicitud);
129 Toast.makeText(this.getContext(), "Solicitud eliminada",Toast.LENGTH_SHORT).show();
130 }
131
135 private void configureView() {
136 solicitudListView.setHasFixedSize(true);
137 LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
138 solicitudListView.setLayoutManager(layoutManager);
139 }
140
145 private void addAdapter(ArrayList<Solicitud> list) {
146 ListSolicitudesAdapter lsAdapter = new ListSolicitudesAdapter(list, (solicitud, aceptar) -> {
147 if(aceptar){
148 aceptarSolicitud(solicitud);
149 }else {
150 borrarSolicitud(solicitud);
151 }
152 });
153 solicitudListView.setAdapter(lsAdapter);
154 }
155
159 private void cargarDatos() {
160 reference.collection("solicitudes").get().addOnSuccessListener(queryDocumentSnapshots -> {
161 for(DocumentSnapshot doc : queryDocumentSnapshots.getDocuments()){
162 solicitudes.add(new Solicitud(doc.getString("email"), doc.getString("rutaId")));
163 }
164 });
165 }
166
171 public void updateSolicitudes(Solicitud solicitud) {
172 solicitudes.remove(solicitud);
173 solicitudListView.getAdapter().notifyDataSetChanged();
174 }
175
180 public void initializeSolicitudes() {
181 final Executor EXECUTOR = Executors.newSingleThreadExecutor();
182 final Handler HANDLER = new Handler(Looper.getMainLooper());
183 EXECUTOR.execute(() -> {
184 cargarDatos();
185 HANDLER.post(() -> {
186 db.collection("usuarios").document(mAuth.getCurrentUser().getEmail()).get().addOnSuccessListener(
187 documentSnapshot -> {
188 if(documentSnapshot.exists()){
189 configureView();
190 addAdapter(solicitudes);
191 }
192 }
193 );
194 });
195
196 });
197 }
198}
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)