Beispiel #1
0
        public override void Show(MvxViewModelRequest request)
        {
            if (request.PresentationValues != null)
            {
                var viewCreator = GetViewCreator();

                // More info at:
                // - http://gregshackles.com/presenters-in-mvvmcross-using-presentation-values/
                // - https://gist.github.com/gshackles/5735595
                if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.CLEAR_STACK))
                {
                    var nextViewController = (UIViewController)viewCreator.CreateView(request);

                    if (MasterNavigationController.TopViewController.GetType() != nextViewController.GetType())
                    {
                        MasterNavigationController.PopToRootViewController(false);
                        MasterNavigationController.PushViewController(nextViewController, false);
                    }

                    return;
                }
                else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.MAKE_IT_THE_FIRST_ONE))
                {
                    MasterNavigationController.SetViewControllers(new UIViewController[] { }, false);
                }
                else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.BACK_OR_IN_PLACE))
                {
                    var nextViewController     = (UIViewController)viewCreator.CreateView(request);
                    var existingViewController =
                        MasterNavigationController.ViewControllers.FirstOrDefault(
                            vc => vc.GetType() == nextViewController.GetType() && vc != CurrentTopViewController);

                    if (existingViewController != null)
                    {
                        MasterNavigationController.PopToViewController(existingViewController, true);
                    }
                    else
                    {
                        var transition = new CATransition
                        {
                            Duration = 0.3,
                            Type     = CAAnimation.TransitionPush,
                            Subtype  = CAAnimation.TransitionFade
                        };

                        MasterNavigationController.PopViewController(false);
                        MasterNavigationController.View.Layer.AddAnimation(transition, null);
                        MasterNavigationController.PushViewController(nextViewController, false);
                    }

                    return;
                }
            }

            base.Show(request);
        }
Beispiel #2
0
        protected virtual void ShowModalCardViewController(UIViewController viewController, MvxBasePresentationAttribute attribute, MvxViewModelRequest request)
        {
            viewController.ModalPresentationStyle = UIModalPresentationStyle.Custom;
            viewController.TransitioningDelegate  = FromBottomTransitionDelegate;
            MasterNavigationController.PresentViewController(viewController, true, null);

            ModalViewControllers.Add(viewController);

            FromBottomTransitionDelegate.WireToViewController(viewController, () => ModalViewControllers.Remove(viewController));
        }
Beispiel #3
0
        /// <summary>
        /// Shows the first view.
        /// </summary>
        /// <param name="viewController">The view controller.</param>
        protected override void ShowFirstView(UIViewController viewController)
        {
            base.ShowFirstView(viewController);

            // So lets push our JaSidePanels viewController and then our first viewController in the centre panel to start things off
            // We will let our initial viewmodel load up the panels as required
            MasterNavigationController.NavigationBarHidden = true;
            MasterNavigationController.PushViewController(_multiPanelController, false);
            _multiPanelController.CenterPanel = new UINavigationController(viewController);
        }
Beispiel #4
0
        private void clearStackAndNavigate(MvxViewModelRequest request)
        {
            var nextViewController = (UIViewController)ViewCreator.CreateView(request);

            if (MasterNavigationController.TopViewController.GetType() != nextViewController.GetType())
            {
                MasterNavigationController.PopToRootViewController(false);
                MasterNavigationController.ViewControllers = new UIViewController[] { nextViewController };
            }
        }
 public override void Close(IMvxViewModel toClose)
 {
     if (toClose is CommonProfileViewModel || toClose is RentProfileViewModel || toClose is OwnProfileViewModel)
     {
         MasterNavigationController.PopViewController(true);
     }
     else
     {
         base.Close(toClose);
     }
 }
Beispiel #6
0
        protected override void ShowChildViewController(UIViewController viewController, MvxChildPresentationAttribute attribute, MvxViewModelRequest request)
        {
            if (request.ViewModelType == typeof(LoginViewModel))
            {
                MasterNavigationController.View.Layer.AddAnimation(fadeAnimation, CALayer.Transition);
                MasterNavigationController.PushViewController(viewController, false);
                return;
            }

            base.ShowChildViewController(viewController, attribute, request);
        }
