static bool PlatformEnsureDeclared(PermissionType permission, bool throwIfMissing) { var tizenPrivileges = permission.ToTizenPrivileges(onlyRuntimePermissions: false); if (tizenPrivileges == null || !tizenPrivileges.Any()) { return(false); } var package = Platform.CurrentPackage; foreach (var priv in tizenPrivileges) { if (!package.Privileges.Contains(priv)) { if (throwIfMissing) { throw new PermissionException($"You need to declare the privilege: `{priv}` in your tizen-manifest.xml"); } else { return(false); } } } return(true); }
internal static async Task <PermissionStatus> CheckPrivacyPermission(PermissionType permission, bool askUser) { EnsureDeclared(permission); var tizenPrivileges = permission.ToTizenPrivileges(onlyRuntimePermissions: true); foreach (var priv in tizenPrivileges) { if (PrivacyPrivilegeManager.CheckPermission(priv) == CheckResult.Ask) { if (askUser) { var tcs = new TaskCompletionSource <bool>(); PrivacyPrivilegeManager.ResponseContext context = null; PrivacyPrivilegeManager.GetResponseContext(priv).TryGetTarget(out context); void OnResponseFetched(object sender, RequestResponseEventArgs e) { tcs.TrySetResult(e.result == RequestResult.AllowForever); } context.ResponseFetched += OnResponseFetched; PrivacyPrivilegeManager.RequestPermission(priv); var result = await tcs.Task; context.ResponseFetched -= OnResponseFetched; if (result) { continue; } } return(PermissionStatus.Denied); } else if (PrivacyPrivilegeManager.CheckPermission(priv) == CheckResult.Deny) { return(PermissionStatus.Denied); } } return(PermissionStatus.Granted); }