protected virtual void Show(IMvxMacView view, MvxViewModelRequest request)
        {
            var viewController = view as NSViewController;
            if (viewController == null)
                throw new MvxException("Passed in IMvxMacView is not a UIViewController");

            this.Show(viewController, request);
        }
 public bool ShowViewModel(MvxViewModelRequest request)
 {
     Action action = () =>
     {
         MvxTrace.TaggedTrace("MacNavigation", "Navigate requested");
         this._presenter.Show(request);
     };
     return this.RequestMainThreadAction(action);
 }
        protected virtual void Show(NSViewController viewController, MvxViewModelRequest request)
        {
            while (this.Window.ContentView.Subviews.Any())
            {
                this.Window.ContentView.Subviews[0].RemoveFromSuperview();
            }

            this.Window.ContentView.AddSubview(viewController.View);

            this.AddLayoutConstraints(viewController, request);
        }
        public virtual IMvxMacView CreateView(MvxViewModelRequest request)
        {
            try
            {
                this.CurrentRequest = request;
                var viewType = this.GetViewType(request.ViewModelType);
                if (viewType == null)
                    throw new MvxException("View Type not found for " + request.ViewModelType);

                var view = Activator.CreateInstance(viewType) as IMvxMacView;
                if (view == null)
                    throw new MvxException("View not loaded for " + viewType);
                view.Request = request;
                return view;
            }
            finally
            {
                this.CurrentRequest = null;
            }
        }
Example #5
0
        protected virtual void ShowPage(Type viewType, MvxBasePresentationAttribute attribute, MvxViewModelRequest request)
        {
            try
            {
                var requestText    = GetRequestText(request);
                var viewsContainer = Mvx.Resolve <IMvxViewsContainer>();

                _rootFrame.Navigate(viewType, requestText); //Frame won't allow serialization of it's nav-state if it gets a non-simple type as a nav param

                HandleBackButtonVisibility();
            }
            catch (Exception exception)
            {
                MvxTrace.Trace("Error seen during navigation request to {0} - error {1}", request.ViewModelType.Name,
                               exception.ToLongString());
            }
        }
Example #6
0
        protected virtual void ShowSplitView(Type viewType, MvxSplitViewPresentationAttribute attribute, MvxViewModelRequest request)
        {
            var viewsContainer = Mvx.Resolve <IMvxViewsContainer>();

            if (_rootFrame.Content is MvxWindowsPage currentPage)
            {
                var splitView = currentPage.Content.FindControl <SplitView>();
                if (splitView == null)
                {
                    throw new MvxException($"Failed to find a SplitView in the visual tree of {viewType.Name}");
                }

                if (attribute.Position == SplitPanePosition.Content)
                {
                    splitView.Content = (UIElement)Activator.CreateInstance(viewType);
                }
                else if (attribute.Position == SplitPanePosition.Pane)
                {
                    splitView.Pane = (UIElement)Activator.CreateInstance(viewType);
                }
            }
        }
