예제 #1
0
        public async Task <Contact[]> PickContactsAsync(bool multiple, CancellationToken token)
        {
            PrivilegesHelper.EnsureDeclared(Privileges.AppManagerLaunch);
            if (!await PrivilegesHelper.RequestAsync(Privileges.ContactsRead))
            {
                return(Array.Empty <Contact>());
            }

            var completionSource = new TaskCompletionSource <Contact[]>();

            var appControl = new AppControl
            {
                Operation  = AppControlOperations.Pick,
                LaunchMode = AppControlLaunchMode.Single,
                Mime       = ContactMimeType
            };

            appControl.ExtraData.Add(AppControlData.SectionMode, multiple ? "multiple" : "single");

            AppControl.SendLaunchRequest(appControl, (request, reply, pickResult) =>
            {
                if (token.IsCancellationRequested)
                {
                    completionSource.SetResult(Array.Empty <Contact>());
                }

                var results = new List <Contact>();

                if (pickResult == AppControlReplyResult.Succeeded)
                {
                    var contactsManager = new ContactsManager();

                    var pickedContacts = reply.ExtraData.Get <IEnumerable <string> >(AppControlData.Selected);

                    foreach (var pickedContactId in pickedContacts)
                    {
                        if (int.TryParse(pickedContactId, out var contactId))
                        {
                            var tizenContact = contactsManager.Database.Get(TizenContact.Uri, contactId);
                            if (tizenContact != null)
                            {
                                var contact = ContactFromContactsRecord(tizenContact);
                                results.Add(contact);
                            }
                        }
                    }
                }

                completionSource.TrySetResult(results.ToArray());
            });

            return(await completionSource.Task);
        }
예제 #2
0
        public Task <bool> LaunchUriAsync(Uri uri)
        {
            PrivilegesHelper.EnsureDeclared(Privileges.AppManagerLaunch);

            var appControl = new AppControl
            {
                Operation = AppControlOperations.View,
                Uri       = uri.AbsoluteUri,
            };

            AppControl.SendLaunchRequest(appControl);

            return(Task.FromResult(true));
        }