Example #1
0
        void FireEventPermissionCompletionHandler(ClusterEventAuthorizationType eventType)
        {
            EKAuthorizationStatus status = EKEventStore.GetAuthorizationStatus(EKEquivalentEventType(eventType));

            if (_eventPermissionCompletionHandler != null)
            {
                ClusterDialogResult userDialogResult   = ClusterDialogResult.Granted;
                ClusterDialogResult systemDialogResult = ClusterDialogResult.Granted;
                if (status == EKAuthorizationStatus.NotDetermined)
                {
                    userDialogResult   = ClusterDialogResult.Denied;
                    systemDialogResult = ClusterDialogResult.NoActionTaken;
                }
                else if (status == EKAuthorizationStatus.Authorized)
                {
                    userDialogResult   = ClusterDialogResult.Granted;
                    systemDialogResult = ClusterDialogResult.Granted;
                }
                else if (status == EKAuthorizationStatus.Denied)
                {
                    userDialogResult   = ClusterDialogResult.Granted;
                    systemDialogResult = ClusterDialogResult.Denied;
                }
                else if (status == EKAuthorizationStatus.Restricted)
                {
                    userDialogResult   = ClusterDialogResult.Granted;
                    systemDialogResult = ClusterDialogResult.ParentallyRestricted;
                }
                _eventPermissionCompletionHandler((status == EKAuthorizationStatus.Authorized),
                                                  userDialogResult,
                                                  systemDialogResult);
                _eventPermissionCompletionHandler = null;
            }
        }
Example #2
0
    public static void RequestEventStorePermission(EKEntityType entityType, bool assert_granted = false)
    {
        TestRuntime.AssertMacSystemVersion(10, 9, throwIfOtherPlatform: false);

        var status = EKEventStore.GetAuthorizationStatus(entityType);

        Console.WriteLine("EKEventStore.GetAuthorizationStatus ({1}): {0}", status, entityType);
        switch (status)
        {
        case EKAuthorizationStatus.Authorized:
        case EKAuthorizationStatus.Restricted:
            return;

        case EKAuthorizationStatus.NotDetermined:
            // There's an instance method on EKEventStore to request permission,
            // but creating the instance can end up blocking the app showing a permission dialog...
            // (on Mavericks at least)
            if (TestRuntime.CheckMacSystemVersion(10, 10))
            {
                return;                 // Crossing fingers that this won't hang.
            }
            NUnit.Framework.Assert.Ignore("This test requires permission to access events, but there's no API to request access without potentially showing dialogs.");
            break;

        case EKAuthorizationStatus.Denied:
            if (assert_granted)
            {
                NUnit.Framework.Assert.Ignore("This test requires permission to access events.");
            }
            break;
        }
    }