Example #7
0
        public override void OnReceive(Context context, Intent intent)
        {
            this.Init(context);

            try
            {
                NotificationManager notificationManager =
                    (NotificationManager)context.GetSystemService(Context.NotificationService);

                var notification = intent.GetParcelableExtra(NOTIFICATION) as Notification;
                var medicationId = intent.GetIntExtra(MEDICATION_ID, 0);

                // notification itself
                if (notification != null)
                {
                    var notificationId = intent.GetIntExtra(NOTIFICATION_ID, 0);

                    var fireTime = intent.GetLongExtra(NOTIFICATION_FIRE_TIME, 0);
                    notificationManager.Notify(notificationId, notification);

                    //var dateFormat = new SimpleDateFormat("dd:MM:yy:HH:mm:ss");
                    //var cal = dateFormat.Format(fireTime);

                    Task.Run(async() =>
                    {
                        var notifications       = await this.storage.List <NotificationOccurrence>(n => n.Id == notificationId);
                        var currentNotification = notifications.FirstOrDefault();
                        var medications         = await this.storage.List <MedicationDosage>(n => n.Id == medicationId);
                        var medicationDosage    = medications.FirstOrDefault();
                        //check if current notification is an overdue notification (if it should be sheduled again)
                        var currentTimeSpan = currentNotification.OccurrenceDateTime.TimeOfDay;
                        DateTime newOccurrenceDateTime;

                        if (medicationDosage.DosageHours.Contains(currentTimeSpan))
                        {
                            if (medicationDosage.Days.AllSelected())
                            {
                                newOccurrenceDateTime = currentNotification.OccurrenceDateTime.AddDays(1);
                            }
                            else
                            {
                                newOccurrenceDateTime = currentNotification.OccurrenceDateTime.AddDays(7);
                            }

                            var occurrence = new NotificationOccurrence()
                            {
                                Name               = currentNotification.Name,
                                Dosage             = currentNotification.Dosage,
                                MedicationDosageId = currentNotification.MedicationDosageId,
                                OccurrenceDateTime = newOccurrenceDateTime,
                                ThumbnailImage     = currentNotification.ThumbnailImage
                            };

                            if (currentNotification != null)
                            {
                                await this.notificationService.CancelNotification(currentNotification);
                                await this.storage.DeleteAsync(currentNotification);
                            }
                            else
                            {
                                System.Diagnostics.Debug.Write($"Notification with id {notificationId} could not be found in database.");
                            }

                            await this.storage.SaveAsync(occurrence);
                            await this.notificationService.ScheduleNotification(occurrence, medicationDosage);
                            Mvx.Resolve <IMvxMessenger>().Publish(new NotificationsChangedMessage(this));
                        }
                        else
                        {
                            if (currentNotification != null)
                            {
                                await this.storage.DeleteAsync(currentNotification);
                            }
                            else
                            {
                                System.Diagnostics.Debug.Write($"Notification with id {notificationId} could not be found in database.");
                            }
                        }

                        // find overdue notifications
                        var nowCalendar = Calendar.Instance;
                        var now         = nowCalendar.TimeInMillis;
                        var overdueNotificationsOccurrences = notifications.Where(n => n.OccurrenceDateMillis < now);
                        foreach (var overdueNotificationOccurrence in overdueNotificationsOccurrences)
                        {
                            var medication = await this.storage.GetAsync <MedicationDosage>(overdueNotificationOccurrence.MedicationDosageId);

                            Intent notificationIntent = new Intent(context, typeof(NotificationPublisher));

                            notificationIntent.PutExtra(NotificationPublisher.MEDICATION_ID, medicationId);

                            var overdueNotification = NotificationHelper.GetNotification(context, medication, overdueNotificationOccurrence, notificationIntent);
                            notificationManager.Notify(overdueNotificationOccurrence.Id.Value, overdueNotification);
                        }
                    });
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine(intent.Action);
                    System.Diagnostics.Debug.WriteLine(medicationId);

                    var notificationId = intent.GetIntExtra(NOTIFICATION_ID, 0);

                    if (intent.Action == "GO_TO_MEDICATION")
                    {
                        // open medication screen

                        var navigation = new MedicationDosageNavigation();
                        navigation.MedicationDosageId = medicationId;

                        var bundle = new MvxBundle();
                        bundle.Write(navigation);
                        var request = new MvxViewModelRequest <MedicationDosageViewModel>(bundle, null, MvxRequestedBy.UserAction);
                        //var request = new MvxViewModelRequest();
                        //request.ParameterValues = new System.Collections.Generic.Dictionary<string, string>();
                        //request.ParameterValues.Add("nav", Mvx.Resolve<IMvxJsonConverter>().SerializeObject(navigation));
                        request.ViewModelType = typeof(MedicationDosageViewModel);
                        var requestTranslator = Mvx.Resolve <IMvxAndroidViewModelRequestTranslator>();
                        var newActivity       = requestTranslator.GetIntentFor(request);
                        newActivity.SetFlags(ActivityFlags.NewTask);
                        context.StartActivity(newActivity);

                        Task.Run(async() =>
                        {
                            var notificationToDismiss = await this.storage.GetAsync <NotificationOccurrence>(notificationId);
                            await this.notificationService.CancelNotification(notificationToDismiss);
                            notificationManager.Cancel(notificationId);
                        });
                    }

                    if (intent.Action == "NOTIFCATION_DISMISS")
                    {
                        // todo remove notification totally or rather reschedule ?
                        // maybe this action should be from settings (user decides in settings what happens if she/he dismisses notification)?
                        var dismissedNotificationId = intent.GetIntExtra(NOTIFICATION_ID, 0);
                        Task.Run(async() =>
                        {
                            var dismissedNotification = await this.storage.GetAsync <NotificationOccurrence>(dismissedNotificationId);
                            await this.notificationService.CancelNotification(dismissedNotification);
                            Mvx.Resolve <IMvxMessenger>().Publish(new NotificationsChangedMessage(this));
                        });
                    }

                    if (intent.Action == "OK")
                    {
                        Task.Run(async() =>
                        {
                            await this.notificationService.CancelAndRemove(notificationId);
                            Mvx.Resolve <IMvxMessenger>().Publish(new NotificationsChangedMessage(this));
                        });

                        notificationManager.Cancel(notificationId);
                    }

                    /*if (intent.Action == "NO")
                     * {
                     *  var fireTime = intent.GetLongExtra(NOTIFICATION_FIRE_TIME, 0);
                     *  var name = intent.GetStringExtra(MEDICATION_NAME);
                     *
                     *  Task.Run(async () =>
                     *  {
                     *      var overdueNotification = new OverdueNotification(medicationId, name, fireTime);
                     *      await this.storage.SaveAsync(overdueNotification);
                     *  });
                     *
                     *  notificationManager.Cancel(notificationId);
                     * }*/

                    if (intent.Action == "LATER")
                    {
                        Task.Run(async() =>
                        {
                            var name     = intent.GetStringExtra(MEDICATION_NAME);
                            var fireTime = intent.GetLongExtra(NOTIFICATION_FIRE_TIME, 0);

                            var settingsDataString = Mvx.Resolve <ISettings>().GetValue <string>(SettingsData.Key);
                            var settingsData       = JsonConvert.DeserializeObject <SettingsData>(settingsDataString);

                            DateTime occurrenceDate = DateTime.Now.AddMinutes(settingsData.SnoozeMinutes);

                            var medications      = await this.storage.List <MedicationDosage>();
                            var medicationDosage = medications.FirstOrDefault(n => n.Id == medicationId);
                            var newNotification  = new NotificationOccurrence(medicationDosage.Name, medicationDosage.Dosage, medicationDosage.Id.Value, occurrenceDate, fireTime + 90000)
                            {
                                ThumbnailImage = medicationDosage.ThumbnailName
                            };

                            await this.storage.SaveAsync <NotificationOccurrence>(newNotification);
                            await this.notificationService.CancelAndRemove(notificationId);
                            Mvx.Resolve <IMvxMessenger>().Publish(new NotificationsChangedMessage(this));
                            await notificationService.OverdueNotification(newNotification, medicationDosage);
                        });

                        notificationManager.Cancel(notificationId);
                    }
                }
            } catch (Exception ex)
            {
                Console.WriteLine($"[PILLER] Error during alarm receive: {ex}");
            }
        }
