public Task <List <int> > ShowMultipleChoice(DialogServiceMultiItemsBundle bundle) { var tcs = new TaskCompletionSource <List <int> >(); // Attempt to re-use last dialog to increate performance // If only the title is different, we can still re-use it if (LastBundle.SameValuesAs(bundle) == false && LastBundle.SameItemsAs(bundle) && LastBundle.SameCheckedItemsAs(bundle)) { _lastMultipleChoiceDialog.SetTitle(bundle.Title); UpdateTaskCompletionSource(_lastMultipleChoiceDialog, LastBundle, tcs); } else { var builder = new AlertDialog.Builder(CurrentContext); ConfigureBuilder(builder, bundle, tcs); _lastMultipleChoiceDialog = builder.Create(); } LastBundle = bundle; try { _lastMultipleChoiceDialog.Show(); } catch (Exception ex) { Console.WriteLine("ERROR: " + ex.ToString()); throw ex; } return(tcs.Task); }
public MultiChoiceViewController(DialogServiceMultiItemsBundle bundle, Action <List <int> > onComplete) { if (string.IsNullOrEmpty(bundle.Title) == false) { this.Title = bundle.Title; } _bundle = bundle; _onComplete = onComplete; }
private static DialogServiceMultiItemsBundle Factory(DialogServiceMultiItem[] myItems) { string _title = "title"; DialogServiceMultiItem[] _items = myItems; bool[] _checkedItems = new[] { true, false, false }; string _positiveLabel = "Okk"; var sut = new DialogServiceMultiItemsBundle(_title, _items, _checkedItems, _positiveLabel); return(sut); }
private static DialogServiceMultiItemsBundle Factory() { var myItems = new List <DialogServiceMultiItem>(); myItems.Add(new DialogServiceMultiItem("a", "blabla blabla")); myItems.Add(new DialogServiceMultiItem("b", "blabla blabla")); myItems.Add(new DialogServiceMultiItem("c", "blabla blabla")); myItems.Add(new DialogServiceMultiItem("d", "blabla blabla")); DialogServiceMultiItemsBundle sut = Factory(myItems.ToArray()); return(sut); }
private static List <int> GetIndexOfCheckedItems(DialogServiceMultiItemsBundle bundle) { var checkedItemsIndex = new List <int>(); for (int i = 0; i < bundle.CheckedItems.Length; i++) { var hero = bundle.CheckedItems[i]; if (hero == true) { checkedItemsIndex.Add(i); } } return(checkedItemsIndex); }
private async Task DoShowListCommandAsync(string title) { var stuff = await _fetcher.FetchAsync(new Uri("https://www.google.com")); var bundle = new DialogServiceMultiItemsBundle(title, _allItems, _checkedItems.ToArray()); var result = await _dialog.ShowMultipleChoice(bundle); for (int i = 0; i < _checkedItems.Count; i++) { _checkedItems[i] = false; } foreach (var index in result) { _checkedItems[index] = true; } }
private void ConfigureBuilder(AlertDialog.Builder builder, DialogServiceMultiItemsBundle bundle, TaskCompletionSource <List <int> > tcs) { var checkedItemsIndex = GetIndexOfCheckedItems(bundle); var orgCheckedItemsIndex = new List <int>(checkedItemsIndex); builder.SetTitle(bundle.Title); var titles = bundle.Items.Select(x => x.Title).ToArray(); builder.SetMultiChoiceItems(titles, bundle.CheckedItems, (sender, e) => { if (e.IsChecked) { checkedItemsIndex.Add(e.Which); } else if (checkedItemsIndex.Contains(e.Which)) { checkedItemsIndex.Remove(e.Which); } }); builder.SetPositiveButton(bundle.PositiveLabel, (sender, e) => { if (tcs.TrySetResult(checkedItemsIndex) == false) { Console.WriteLine("Unable to set CHECKED_ITEMS result in builder"); } }); builder.SetNegativeButton(bundle.NegativeLabel, (sender, e) => { if (tcs.TrySetResult(orgCheckedItemsIndex) == false) { Console.WriteLine("Unable to set ORG_CHECKED_ITEMS result in builder"); } }); if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.JellyBeanMr1) { builder.SetOnDismissListener(new MyDismissListener(tcs, orgCheckedItemsIndex)); } }
private void UpdateTaskCompletionSource(AlertDialog dialog, DialogServiceMultiItemsBundle bundle, TaskCompletionSource <List <int> > tcs) { var checkedItemsIndex = GetIndexOfCheckedItems(bundle); var orgCheckedItemsIndex = new List <int>(checkedItemsIndex); dialog.SetButton((int)DialogButtonType.Positive, bundle.PositiveLabel, (sender, e) => { if (tcs.TrySetResult(checkedItemsIndex) == false) { Console.WriteLine("Unable to set CHECKED_ITEMS result in update tcs"); } }); dialog.SetButton((int)DialogButtonType.Negative, bundle.PositiveLabel, (sender, e) => { if (tcs.TrySetResult(orgCheckedItemsIndex) == false) { Console.WriteLine("Unable to set ORG_CHECKED_ITEMS result in update tcs"); } }); dialog.SetOnDismissListener(new MyDismissListener(tcs, orgCheckedItemsIndex)); }
public Task <List <int> > ShowMultipleChoice(DialogServiceMultiItemsBundle bundle) { var tcs = new TaskCompletionSource <List <int> >(); LastBundle = bundle; var navigationController = (Mvx.Resolve <IMvxIosViewPresenter>() as MvxIosViewPresenter).MasterNavigationController; var multiChoiceController = new MultiChoiceViewController(LastBundle, (selectedItems) => { tcs.SetResult(selectedItems); }); multiChoiceController.View.BackgroundColor = UIColor.White; multiChoiceController.ModalTransitionStyle = UIModalTransitionStyle.CoverVertical; multiChoiceController.ModalPresentationStyle = UIModalPresentationStyle.FormSheet; navigationController.VisibleViewController.PresentViewController(multiChoiceController, true, null); return(tcs.Task); }