diff --git a/SteUp.Maui/Core/Services/AttachedService.cs b/SteUp.Maui/Core/Services/AttachedService.cs index 5ceedc3..fde9132 100644 --- a/SteUp.Maui/Core/Services/AttachedService.cs +++ b/SteUp.Maui/Core/Services/AttachedService.cs @@ -8,6 +8,8 @@ namespace SteUp.Maui.Core.Services; public class AttachedService(ILogger logger) : IAttachedService { + public bool IsCameraAvailable => MediaPicker.Default.IsCaptureSupported; + public async Task SelectImageFromCamera() { var cameraPerm = await Permissions.RequestAsync(); @@ -28,7 +30,10 @@ public class AttachedService(ILogger logger) : IAttachedService logger.LogError(ex, ex.Message); Console.WriteLine($"Errore cattura foto: {ex.Message}"); SentrySdk.CaptureException(ex); - return null; + + // Rilancia: restituire null qui era indistinguibile da un annullamento, + // e il rilevatore toccava "Aggiungi una foto" senza vedere nulla. + throw; } return result is null ? null : await UtilityFile.ConvertToDto(result, AttachedDto.TypeAttached.Image); diff --git a/SteUp.Shared/Components/SingleElements/Modal/ModalAddAttached.razor b/SteUp.Shared/Components/SingleElements/Modal/ModalAddAttached.razor index 13b63c2..224703d 100644 --- a/SteUp.Shared/Components/SingleElements/Modal/ModalAddAttached.razor +++ b/SteUp.Shared/Components/SingleElements/Modal/ModalAddAttached.razor @@ -40,7 +40,17 @@ private async Task OnCamera() { - var selectImageFromCamera = await AttachedService.SelectImageFromCamera(); + AttachedDto? selectImageFromCamera; + try + { + selectImageFromCamera = await AttachedService.SelectImageFromCamera(); + } + catch (Exception) + { + Snackbar.Clear(); + Snackbar.Add("Non è stato possibile scattare la foto, riprova", Severity.Error); + return; + } if (selectImageFromCamera != null) { diff --git a/SteUp.Shared/Components/SingleElements/Modal/ModalFormScheda.razor b/SteUp.Shared/Components/SingleElements/Modal/ModalFormScheda.razor index 1a93399..7a60f47 100644 --- a/SteUp.Shared/Components/SingleElements/Modal/ModalFormScheda.razor +++ b/SteUp.Shared/Components/SingleElements/Modal/ModalFormScheda.razor @@ -756,10 +756,36 @@ private async Task OpenAddAttached() { - var selectImageFromCamera = await AttachedService.SelectImageFromCamera(); - if (selectImageFromCamera == null) return; - - var attachedList = new List { selectImageFromCamera }; + List? attachedList; + + if (AttachedService.IsCameraAvailable) + { + AttachedDto? selectImageFromCamera; + try + { + selectImageFromCamera = await AttachedService.SelectImageFromCamera(); + } + catch (Exception) + { + // Gia' registrato e inviato a Sentry dal servizio + Snackbar.Clear(); + Snackbar.Add("Non è stato possibile scattare la foto, riprova", Severity.Error); + return; + } + + if (selectImageFromCamera == null) return; + attachedList = [selectImageFromCamera]; + } + else + { + // Senza fotocamera "Aggiungi una foto" non avrebbe altra strada: + // si passa alla galleria invece di lasciare il rilevatore fermo. + Snackbar.Clear(); + Snackbar.Add("Fotocamera non disponibile: scegli la foto dalla galleria", Severity.Warning); + + attachedList = await AttachedService.SelectImageFromGallery(); + if (attachedList is null || attachedList.Count == 0) return; + } OnLoading = true; await InvokeAsync(StateHasChanged); diff --git a/SteUp.Shared/Core/Interface/System/IAttachedService.cs b/SteUp.Shared/Core/Interface/System/IAttachedService.cs index 87863c9..f39fcce 100644 --- a/SteUp.Shared/Core/Interface/System/IAttachedService.cs +++ b/SteUp.Shared/Core/Interface/System/IAttachedService.cs @@ -4,6 +4,9 @@ namespace SteUp.Shared.Core.Interface.System; public interface IAttachedService { + bool IsCameraAvailable { get; } + + /// Null se l'utente annulla; lancia se lo scatto fallisce. Task SelectImageFromCamera(); Task?> SelectImageFromGallery(); } \ No newline at end of file