Example #8
0
 protected override IMvxTouchView CreateViewOfType(Type viewType, MvxViewModelRequest request)
 {
     return((IMvxTouchView)UIStoryboard.FromName("Storyboard", null)
            .InstantiateViewController(viewType.Name));
 }
Example #9
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);
        }
Example #10
0
        public virtual void ShowMasterDetailPage(
            Type view,
            MvxMasterDetailPagePresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            var page = CloseAndCreatePage(view, request, attribute);

            if (attribute.Position == MasterDetailPosition.Root)
            {
                if (page is MasterDetailPage masterDetailRoot)
                {
                    if (masterDetailRoot.Master == null)
                    {
                        masterDetailRoot.Master = new ContentPage()
                        {
                            Title = !string.IsNullOrEmpty(attribute.Title) ? attribute.Title : nameof(MvxMasterDetailPage)
                        }
                    }
                    ;
                    if (masterDetailRoot.Detail == null)
                    {
                        masterDetailRoot.Detail = new ContentPage()
                        {
                            Title = !string.IsNullOrEmpty(attribute.Title) ? attribute.Title : nameof(MvxMasterDetailPage)
                        }
                    }
                    ;

                    PushOrReplacePage(FormsApplication.MainPage, page, attribute);
                }
                else
                {
                    throw new MvxException($"A root page should be of type {nameof(MasterDetailPage)}");
                }
            }
            else
            {
                var masterDetailHost = GetPageOfType <MasterDetailPage>();
                if (masterDetailHost == null)
                {
                    //Assume we have to create the host
                    masterDetailHost = new MasterDetailPage();

                    if (!string.IsNullOrWhiteSpace(attribute.Icon))
                    {
                        masterDetailHost.Icon = attribute.Icon;
                    }

                    masterDetailHost.Master = new ContentPage()
                    {
                        Title = !string.IsNullOrWhiteSpace(attribute.Title) ? attribute.Title : nameof(MvxMasterDetailPage)
                    };
                    masterDetailHost.Detail = new ContentPage();

                    var masterDetailRootAttribute = new MvxMasterDetailPagePresentationAttribute {
                        Position = MasterDetailPosition.Root, WrapInNavigationPage = attribute.WrapInNavigationPage, NoHistory = attribute.NoHistory
                    };

                    PushOrReplacePage(FormsApplication.MainPage, masterDetailHost, masterDetailRootAttribute);
                }

                if (attribute.Position == MasterDetailPosition.Master)
                {
                    PushOrReplacePage(masterDetailHost.Master, page, attribute);
                }
                else
                {
                    PushOrReplacePage(masterDetailHost.Detail, page, attribute);
                }
            }
        }
        public async Task <bool> ShowViewModel(MvxViewModelRequest request)
        {
            await ExecuteOnMainThreadAsync(() => _presenter.Show(request));

            return(true);
        }