Beispiel #7
0
        public override void Close(IMvxViewModel viewModel)
        {
            if (viewModel is LoginViewModel)
            {
                MasterNavigationController.View.Window.Layer.AddAnimation(fadeAnimation, CALayer.Transition);
                MasterNavigationController.PopViewController(false);
                return;
            }

            base.Close(viewModel);
        }
Beispiel #8
0
 /// <summary>
 /// Show the specified request.
 /// </summary>
 /// <param name="request">Request.</param>
 public override void Show(MvxViewModelRequest request)
 {
     //if Host null then set the rootview
     //Handling viewmodel navigations from LoginViewModel
     if (request.ParameterValues != null && request.ParameterValues.Keys.Contains("pop"))
     {
         MasterNavigationController.PopViewController(true);
         return;
     }
     base.Show(request);
     return;
 }
Beispiel #9
0
 private bool PopViewControllersUntilViewModel(Type viewModelType)
 {
     for (int i = MasterNavigationController.ViewControllers.Length - 1; i >= 0; i--)
     {
         if (MasterNavigationController.ViewControllers[i] is MvxViewController mvc)
         {
             if (mvc.ViewModel.GetType() == viewModelType)
             {
                 MasterNavigationController.PopToViewController(mvc, false);
                 return(true);
             }
         }
     }
     return(false);
 }
Beispiel #10
0
        protected override void ShowChildViewController(UIViewController viewController, MvxChildPresentationAttribute attribute, MvxViewModelRequest request)
        {
            //Fix to show tabchild child view correctly
            if (MasterNavigationController != null)
            {
                MasterNavigationController.PushViewController(viewController, attribute.Animated);

                if (viewController is IMvxTabBarViewController)
                {
                    TabBarViewController = viewController as IMvxTabBarViewController;
                }

                return;
            }

            //throw new MvxException($"Trying to show View type: {viewController.GetType().Name} as child, but there is no current stack!");
        }
Beispiel #11
0
        public virtual void Show(IMvxTouchView view)
        {
            var viewController = view as UIViewController;

            if (viewController == null)
            {
                throw new MvxException("Passed in IMvxTouchView is not a UIViewController");
            }

            if (MasterNavigationController == null)
            {
                ShowFirstView(viewController);
            }
            else
            {
                MasterNavigationController.PushViewController(viewController, true /*animated*/);
            }
        }
Beispiel #12
0
        public override void Show(Cirrious.MvvmCross.Touch.Views.IMvxTouchView view)
        {
            if (MasterNavigationController == null)
            {
                base.Show(view);
                return;
            }

            if (MasterNavigationController.ViewControllers.Length <= 1)
            {
                base.Show(view);
                return;
            }

            MasterNavigationController.PopViewController(false);
            MasterNavigationController.PushViewController(
                view as UIViewController,
                true);
        }
Beispiel #13
0
        public override void Show(MvxViewModelRequest request)
        {
            if (request.PresentationValues != null)
            {
                if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ClearStack))
                {
                    foreach (var vc in MasterNavigationController.ViewControllers)
                    {
                        vc.DismissViewController(true, null);
                    }

                    var nextViewController = this.CreateViewControllerFor(request) as UIViewController;

                    if (MasterNavigationController.TopViewController.GetType() != nextViewController.GetType())
                    {
                        MasterNavigationController.PopToRootViewController(false);
                        MasterNavigationController.PushViewController(nextViewController, false);
                    }

                    return;
                }

                if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.NoAnimation))
                {
                    var nextViewController = this.CreateViewControllerFor(request) as UIViewController;
                    MasterNavigationController.PushViewController(nextViewController, false);


                    return;
                }

                if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.TransitionLeftToRight))
                {
                    var nextViewController = this.CreateViewControllerFor(request) as UIViewController;
                    MasterNavigationController.PushControllerWithTransition(nextViewController, UIViewAnimationOptions.TransitionCurlDown);


                    return;
                }
            }
            base.Show(request);
        }
