Ejemplo n.º 1
0
        public virtual void ShowModal(
            Type view,
            MvxModalPresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            ClosePlatformViews?.Invoke();

            var page = CreatePage(view, request, attribute);

            if (FormsApplication.MainPage == null)
            {
                FormsApplication.MainPage = new MvxNavigationPage(new MvxContentPage()
                {
                    Title = nameof(MvxContentPage)
                });
            }

            if (FormsApplication.MainPage is MvxNavigationPage navigationPage)
            {
                if (attribute.WrapInNavigationPage && navigationPage?.Navigation?.ModalStack?.LastOrDefault() is MvxNavigationPage modalNavigationPage)
                {
                    PushOrReplacePage(modalNavigationPage, page, attribute);
                }
                else if (attribute.WrapInNavigationPage)
                {
                    navigationPage.Navigation.PushModalAsync(new MvxNavigationPage(page), attribute.Animated);
                }
                else
                {
                    navigationPage.Navigation.PushModalAsync(page, attribute.Animated);
                }
            }
            else
            {
                if (attribute.WrapInNavigationPage && FormsApplication.MainPage?.Navigation?.ModalStack?.LastOrDefault() is MvxNavigationPage modalNavigationPage)
                {
                    PushOrReplacePage(modalNavigationPage, page, attribute);
                }
                else if (attribute.WrapInNavigationPage && FormsApplication.MainPage?.Navigation != null)
                {
                    FormsApplication?.MainPage?.Navigation?.PushModalAsync(new MvxNavigationPage(page), attribute.Animated);
                }
                else
                {
                    FormsApplication?.MainPage?.Navigation?.PushModalAsync(page, attribute.Animated);
                }
            }
        }
Ejemplo n.º 2
0
        public virtual void ShowModal(
            Type view,
            MvxModalPresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            var page = CreatePage(view, request, attribute);

            if (FormsApplication.MainPage is MvxNavigationPage navigationPage)
            {
                if (attribute.WrapInNavigationPage && navigationPage?.Navigation?.ModalStack?.LastOrDefault() is MvxNavigationPage modalNavigationPage)
                {
                    if (attribute.NoHistory)
                    {
                        modalNavigationPage.PopToRootAsync(attribute.Animated);
                    }
                    modalNavigationPage.PushAsync(page, attribute.Animated);
                }
                else if (attribute.WrapInNavigationPage)
                {
                    navigationPage.Navigation.PushModalAsync(new MvxNavigationPage(page), attribute.Animated);
                }
                else
                {
                    navigationPage.Navigation.PushModalAsync(page, attribute.Animated);
                }
            }
            else
            {
                if (attribute.WrapInNavigationPage && FormsApplication.MainPage?.Navigation?.ModalStack?.LastOrDefault() is MvxNavigationPage modalNavigationPage)
                {
                    modalNavigationPage.PushAsync(page, attribute.Animated);
                }
                else if (attribute.WrapInNavigationPage && FormsApplication.MainPage?.Navigation != null)
                {
                    FormsApplication.MainPage.Navigation.PushModalAsync(new MvxNavigationPage(page), attribute.Animated);
                }
                else
                {
                    if (FormsApplication.MainPage?.Navigation == null)
                    {
                        FormsApplication.MainPage = new MvxNavigationPage(new MvxPage());
                    }
                    FormsApplication.MainPage.Navigation.PushModalAsync(page, attribute.Animated);
                }
            }
        }
        private Task <bool> ShowAlertView(
            Type viewType,
            MvxAlertPresentationAttribute attribute,
            MvxViewModelRequest request
            )
        {
            var viewController = this.CreateViewControllerFor(request);

            if (!(viewController is IMvxAlertViewController alertViewController))
            {
                return(Task.FromResult(false));
            }

            var alertController = alertViewController.Wrap(attribute, this);

            var modalPresentationAttribute = new MvxModalPresentationAttribute
            {
                WrapInNavigationController = false
            };

            return(ShowModalViewController(alertController, modalPresentationAttribute, request));
        }
Ejemplo n.º 4
0
        public virtual async Task <bool> ShowModal(
            Type view,
            MvxModalPresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            var page = await CloseAndCreatePage(view, request, attribute, closeModal : false);

            if (FormsApplication.MainPage == null)
            {
                FormsApplication.MainPage = CreateNavigationPage(CreateContentPage().Build(cp => cp.Title = nameof(ContentPage)));
            }

            if (attribute.WrapInNavigationPage)
            {
                if (GetModalPageOfType <NavigationPage>() is NavigationPage modalNavigation)
                {
                    // There's already a navigation page, so use existing logic
                    // to work out whether the nav stack should be cleared (eg No History)
                    await PushOrReplacePage(modalNavigation, page, attribute);
                }
                else
                {
                    // Either last isn't a nav page, or there is no last page
                    // So, wrap the current page in a nav page and push onto stack
                    var navigationPage = CreateNavigationPage(page);
                    navigationPage.SetModalPagePresentationStyle(attribute.PresentationStyle);

                    await FormsApplication.MainPage.Navigation.PushModalAsync(navigationPage);
                }
            }
            else
            {
                page.SetModalPagePresentationStyle(attribute.PresentationStyle);

                // No navigation page required, so just push onto modal stack
                await FormsApplication.MainPage.Navigation.PushModalAsync(page, attribute.Animated);
            }
            return(true);
        }