Example #12
0
        public virtual void ShowMasterDetailPage(
            Type view,
            MvxMasterDetailPagePresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            CloseAllModals();
            ClosePlatformViews?.Invoke();

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

            if (attribute.Position == MasterDetailPosition.Root)
            {
                if (page is MasterDetailPage masterDetailRoot)
                {
                    if (masterDetailRoot.Master == null)
                    {
                        masterDetailRoot.Master = new MvxContentPage()
                        {
                            Title = !string.IsNullOrEmpty(attribute.Title) ? attribute.Title : nameof(MvxMasterDetailPage)
                        }
                    }
                    ;
                    if (masterDetailRoot.Detail == null)
                    {
                        masterDetailRoot.Detail = new MvxContentPage()
                        {
                            Title = !string.IsNullOrEmpty(attribute.Title) ? attribute.Title : nameof(MvxMasterDetailPage)
                        }
                    }
                    ;

                    PushOrReplacePage(FormsApplication.MainPage, page, attribute);
                }
                else
                {
                    throw new MvxException($"A root page should be of type {nameof(MasterDetailPage)}");
                }
            }
            else
            {
                var masterDetailHost = GetHostPageOfType <MvxMasterDetailPage>();
                if (masterDetailHost == null)
                {
                    //Assume we have to create the host
                    masterDetailHost = new MvxMasterDetailPage();
                    if (attribute.Position == MasterDetailPosition.Master)
                    {
                        masterDetailHost.Master = page;
                    }
                    else
                    {
                        masterDetailHost.Master = new MvxContentPage()
                        {
                            Title = !string.IsNullOrEmpty(attribute.Title) ? attribute.Title : nameof(MvxMasterDetailPage)
                        }
                    };
                    if (attribute.Position == MasterDetailPosition.Detail)
                    {
                        masterDetailHost.Detail = page;
                    }
                    else
                    {
                        masterDetailHost.Detail = new MvxNavigationPage(new MvxContentPage()
                        {
                            Title = !string.IsNullOrEmpty(attribute.Title) ? attribute.Title : nameof(MvxMasterDetailPage)
                        });
                    }

                    PushOrReplacePage(FormsApplication.MainPage, masterDetailHost, attribute);
                }
                else if (attribute.Position == MasterDetailPosition.Master)
                {
                    PushOrReplacePage(masterDetailHost.Master, page, attribute);
                }
                else
                {
                    PushOrReplacePage(masterDetailHost.Detail, page, attribute);
                }
            }
        }
        public bool ShowViewModel(MvxViewModelRequest request)
        {
            ShowViewModelRequests.Add(request);

            return(true);
        }
 public override IMvxIosView CreateViewOfType(Type viewType, MvxViewModelRequest request)
 {
     return((IMvxIosView)UIStoryboard.FromName("Main", null).InstantiateViewController(viewType.Name));
 }
