Ver Fonte

avalonia: Added progress dialogs and permissions for android and desktop

Kenric Nugteren há 1 mês atrás
pai
commit
ae97029312

+ 33 - 0
InABox.Avalonia.Platform.Android/Permissions.Android.cs

@@ -0,0 +1,33 @@
+using InABox.Core;
+using Microsoft.Maui.ApplicationModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InABox.Avalonia.Platform.Android;
+
+public class Android_Permissions : IPermissions
+{
+    public Logger? Logger { get; set; }
+
+    public async Task<bool> IsPermitted(Permission permission)
+    {
+        if (permission == Permission.Camera)
+            return await DoEnabled<Permissions.Camera>();
+        if (permission == Permission.PhotoLibrary || permission == Permission.VideoLibrary)
+            return await DoEnabled<Permissions.Photos>();
+        if (permission == Permission.Geolocation)
+            return await DoEnabled<Permissions.LocationWhenInUse>();
+        return false;
+    }
+
+    private async Task<bool> DoEnabled<TPermission>() where TPermission : Permissions.BasePlatformPermission, new()
+    {
+        var status = await Permissions.CheckStatusAsync<TPermission>();
+        if (status != PermissionStatus.Granted && status != PermissionStatus.Restricted)
+            status = await Permissions.RequestAsync<TPermission>();
+        return status == PermissionStatus.Granted;
+    }
+}

+ 25 - 0
InABox.Avalonia.Platform.Desktop/Permissions.Desktop.cs

@@ -0,0 +1,25 @@
+using InABox.Core;
+using Microsoft.Maui.ApplicationModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InABox.Avalonia.Platform.Desktop;
+
+public class Desktop_Permissions : IPermissions
+{
+    public Logger? Logger { get; set; }
+
+    public Task<bool> IsPermitted(Permission permission)
+    {
+        return Task.FromResult(permission switch
+        {
+            Permission.Camera => true,
+            Permission.PhotoLibrary or Permission.VideoLibrary => true,
+            Permission.Geolocation => false,
+            _ => false,
+        });
+    }
+}

+ 0 - 1
InABox.Avalonia/Dialogs/MessageDialog/MessageDialog.cs

@@ -32,5 +32,4 @@ public static class MessageDialog
     
     public static async Task<MessageDialogResult> ShowYesNoCancel(string message)
         => await MessageDialogViewModel.ShowYesNoCancel(message);
-    
 }

+ 34 - 0
InABox.Avalonia/Dialogs/ProgressDialog/ProgressDialog.cs

@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InABox.Avalonia.Dialogs;
+
+public static class ProgressDialog
+{
+    public static async Task Execute(string message, Action work)
+    {
+        var dialog = new MessageDialogViewModel()
+            .Message(message);
+        var task = Task.Run(work).ContinueWith(task =>
+        {
+            dialog.Close(MessageDialogResult.None);
+        }, TaskScheduler.FromCurrentSynchronizationContext());
+        await dialog.Display();
+    }
+    
+    public static async Task<TResult> Execute<TResult>(string message, Func<TResult> work)
+    {
+        var dialog = new MessageDialogViewModel()
+            .Message(message);
+        var task = Task.Run(work).ContinueWith(task =>
+        {
+            dialog.Close(MessageDialogResult.None);
+            return task.Result;
+        });
+        await dialog.Display();
+        return task.Result;
+    }
+}