Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
PermissionService.cs
1using Microsoft.Maui.Controls.Shapes;
7
9{
10 [Singleton]
11 internal sealed class PermissionService : IPermissionService
12 {
13 public PermissionService()
14 {
15 }
16
22 private static async Task<PermissionStatus> CheckAndRequestPermissionAsync<TPermission>()
23 where TPermission : Permissions.BasePermission, new()
24 {
25 try
26 {
27 PermissionStatus Status = await Permissions.CheckStatusAsync<TPermission>();
28
29 // On platforms other than iOS, a Denied status might be temporary,
30 // so we try to request it.
31 if ((Status == PermissionStatus.Denied && DeviceInfo.Platform != DevicePlatform.iOS) ||
32 Status == PermissionStatus.Unknown)
33 {
34 Status = await Permissions.RequestAsync<TPermission>();
35 }
36 return Status;
37 }
38 catch (Exception)
39 {
40 return PermissionStatus.Unknown;
41 }
42 }
43
48 public async Task<bool> CheckNotificationPermissionAsync(bool SkipRequest = false)
49 {
50 PermissionStatus Status;
51
52 if (SkipRequest)
53 {
54 Status = await Permissions.CheckStatusAsync<NotificationPermission>();
55 }
56 else
57 {
58 Status = await CheckAndRequestPermissionAsync<NotificationPermission>();
59 }
60
61 if (Status == PermissionStatus.Granted)
62 return true;
63
64 string Title = ServiceRef.Localizer[nameof(AppResources.Notifications)];
65 string Description = ServiceRef.Localizer[nameof(AppResources.NotificationPopupDescription)];
66 string DescriptionSecondary = ServiceRef.Localizer[nameof(AppResources.NotificationPopupDescriptionSecondary)];
67 Geometry IconGeometry = Geometries.NotificationIconPath;
68
69 // Display the permission popup so the user can enable it from the settings.
70 ShowPermissionViewModel ViewModel = new(Title, Description, DescriptionSecondary, IconGeometry);
71 ShowPermissionPopup PermissionPopup = new(ViewModel);
72
73 await ServiceRef.PopupService.PushAsync(PermissionPopup);
74
75 if (SkipRequest)
76 {
77 Status = await Permissions.CheckStatusAsync<NotificationPermission>();
78 }
79 else
80 {
81 Status = await CheckAndRequestPermissionAsync<NotificationPermission>();
82 }
83
84 return Status == PermissionStatus.Granted;
85 }
86
91 public async Task<bool> CheckCameraPermissionAsync()
92 {
93 PermissionStatus Status = await CheckAndRequestPermissionAsync<Permissions.Camera>();
94
95 if (Status == PermissionStatus.Granted)
96 return true;
97
98 string Title;
99 string Description;
100 string DescriptionSecondary;
101 Geometry IconGeometry;
102 // Prepare localized strings for the permission rationale
103 if (OperatingSystem.IsAndroid())
104 {
105 Title = ServiceRef.Localizer[nameof(AppResources.CameraPermissionTitle)];
106 Description = ServiceRef.Localizer[nameof(AppResources.CameraPermissionDescription)];
107 DescriptionSecondary =
108 ServiceRef.Localizer[nameof(AppResources.CameraPermissionDescriptionSecondary)];
109 IconGeometry = Geometries.CameraPhotoButtonPath;
110 }
111 else if(OperatingSystem.IsIOS())
112 {
113 Title = ServiceRef.Localizer[nameof(AppResources.CameraPermissionTitle)];
114 Description = ServiceRef.Localizer[nameof(AppResources.CameraPermissionDescription)];
115 DescriptionSecondary =
116 ServiceRef.Localizer[nameof(AppResources.iOS_CameraPermissionDescriptionSecondary)];
117 IconGeometry = Geometries.CameraPhotoButtonPath;
118 }
119 else
120 {
121 Title = ServiceRef.Localizer[nameof(AppResources.CameraPermissionTitle)];
122 Description = ServiceRef.Localizer[nameof(AppResources.CameraPermissionDescription)];
123 DescriptionSecondary =
124 ServiceRef.Localizer[nameof(AppResources.CameraPermissionDescriptionSecondary)];
125 IconGeometry = Geometries.CameraPhotoButtonPath;
126 }
127
128 // Display the permission popup so the user can enable it from the settings.
129 ShowPermissionViewModel ViewModel = new(Title,Description,DescriptionSecondary, IconGeometry);
130 ShowPermissionPopup PermissionPopup = new(ViewModel);
131 await ServiceRef.PopupService.PushAsync(PermissionPopup);
132
133 Status = await CheckAndRequestPermissionAsync<Permissions.Camera>();
134
135 return Status == PermissionStatus.Granted;
136
137 }
138 }
139}
A strongly-typed resource class, for looking up localized strings, etc.
static string Notifications
Looks up a localized string similar to Notifications.
static string NotificationPopupDescription
Looks up a localized string similar to Don’t miss important activity..
static string NotificationPopupDescriptionSecondary
Looks up a localized string similar to Turn on notifications in your device settings to receive alert...
static string CameraPermissionDescription
Looks up a localized string similar to To use this feature, please enable camera access in your setti...
static string CameraPermissionDescriptionSecondary
Looks up a localized string similar to Open settings - Click on "Permissions" - Enable Camera Permiss...
static string iOS_CameraPermissionDescriptionSecondary
Looks up a localized string similar to Open settings - Enable Camera Permissions.
static string CameraPermissionTitle
Looks up a localized string similar to Camera.
Static class containing SVG Paths for symbols used in the app.
Definition: Geometries.cs:11
static readonly Geometry CameraPhotoButtonPath
Take photo
Definition: Geometries.cs:297
static readonly Geometry NotificationIconPath
Notification Icon
Definition: Geometries.cs:215