Ejemplo n.º 5
0
        public virtual void ShowModal(
            Type view,
            MvxModalPresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            var page = CloseAndCreatePage(view, request, attribute, closeModal: false);

            if (FormsApplication.MainPage == null)
            {
                FormsApplication.MainPage = new MvxNavigationPage(new MvxContentPage()
                {
                    Title = nameof(ContentPage)
                });
            }

            var last = FormsApplication.MainPage.Navigation.ModalStack.LastOrDefault();

            if (attribute.WrapInNavigationPage)
            {
                if (last is NavigationPage navPage)
                {
                    // There's already a navigation page, so use existing logic
                    // to work out whether the nav stack should be cleared (eg No History)
                    PushOrReplacePage(navPage, page, attribute);
                }
                else
                {
                    // Either last isn't a nav page, or there is no last page
                    // So, wrap the current page in a nav page and push onto stack
                    FormsApplication.MainPage.Navigation.PushModalAsync(new MvxNavigationPage(page));
                }
            }
            else
            {
                // No navigation page required, so just push onto modal stack
                FormsApplication.MainPage.Navigation.PushModalAsync(page, attribute.Animated);
            }
        }
Ejemplo n.º 6
0
        public virtual void ShowModal(
            Type view,
            MvxModalPresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            var page = CreatePage(view, request);

            if (FormsApplication.MainPage is MvxNavigationPage navigationPage)
            {
                if (attribute.WrapInNavigationPage && navigationPage.Navigation.ModalStack.LastOrDefault() is MvxNavigationPage modalNavigationPage)
                {
                    modalNavigationPage.PushAsync(page);
                }
                else if (attribute.WrapInNavigationPage)
                {
                    navigationPage.Navigation.PushModalAsync(new MvxNavigationPage(page));
                }
                else
                {
                    navigationPage.Navigation.PushModalAsync(page);
                }
            }
            else
            {
                if (attribute.WrapInNavigationPage && FormsApplication.MainPage.Navigation.ModalStack.LastOrDefault() is MvxNavigationPage modalNavigationPage)
                {
                    modalNavigationPage.PushAsync(page);
                }
                else if (attribute.WrapInNavigationPage)
                {
                    FormsApplication.MainPage.Navigation.PushModalAsync(new MvxNavigationPage(page));
                }
                else
                {
                    FormsApplication.MainPage.Navigation.PushModalAsync(page);
                }
            }
        }
Ejemplo n.º 7
0
        protected virtual bool CloseModalViewController(IMvxViewModel toClose, MvxModalPresentationAttribute attribute)
        {
            if (ModalViewControllers == null || !ModalViewControllers.Any())
            {
                return(false);
            }

            // check for plain modals
            var modalToClose = ModalViewControllers.FirstOrDefault(v => v is IMvxIosView && v.GetIMvxIosView().ViewModel == toClose);

            if (modalToClose != null)
            {
                CloseModalViewController(modalToClose, attribute);
                return(true);
            }

            // check for modal navigation stacks
            UIViewController controllerToClose = null;

            foreach (var vc in ModalViewControllers.Where(v => v is UINavigationController))
            {
                var root = ((UINavigationController)vc).ViewControllers.FirstOrDefault();
                if (root != null && root.GetIMvxIosView().ViewModel == toClose)
                {
                    controllerToClose = vc;
                    break;
                }
            }
            if (controllerToClose != null)
            {
                CloseModalViewController(controllerToClose, attribute);
                return(true);
            }

            return(false);
        }
Ejemplo n.º 8
0
 protected virtual bool CloseModalViewController(IMvxViewModel viewModel, MvxModalPresentationAttribute attribute)
 {
     return(CloseModalViewController(viewModel));
 }
Ejemplo n.º 9
0
        public virtual async Task <bool> CloseModalViewController(UIViewController viewController, MvxModalPresentationAttribute attribute)
        {
            if (viewController == null)
            {
                return(true);
            }

            if (viewController is UINavigationController modalNavController)
            {
                foreach (var item in modalNavController.ViewControllers)
                {
                    item.DidMoveToParentViewController(null);
                }
            }

            await viewController.DismissViewControllerAsync(attribute.Animated);

            ModalViewControllers.Remove(viewController);
            return(true);
        }
Ejemplo n.º 10
0
        public virtual void CloseModalViewController(UIViewController viewController, MvxModalPresentationAttribute attribute)
        {
            if (viewController == null)
            {
                return;
            }

            if (viewController is UINavigationController modalNavController)
            {
                foreach (var item in modalNavController.ViewControllers)
                {
                    item.DidMoveToParentViewController(null);
                }
            }

            viewController.DismissViewController(attribute.Animated, null);
            ModalViewControllers.Remove(viewController);
        }
Ejemplo n.º 11
0
 public MvxModalPresentationControllerDelegate(IMvxIosViewPresenter presenter, UIViewController viewController, MvxModalPresentationAttribute attribute)
 {
     _presenter      = presenter;
     _viewController = viewController;
     _attribute      = attribute;
 }