Пример #1
0
        void Destroy()
        {
            ((IShellController)_shellContext.Shell).RemoveAppearanceObserver(this);

            if (_shellContent != null)
            {
                ((IShellContentController)_shellContent).RecyclePage(_page);
                _page.Handler = null;
            }

            if (_shellPageContainer != null)
            {
                _shellPageContainer.RemoveAllViews();

                if (_root is ViewGroup vg)
                {
                    vg.RemoveView(_shellPageContainer);
                }
            }

            _root?.Dispose();
            _toolbarTracker?.Dispose();
            _appearanceTracker?.Dispose();


            _appearanceTracker = null;
            _toolbarTracker    = null;
            _toolbar           = null;
            _root         = null;
            _viewhandler  = null;
            _shellContent = null;
        }
Пример #2
0
        public override AView OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            _parent = container ?? _parent;

            if (Page != null)
            {
                _pageContainer = Page?.Handler?.NativeView as AView;

                if (_pageContainer == null)
                {
                    var scopedContext =
                        _mauiContext.MakeScoped(inflater, ChildFragmentManager);

                    _pageContainer = Page.ToNative(scopedContext);
                    _viewhandler   = (INativeViewHandler)Page.Handler;
                }
                else
                {
                    _parent = _parent ?? (_pageContainer.Parent as ViewGroup);
                }

                _onCreateCallback?.Invoke(_pageContainer);

                return(_pageContainer);
            }

            return(null);
        }
Пример #3
0
        public GestureManager(IViewHandler handler)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            _handler    = (INativeViewHandler)handler;
            _nativeView = _handler.NativeView;

            if (_nativeView == null)
            {
                throw new ArgumentNullException(nameof(handler.NativeView));
            }

            _collectionChangedHandler = GestureRecognizersOnCollectionChanged;

            // In XF this was called inside ViewDidLoad
            if (_handler.VirtualView is View view)
            {
                OnElementChanged(this, new VisualElementChangedEventArgs(null, view));
            }
            else
            {
                throw new ArgumentNullException(nameof(handler.VirtualView));
            }
        }
        public GestureManager(IViewHandler handler)
        {
            _handler = (INativeViewHandler)handler;
            _collectionChangedHandler = ModelGestureRecognizersOnCollectionChanged;

            if (_handler.VirtualView == null)
            {
                throw new ArgumentNullException(nameof(handler.VirtualView));
            }

            if (_handler.NativeView == null)
            {
                throw new ArgumentNullException(nameof(handler.NativeView));
            }

            Element = (VisualElement)_handler.VirtualView;
            Control = _handler.NativeView;

            if (_handler.ContainerView != null)
            {
                Container = _handler.ContainerView;
            }
            else
            {
                Container = _handler.NativeView;
            }
        }
Пример #5
0
 protected override PageContainer CreatePageContainer(Context context, INativeViewHandler child, bool inFragment)
 {
     return(new ShellPageContainer(context, child, inFragment)
     {
         LayoutParameters = new LP(LP.MatchParent, LP.MatchParent)
     });
 }
Пример #6
0
        internal void RealizeContent(View view, ItemsView itemsView)
        {
            Content = CreateHandler(view, itemsView);
            AddView(Content.NativeView);

            //TODO: RUI IS THIS THE BEST WAY TO CAST?
            (View as VisualElement).MeasureInvalidated += ElementMeasureInvalidated;
        }
Пример #7
0
        void SetRenderer(INativeViewHandler renderer)
        {
            NativeHandler = renderer;
            var nativeView = NativeHandler.NativeView;

            // Clear out any old views if this cell is being reused
            ClearSubviews();

            InitializeContentConstraints(nativeView);

            (renderer.VirtualView as View).MeasureInvalidated += MeasureInvalidated;
        }
Пример #8
0
        internal void Recycle()
        {
            if (View != null)
            {
                (View as VisualElement).MeasureInvalidated -= ElementMeasureInvalidated;
            }

            if (Content?.NativeView != null)
            {
                RemoveView(Content.NativeView);
            }

            Content = null;
            _size   = null;
        }
Пример #9
0
        public override AView OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            if (Page != null)
            {
                Page.ToNative(_mauiContext);
                _viewhandler = (INativeViewHandler)Page.Handler;

                _pageContainer = CreatePageContainer(inflater.Context, _viewhandler, true);

                _onCreateCallback?.Invoke(_pageContainer);

                return(_pageContainer);
            }

            return(null);
        }
Пример #10
0
        public ShellPageContainer(Context context, INativeViewHandler child, bool inFragment = false) : base(context, child, inFragment)
        {
            if (child.VirtualView.Background == null)
            {
                int color;
                if (ShellView.IsDarkTheme)
                {
                    color = DarkBackground ??= ContextCompat.GetColor(context, AColorRes.BackgroundDark);
                }
                else
                {
                    color = LightBackground ??= ContextCompat.GetColor(context, AColorRes.BackgroundLight);
                }

                child.NativeView.SetBackgroundColor(new AColor(color));
            }
        }
Пример #11
0
		protected override void Dispose(bool disposing)
		{
			if (_isDisposed)
				return;

			_isDisposed = true;

			if (disposing)
			{
				if (_modal?.VirtualView is Page modalPage)
				{
					modalPage.PropertyChanged -= OnModalPagePropertyChanged;
				}
				_modal = null;
			}

			base.Dispose(disposing);
		}
