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; }
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); }
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; } }
protected override PageContainer CreatePageContainer(Context context, INativeViewHandler child, bool inFragment) { return(new ShellPageContainer(context, child, inFragment) { LayoutParameters = new LP(LP.MatchParent, LP.MatchParent) }); }
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; }
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; }
internal void Recycle() { if (View != null) { (View as VisualElement).MeasureInvalidated -= ElementMeasureInvalidated; } if (Content?.NativeView != null) { RemoveView(Content.NativeView); } Content = null; _size = null; }
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); }
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)); } }
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); }
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; }
public override void OnDestroyView() { if (Page != null) { if (_viewhandler != null) { if (NativeView.IsAlive()) { NativeView.RemoveFromParent(); } RecyclePage(); } } _onCreateCallback = null; _viewhandler = null; base.OnDestroyView(); }
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); }
public HandlerToRendererShim(INativeViewHandler vh) { ViewHandler = vh; }
protected virtual PageContainer CreatePageContainer(Context context, INativeViewHandler child, bool inFragment) { return(new PageContainer(context, child, inFragment)); }
public DragAndDropDelegate(INativeViewHandler viewHandler) { _viewHandler = viewHandler; }
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]); }