示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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;
            }
        }
示例#7
0
        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));
            }
        }
示例#8
0
        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));
        }
示例#9
0
        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);
        }