Example #15
0
 public static void OnViewCreate(this IMvxWindowsView storeView, MvxViewModelRequest viewModelRequest, Func <IMvxBundle> bundleLoader)
 {
     storeView.OnViewCreate(() => { return(storeView.LoadViewModel(viewModelRequest, bundleLoader())); });
 }
        public override void Show(MvxViewModelRequest request)
        {
            var view = this.CreateView(request);

            this.Show(view, request);
        }
Example #17
0
 protected virtual string GetFragmentTag(MvxViewModelRequest request, Bundle bundle, Type fragmentType)
 {
     // THAT won't work properly if you have multiple instance of same fragment type in same FragmentHost.
     // Override that in such cases
     return(request.ViewModelType.FullName);
 }
        protected virtual void AddLayoutConstraints(NSViewController viewController, MvxViewModelRequest request)
        {
            var child = viewController.View;
            var container = this.Window.ContentView;

            // See http://blog.xamarin.com/autolayout-with-xamarin.mac/ for more on constraints
            // as well as https://gist.github.com/garuma/3de3bbeb954ad5679e87 (latter may be helpful as tools...)

            child.TranslatesAutoresizingMaskIntoConstraints = false;
            container.AddConstraints(new []
                { NSLayoutAttribute.Left, NSLayoutAttribute.Right, NSLayoutAttribute.Top, NSLayoutAttribute.Bottom }
                .Select(attr => NSLayoutConstraint.Create(child, attr, NSLayoutRelation.Equal, container, attr, 1, 0)).ToArray());
        }
Example #19
0
        protected virtual string GetPageName(MvxViewModelRequest request)
        {
            var viewModelName = request.ViewModelType.Name;

            return(viewModelName.Replace("ViewModel", "Page"));
        }
Example #20
0
        private void showModalDialogViewController(Type viewType, MvxBasePresentationAttribute attribute, MvxViewModelRequest request)
        {
            var viewController = (UIViewController)this.CreateViewControllerFor(request);

            viewController.ModalPresentationStyle = UIModalPresentationStyle.Custom;
            viewController.TransitioningDelegate  = modalTransitionDelegate;

            TopViewController.PresentViewController(viewController, true, null);

            ModalViewControllers.Add(viewController);
        }
Example #21
0
        public override void Show(MvxViewModelRequest request)
        {
            IMvxIosView viewController = Mvx.Resolve <IMvxIosViewCreator>().CreateView(request);

            Show(viewController);
        }
Example #22
0
        private void showTabViewController(Type viewType, MvxBasePresentationAttribute attribute, MvxViewModelRequest request)
        {
            var tabIndex = tabViewModelTypes.IndexOf(request.ViewModelType);

            if (tabIndex < 0)
            {
                return;
            }

            mainTabBarController.SelectedIndex = tabIndex;

            if (mainTabBarController.ViewControllers[tabIndex] is UINavigationController navigationController)
            {
                navigationController.PopToRootViewController(false);
            }
        }
 public static IMvxMacView CreateViewControllerFor(
     this IMvxCanCreateMacView view,
     MvxViewModelRequest request)
 {
     return(Mvx.IoCProvider.Resolve <IMvxMacViewCreator>().CreateView(request));
 }
Example #24
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));
            }
        }