Beispiel #14
0
        public override void Show(MvvmCross.Core.ViewModels.MvxViewModelRequest request)
        {
            if (request.PresentationValues != null)
            {
                #region ClearStack
                if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ClearStack))
                {
                    //MasterNavigationController.PopToRootViewController(false);
                    var nextViewController = (UIViewController)ViewCreator.CreateView(request);
                    MasterNavigationController.PushViewController(nextViewController, true);
                    return;
                }
                #endregion

                #region ShowBack
                if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ShowBack))
                {
                    var  nextViewController    = (UIViewController)ViewCreator.CreateView(request);
                    var  currentViewController = MasterNavigationController.TopViewController;
                    bool animated = false;

                    while (!animated && currentViewController != null && currentViewController.GetType() != nextViewController.GetType())
                    {
                        if (MasterNavigationController.ViewControllers.Length > 1)
                        {
                            var backViewController = MasterNavigationController.ViewControllers[MasterNavigationController.ViewControllers.Length - 2];
                            if (backViewController.GetType() == nextViewController.GetType())
                            {
                                animated = true;
                            }
                        }
                        else
                        {
                            break;
                        }

                        MasterNavigationController.PopViewController(animated);

                        if (animated)
                        {
                            MemoryUtils.DelayReleaseObject(2000, currentViewController);
                        }
                        else
                        {
                            MemoryUtils.ReleaseObject(currentViewController);
                        }

                        currentViewController = MasterNavigationController.TopViewController;
                    }

                    if (MasterNavigationController.ViewControllers.Length <= 1)
                    {
                        MasterNavigationController.PushViewController(nextViewController, true);
                    }

                    return;
                }
                #endregion

                #region CloseCurrentAndShow
                if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.CloseCurrentAndShow))
                {
                    // let make a async task to remove current from history to not make UI flash
                    System.Threading.Tasks.Task.Run(async() =>
                    {
                        await System.Threading.Tasks.Task.Delay(1000);

                        if (closeViewController == null)
                        {
                            return;
                        }
                        MasterNavigationController.InvokeOnMainThread(async() =>
                        {
                            //wait for until top view controller is showed
                            while (closeViewController != MasterNavigationController.TopViewController)
                            {
                                await System.Threading.Tasks.Task.Delay(100);
                            }

                            int countVc = MasterNavigationController.ViewControllers.Length;

                            if (countVc > 1)
                            {
                                UIViewController releaseViewController = MasterNavigationController.ViewControllers[countVc - 2];
                                UIViewController[] newHistory          = new UIViewController[countVc - 1];
                                for (int i = 0; i < countVc - 2; i++)
                                {
                                    newHistory[i] = MasterNavigationController.ViewControllers[i];
                                }
                                newHistory[countVc - 2] = MasterNavigationController.ViewControllers[countVc - 1];
                                MasterNavigationController.ViewControllers = newHistory;

                                MemoryUtils.ReleaseObject(releaseViewController);
                            }

                            closeViewController = null;
                        });
                    });
                }
                #endregion
            }
            base.Show(request);
        }
Beispiel #15
0
 public virtual ValueTask <bool> CloseModalViewController()
 {
     MasterNavigationController?.PopViewController(true);
     return(new ValueTask <bool>(true));
 }
Beispiel #16
0
 public virtual Task <bool> CloseModalViewController()
 {
     MasterNavigationController.PopViewController(true);
     return(Task.FromResult(true));
 }
