1package uo269509.favoritepath.activity;
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;
14import androidx.appcompat.app.AppCompatActivity;
15import androidx.recyclerview.widget.LinearLayoutManager;
16import androidx.recyclerview.widget.RecyclerView;
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;
30import java.util.ArrayList;
31import java.util.HashMap;
33import java.util.concurrent.Executor;
34import java.util.concurrent.Executors;
37import retrofit2.Callback;
38import retrofit2.Response;
39import uo269509.favoritepath.R;
40import uo269509.favoritepath.adapter.ListShareAdapter;
41import uo269509.favoritepath.modelos.Amigo;
47 DocumentReference reference;
48 RecyclerView amigoListView;
49 ArrayList<Amigo> amigos =
new ArrayList<>();
50 Button iniciarRutaBtn;
53 ArrayList<GeoPoint> puntos;
61 protected void onCreate(Bundle savedInstanceState) {
62 super.onCreate(savedInstanceState);
63 setContentView(R.layout.activity_share);
73 private void iniciarRuta(){
74 iniciarRutaBtn.setOnClickListener(view -> {
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);
89 Toast.makeText(
this,
"Solicitud enviada con éxito",Toast.LENGTH_SHORT).show();
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);
108 private void configureView() {
109 amigoListView.setHasFixedSize(
true);
110 LinearLayoutManager layoutManager =
new LinearLayoutManager(
this);
111 amigoListView.setLayoutManager(layoutManager);
118 private void addAdapter(ArrayList<Amigo> list) {
119 ListShareAdapter laAdapter =
new ListShareAdapter(list, amigo -> {
122 amigoListView.setAdapter(laAdapter);
128 private void cargarDatos() {
129 reference.collection(
"amigos").get().addOnSuccessListener(queryDocumentSnapshots -> {
130 for(DocumentSnapshot doc : queryDocumentSnapshots.getDocuments()){
131 amigos.add(
new Amigo(doc.getId()));
141 amigos.remove(amigo);
142 amigoListView.getAdapter().notifyDataSetChanged();
149 final Executor EXECUTOR = Executors.newSingleThreadExecutor();
150 final Handler HANDLER =
new Handler(Looper.getMainLooper());
151 EXECUTOR.execute(() -> {
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");
168 final Executor EXECUTOR = Executors.newSingleThreadExecutor();
169 final Handler HANDLER =
new Handler(Looper.getMainLooper());
170 EXECUTOR.execute(() -> {
173 db.collection(
"usuarios").document(mAuth.getCurrentUser().getEmail()).get().addOnSuccessListener(
174 documentSnapshot -> {
175 if(documentSnapshot.exists()){
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()));
197 for (GeoPoint g: puntos) {
198 nav.addWaypoint(Point.fromLngLat(g.getLongitude(),g.getLatitude()));
201 nav.addWaypoint(Point.fromLngLat(puntos.get(0).getLongitude(),puntos.get(0).getLatitude()));
203 nav.profile(
"walking").build().getRoute(
new Callback<DirectionsResponse>() {
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();
209 }
else if(response.body().routes().size() < 1){
210 Toast.makeText(getApplicationContext(),
"No se encontró ninguna ruta.", Toast.LENGTH_SHORT).show();
213 DirectionsRoute route = response.body().routes().get(0);
214 NavigationLauncherOptions options = NavigationLauncherOptions.builder()
215 .directionsRoute(route)
218 NavigationLauncher.startNavigation(ShareActivity.this, options);
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();
void onCreate(Bundle savedInstanceState)
void updateAmigos(Amigo amigo)