using Android.App; using Android.OS; using Android.Gms.Maps; using Android.Gms.Maps.Model; using Android.Widget; using Android.Locations; using System.Threading.Tasks; using System.Linq; /* * IDEE: * Fare una versione molto base dell'app senza troppe funzionalità, giusto per mostrare una mappa. * Fare poi una versione con più funzionalità, ma con pubblicità per guadagnare qualcosa da quello. */ namespace Nuvolari { [Activity(Label = "@string/app_name", MainLauncher = true)] public class MainActivity : Activity, IOnMapReadyCallback { private MapFragment? mapFragment; private GoogleMap? googleMap; private SearchView? searchView; protected override void OnCreate(Bundle? savedInstanceState) { base.OnCreate(savedInstanceState); // Usa il layout personalizzato con SearchView e MapFragment SetContentView(Resource.Layout.activity_main); // Ottieni riferimenti ai componenti UI searchView = FindViewById(Resource.Id.searchView); mapFragment = FragmentManager.FindFragmentById(Resource.Id.map) as MapFragment; mapFragment?.GetMapAsync(this); // Gestione ricerca if (searchView != null) { searchView.QueryTextSubmit += async (s, e) => { var query = e?.Query ?? string.Empty; await SearchAndMoveToLocationAsync(query); searchView.ClearFocus(); }; } } public void OnMapReady(GoogleMap map) { googleMap = map; // Imposta solo la navigazione base (scroll/zoom) googleMap.UiSettings.CompassEnabled = false; googleMap.UiSettings.MapToolbarEnabled = false; googleMap.UiSettings.MyLocationButtonEnabled = false; // Posizione iniziale: Milano var position = new LatLng(45.4642, 9.19); googleMap.MoveCamera(CameraUpdateFactory.NewLatLngZoom(position, 10)); } private async Task SearchAndMoveToLocationAsync(string query) { if (string.IsNullOrWhiteSpace(query) || googleMap == null) return; var geocoder = new Geocoder(this); #pragma warning disable CA1422 // Suppress warning for obsolete API on Android 33+ var addresses = await Task.Run(() => geocoder.GetFromLocationName(query, 1)); #pragma warning restore CA1422 var address = addresses?.FirstOrDefault(); if (address != null) { var latLng = new LatLng(address.Latitude, address.Longitude); RunOnUiThread(() => { googleMap?.AnimateCamera(CameraUpdateFactory.NewLatLngZoom(latLng, 10)); }); } else { RunOnUiThread(() => { Toast.MakeText(this, "Luogo non trovato", ToastLength.Short).Show(); }); } } } }