From d5be2f0144ca810fdfbf59808d526c26fe86017e Mon Sep 17 00:00:00 2001 From: "E.Z. Hart" Date: Thu, 16 Jun 2016 09:45:09 -0600 Subject: Prep Page for removal of InternalsVisibleTo (#150) --- .../AppCompat/CarouselPageRenderer.cs | 14 ++++++----- .../AppCompat/FragmentContainer.cs | 14 ++++++----- .../AppCompat/FrameRenderer.cs | 2 +- .../AppCompat/MasterDetailPageRenderer.cs | 16 ++++++++----- .../AppCompat/NavigationPageRenderer.cs | 18 +++++++------- .../AppCompat/Platform.cs | 12 ++++++---- .../AppCompat/TabbedPageRenderer.cs | 28 ++++++++++++---------- 7 files changed, 59 insertions(+), 45 deletions(-) (limited to 'Xamarin.Forms.Platform.Android/AppCompat') diff --git a/Xamarin.Forms.Platform.Android/AppCompat/CarouselPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/CarouselPageRenderer.cs index a42d2863..fb6d5b55 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/CarouselPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/CarouselPageRenderer.cs @@ -24,6 +24,8 @@ namespace Xamarin.Forms.Platform.Android.AppCompat { } + IPageController PageController => Element as IPageController; + void ViewPager.IOnPageChangeListener.OnPageSelected(int position) { Element.CurrentPage = Element.Children[position]; @@ -54,7 +56,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat } if (Element != null) - Element.InternalChildren.CollectionChanged -= OnChildrenCollectionChanged; + PageController.InternalChildren.CollectionChanged -= OnChildrenCollectionChanged; } base.Dispose(disposing); @@ -63,13 +65,13 @@ namespace Xamarin.Forms.Platform.Android.AppCompat protected override void OnAttachedToWindow() { base.OnAttachedToWindow(); - Element.SendAppearing(); + PageController.SendAppearing(); } protected override void OnDetachedFromWindow() { base.OnDetachedFromWindow(); - Element.SendDisappearing(); + PageController.SendDisappearing(); } protected override void OnElementChanged(ElementChangedEventArgs e) @@ -79,7 +81,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat var activity = (FormsAppCompatActivity)Context; if (e.OldElement != null) - e.OldElement.InternalChildren.CollectionChanged -= OnChildrenCollectionChanged; + ((IPageController)e.OldElement).InternalChildren.CollectionChanged -= OnChildrenCollectionChanged; if (e.NewElement != null) { @@ -100,7 +102,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (carouselPage.CurrentPage != null) ScrollToCurrentPage(); - carouselPage.InternalChildren.CollectionChanged += OnChildrenCollectionChanged; + ((IPageController)carouselPage).InternalChildren.CollectionChanged += OnChildrenCollectionChanged; } } @@ -123,7 +125,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (width > 0 && height > 0) { - Element.ContainerArea = new Rectangle(0, 0, context.FromPixels(width), context.FromPixels(height)); + PageController.ContainerArea = new Rectangle(0, 0, context.FromPixels(width), context.FromPixels(height)); pager.Layout(0, 0, width, b); } diff --git a/Xamarin.Forms.Platform.Android/AppCompat/FragmentContainer.cs b/Xamarin.Forms.Platform.Android/AppCompat/FragmentContainer.cs index cc35b1a3..34abfda8 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/FragmentContainer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/FragmentContainer.cs @@ -31,6 +31,8 @@ namespace Xamarin.Forms.Platform.Android.AppCompat public Page Page => (Page)_pageReference?.Target; + IPageController PageController => Page as IPageController; + public override bool UserVisibleHint { get { return base.UserVisibleHint; } @@ -41,9 +43,9 @@ namespace Xamarin.Forms.Platform.Android.AppCompat return; _isVisible = value; if (_isVisible.Value) - Page?.SendAppearing(); + PageController?.SendAppearing(); else - Page?.SendDisappearing(); + PageController?.SendDisappearing(); } } @@ -106,20 +108,20 @@ namespace Xamarin.Forms.Platform.Android.AppCompat return; if (hidden) - Page.SendDisappearing(); + PageController.SendDisappearing(); else - Page.SendAppearing(); + PageController.SendAppearing(); } public override void OnPause() { - Page?.SendDisappearing(); + PageController?.SendDisappearing(); base.OnPause(); } public override void OnResume() { - Page?.SendAppearing(); + PageController?.SendAppearing(); base.OnResume(); } } diff --git a/Xamarin.Forms.Platform.Android/AppCompat/FrameRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/FrameRenderer.cs index c2dd8e69..b57233ba 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/FrameRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/FrameRenderer.cs @@ -182,7 +182,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (Element == null) return; - var children = Element.LogicalChildren; + var children = ((IElementController)Element).LogicalChildren; for (var i = 0; i < children.Count; i++) { var visualElement = children[i] as VisualElement; diff --git a/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs index 0173f485..18153218 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs @@ -51,6 +51,10 @@ namespace Xamarin.Forms.Platform.Android.AppCompat } } + IPageController MasterPageController => Element.Master as IPageController; + IPageController DetailPageController => Element.Detail as IPageController; + IPageController PageController => Element as IPageController; + void IDrawerListener.OnDrawerClosed(global::Android.Views.View drawerView) { } @@ -212,13 +216,13 @@ namespace Xamarin.Forms.Platform.Android.AppCompat protected override void OnAttachedToWindow() { base.OnAttachedToWindow(); - Element.SendAppearing(); + PageController.SendAppearing(); } protected override void OnDetachedFromWindow() { base.OnDetachedFromWindow(); - Element.SendDisappearing(); + PageController.SendDisappearing(); } protected virtual void OnElementChanged(VisualElement oldElement, VisualElement newElement) @@ -279,14 +283,14 @@ namespace Xamarin.Forms.Platform.Android.AppCompat void MasterDetailPageAppearing(object sender, EventArgs e) { - Element.Master?.SendAppearing(); - Element.Detail?.SendAppearing(); + MasterPageController?.SendAppearing(); + DetailPageController?.SendAppearing(); } void MasterDetailPageDisappearing(object sender, EventArgs e) { - Element.Master?.SendDisappearing(); - Element.Detail?.SendDisappearing(); + MasterPageController?.SendDisappearing(); + DetailPageController?.SendDisappearing(); } void OnBackButtonPressed(object sender, BackButtonPressedEventArgs backButtonPressedEventArgs) diff --git a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs index 1132c8fa..277be331 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs @@ -73,6 +73,8 @@ namespace Xamarin.Forms.Platform.Android.AppCompat FragmentManager FragmentManager => _fragmentManager ?? (_fragmentManager = ((FormsAppCompatActivity)Context).SupportFragmentManager); + IPageController PageController => Element as IPageController; + bool ToolbarVisible { get { return _toolbarVisible; } @@ -130,9 +132,9 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (Element != null) { - for (var i = 0; i < Element.InternalChildren.Count; i++) + for (var i = 0; i < PageController.InternalChildren.Count; i++) { - var child = Element.InternalChildren[i] as VisualElement; + var child = PageController.InternalChildren[i] as VisualElement; if (child == null) continue; IVisualElementRenderer renderer = Android.Platform.GetRenderer(child); @@ -146,7 +148,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat navController.PopToRootRequested -= OnPoppedToRoot; navController.InsertPageBeforeRequested -= OnInsertPageBeforeRequested; navController.RemovePageRequested -= OnRemovePageRequested; - Element.SendDisappearing(); + PageController.SendDisappearing(); } if (_toolbarTracker != null) @@ -174,7 +176,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat protected override void OnAttachedToWindow() { base.OnAttachedToWindow(); - Element.SendAppearing(); + PageController.SendAppearing(); _fragmentStack.Last().UserVisibleHint = true; RegisterToolbar(); UpdateToolbar(); @@ -183,7 +185,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat protected override void OnDetachedFromWindow() { base.OnDetachedFromWindow(); - Element.SendDisappearing(); + PageController.SendDisappearing(); } protected override void OnElementChanged(ElementChangedEventArgs e) @@ -272,7 +274,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat int containerHeight = ToolbarVisible ? internalHeight : b - t; containerHeight -= ContainerPadding; - Element.ContainerArea = new Rectangle(0, 0, Context.FromPixels(r - l), Context.FromPixels(containerHeight)); + PageController.ContainerArea = new Rectangle(0, 0, Context.FromPixels(r - l), Context.FromPixels(containerHeight)); // Potential for optimization here, the exact conditions by which you don't need to do this are complex // and the cost of doing when it's not needed is moderate to low since the layout will short circuit pretty fast Element.ForceLayout(); @@ -393,7 +395,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat { UpdateToolbar(); - int index = Element.InternalChildren.IndexOf(before); + int index = PageController.InternalChildren.IndexOf(before); if (index == -1) throw new InvalidOperationException("This should never happen, please file a bug"); @@ -464,7 +466,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (masterDetailPage == null) { - masterDetailPage = Element.InternalChildren[0] as MasterDetailPage; + masterDetailPage = PageController.InternalChildren[0] as MasterDetailPage; if (masterDetailPage == null) return; } diff --git a/Xamarin.Forms.Platform.Android/AppCompat/Platform.cs b/Xamarin.Forms.Platform.Android/AppCompat/Platform.cs index 01e8dcc1..0bad79b1 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/Platform.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/Platform.cs @@ -41,6 +41,8 @@ namespace Xamarin.Forms.Platform.Android.AppCompat Page Page { get; set; } + IPageController CurrentPageController => _navModel.CurrentPage as IPageController; + public void Dispose() { if (_disposed) @@ -79,7 +81,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat Task INavigation.PopModalAsync(bool animated) { Page modal = _navModel.PopModal(); - modal.SendDisappearing(); + ((IPageController)modal).SendDisappearing(); var source = new TaskCompletionSource(); IVisualElementRenderer modalRenderer = Android.Platform.GetRenderer(modal); @@ -95,7 +97,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat modalContainer.RemoveFromParent(); modalContainer.Dispose(); source.TrySetResult(modal); - _navModel.CurrentPage?.SendAppearing(); + CurrentPageController?.SendAppearing(); modalContainer = null; } }); @@ -105,7 +107,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat modalContainer.RemoveFromParent(); modalContainer.Dispose(); source.TrySetResult(modal); - _navModel.CurrentPage?.SendAppearing(); + CurrentPageController?.SendAppearing(); } } @@ -139,7 +141,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat async Task INavigation.PushModalAsync(Page modal, bool animated) { - _navModel.CurrentPage?.SendDisappearing(); + CurrentPageController?.SendDisappearing(); _navModel.PushModal(modal); @@ -151,7 +153,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat // Verify that the modal is still on the stack if (_navModel.CurrentPage == modal) - modal.SendAppearing(); + ((IPageController)modal).SendAppearing(); } void INavigation.RemovePage(Page page) diff --git a/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs index 4bd54906..243e5c14 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs @@ -44,6 +44,8 @@ namespace Xamarin.Forms.Platform.Android.AppCompat } } + IPageController PageController => Element as IPageController; + void IManageFragments.SetFragmentManager(FragmentManager childFragmentManager) { if (_fragmentManager == null) @@ -114,7 +116,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat } if (Element != null) - Element.InternalChildren.CollectionChanged -= OnChildrenCollectionChanged; + PageController.InternalChildren.CollectionChanged -= OnChildrenCollectionChanged; } base.Dispose(disposing); @@ -123,13 +125,13 @@ namespace Xamarin.Forms.Platform.Android.AppCompat protected override void OnAttachedToWindow() { base.OnAttachedToWindow(); - Element.SendAppearing(); + PageController.SendAppearing(); } protected override void OnDetachedFromWindow() { base.OnDetachedFromWindow(); - Element.SendDisappearing(); + PageController.SendDisappearing(); } protected override void OnElementChanged(ElementChangedEventArgs e) @@ -139,7 +141,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat var activity = (FormsAppCompatActivity)Context; if (e.OldElement != null) - e.OldElement.InternalChildren.CollectionChanged -= OnChildrenCollectionChanged; + ((IPageController)e.OldElement).InternalChildren.CollectionChanged -= OnChildrenCollectionChanged; if (e.NewElement != null) { @@ -177,7 +179,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat ScrollToCurrentPage(); UpdateIgnoreContainerAreas(); - tabbedPage.InternalChildren.CollectionChanged += OnChildrenCollectionChanged; + ((IPageController)tabbedPage).InternalChildren.CollectionChanged += OnChildrenCollectionChanged; UpdateBarBackgroundColor(); UpdateBarTextColor(); } @@ -216,11 +218,11 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (width > 0 && height > 0) { - Element.ContainerArea = new Rectangle(0, context.FromPixels(tabsHeight), context.FromPixels(width), context.FromPixels(height - tabsHeight)); + PageController.ContainerArea = new Rectangle(0, context.FromPixels(tabsHeight), context.FromPixels(width), context.FromPixels(height - tabsHeight)); - for (var i = 0; i < Element.InternalChildren.Count; i++) + for (var i = 0; i < PageController.InternalChildren.Count; i++) { - var child = Element.InternalChildren[i] as VisualElement; + var child = PageController.InternalChildren[i] as VisualElement; if (child == null) continue; IVisualElementRenderer renderer = Android.Platform.GetRenderer(child); @@ -267,7 +269,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat void UpdateIgnoreContainerAreas() { - foreach (Page child in Element.Children) + foreach (IPageController child in Element.Children) child.IgnoresContainerArea = child is NavigationPage; } @@ -275,16 +277,16 @@ namespace Xamarin.Forms.Platform.Android.AppCompat { TabLayout tabs = _tabLayout; - if (position >= Element.InternalChildren.Count) + if (position >= PageController.InternalChildren.Count) return; - var leftPage = (Page)Element.InternalChildren[position]; + var leftPage = (Page)PageController.InternalChildren[position]; IVisualElementRenderer leftRenderer = Android.Platform.GetRenderer(leftPage); if (leftRenderer == null) return; - if (offset <= 0 || position >= Element.InternalChildren.Count - 1) + if (offset <= 0 || position >= PageController.InternalChildren.Count - 1) { var leftNavRenderer = leftRenderer as NavigationPageRenderer; if (leftNavRenderer != null) @@ -294,7 +296,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat } else { - var rightPage = (Page)Element.InternalChildren[position + 1]; + var rightPage = (Page)PageController.InternalChildren[position + 1]; IVisualElementRenderer rightRenderer = Android.Platform.GetRenderer(rightPage); var leftHeight = 0; -- cgit v1.2.3