Exemplo n.º 1
0
        public override ValueTask <MvxBasePresentationAttribute?> CreatePresentationAttribute(Type?viewModelType, Type?viewType)
        {
            if (MasterNavigationController == null &&
                (TabBarViewController == null || !TabBarViewController.CanShowChildView()))
            {
                MvxLog.Instance.Trace($"PresentationAttribute nor MasterNavigationController found for {viewType.Name}. " +
                                      $"Assuming Root presentation");
                var rootAttribute = new MvxRootPresentationAttribute()
                {
                    WrapInNavigationController = true,
                    ViewType      = viewType,
                    ViewModelType = viewModelType
                };
                return(new ValueTask <MvxBasePresentationAttribute?>(rootAttribute));
            }
            MvxLog.Instance.Trace($"PresentationAttribute not found for {viewType?.Name}. " +
                                  $"Assuming animated Child presentation");
            var childAttribute = new MvxChildPresentationAttribute()
            {
                ViewType      = viewType,
                ViewModelType = viewModelType
            };

            return(new ValueTask <MvxBasePresentationAttribute?>(childAttribute));
        }
Exemplo n.º 2
0
        protected virtual async Task <bool> ShowRootViewController(UIViewController viewController,
                                                                   MvxRootPresentationAttribute attribute,
                                                                   MvxViewModelRequest request)
        {
            if (viewController is IMvxTabBarViewController)
            {
                //NOTE clean up must be done first incase we are enbedding into a navigation controller
                //before setting the tab view controller, otherwise this will reset the view stack and your tab
                //controller will be null.
                await SetupWindowRootNavigation(viewController, attribute);

                this.TabBarViewController = (IMvxTabBarViewController)viewController;

                return(await CloseModalViewControllers());
            }

            await SetupWindowRootNavigation(viewController, attribute);

            if (!(await CloseModalViewControllers()))
            {
                return(false);
            }
            if (!(await CloseTabBarViewController()))
            {
                return(false);
            }
            if (!(await CloseSplitViewController()))
            {
                return(false);
            }
            return(true);
        }
Exemplo n.º 3
0
 protected virtual Task <bool> CloseRootViewController(IMvxViewModel viewModel,
                                                       MvxRootPresentationAttribute attribute)
 {
     _logger?.LogWarning("Ignored attempt to close the window root (ViewModel type: {viewModelName}",
                         viewModel.GetType().Name);
     return(Task.FromResult(false));
 }
Exemplo n.º 4
0
 protected void SetupWindowRootNavigation(UIViewController viewController,
                                          MvxRootPresentationAttribute attribute)
 {
     if (attribute.WrapInNavigationController)
     {
         MasterNavigationController = CreateNavigationController(viewController);
         SetWindowRootViewController(MasterNavigationController);
     }
     else
     {
         SetWindowRootViewController(viewController);
         CloseMasterNavigationController();
     }
 }
Exemplo n.º 5
0
 protected ValueTask <bool> SetupWindowRootNavigation(UIViewController viewController,
                                                      MvxRootPresentationAttribute attribute)
 {
     if (attribute.WrapInNavigationController)
     {
         MasterNavigationController = CreateNavigationController(viewController);
         SetWindowRootViewController(MasterNavigationController);
     }
     else
     {
         SetWindowRootViewController(viewController);
         return(CloseMasterNavigationController());
     }
     return(new ValueTask <bool>(true));
 }
Exemplo n.º 6
0
        protected virtual void ShowRootViewController(
            UIViewController viewController,
            MvxRootPresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            // check if viewController is a TabBarController
            if (viewController is IMvxTabBarViewController tabBarController)
            {
                TabBarViewController = tabBarController;
                SetWindowRootViewController(viewController);

                CloseMasterNavigationController();
                CloseModalNavigationController();
                CloseSplitViewController();

                return;
            }

            // check if viewController is a SplitViewController
            if (viewController is IMvxSplitViewController splitController)
            {
                SplitViewController = splitController;
                SetWindowRootViewController(viewController);

                CloseMasterNavigationController();
                CloseModalNavigationController();
                CloseTabBarViewController();

                return;
            }

            // check if viewController is trying to initialize a navigation stack
            if (attribute.WrapInNavigationController)
            {
                viewController             = CreateNavigationController(viewController);
                MasterNavigationController = viewController as MvxNavigationController;
                SetWindowRootViewController(viewController);

                CloseModalNavigationController();
                CloseTabBarViewController();
                CloseSplitViewController();

                return;
            }

            // last scenario: display the plain viewController as root
            SetWindowRootViewController(viewController);
        }
