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); }
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); }
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)); }