Beispiel #1
0
        public Task <Phone> SelectPhone()
        {
            var tcs = new TaskCompletionSource <Phone>();

            Task.Run(async() =>
            {
                var hasPermission = await PermissionsService.CheckPermission(Permission.Contacts, true, _permissionMessage);
                if (!hasPermission)
                {
                    tcs.TrySetCanceled();
                    return;
                }

                var picker = new CNContactPickerViewController
                {
                    DisplayedPropertyKeys          = new NSString[] { CNContactKey.PhoneNumbers },
                    PredicateForEnablingContact    = NSPredicate.FromFormat("phoneNumbers.@count > 0"),
                    PredicateForSelectionOfContact = NSPredicate.FromFormat("phoneNumbers.@count == 1")
                };

                var pickerDelegate = new ContactPickerDelegate();
                picker.Delegate    = pickerDelegate;

                pickerDelegate.SelectionCanceled       = () => tcs.TrySetCanceled();
                pickerDelegate.ContactPropertySelected = (prop) =>
                {
                    var phone = (prop?.Value as CNPhoneNumber)?.StringValue;
                    tcs.TrySetResult((prop == null) ? null : new Phone {
                        FullValue = phone
                    });
                };
                pickerDelegate.ContactSelected = (contact) =>
                {
                    var phone = contact.PhoneNumbers?.FirstOrDefault()?.Value?.StringValue;
                    tcs.TrySetResult((phone == null) ? null : new Phone {
                        FullValue = phone
                    });
                };

                Mvx.Resolve <IMvxMainThreadDispatcher>().RequestMainThreadAction(() =>
                {
                    GetPresentedViewController().PresentViewController(picker, true, null);
                });
            });

            return(tcs.Task);
        }
Beispiel #2
0
        public Task <Contact> SelectContact()
        {
            var tcs = new TaskCompletionSource <Contact>();

            Task.Run(async() =>
            {
                var hasPermission = await PermissionsService.CheckPermission(Permission.Contacts, true, _permissionMessage);
                if (!hasPermission)
                {
                    tcs.TrySetCanceled();
                    return;
                }

                var picker = new CNContactPickerViewController();

                var pickerDelegate = new ContactPickerDelegate();
                picker.Delegate    = pickerDelegate;

                pickerDelegate.SelectionCanceled       = () => tcs.TrySetCanceled();
                pickerDelegate.ContactPropertySelected = (prop) => pickerDelegate.ContactSelected?.Invoke(prop.Contact);
                pickerDelegate.ContactSelected         = (contact) =>
                {
                    tcs.TrySetResult(new Contact
                    {
                        FirstName  = contact.GivenName,
                        LastName   = contact.FamilyName,
                        MiddleName = contact.MiddleName,
                        Phones     = contact.PhoneNumbers?.Select(x => new Phone {
                            FullValue = x.Value.StringValue
                        }).ToList(),
                        Emails = contact.EmailAddresses?.Select(x => new Email {
                            FullValue = x.Value
                        }).ToList()
                    });
                };

                Mvx.Resolve <IMvxMainThreadDispatcher>().RequestMainThreadAction(() =>
                {
                    GetPresentedViewController().PresentViewController(picker, true, null);
                });
            });

            return(tcs.Task);
        }