public void ScopedMauiContextReturnsParentAnimationManager()
        {
            var parentContext = GetContext() as IScopedMauiContext;
            var context       = new ScopedMauiContext(parentContext) as IScopedMauiContext;

            Assert.Equal(parentContext.AnimationManager, context.AnimationManager);
        }
        public void ScopedMauiContextReturnsChildLayoutInflater()
        {
            var layoutInflater = new TestLayoutInflater(Platform.DefaultContext);
            var context        = new ScopedMauiContext(GetContext(), layoutInflater: layoutInflater);

            Assert.NotEqual(context.GetLayoutInflater(), LayoutInflater.FromContext(Platform.DefaultContext));
            Assert.Equal(context.GetLayoutInflater(), layoutInflater);
        }
        public void ScopedMauiContextReturnsChildFragmentManager()
        {
            var manager = new TestFragmentManager();
            var context = new ScopedMauiContext(GetContext(), fragmentManager: manager);

            Assert.NotEqual(context.GetFragmentManager(), Platform.DefaultContext.GetFragmentManager());
            Assert.Equal(context.GetFragmentManager(), manager);
        }
Пример #4
0
            public override AView OnCreateView(ALayoutInflater inflater, AViewGroup container, Bundle savedInstanceState)
            {
                ScopedMauiContext = _mauiContext.MakeScoped(layoutInflater: inflater, fragmentManager: ChildFragmentManager, registerNewNavigationRoot: true);
                _ = _window.ToHandler(ScopedMauiContext);

                var rootView  = ScopedMauiContext.GetNavigationRootManager().RootView;
                var decorView = RequireActivity().Window.DecorView;

                rootView.LayoutParameters = new LinearLayoutCompat.LayoutParams(decorView.MeasuredWidth, decorView.MeasuredHeight);

                FakeActivityRootView = new FakeActivityRootView(ScopedMauiContext.Context);
                FakeActivityRootView.LayoutParameters = new LinearLayoutCompat.LayoutParams(decorView.MeasuredWidth, decorView.MeasuredHeight);
                FakeActivityRootView.AddView(rootView);

                return(FakeActivityRootView);
            }
Пример #5
0
        internal static IVisualElementRenderer CreateRenderer(
            VisualElement element,
            Context context,
            AndroidX.Fragment.App.FragmentManager fragmentManager = null,
            global::Android.Views.LayoutInflater layoutInflater   = null)
        {
            IVisualElementRenderer renderer = null;

            // temporary hack to fix the following issues
            // https://github.com/xamarin/Microsoft.Maui.Controls.Compatibility/issues/13261
            // https://github.com/xamarin/Microsoft.Maui.Controls.Compatibility/issues/12484
            if (element is RadioButton tv && tv.ResolveControlTemplate() != null)
            {
                renderer = new DefaultRenderer(context);
            }

            // This code is duplicated across all platforms currently
            // So if any changes are made here please make sure to apply them to other platform.cs files
            if (renderer == null)
            {
                IViewHandler handler = null;

                //TODO: Handle this with AppBuilderHost
                try
                {
                    var mauiContext = Forms.MauiContext;

                    if (fragmentManager != null || layoutInflater != null)
                    {
                        mauiContext = new ScopedMauiContext(mauiContext, null, null, layoutInflater, fragmentManager);
                    }

                    handler = mauiContext.Handlers.GetHandler(element.GetType()) as IViewHandler;
                    handler.SetMauiContext(mauiContext);
                }
                catch
                {
                    // TODO define better catch response or define if this is needed?
                }

                if (handler == null)
                {
                    renderer = Registrar.Registered.GetHandlerForObject <IVisualElementRenderer>(element, context)
                               ?? new DefaultRenderer(context);
                }
                // This means the only thing registered is the RendererToHandlerShim
                // Which is only used when you are running a .NET MAUI app
                // This indicates that the user hasn't registered a specific handler for this given type
                else if (handler is RendererToHandlerShim shim)
                {
                    renderer = shim.VisualElementRenderer;

                    if (renderer == null)
                    {
                        renderer = Registrar.Registered.GetHandlerForObject <IVisualElementRenderer>(element, context)
                                   ?? new DefaultRenderer(context);
                    }
                }
                else if (handler is IVisualElementRenderer ver)
                {
                    renderer = ver;
                }
                else if (handler is INativeViewHandler vh)
                {
                    renderer        = new HandlerToRendererShim(vh);
                    element.Handler = handler;
                    SetRenderer(element, renderer);
                }
            }

            renderer.SetElement(element);

            if (fragmentManager != null)
            {
                var managesFragments = renderer as IManageFragments;
                managesFragments?.SetFragmentManager(fragmentManager);
            }

            return(renderer);
        }
        public void ScopedMauiContextReturnsActivityFragmentManager()
        {
            var context = new ScopedMauiContext(GetContext());

            Assert.Equal(context.GetFragmentManager(), Platform.DefaultContext.GetFragmentManager());
        }
        public void ScopedMauiContextReturnsActivityInflator()
        {
            var context = new ScopedMauiContext(GetContext());

            Assert.Equal(context.GetLayoutInflater(), LayoutInflater.From(Platform.DefaultContext));
        }