Beispiel #17
0
 public virtual void CloseModalViewController()
 {
     MasterNavigationController.PopViewController(true);
 }
        public override void Close(IMvxViewModel toClose)
        {
            //We make an array of this to make a snapshot before modifying presentation hosts.
            var presentationHostsToDrop = (from host in presentationHosts
                                           where ((IMvxTouchView)host).ViewModel == toClose
                                           select host).ToArray();

            foreach (var host in presentationHostsToDrop)
            {
                presentationHosts.Remove(host);
            }
            var viewsPresentedByHosts         = removalAgentsByView.Keys;
            var relevantViewsPresentedByHosts = (from view in viewsPresentedByHosts
                                                 where view.ViewModel == toClose
                                                 select view).ToArray();

            if (relevantViewsPresentedByHosts.Count() > 0)
            {
                foreach (var view in relevantViewsPresentedByHosts)
                {
                    var removalAgent = removalAgentsByView [view];
                    removalAgent();
                    removalAgentsByView.Remove(view);
                }
            }
            else if (MasterNavigationController != null)
            {
                var           topView = MasterNavigationController.TopViewController as IMvxView;
                IMvxViewModel topViewModel;

                if (topView != null)
                {
                    topViewModel = topView.ReflectionGetViewModel();
                }
                else
                {
//					#if DEBUG
//					MvxTrace.Warning ("Don't know how to close this ViewModel; topmost is not a touchview");
//					#endif
                    return;
                }

                if (topViewModel == toClose)
                {
                    if (MasterNavigationController.ViewControllers.Length > 1)
                    {
                        MasterNavigationController.PopViewController(true);
                    }
                    else
                    {
                        MasterNavigationController.WillMoveToParentViewController(null);
                        MasterNavigationController.RemoveFromParentViewController();
                        MasterNavigationController.View.RemoveFromSuperview();
                        MasterNavigationController = null;
                    }
                }
                else
                {
//					#if DEBUG
//					MvxTrace.Warning ("Don't know how to close this ViewModel; topmost view does not present this viewmodel");
//					#endif
                    return;
                }
            }
            else
            {
//					#if DEBUG
//					MvxTrace.Warning("Don't know how to close this ViewModel; there are no views governed by the RichTouchPresenter or its MasterNavigationController");
//					#endif
            }
        }
        public override void Show(MvxViewModelRequest request)
        {
            if (request.PresentationValues != null)
            {
                if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ParkingReserved))
                {
                    var vc = MasterNavigationController.TopViewController;
                    while (!(vc is ParkingReservedView))
                    {
                        ReleaseTimerIfNeeded(vc);

                        MasterNavigationController.PopViewController(false);
                        //vc.Dispose();
                        vc = MasterNavigationController.TopViewController;
                    }
                    return;
                }
                else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.Menu))
                {
                    var vc = MasterNavigationController.TopViewController;
                    while (!(vc is MenuView))
                    {
                        Console.WriteLine(vc);
                        ReleaseTimerIfNeeded(vc);

                        if (vc is ParkingSearchView)
                        {
                            MasterNavigationController.PopViewController(true);
                            return;
                        }
                        else
                        {
                            MasterNavigationController.PopViewController(false);
                        }

                        //vc.Dispose();
                        vc = MasterNavigationController.TopViewController;
                    }
                    return;
                }
                else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.Search))
                {
                    var vc = MasterNavigationController.TopViewController;
                    while (!(vc is ParkingSearchView))
                    {
                        ReleaseTimerIfNeeded(vc);

                        MasterNavigationController.PopViewController(false);
                        //vc.Dispose();
                        vc = MasterNavigationController.TopViewController;
                    }
                    return;
                }
                else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ParkingList))
                {
                    var vc = MasterNavigationController.TopViewController;
                    while (!(vc is ParkingListsView) && !(vc is MyReservationsView))
                    {
                        ReleaseTimerIfNeeded(vc);

                        MasterNavigationController.PopViewController(false);
                        //vc.Dispose();
                        vc = MasterNavigationController.TopViewController;
                    }

                    return;
                }
                else if (request.PresentationValues.ContainsKey(PresentationBundleFlagKeys.ClearStack))
                {
                    MasterNavigationController.PopToRootViewController(false);
                }
            }

            //prevent reshowing the current view controller (e.g 10 minutes before leaving )
            if (MasterNavigationController != null && MasterNavigationController.TopViewController != null)
            {
                var topvc = MasterNavigationController.TopViewController;
                if (topvc != null && topvc is MvxViewController && request.ViewModelType == (topvc as MvxViewController).ViewModel.GetType())
                {
                    return;
                }
            }

            base.Show(request);
        }