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); }
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)); }