FavoritePath
Cargando...
Buscando...
Nada coincide
AmigosFragment.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.Button;
10import android.widget.EditText;
11import android.widget.Toast;
12
13import androidx.fragment.app.Fragment;
14import androidx.recyclerview.widget.LinearLayoutManager;
15import androidx.recyclerview.widget.RecyclerView;
16
17import com.google.firebase.auth.FirebaseAuth;
18import com.google.firebase.firestore.DocumentReference;
19import com.google.firebase.firestore.DocumentSnapshot;
20import com.google.firebase.firestore.FirebaseFirestore;
21
22import java.util.ArrayList;
23import java.util.HashMap;
24import java.util.Map;
25import java.util.concurrent.Executor;
26import java.util.concurrent.Executors;
27
28import uo269509.favoritepath.R;
29import uo269509.favoritepath.adapter.ListAmigosAdapter;
30import uo269509.favoritepath.modelos.Amigo;
31
32public class AmigosFragment extends Fragment {
33
34 EditText solicitud;
35 Button solicitudBtn;
36 FirebaseAuth mAuth;
37 FirebaseFirestore db;
38 DocumentReference reference;
39 RecyclerView amigoListView;
40 ArrayList<Amigo> amigos = new ArrayList<>();
41
42 public AmigosFragment() {}
43
48 @Override
49 public void onCreate(Bundle savedInstanceState) {
50 super.onCreate(savedInstanceState);
51 }
52
60 @Override
61 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
62 View vista = inflater.inflate(R.layout.fragment_amigos, container, false);
63 init(vista);
65 mandarSolicitud();
66 return vista;
67 }
68
69 private void mandarSolicitud(){
70 solicitudBtn.setOnClickListener(v -> {
71 String newSolicitud = solicitud.getText().toString().trim();
72 if(newSolicitud != null && !newSolicitud.isEmpty() && !newSolicitud.equals(mAuth.getCurrentUser().getEmail())){
73 reference.get().addOnSuccessListener(documentSnapshot -> {
74 if (documentSnapshot.exists()) {
75 ArrayList<String> nombreSolicitudes = (ArrayList<String>) documentSnapshot.get("nombreSolicitudes");
76 if(nombreSolicitudes != null && nombreSolicitudes.contains(newSolicitud)){
77 Toast.makeText(this.getContext(), "Ya has mandado una solicitud a este usuario",Toast.LENGTH_SHORT).show();
78 }else{
79 reference.collection("amigos").document(newSolicitud).get().addOnSuccessListener(documentSnapshot2 -> {
80 if(documentSnapshot2.exists()){
81 Toast.makeText(this.getContext(), "Este usuario ya es tu amigo",Toast.LENGTH_SHORT).show();
82 }else{
83 existeUsuarioSolicitud(newSolicitud);
84 }
85 });
86 }
87 }
88 });
89 }else{
90 Toast.makeText(this.getContext(), "Escriba un usuario existente",Toast.LENGTH_SHORT).show();
91 }
92 });
93 }
94
95 private void existeUsuarioSolicitud(String newSolicitud){
96 DocumentReference auxReference = db.collection("usuarios").document(newSolicitud);
97 auxReference.get().addOnSuccessListener(documentSnapshot -> {
98 if (documentSnapshot.exists()) {
99 Map<String, Object> camposSolicitud = new HashMap<>();
100 camposSolicitud.put("email",mAuth.getCurrentUser().getEmail());
101 auxReference.collection("solicitudes").document(mAuth.getCurrentUser().getEmail()).set(camposSolicitud);
102 reference.get().addOnSuccessListener(documentSnapshot2 -> {
103 if (documentSnapshot2.exists()) {
104 ArrayList<String> nombreSolicitudes = (ArrayList<String>) documentSnapshot.get("solicitudesMandadas");
105 if (nombreSolicitudes == null)
106 nombreSolicitudes = new ArrayList<String>();
107 nombreSolicitudes.add(newSolicitud);
108 Map<String, Object> updates = new HashMap<>();
109 updates.put("nombreSolicitudes", nombreSolicitudes);
110 reference.update(updates);
111 solicitud.setText("");
112 Toast.makeText(this.getContext(), "Solicitud enviada correctamente", Toast.LENGTH_SHORT).show();
113 }
114 });
115 }else{
116 Toast.makeText(this.getContext(), "El usuario no existe", Toast.LENGTH_SHORT).show();
117 }
118 });
119 }
120
121 private void borrarAmigo(Amigo amigo) {
122 reference.collection("amigos").document(amigo.getNombre()).delete();
123 db.collection("usuarios").document(amigo.getNombre()).collection("amigos").document(mAuth.getCurrentUser().getEmail()).delete();
124 updateAmigos(amigo);
125 Toast.makeText(this.getContext(), "Amigo borrado con éxito",Toast.LENGTH_SHORT).show();
126 }
127
131 private void init(View vista){
132 mAuth = FirebaseAuth.getInstance();
133 db = FirebaseFirestore.getInstance();
134 reference = db.collection("usuarios").document(mAuth.getCurrentUser().getEmail());
135 solicitud = vista.findViewById(R.id.editTextSolicitud);
136 solicitudBtn = vista.findViewById(R.id.solicitudBtn);
137 amigoListView = vista.findViewById(R.id.recyclerView);
138 }
139
143 private void configureView() {
144 amigoListView.setHasFixedSize(true);
145 LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
146 amigoListView.setLayoutManager(layoutManager);
147 }
148
153 private void addAdapter(ArrayList<Amigo> list) {
154 ListAmigosAdapter laAdapter = new ListAmigosAdapter(list, amigo -> {
155 borrarAmigo(amigo);
156 });
157 amigoListView.setAdapter(laAdapter);
158 }
159
163 private void cargarDatos() {
164 reference.collection("amigos").get().addOnSuccessListener(queryDocumentSnapshots -> {
165 for(DocumentSnapshot doc : queryDocumentSnapshots.getDocuments()){
166 amigos.add(new Amigo(doc.getId()));
167 }
168 });
169 }
170
175 public void updateAmigos(Amigo amigo) {
176 amigos.remove(amigo);
177 amigoListView.getAdapter().notifyDataSetChanged();
178 }
179
184 public void initializeAmigos() {
185 final Executor EXECUTOR = Executors.newSingleThreadExecutor();
186 final Handler HANDLER = new Handler(Looper.getMainLooper());
187 EXECUTOR.execute(() -> {
188 cargarDatos();
189 HANDLER.post(() -> {
190 db.collection("usuarios").document(mAuth.getCurrentUser().getEmail()).get().addOnSuccessListener(
191 documentSnapshot -> {
192 if(documentSnapshot.exists()){
193 configureView();
194 addAdapter(amigos);
195 }
196 }
197 );
198 });
199
200 });
201 }
202}
void onCreate(Bundle savedInstanceState)
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)