Example #3
0
            internal static PermissionStatus CheckPermissionStatus(EKEntityType entityType)
            {
                var status = EKEventStore.GetAuthorizationStatus(entityType);

                return(status switch
                {
                    EKAuthorizationStatus.Authorized => PermissionStatus.Granted,
                    EKAuthorizationStatus.Denied => PermissionStatus.Denied,
                    EKAuthorizationStatus.Restricted => PermissionStatus.Restricted,
                    _ => PermissionStatus.Unknown,
                });
Example #4
0
        private async Task RequestCalendarAccess()
        {
            if (EKEventStore.GetAuthorizationStatus(EKEntityType.Event) != EKAuthorizationStatus.Authorized)
            {
                var accessResult = await _eventStore.RequestAccessAsync(EKEntityType.Event).ConfigureAwait(false);

                bool    hasAccess = accessResult.Item1;
                NSError error     = accessResult.Item2;

                if (!hasAccess)
                {
                    // This is the same exception WinPhone would throw
                    throw new UnauthorizedAccessException("Calendar access denied", error != null ? new NSErrorException(error) : null);
                }
            }
        }
Example #5
0
        PermissionStatus GetEventPermissionStatus(EKEntityType eventType)
        {
            var status = EKEventStore.GetAuthorizationStatus(eventType);

            switch (status)
            {
            case EKAuthorizationStatus.Authorized:
                return(PermissionStatus.Granted);

            case EKAuthorizationStatus.Denied:
                return(PermissionStatus.Denied);

            case EKAuthorizationStatus.Restricted:
                return(PermissionStatus.Restricted);

            default:
                return(PermissionStatus.Unknown);
            }
        }
Example #6
0
        public ClusterAuthorizationStatus EventPermissionAuthorizationStatus(ClusterEventAuthorizationType eventType)
        {
            var status = EKEventStore.GetAuthorizationStatus(ClusterPrePermissions.SharedPermissions.EKEquivalentEventType(eventType));

            switch (status)
            {
            case EKAuthorizationStatus.Authorized:
                return(ClusterAuthorizationStatus.Authorized);

            case EKAuthorizationStatus.Denied:
                return(ClusterAuthorizationStatus.Denied);

            case EKAuthorizationStatus.Restricted:
                return(ClusterAuthorizationStatus.Restricted);

            default:
                return(ClusterAuthorizationStatus.UnDetermined);
            }
        }
Example #7
0
        public void ShowEventPermissionsWithType(ClusterEventAuthorizationType eventType, string requestTitle, string message, string denyButtonTitle, string grantButtonTitle, ClusterPrePermissionCompletionHandler completionHandler)
        {
            if (requestTitle.Length == 0)
            {
                switch (eventType)
                {
                case ClusterEventAuthorizationType.Event:
                    requestTitle = @"Access Calendar?";
                    break;

                default:
                    requestTitle = @"Access Reminders?";
                    break;
                }
            }
            denyButtonTitle  = GetTitleForType(ClusterTitleType.Deny, denyButtonTitle);
            grantButtonTitle = GetTitleForType(ClusterTitleType.Request, grantButtonTitle);

            var status = EKEventStore.GetAuthorizationStatus(EKEquivalentEventType(eventType));

            if (status == EKAuthorizationStatus.NotDetermined)
            {
                _eventPermissionCompletionHandler = completionHandler;
                _preEventPermissionAlertView      = new UIAlertView(requestTitle, message, new AlertViewDelegate(this), denyButtonTitle, grantButtonTitle);
                _preEventPermissionAlertView.Tag  = (nint)(int)eventType;
                _preEventPermissionAlertView.Show();
            }
            else
            {
                if (completionHandler != null)
                {
                    completionHandler((status == EKAuthorizationStatus.Authorized),
                                      ClusterDialogResult.NoActionTaken,
                                      ClusterDialogResult.NoActionTaken);
                }
            }
        }
Example #8
0
        public void CheckEventStoreAccess(EKEntityType type)
        {
            EKAuthorizationStatus status = EKEventStore.GetAuthorizationStatus(type);
            DataClass             dc     = type == EKEntityType.Event ? DataClass.Calendars : DataClass.Reminders;

            switch (status)
            {
            case EKAuthorizationStatus.NotDetermined:
                ShowAlert(dc, "not determined");
                break;

            case EKAuthorizationStatus.Restricted:
                ShowAlert(dc, "restricted");
                break;

            case EKAuthorizationStatus.Denied:
                ShowAlert(dc, "denied");
                break;

            case EKAuthorizationStatus.Authorized:
                ShowAlert(dc, "granted");
                break;
            }
        }
Example #9
0
 string CheckEventStoreAccess(EKEntityType type)
 {
     return(EKEventStore.GetAuthorizationStatus(type).ToString());
 }
Example #10
0
 protected override string CheckAccess()
 {
     return(EKEventStore.GetAuthorizationStatus(type).ToString());
 }
Example #11
0
        public async void AddEventToCalender(object sender, EventArgs e)
        {
            try
            {
                var store = new EKEventStore();
                if (EKEventStore.GetAuthorizationStatus(EKEntityType.Reminder) == EKAuthorizationStatus.Authorized)
                {
                    if (EKEventStore.GetAuthorizationStatus(EKEntityType.Event) == EKAuthorizationStatus.Authorized)
                    {
                        NSDate           startDate = ConvertDateTimeToNSDate(BaseFunctions.GetDateTimeFull(App.reminderEvent.eventStartDate + " " + App.reminderEvent.eventStartTime));
                        NSDate           endDate   = ConvertDateTimeToNSDate(BaseFunctions.GetDateTimeFull(App.reminderEvent.eventEndDate + " " + App.reminderEvent.eventEndTime));
                        NSPredicate      query     = store.PredicateForEvents(startDate, endDate, null);
                        EKCalendarItem[] events    = store.EventsMatching(query);
                        bool             exists    = false;
                        for (int i = 0; i < events.Length; i++)
                        {
                            if (events[i].Title == App.reminderEvent.eventName)
                            {
                                exists = true;
                            }
                        }
                        if (!exists)
                        {
                            EKEvent eEvent = EKEvent.FromStore(store);
                            eEvent.AddAlarm(EKAlarm.FromDate(ConvertDateTimeToNSDate(BaseFunctions.GetDateTimeFull(App.reminderEvent.eventStartDate + " " + App.reminderEvent.eventStartTime))));
                            eEvent.StartDate = startDate;
                            eEvent.EndDate   = endDate;
                            eEvent.Title     = App.reminderEvent.eventName;
                            eEvent.TimeZone  = new NSTimeZone("UTC");
                            eEvent.Location  = App.reminderEvent.eventAddress;
                            eEvent.Notes     = App.reminderEvent.eventDescription;
                            eEvent.Calendar  = store.DefaultCalendarForNewEvents;
                            NSError eventError;
                            store.SaveEvent(eEvent, EKSpan.ThisEvent, out eventError);

                            EKReminder reminder = EKReminder.Create(store);
                            reminder.Title = App.reminderEvent.eventName;
                            reminder.AddAlarm(EKAlarm.FromDate(ConvertDateTimeToNSDate(BaseFunctions.GetDateTimeFull(App.reminderEvent.eventStartDate + " " + App.reminderEvent.eventStartTime))));
                            reminder.TimeZone = new NSTimeZone("UTC");
                            reminder.Calendar = store.DefaultCalendarForNewEvents;
                            await App.Current.MainPage.DisplayAlert("Alert", "This event is added to your calender", "Ok");
                        }
                        else
                        {
                            await App.Current.MainPage.DisplayAlert("Alert", "This event is already added to your calender", "Ok");
                        }
                    }
                    else
                    {
                        store.RequestAccess(EKEntityType.Event, StoreAcceptRequest);
                    }
                }
                else
                {
                    store.RequestAccess(EKEntityType.Reminder, StoreAcceptRequest);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
        }
 public string CheckAccess()
 {
     return(EKEventStore.GetAuthorizationStatus(type).ToString());
 }