Пример #12
0
        internal ModalWrapper(INativeViewHandler modal)
        {
            _modal = modal;

            var elementConfiguration = modal.VirtualView as IElementConfiguration <Page>;

            if (elementConfiguration?.On <PlatformConfiguration.iOS>()?.ModalPresentationStyle() is PlatformConfiguration.iOSSpecific.UIModalPresentationStyle style)
            {
                var result = style.ToNativeModalPresentationStyle();

                if (!NativeVersion.IsAtLeast(13) && result == UIKit.UIModalPresentationStyle.Automatic)
                {
                    result = UIKit.UIModalPresentationStyle.FullScreen;
                }

                if (result == UIKit.UIModalPresentationStyle.FullScreen)
                {
                    Color modalBkgndColor = ((Page)_modal.VirtualView).BackgroundColor;

                    if (modalBkgndColor?.Alpha > 0)
                    {
                        result = UIKit.UIModalPresentationStyle.OverFullScreen;
                    }
                }

                ModalPresentationStyle = result;
            }

            UpdateBackgroundColor();
            View.AddSubview(modal.ViewController.View);
            TransitioningDelegate = modal.ViewController.TransitioningDelegate;
            AddChildViewController(modal.ViewController);

            modal.ViewController.DidMoveToParentViewController(this);

            if (NativeVersion.IsAtLeast(13))
            {
                PresentationController.Delegate = this;
            }

            ((Page)modal.VirtualView).PropertyChanged += OnModalPagePropertyChanged;
        }
Пример #13
0
        public override void OnDestroyView()
        {
            if (Page != null)
            {
                if (_viewhandler != null)
                {
                    if (NativeView.IsAlive())
                    {
                        NativeView.RemoveFromParent();
                    }

                    RecyclePage();
                }
            }

            _onCreateCallback = null;
            _viewhandler      = null;

            base.OnDestroyView();
        }
Пример #14
0
        public override AView OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            if (_shellContent != null)
            {
                _page = ((IShellContentController)_shellContent).GetOrCreateContent();
            }

            _root = inflater.Inflate(Resource.Layout.shellcontent, null).JavaCast <CoordinatorLayout>();

            _toolbar = _root.FindViewById <Toolbar>(Resource.Id.shellcontent_toolbar);
            _page.ToNative(MauiContext);
            _viewhandler = (INativeViewHandler)_page.Handler;

            _shellPageContainer = new ShellPageContainer(Context, _viewhandler);

            if (_root is ViewGroup vg)
            {
                vg.AddView(_shellPageContainer);
            }

            _toolbarTracker      = _shellContext.CreateTrackerForToolbar(_toolbar);
            _toolbarTracker.Page = _page;
            // this is probably not the most ideal way to do that
            _toolbarTracker.CanNavigateBack = _shellContent == null;

            _appearanceTracker = _shellContext.CreateToolbarAppearanceTracker();

            ((IShellController)_shellContext.Shell).AddAppearanceObserver(this, _page);

            if (_shellPageContainer.LayoutParameters is CoordinatorLayout.LayoutParams layoutParams)
            {
                layoutParams.Behavior = new AppBarLayout.ScrollingViewBehavior();
            }

            return(_root);
        }
Пример #15
0
 public HandlerToRendererShim(INativeViewHandler vh)
 {
     ViewHandler = vh;
 }
Пример #16
0
 protected virtual PageContainer CreatePageContainer(Context context, INativeViewHandler child, bool inFragment)
 {
     return(new PageContainer(context, child, inFragment));
 }
Пример #17
0
 public DragAndDropDelegate(INativeViewHandler viewHandler)
 {
     _viewHandler = viewHandler;
 }
Пример #18
0
        public UIDragItem[] HandleDragStarting(View element, INativeViewHandler handler)
        {
            UIDragItem[] returnValue = null;
            SendEventArgs <DragGestureRecognizer>(rec =>
            {
                if (!rec.CanDrag)
                {
                    return;
                }

                var args = rec.SendDragStarting(element);

                if (args.Cancel)
                {
                    return;
                }

                if (!args.Handled)
                {
                    UIImage uIImage             = null;
                    string clipDescription      = String.Empty;
                    NSItemProvider itemProvider = null;

                    if (handler.NativeView is UIImageView iv)
                    {
                        uIImage = iv.Image;
                    }

                    if (handler.NativeView is UIButton b && b.ImageView != null)
                    {
                        uIImage = b.ImageView.Image;
                    }

                    if (uIImage != null)
                    {
                        if (uIImage != null)
                        {
                            itemProvider = new NSItemProvider(uIImage);
                        }
                        else
                        {
                            itemProvider = new NSItemProvider(new NSString(""));
                        }

                        if (args.Data.Image == null && handler.VirtualView is IImageElement imageElement)
                        {
                            args.Data.Image = imageElement.Source;
                        }
                    }
                    else
                    {
                        string text = args.Data.Text ?? clipDescription;

                        if (String.IsNullOrWhiteSpace(text))
                        {
                            itemProvider = new NSItemProvider(handler.NativeView.ConvertToImage());
                        }
                        else
                        {
                            itemProvider = new NSItemProvider(new NSString(text));
                        }
                    }

                    var dragItem         = new UIDragItem(itemProvider);
                    dragItem.LocalObject = new CustomLocalStateData()
                    {
                        Handler     = handler,
                        View        = handler.VirtualView as View,
                        DataPackage = args.Data
                    };

                    returnValue = new UIDragItem[] { dragItem };
                }
            },
                                                  element);

            return(returnValue ?? new UIDragItem[0]);
        }