using System; using System.Linq; using System.Threading.Tasks; using System.Collections.Generic; using System.IO; using InABox.Core; using Xamarin.Forms; using Xamarin.Essentials; namespace InABox.Mobile { public static class MobileUtils { public static void Init() { Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(CoreUtils.SyncfusionLicense(SyncfusionVersion.v23_2)); } public static String GetDeviceID() { IDeviceID deviceID = DependencyService.Get(); return deviceID.DeviceID(); } public static IAppVersion AppVersion { get { return DependencyService.Get(); } } public static IImageTools ImageTools => DependencyService.Get(); private static async Task Retry(Func> action, int interval, int retryCount = 3) { bool flag = false; List source = new List(); TimeSpan delay = TimeSpan.FromMilliseconds((double)interval); for (int index = 0; index < retryCount; ++index) { try { flag = await action(); if (flag) return true; Task.Delay(delay).Wait(); } catch (Exception ex) { if (source.All((Func)(x => x.Message != ex.Message))) source.Add(ex); Task.Delay(delay).Wait(); } } if (!flag && !source.Any()) return false; if (source.Count() == 1) throw source.First(); if (source.Count() > 1) throw new AggregateException((IEnumerable)source); return flag; } public static async Task IsPermitted() where TPermission : Permissions.BasePermission, new() { try { PermissionStatus status = await Permissions.CheckStatusAsync(); if (status == PermissionStatus.Granted) return true; var request = await Permissions.RequestAsync(); return request == PermissionStatus.Granted; } catch (TaskCanceledException ex) { return false; } } // public static async Task CheckPermissions() where TPermission : Permissions.BasePermission, new() // { // var permissionStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(permission); // bool request = false; // if (permissionStatus == PermissionStatus.Denied) // { // if (String.Equals(Device.RuntimePlatform, Device.iOS)) // { // // var title = $"{permission} Permission"; // var question = $"To use this plugin the {permission} permission is required. Please go into Settings and turn on {permission} for the app."; // var positive = "Settings"; // var negative = "Maybe Later"; // var task = Application.Current?.MainPage?.DisplayAlert(title, question, positive, negative); // if (task == null) // return false; // // var result = await task; // if (result) // { // CrossPermissions.Current.OpenAppSettings(); // } // // return false; // } // // request = true; // // } // // if (request || permissionStatus != PermissionStatus.Granted) // { // var newStatus = await CrossPermissions.Current.RequestPermissionsAsync(permission); // if (newStatus.ContainsKey(permission) && newStatus[permission] != PermissionStatus.Granted) // { // var title = $"{permission} Permission"; // var question = $"To use the plugin the {permission} permission is required."; // var positive = "Settings"; // var negative = "Maybe Later"; // var task = Application.Current?.MainPage?.DisplayAlert(title, question, positive, negative); // if (task == null) // return false; // // var result = await task; // if (result) // { // CrossPermissions.Current.OpenAppSettings(); // } // return false; // } // } // // return true; // } public static byte[] ImageSourceToByteArray(ImageSource source) { StreamImageSource streamImageSource = (StreamImageSource)source; System.Threading.CancellationToken cancellationToken = System.Threading.CancellationToken.None; Task task = streamImageSource.Stream(cancellationToken); Stream stream = task.Result; byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); return bytes; } public static string ImageSourceToBase64(ImageSource source) { var bytes = ImageSourceToByteArray(source); string s = Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks); return s; } } }