Aggiunta configurazione base per l'app Android

Implementate le configurazioni iniziali in `AndroidManifest.xml` e `Nuvolari.csproj`.
Creata la classe `MainActivity` per gestire la mappa con `SearchView` per la ricerca di luoghi.
Definiti i layout in `activity_main.axml` e `activity_main.xml`.
Aggiunti file di risorse per le icone dell'app e creato `ic_launcher_background.xml` per il colore di sfondo.
Definiti i testi dell'app in `strings.xml`.
This commit is contained in:
2025-08-17 22:47:44 +02:00
parent 3d482329d0
commit 7a45880059
26 changed files with 230 additions and 0 deletions

90
Nuvolari/MainActivity.cs Normal file
View File

@@ -0,0 +1,90 @@
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<SearchView>(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();
});
}
}
}
}