Exemplo n.º 1
0
        private MLResult RequestPrivilegeAsyncInternal(MLPrivileges.Id privilegeId, CallbackDelegate callback)
        {
            if (callback == null)
            {
                return(MLResult.Create(MLResult.Code.InvalidParam, "MLPrivileges.RequestPrivilegeAsync failed. Reason: Must send a valid callback."));
            }

            if (!this.currentRequests.ContainsKey(privilegeId))
            {
                IntPtr newRequest = IntPtr.Zero;

                MLResult.Code resultCode = NativeBindings.MLPrivilegesRequestPrivilegeAsync(privilegeId, ref newRequest);
                if (resultCode == MLResult.Code.Ok)
                {
                    RequestPrivilegeQuery newQuery = new RequestPrivilegeQuery(callback, newRequest, privilegeId);
                    this.currentRequests.Add(privilegeId, newQuery);
                }

                return(MLResult.Create(resultCode));
            }
            else
            {
                return(MLResult.Create(MLResult.Code.Ok));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Request the specified privileges. This may solicit consent from the end-user.
        /// Note: The asynchronous callback occurs within the main thread.
        /// </summary>
        /// <param name="privilegeId">The privilege to request.</param>
        /// <param name="callback">Callback to be executed when the privilege request has completed.</param>
        /// <returns>
        /// MLResult.Result will be <c>MLResult.Code.Ok</c> if the privilege request is in progress.
        /// MLResult.Result will be <c>MLResult.Code.InvalidParam</c> if the callback is null.
        /// MLResult.Result will be <c>MLResult.Code.UnspecifiedFailure</c> if the privilege system was not started.
        /// Callback MLResult.Result will be <c>MLResult.Code.PrivilegeGranted</c> if the privilege is granted.
        /// Callback MLResult.Result will be <c>MLResult.Code.PrivilegeNotGranted</c> if the privilege is denied.
        /// </returns>
        public static MLResult RequestPrivilegeAsync(MLPrivileges.Id privilegeId, CallbackDelegate callback)
        {
            try
            {
                if (MLPrivileges.IsValidInstance())
                {
                    if (callback == null)
                    {
                        return(MLResult.Create(MLResult.Code.InvalidParam, "MLPrivileges.RequestPrivilegeAsync failed. Reason: Must send a valid callback."));
                    }

                    if (!_instance.currentRequests.ContainsKey(privilegeId))
                    {
                        IntPtr newRequest = IntPtr.Zero;

                        MLResult.Code resultCode = NativeBindings.MLPrivilegesRequestPrivilegeAsync(privilegeId, ref newRequest);
                        if (resultCode == MLResult.Code.Ok)
                        {
                            RequestPrivilegeQuery newQuery = new RequestPrivilegeQuery(callback, newRequest, privilegeId);
                            _instance.currentRequests.Add(privilegeId, newQuery);
                        }

                        return(MLResult.Create(resultCode));
                    }
                    else
                    {
                        return(MLResult.Create(MLResult.Code.Ok));
                    }
                }
                else
                {
                    MLPluginLog.ErrorFormat("MLPrivileges.RequestPrivilegeAsync failed. Reason: No Instance for MLPrivileges.");
                    return(MLResult.Create(MLResult.Code.UnspecifiedFailure, "MLPrivileges.RequestPrivilegeAsync failed. Reason: No Instance for MLPrivileges."));
                }
            }
            catch (System.EntryPointNotFoundException)
            {
                MLPluginLog.Error("MLPrivileges.RequestPrivilegeAsync failed. Reason: API symbols not found");
                return(MLResult.Create(MLResult.Code.UnspecifiedFailure, "MLPrivileges.RequestPrivilegeAsync failed. Reason: API symbols not found."));
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Request the specified privilege asynchronously. This may solicit consent from the end-user.
        /// This async override uses Tasks instead of a callback.
        /// </summary>
        /// <param name="privilegeId">The privilege to request.</param>
        /// <returns>
        /// MLResult.Result will be <c>MLResult.Code.PrivilegeGranted</c> if the privilege is granted.
        /// MLResult.Result will be <c>MLResult.Code.PrivilegeNotGranted</c> if the privilege is denied.
        /// MLResult.Result will be <c>MLResult.Code.UnspecifiedFailure</c> if the privilege system was not started.
        /// </returns>
        private async Task <MLResult> RequestPrivilegeAsyncInternal(MLPrivileges.Id privilegeId)
        {
            var taskCompletionSource = new TaskCompletionSource <MLResult>();

            if (this.currentRequests.ContainsKey(privilegeId))
            {
                return(MLResult.Create(MLResult.Code.Ok));
            }

            IntPtr newRequest = IntPtr.Zero;

            MLResult.Code resultCode = NativeBindings.MLPrivilegesRequestPrivilegeAsync(privilegeId, ref newRequest);
            if (!MLResult.IsOK(resultCode))
            {
                return(MLResult.Create(resultCode));
            }

            RequestPrivilegeQuery newQuery = new RequestPrivilegeQuery((result, id) => taskCompletionSource.SetResult(result), newRequest, privilegeId);

            this.currentRequests.Add(privilegeId, newQuery);
            return(await taskCompletionSource.Task);
        }