Example #25
0
        protected virtual void ShowWindow(FrameworkElement element, MvxWindowPresentationAttribute attribute, MvxViewModelRequest request)
        {
            Window window;

            if (element is MvxWindow)
            {
                window = (Window)element;
                ((MvxWindow)window).Identifier = attribute.Identifier ?? element.GetType().Name;
            }
            else if (element is Window)
            {
                // Accept normal Window class
                window = (Window)element;
            }
            else
            {
                // Wrap in window
                window = new MvxWindow
                {
                    Identifier = attribute.Identifier ?? element.GetType().Name
                };
            }
            window.Closed += Window_Closed;
            _frameworkElementsDictionary.Add(window, new Stack <FrameworkElement>());

            if (!(element is Window))
            {
                _frameworkElementsDictionary[window].Push(element);
                window.Content = element;
            }

            if (attribute.Modal)
            {
                window.ShowDialog();
            }
            else
            {
                window.Show();
            }
        }
Example #26
0
        private void HandleNotification(NSDictionary data, bool fromBootup)
        {
            try
            {
                var viewDispatcher  = Mvx.Resolve <IMvxViewDispatcher>();
                var appService      = Mvx.Resolve <IApplicationService>();
                var accountsService = Mvx.Resolve <IAccountsService>();
                var repoId          = RepositoryIdentifier.FromFullName(data["r"].ToString());
                var parameters      = new Dictionary <string, string>()
                {
                    { "Username", repoId?.Owner }, { "Repository", repoId?.Name }
                };

                MvxViewModelRequest request;
                if (data.ContainsKey(new NSString("c")))
                {
                    request = MvxViewModelRequest <CodeHub.Core.ViewModels.Changesets.ChangesetViewModel> .GetDefaultRequest();

                    parameters.Add("Node", data["c"].ToString());
                    parameters.Add("ShowRepository", "True");
                }
                else if (data.ContainsKey(new NSString("i")))
                {
                    request = MvxViewModelRequest <CodeHub.Core.ViewModels.Issues.IssueViewModel> .GetDefaultRequest();

                    parameters.Add("Id", data["i"].ToString());
                }
                else if (data.ContainsKey(new NSString("p")))
                {
                    request = MvxViewModelRequest <CodeHub.Core.ViewModels.PullRequests.PullRequestViewModel> .GetDefaultRequest();

                    parameters.Add("Id", data["p"].ToString());
                }
                else
                {
                    request = MvxViewModelRequest <CodeHub.Core.ViewModels.Repositories.RepositoryViewModel> .GetDefaultRequest();
                }

                request.ParameterValues = parameters;

                var username = data["u"].ToString();

                if (appService.Account == null || !appService.Account.Username.Equals(username))
                {
                    var accounts = accountsService.GetAccounts().Result.ToList();

                    var user = accounts.FirstOrDefault(x => x.Username.Equals(username));
                    if (user != null)
                    {
                        appService.DeactivateUser();
                        accountsService.SetActiveAccount(user).Wait();
                    }
                }

                appService.SetUserActivationAction(() => viewDispatcher.ShowViewModel(request));

                if (appService.Account == null && !fromBootup)
                {
                    MessageBus.Current.SendMessage(new LogoutMessage());
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Handle Notifications issue: " + e);
            }
        }
Example #27
0
        protected virtual void ShowContentView(FrameworkElement element, MvxContentPresentationAttribute attribute, MvxViewModelRequest request)
        {
            var contentControl = _frameworkElementsDictionary.Keys.FirstOrDefault(w => (w as MvxWindow)?.Identifier == attribute.WindowIdentifier) ?? _frameworkElementsDictionary.Keys.Last();

            if (!attribute.StackNavigation && _frameworkElementsDictionary[contentControl].Any())
            {
                _frameworkElementsDictionary[contentControl].Pop(); // Close previous view
            }
            _frameworkElementsDictionary[contentControl].Push(element);
            contentControl.Content = element;
        }
Example #28
0
        protected virtual void ShowRegionView(Type viewType, MvxRegionPresentationAttribute attribute, MvxViewModelRequest request)
        {
            if (viewType.HasRegionAttribute())
            {
                var requestText = GetRequestText(request);

                var containerView = _rootFrame.UnderlyingControl.FindControl <Frame>(viewType.GetRegionName());

                if (containerView != null)
                {
                    containerView.Navigate(viewType, requestText);
                    return;
                }
            }
        }
Example #29
0
 public bool ShowViewModel(MvxViewModelRequest request)
 {
     return(RequestMainThreadAction(() => _presenter.Show(request)));
 }
Example #30
0
 public override void Show(MvxViewModelRequest request)
 {
     GetPresentationAttributeAction(request.ViewModelType, out MvxBasePresentationAttribute attribute).ShowAction.Invoke(attribute.ViewType, attribute, request);
 }
Example #31
0
        private static Type GetViewType(MvxViewModelRequest request)
        {
            var viewFinder = Mvx.Resolve <IMvxViewsContainer>();

            return(viewFinder.GetViewType(request.ViewModelType));
        }
Example #32
0
        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);
        }
        public override MvxBasePresentationAttribute GetOverridePresentationAttribute(MvxViewModelRequest request, Type viewType)
        {
            if (viewType?.GetInterface(nameof(IMvxOverridePresentationAttribute)) != null)
            {
                var viewInstance = this.CreateViewControllerFor(viewType, null) as UIViewController;
                using (viewInstance)
                {
                    var presentationAttribute = (viewInstance as IMvxOverridePresentationAttribute)?.PresentationAttribute(request);

                    if (presentationAttribute == null)
                    {
                        MvxLog.Instance.Warn("Override PresentationAttribute null. Falling back to existing attribute.");
                    }
                    else
                    {
                        if (presentationAttribute.ViewType == null)
                        {
                            presentationAttribute.ViewType = viewType;
                        }

                        if (presentationAttribute.ViewModelType == null)
                        {
                            presentationAttribute.ViewModelType = request.ViewModelType;
                        }

                        return(presentationAttribute);
                    }
                }
            }

            return(null);
        }
 private IMvxMacView CreateView(MvxViewModelRequest request)
 {
     return Mvx.Resolve<IMvxMacViewCreator>().CreateView(request);
 }