Exemplo n.º 7
0
        protected virtual void ShowRootViewController(
            UIViewController viewController,
            MvxRootPresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            // first set the new RootViewController
            if (attribute.WrapInNavigationController)
            {
                // viewController is initializing a navigation stack

                var navigationController = CreateNavigationController(viewController);
                MasterNavigationController = navigationController as MvxNavigationController;
                SetWindowRootViewController(navigationController);
            }
            else
            {
                // set plain ViewController as root

                SetWindowRootViewController(viewController);

                CloseMasterNavigationController();
            }

            // check if viewController is a TabBarController
            if (viewController is IMvxTabBarViewController tabBarController)
            {
                TabBarViewController = tabBarController;

                CloseSplitViewController();
            }
            // check if viewController is a SplitViewController
            else if (viewController is IMvxSplitViewController splitController)
            {
                SplitViewController = splitController;

                CloseTabBarViewController();
            }
            else
            {
                CloseTabBarViewController();
                CloseSplitViewController();
            }

            // always clean ModalViewControllers when setting a new root
            CleanupModalViewControllers();
        }
        public override async Task <bool> Show(MvxViewModelRequest request)
        {
            // XFViewModel means we need a Forms View
            if (request.ViewModelType.FullName.Contains("XFViewModel"))
            {
                //get the xamarin.forms page from the ViewModel
                var contentPage = MvxPresenterHelpers.CreatePage(request);

                //MvvmCross call to create the view model with DI etc
                var viewModel = MvxPresenterHelpers.LoadViewModel(request);

                //Assign it to the Forms Binding Content
                contentPage.BindingContext = viewModel;

                //Creating the view controller from the content page
                var viewController = contentPage.CreateViewController();
                viewController.Title = contentPage.Title;

                if (this.MasterNavigationController == null)
                {
                    // If it's the first view
                    MvxRootPresentationAttribute attribute = new MvxRootPresentationAttribute()
                    {
                        AnimationDuration = MvxRootPresentationAttribute.DefaultAnimationDuration,
                        AnimationOptions  = MvxRootPresentationAttribute.DefaultAnimationOptions,
                        ViewModelType     = request.ViewModelType
                    };

                    return(await this.ShowRootViewController(viewController, attribute, request));
                }
                else
                {
                    // If it's already in the stack
                    this.MasterNavigationController.PushViewController(viewController, true);
                    return(await Task.FromResult(true));
                }
            }
            else
            {
                //Using a normal MvvmCross View
                return(await base.Show(request));
            }
        }
Exemplo n.º 9
0
        protected virtual void ShowRootViewController(
            UIViewController viewController,
            MvxRootPresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            // check if viewController is a TabBarController
            if (viewController is IMvxTabBarViewController tabBarController)
            {
                TabBarViewController = tabBarController;

                // set root
                SetupWindowRootNavigation(viewController, attribute);

                CleanupModalViewControllers();
                CloseSplitViewController();

                return;
            }

            // check if viewController is a SplitViewController
            if (viewController is IMvxSplitViewController splitController)
            {
                SplitViewController = splitController;

                // set root
                SetupWindowRootNavigation(viewController, attribute);

                CleanupModalViewControllers();
                CloseTabBarViewController();

                return;
            }

            // set root initiating stack navigation or just a plain controller
            SetupWindowRootNavigation(viewController, attribute);

            CleanupModalViewControllers();
            CloseTabBarViewController();
            CloseSplitViewController();
        }
Exemplo n.º 10
0
        protected virtual void ShowRootViewController(UIViewController viewController,
                                                      MvxRootPresentationAttribute attribute,
                                                      MvxViewModelRequest request)
        {
            if (viewController is IMvxTabBarViewController)
            {
                //NOTE clean up must be done first incase we are enbedding into a navigation controller
                //before setting the tab view controller, otherwise this will reset the view stack and your tab
                //controller will be null.
                SetupWindowRootNavigation(viewController, attribute);
                this.TabBarViewController = (IMvxTabBarViewController)viewController;

                CloseModalViewControllers();

                return;
            }

            SetupWindowRootNavigation(viewController, attribute);

            CloseModalViewControllers();
            CloseTabBarViewController();
            CloseSplitViewController();
        }
Exemplo n.º 11
0
        protected virtual async Task <bool> ShowRootViewController(
            UIViewController viewController,
            MvxRootPresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            // check if viewController is a TabBarController
            if (viewController is IMvxTabBarViewController tabBarController)
            {
                TabBarViewController = tabBarController;

                // set root
                SetupWindowRootNavigation(viewController, attribute);

                if (!await CloseModalViewControllers())
                {
                    return(false);
                }
                if (!await CloseSplitViewController())
                {
                    return(false);
                }

                return(true);
            }

            if (viewController is IMvxPageViewController pageViewController)
            {
                PageViewController = pageViewController;

                // set root
                SetupWindowRootNavigation(viewController, attribute);

                if (!await CloseModalViewControllers())
                {
                    return(false);
                }
                if (!await CloseSplitViewController())
                {
                    return(false);
                }

                return(true);
            }

            // check if viewController is a SplitViewController
            if (viewController is IMvxSplitViewController splitController)
            {
                SplitViewController = splitController;

                // set root
                SetupWindowRootNavigation(viewController, attribute);

                if (!await CloseModalViewControllers())
                {
                    return(false);
                }
                if (!await CloseTabBarViewController())
                {
                    return(false);
                }

                return(true);
            }

            // set root initiating stack navigation or just a plain controller
            SetupWindowRootNavigation(viewController, attribute);

            if (!await CloseModalViewControllers())
            {
                return(false);
            }
            if (!await CloseTabBarViewController())
            {
                return(false);
            }
            if (!await CloseSplitViewController())
            {
                return(false);
            }
            return(true);
        }
