FavoritePath
Cargando...
Buscando...
Nada coincide
ShareActivity.java
1package uo269509.favoritepath.activity;
2
3import android.annotation.SuppressLint;
4import android.content.Context;
5import android.content.Intent;
6import android.location.Location;
7import android.location.LocationManager;
8import android.os.Bundle;
9import android.os.Handler;
10import android.os.Looper;
11import android.widget.Button;
12import android.widget.Toast;
13
14import androidx.appcompat.app.AppCompatActivity;
15import androidx.recyclerview.widget.LinearLayoutManager;
16import androidx.recyclerview.widget.RecyclerView;
17
18import com.google.firebase.auth.FirebaseAuth;
19import com.google.firebase.firestore.DocumentReference;
20import com.google.firebase.firestore.DocumentSnapshot;
21import com.google.firebase.firestore.FirebaseFirestore;
22import com.google.firebase.firestore.GeoPoint;
23import com.mapbox.api.directions.v5.models.DirectionsResponse;
24import com.mapbox.api.directions.v5.models.DirectionsRoute;
25import com.mapbox.geojson.Point;
26import com.mapbox.services.android.navigation.ui.v5.NavigationLauncher;
27import com.mapbox.services.android.navigation.ui.v5.NavigationLauncherOptions;
28import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute;
29
30import java.util.ArrayList;
31import java.util.HashMap;
32import java.util.Map;
33import java.util.concurrent.Executor;
34import java.util.concurrent.Executors;
35
36import retrofit2.Call;
37import retrofit2.Callback;
38import retrofit2.Response;
39import uo269509.favoritepath.R;
40import uo269509.favoritepath.adapter.ListShareAdapter;
41import uo269509.favoritepath.modelos.Amigo;
42
43public class ShareActivity extends AppCompatActivity {
44
45 FirebaseAuth mAuth;
46 FirebaseFirestore db;
47 DocumentReference reference;
48 RecyclerView amigoListView;
49 ArrayList<Amigo> amigos = new ArrayList<>();
50 Button iniciarRutaBtn;
51 String rutaId;
52 boolean circular;
53 ArrayList<GeoPoint> puntos;
54
60 @Override
61 protected void onCreate(Bundle savedInstanceState) {
62 super.onCreate(savedInstanceState);
63 setContentView(R.layout.activity_share);
64 init();
67 iniciarRuta();
68 }
69
73 private void iniciarRuta(){
74 iniciarRutaBtn.setOnClickListener(view -> {
75 navigationRoute();
76 });
77 }
78
83 private void shareRuta(Amigo amigo){
84 Map<String, Object> camposSolicitud = new HashMap<>();
85 camposSolicitud.put("email",mAuth.getCurrentUser().getEmail());
86 camposSolicitud.put("rutaId",rutaId);
87 db.collection("usuarios").document(amigo.getNombre()).collection("solicitudes").document(rutaId).set(camposSolicitud);
88 updateAmigos(amigo);
89 Toast.makeText(this, "Solicitud enviada con éxito",Toast.LENGTH_SHORT).show();
90 }
91
95 private void init(){
96 Intent i = getIntent();
97 rutaId = i.getStringExtra("rutaId");
98 mAuth = FirebaseAuth.getInstance();
99 db = FirebaseFirestore.getInstance();
100 reference = db.collection("usuarios").document(mAuth.getCurrentUser().getEmail());
101 amigoListView = findViewById(R.id.shareRecyclerView);
102 iniciarRutaBtn = findViewById(R.id.iniciarRutaBtn);
103 }
104
108 private void configureView() {
109 amigoListView.setHasFixedSize(true);
110 LinearLayoutManager layoutManager = new LinearLayoutManager(this);
111 amigoListView.setLayoutManager(layoutManager);
112 }
113
118 private void addAdapter(ArrayList<Amigo> list) {
119 ListShareAdapter laAdapter = new ListShareAdapter(list, amigo -> {
120 shareRuta(amigo);
121 });
122 amigoListView.setAdapter(laAdapter);
123 }
124
128 private void cargarDatos() {
129 reference.collection("amigos").get().addOnSuccessListener(queryDocumentSnapshots -> {
130 for(DocumentSnapshot doc : queryDocumentSnapshots.getDocuments()){
131 amigos.add(new Amigo(doc.getId()));
132 }
133 });
134 }
135
140 public void updateAmigos(Amigo amigo) {
141 amigos.remove(amigo);
142 amigoListView.getAdapter().notifyDataSetChanged();
143 }
144
148 public void getDatosRuta() {
149 final Executor EXECUTOR = Executors.newSingleThreadExecutor();
150 final Handler HANDLER = new Handler(Looper.getMainLooper());
151 EXECUTOR.execute(() -> {
152 HANDLER.post(() -> {
153 reference.collection("colecciones").document("Rutas propias").collection("rutas").document(rutaId).get().addOnSuccessListener(
154 documentSnapshot -> {
155 circular = documentSnapshot.getBoolean("circular");
156 puntos = (ArrayList<GeoPoint>) documentSnapshot.get("puntos");
157 }
158 );
159 });
160 });
161 }
162
167 public void initializeAmigos() {
168 final Executor EXECUTOR = Executors.newSingleThreadExecutor();
169 final Handler HANDLER = new Handler(Looper.getMainLooper());
170 EXECUTOR.execute(() -> {
171 cargarDatos();
172 HANDLER.post(() -> {
173 db.collection("usuarios").document(mAuth.getCurrentUser().getEmail()).get().addOnSuccessListener(
174 documentSnapshot -> {
175 if(documentSnapshot.exists()){
176 configureView();
177 addAdapter(amigos);
178 }
179 }
180 );
181 });
182
183 });
184 }
185
190 private void navigationRoute(){
191 NavigationRoute.Builder nav = NavigationRoute.builder(this).accessToken(getString(R.string.mapbox_access_token));
192 LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
193 @SuppressLint("MissingPermission") Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
194 if (lastKnownLocation != null) {
195 nav.addWaypoint(Point.fromLngLat(lastKnownLocation.getLongitude(),lastKnownLocation.getLatitude()));
196 }
197 for (GeoPoint g: puntos) {
198 nav.addWaypoint(Point.fromLngLat(g.getLongitude(),g.getLatitude()));
199 }
200 if(circular)
201 nav.addWaypoint(Point.fromLngLat(puntos.get(0).getLongitude(),puntos.get(0).getLatitude()));
202
203 nav.profile("walking").build().getRoute(new Callback<DirectionsResponse>() {
204 @Override
205 public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
206 if(response.body() == null){
207 Toast.makeText(getApplicationContext(), "No se encontró ninguna ruta.", Toast.LENGTH_SHORT).show();
208 return;
209 }else if(response.body().routes().size() < 1){
210 Toast.makeText(getApplicationContext(), "No se encontró ninguna ruta.", Toast.LENGTH_SHORT).show();
211 return;
212 }
213 DirectionsRoute route = response.body().routes().get(0);
214 NavigationLauncherOptions options = NavigationLauncherOptions.builder()
215 .directionsRoute(route)
216 .build();
217
218 NavigationLauncher.startNavigation(ShareActivity.this, options);
219 }
220 @Override
221 public void onFailure(Call<DirectionsResponse> call, Throwable t) {
222 Toast.makeText(getApplicationContext(), "No se encontró ninguna ruta, compruebe su conexión.", Toast.LENGTH_SHORT).show();
223 }
224 });
225 }
226}
void onCreate(Bundle savedInstanceState)