コード例 #1
0
        /// <summary>
        /// Returns true if all required privileges are granted, false otherwise.
        /// </summary>
        /// <returns>Task with check result.</returns>
        public async Task <bool> CheckPrivileges()
        {
            CheckResult result = PrivacyPrivilegeManager.CheckPermission(HEALTHINFO_PRIVILEGE);

            switch (result)
            {
            case CheckResult.Allow:
                return(true);

            case CheckResult.Deny:
                return(false);

            case CheckResult.Ask:
                PrivacyPrivilegeManager.ResponseContext context = null;
                PrivacyPrivilegeManager.GetResponseContext(HEALTHINFO_PRIVILEGE)
                .TryGetTarget(out context);

                if (context == null)
                {
                    Log.Error("STT", "Unable to get privilege response context");
                    return(false);
                }

                _checkPrivilegesTask = new TaskCompletionSource <bool>();

                context.ResponseFetched += PrivilegeManagerOnResponseFetched;

                PrivacyPrivilegeManager.RequestPermission(HEALTHINFO_PRIVILEGE);
                return(await _checkPrivilegesTask.Task);

            default:
                return(false);
            }
        }
コード例 #2
0
 private static void SetupPPMHandler(string privilege)
 {
     PrivacyPrivilegeManager.ResponseContext context = null;
     if (PrivacyPrivilegeManager.GetResponseContext(privilege).TryGetTarget(out context))
     {
         context.ResponseFetched += PPMResponseHandler;
     }
 }
コード例 #3
0
 private void SetupPrivilegeHandler()
 {
     PrivacyPrivilegeManager.ResponseContext context = null;
     if (PrivacyPrivilegeManager.GetResponseContext(hrmPrivilege).TryGetTarget(out context))
     {
         context.ResponseFetched += PrivilegeResponseHandler;
     }
 }
コード例 #4
0
        /// <summary>
        /// Request user permission for privacy privileges
        /// </summary>
        /// <param name="service">privacy privilege</param>
        /// <returns>true if user consent is gained</returns>
        public async Task <bool> GetPermission(string service)
        {
            try
            {
                GrantedPermission = -1;
                // Gets the status of a privacy privilege permission.
                CheckResult result = PrivacyPrivilegeManager.CheckPermission(service);
                switch (result)
                {
                case CheckResult.Allow:
                    // user consent for privacy privilege is already gained
                    Console.WriteLine("\n\n\nuser consent for privacy privilege is already gained\n\n");
                    return(true);

                case CheckResult.Deny:
                case CheckResult.Ask:
                    // User permission request should be required
                    tcs = new TaskCompletionSource <bool>();
                    // Gets the response context for a given privilege.
                    var reponseContext = PrivacyPrivilegeManager.GetResponseContext(service);
                    PrivacyPrivilegeManager.ResponseContext context = null;
                    if (reponseContext.TryGetTarget(out context))
                    {
                        if (context != null)
                        {
                            context.ResponseFetched += Context_ResponseFetched;
                        }
                    }
                    // Try to get the permission for service from a user.
                    PrivacyPrivilegeManager.RequestPermission(service);

                    // Check if permission is granted or not every second
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        Device.StartTimer(new TimeSpan(0, 0, 0, 1, 0), CheckPermission);
                    });

                    return(await tcs.Task);

                default:
                    return(false);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("[UserPermission] (" + service + ") Error :" + e.Message + ", " + e.StackTrace + ", " + e.InnerException);
                return(false);
            }
        }
コード例 #5
0
ファイル: Platform.cs プロジェクト: sreenivasarajiv/shiny
        static async Task <AccessState> RequestPermission(string priv)
        {
            var result  = AccessState.Unknown;
            var tcs     = new TaskCompletionSource <AccessState>();
            var handler = new EventHandler <RequestResponseEventArgs>((sender, args) =>
            {
                switch (args.result)
                {
                case RequestResult.AllowForever:
                    tcs.TrySetResult(AccessState.Available);
                    break;

                default:
                    tcs.TrySetResult(AccessState.Denied);
                    break;
                }
            });

            PrivacyPrivilegeManager.ResponseContext context = null;

            try
            {
                PrivacyPrivilegeManager.GetResponseContext(priv).TryGetTarget(out context);

                if (context == null)
                {
                    tcs.SetResult(AccessState.NotSupported);
                }
                else
                {
                    context.ResponseFetched += handler;
                    PrivacyPrivilegeManager.RequestPermission(priv);
                }
                result = await tcs.Task.ConfigureAwait(false);
            }
            finally
            {
                if (context != null)
                {
                    context.ResponseFetched -= handler;
                }
            }
            return(result);
        }