Example #35
0
 public static IMvxTouchView CreateViewControllerFor(
     this IMvxCanCreateTouchView view,
     MvxViewModelRequest request)
 {
     return(Mvx.Resolve <IMvxTouchViewCreator>().CreateView(request));
 }
Example #36
0
        private void showNestedViewController(Type viewType, MvxBasePresentationAttribute attribute, MvxViewModelRequest request)
        {
            var presentationInfo     = nestedPresentationInfo[viewType];
            var parentViewController = presentationInfo.ViewController;
            var containerView        = presentationInfo.Container;
            var viewController       = (UIViewController)this.CreateViewControllerFor(request);

            parentViewController.AddChildViewController(viewController);
            containerView.AddSubview(viewController.View);

            viewController.View.TopAnchor.ConstraintEqualTo(containerView.TopAnchor).Active       = true;
            viewController.View.BottomAnchor.ConstraintEqualTo(containerView.BottomAnchor).Active = true;
            viewController.View.LeftAnchor.ConstraintEqualTo(containerView.LeftAnchor).Active     = true;
            viewController.View.RightAnchor.ConstraintEqualTo(containerView.RightAnchor).Active   = true;
            viewController.View.TranslatesAutoresizingMaskIntoConstraints = false;

            viewController.DidMoveToParentViewController(parentViewController);
        }
Example #37
0
        private void showModalCardViewController(Type viewType, MvxBasePresentationAttribute attribute, MvxViewModelRequest request)
        {
            var viewController     = (UIViewController)this.CreateViewControllerFor(request);
            var transitionDelegate = new FromBottomTransitionDelegate(
                () => ModalViewControllers.Remove(viewController)
                );

            viewController.ModalPresentationStyle = UIModalPresentationStyle.Custom;
            viewController.TransitioningDelegate  = transitionDelegate;

            TopViewController.PresentViewController(viewController, true, null);

            ModalViewControllers.Add(viewController);
        }
 public override void Show(MvxViewModelRequest request)
 {
     IMvxIosView viewController = Mvx.Resolve<IMvxIosViewCreator>().CreateView(request);
     Show(viewController);
 }
 public override void Show(MvxViewModelRequest request)
 {
 }