Exemplo n.º 12
0
        protected override void ShowRootViewController(UIViewController viewController, MvxRootPresentationAttribute attribute, MvxViewModelRequest request)
        {
            // check if viewController is a MvxSidebarPanelController
            if (viewController is MvxSidebarViewController sidebarView)
            {
                MasterNavigationController = new MvxNavigationController();

                SideBarViewController = sidebarView;
                SideBarViewController.SetNavigationController(MasterNavigationController);

                SetWindowRootViewController(viewController);

                Mvx.RegisterSingleton <IMvxSidebarViewController>(SideBarViewController);

                CleanupModalViewControllers();
                CloseTabBarViewController();
                CloseSplitViewController();
                CloseMasterNavigationController();

                return;
            }
            else
            {
                SideBarViewController      = null;
                MasterNavigationController = null;

                base.ShowRootViewController(viewController, attribute, request);
            }
        }
Exemplo n.º 13
0
        protected override async Task <bool> ShowRootViewController(UIViewController viewController, MvxRootPresentationAttribute attribute, MvxViewModelRequest request)
        {
            // check if viewController is a MvxSidebarPanelController
            if (viewController is MvxSidebarViewController sidebarView)
            {
                MasterNavigationController = new MvxNavigationController();

                SideBarViewController = sidebarView;
                SideBarViewController.SetNavigationController(MasterNavigationController);

                SetWindowRootViewController(viewController, attribute);

                Mvx.IoCProvider.RegisterSingleton <IMvxSidebarViewController>(SideBarViewController);

                if (!await CloseModalViewControllers())
                {
                    return(false);
                }
                if (!await CloseTabBarViewController())
                {
                    return(false);
                }
                if (!await CloseSplitViewController())
                {
                    return(false);
                }
                CloseMasterNavigationController();

                return(true);
            }
            else
            {
                SideBarViewController      = null;
                MasterNavigationController = null;

                return(await base.ShowRootViewController(viewController, attribute, request));
            }
        }
        protected override async Task <bool> ShowRootViewController(UIViewController viewController, MvxRootPresentationAttribute attribute, MvxViewModelRequest request)
        {
            _customPresenter.AddSegmentedControlViewController(viewController, request);

            return(await base.ShowRootViewController(viewController, attribute, request));
        }
Exemplo n.º 15
0
        protected override void SetWindowRootViewController(UIViewController controller, MvxRootPresentationAttribute attribute = null)
        {
            if (_window.RootViewController == null)
            {
                // Insert MainView as root controller, subsequent root menu_item controllers will use MainView.ContainerView as root
                base.SetWindowRootViewController(controller, attribute);
                _rootController = controller as MvxViewController;

                // Hack to get around: 'MainView.ContainerView' is inacessible due to its protection level
                // _containerView = (_window.RootViewController as MainView).ContainerView;
                _containerView = _window.RootViewController.View.ViewWithTag(1);
                MenuView       = _window.RootViewController.View.ViewWithTag(2);
            }
            else
            {
                // Move root menu_item controller to ContainerView
                controller.View.Frame = _containerView.Bounds;
                controller.WillMoveToParentViewController(_window.RootViewController);
                _containerView.AddSubview(controller.View);
                _window.RootViewController.AddChildViewController(controller);
                controller.DidMoveToParentViewController(_window.RootViewController);
            }
        }
Exemplo n.º 16
0
 protected override void SetWindowRootViewController(UIViewController controller, MvxRootPresentationAttribute attribute = null)
 {
     UIView.Transition(
         _window,
         Animation.Timings.EnterTiming,
         UIViewAnimationOptions.TransitionCrossDissolve,
         () => _window.RootViewController = controller,
         null
         );
 }
Exemplo n.º 17
0
        protected virtual void SetWindowRootViewController(UIViewController controller, MvxRootPresentationAttribute attribute = null)
        {
            RemoveWindowSubviews();

            if (attribute == null || attribute.AnimationOptions == UIViewAnimationOptions.TransitionNone)
            {
                _window.RootViewController = controller;
                return;
            }

            UIView.Transition(
                _window, attribute.AnimationDuration, attribute.AnimationOptions,
                () => _window.RootViewController = controller, null
                );
        }
Exemplo n.º 18
0
        protected virtual bool CloseRootViewController(IMvxViewModel viewModel, MvxRootPresentationAttribute attribute)
        {
            Mvx.Warning($"Ignored attempt to close the window root (ViewModel type: {viewModel.GetType().Name}");

            return(false);
        }
Exemplo n.º 19
0
        protected virtual Task <bool> CloseRootViewController(IMvxViewModel viewModel, MvxRootPresentationAttribute attribute)
        {
            MvxLog.Instance.Warn($"Ignored attempt to close the window root (ViewModel type: {viewModel.GetType().Name}");

            return(Task.FromResult(false));
        }