コード例 #6
0
        private void initDataSourcesWithPrivileges()
        {
            PrivacyPrivilegeManager.ResponseContext context = null;
            if (PrivacyPrivilegeManager.GetResponseContext(Tools.HEALTHINFO_PRIVILEGE).TryGetTarget(out context))
            {
                context.ResponseFetched += (s, e) =>
                {
                    if (e.result != RequestResult.AllowForever)
                    {
                        Toast.DisplayText("Please provide the necessary privileges for the application to run!");
                        Environment.Exit(1);
                    }
                    else
                    {
                        initCampaignDataSources();
                    }
                }
            }
            ;
            else
            {
                Toast.DisplayText("Please provide the necessary privileges for the application to run!");
                Environment.Exit(1);
            }

            switch (PrivacyPrivilegeManager.CheckPermission(Tools.HEALTHINFO_PRIVILEGE))
            {
            case CheckResult.Allow:
                initCampaignDataSources();
                break;

            case CheckResult.Deny:
                Toast.DisplayText("Please provide the necessary privileges for the application to run!");
                Environment.Exit(1);
                break;

            case CheckResult.Ask:
                PrivacyPrivilegeManager.RequestPermission(Tools.HEALTHINFO_PRIVILEGE);
                break;

            default:
                break;
            }
        }
コード例 #7
0
        /// <summary>
        /// Request user permission for privacy privileges
        /// </summary>
        /// <param name="service">privacy privilege</param>
        /// <returns>true if user consent is gained</returns>
        public async Task <bool> GetPermission(string service)
        {
            try
            {
                // Gets the status of a privacy privilege permission.
                CheckResult result = PrivacyPrivilegeManager.CheckPermission(service);
                switch (result)
                {
                case CheckResult.Allow:
                    // user consent for privacy privilege is already gained
                    return(true);

                case CheckResult.Deny:
                case CheckResult.Ask:
                    // User permission request should be required
                    tcs = new TaskCompletionSource <bool>();
                    // Gets the response context for a given privilege.
                    var reponseContext = PrivacyPrivilegeManager.GetResponseContext(service);
                    PrivacyPrivilegeManager.ResponseContext context = null;
                    if (reponseContext.TryGetTarget(out context))
                    {
                        if (context != null)
                        {
                            context.ResponseFetched += Context_ResponseFetched;
                        }
                    }
                    // Try to get the permission for service from a user.
                    PrivacyPrivilegeManager.RequestPermission(service);

                    return(await tcs.Task);

                default:
                    return(false);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("[UserPermission] (" + service + ") Error :" + e.Message);
                return(false);
            }
        }
コード例 #8
0
ファイル: Permissions.tizen.cs プロジェクト: ycfft/Essentials
        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);
        }
コード例 #9
0
        /// <summary>
        /// Asks the user to grant the permission at runtime
        /// </summary>
        /// <param name="privilege">The privilege name to check for</param>
        /// <returns>A status that indicates whether the permission has been granted or not</returns>
        public static async Task <PrivacyPermissionStatus> RequestAsync(string privilege)
        {
            switch (PrivacyPrivilegeManager.CheckPermission(privilege))
            {
            case CheckResult.Allow:
                return(PrivacyPermissionStatus.Granted);

            case CheckResult.Deny:
            case CheckResult.Ask:
                var tcs      = new TaskCompletionSource <PrivacyPermissionStatus>();
                var response = PrivacyPrivilegeManager.GetResponseContext(privilege);
                PrivacyPrivilegeManager.ResponseContext context = null;

                if (response.TryGetTarget(out context))
                {
                    context.ResponseFetched += (s, e) =>
                    {
                        PrivacyPermissionStatus result = PrivacyPermissionStatus.Denied;

                        if (e.result == RequestResult.AllowForever)
                        {
                            result = PrivacyPermissionStatus.Granted;
                        }

                        tcs.SetResult(result);
                    };
                }

                PrivacyPrivilegeManager.RequestPermission(privilege);

                return(await tcs.Task);

            default:
                return(PrivacyPermissionStatus.Denied);
            }
        }