summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2016-06-16 09:45:09 -0600
committerRui Marinho <me@ruimarinho.net>2016-06-16 16:45:09 +0100
commitd5be2f0144ca810fdfbf59808d526c26fe86017e (patch)
tree3ad7e4465307cd6d633184e05d85eb3a4df59e01 /Xamarin.Forms.Platform.Android
parent04f7bd296ee67af9189ecd7fdfbd2808ca16ce9a (diff)
downloadxamarin-forms-d5be2f0144ca810fdfbf59808d526c26fe86017e.tar.gz
xamarin-forms-d5be2f0144ca810fdfbf59808d526c26fe86017e.tar.bz2
xamarin-forms-d5be2f0144ca810fdfbf59808d526c26fe86017e.zip
Prep Page for removal of InternalsVisibleTo (#150)
Diffstat (limited to 'Xamarin.Forms.Platform.Android')
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/CarouselPageRenderer.cs14
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/FragmentContainer.cs14
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/FrameRenderer.cs2
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs16
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs18
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/Platform.cs12
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs28
-rw-r--r--Xamarin.Forms.Platform.Android/Platform.cs14
-rw-r--r--Xamarin.Forms.Platform.Android/RendererPool.cs4
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/CarouselPageAdapter.cs6
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/CarouselPageRenderer.cs8
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/ImageRenderer.cs5
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/MasterDetailRenderer.cs22
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/NavigationRenderer.cs23
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/PageRenderer.cs8
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs12
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs6
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs10
-rw-r--r--Xamarin.Forms.Platform.Android/VisualElementPackager.cs15
-rw-r--r--Xamarin.Forms.Platform.Android/VisualElementRenderer.cs2
20 files changed, 135 insertions, 104 deletions
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<CarouselPage> 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<NavigationPage> 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<Page> INavigation.PopModalAsync(bool animated)
{
Page modal = _navModel.PopModal();
- modal.SendDisappearing();
+ ((IPageController)modal).SendDisappearing();
var source = new TaskCompletionSource<Page>();
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<TabbedPage> 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;
diff --git a/Xamarin.Forms.Platform.Android/Platform.cs b/Xamarin.Forms.Platform.Android/Platform.cs
index a37929fd..65c3b8cf 100644
--- a/Xamarin.Forms.Platform.Android/Platform.cs
+++ b/Xamarin.Forms.Platform.Android/Platform.cs
@@ -71,6 +71,8 @@ namespace Xamarin.Forms.Platform.Android
#endregion
+ IPageController CurrentPageController => _navModel.CurrentPage as IPageController;
+
ActionBar ActionBar
{
get { return ((Activity)_context).ActionBar; }
@@ -195,7 +197,7 @@ namespace Xamarin.Forms.Platform.Android
{
Page modal = _navModel.PopModal();
- modal.SendDisappearing();
+ ((IPageController)modal).SendDisappearing();
var source = new TaskCompletionSource<Page>();
IVisualElementRenderer modalRenderer = GetRenderer(modal);
@@ -210,7 +212,7 @@ namespace Xamarin.Forms.Platform.Android
modalRenderer.ViewGroup.RemoveFromParent();
modalRenderer.Dispose();
source.TrySetResult(modal);
- _navModel.CurrentPage?.SendAppearing();
+ CurrentPageController?.SendAppearing();
}
});
}
@@ -219,7 +221,7 @@ namespace Xamarin.Forms.Platform.Android
modalRenderer.ViewGroup.RemoveFromParent();
modalRenderer.Dispose();
source.TrySetResult(modal);
- _navModel.CurrentPage?.SendAppearing();
+ CurrentPageController?.SendAppearing();
}
}
@@ -256,7 +258,7 @@ namespace Xamarin.Forms.Platform.Android
async Task INavigation.PushModalAsync(Page modal, bool animated)
{
- _navModel.CurrentPage?.SendDisappearing();
+ CurrentPageController?.SendDisappearing();
_navModel.PushModal(modal);
@@ -266,7 +268,7 @@ namespace Xamarin.Forms.Platform.Android
// Verify that the modal is still on the stack
if (_navModel.CurrentPage == modal)
- modal.SendAppearing();
+ ((IPageController)modal).SendAppearing();
_toolbarTracker.Target = _navModel.Roots.Last();
@@ -563,7 +565,7 @@ namespace Xamarin.Forms.Platform.Android
result.AddRange(AncestorPagesOfPage(((MasterDetailPage)root).Detail));
else
{
- foreach (Page page in root.InternalChildren.OfType<Page>())
+ foreach (Page page in ((IPageController)root).InternalChildren.OfType<Page>())
result.AddRange(AncestorPagesOfPage(page));
}
diff --git a/Xamarin.Forms.Platform.Android/RendererPool.cs b/Xamarin.Forms.Platform.Android/RendererPool.cs
index 95a28778..447de3fd 100644
--- a/Xamarin.Forms.Platform.Android/RendererPool.cs
+++ b/Xamarin.Forms.Platform.Android/RendererPool.cs
@@ -25,7 +25,7 @@ namespace Xamarin.Forms.Platform.Android
public void ClearChildrenRenderers()
{
- if (_parent.Element.LogicalChildren.Count == 0)
+ if (((IElementController)_parent.Element).LogicalChildren.Count == 0)
return;
ClearChildrenRenderers(_oldElement);
}
@@ -51,7 +51,7 @@ namespace Xamarin.Forms.Platform.Android
if (view == null)
return;
- foreach (Element logicalChild in view.LogicalChildren)
+ foreach (Element logicalChild in ((IElementController)view).LogicalChildren)
{
var child = logicalChild as VisualElement;
if (child != null)
diff --git a/Xamarin.Forms.Platform.Android/Renderers/CarouselPageAdapter.cs b/Xamarin.Forms.Platform.Android/Renderers/CarouselPageAdapter.cs
index 345501d5..b7e98bae 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/CarouselPageAdapter.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/CarouselPageAdapter.cs
@@ -15,6 +15,8 @@ namespace Xamarin.Forms.Platform.Android
bool _ignoreAndroidSelection;
CarouselPage _page;
+ IElementController ElementController => _page as IElementController;
+
public CarouselPageAdapter(ViewPager pager, CarouselPage page, Context context)
{
_pager = pager;
@@ -43,7 +45,7 @@ namespace Xamarin.Forms.Platform.Android
return;
int currentItem = _pager.CurrentItem;
- _page.CurrentPage = currentItem >= 0 && currentItem < _page.LogicalChildren.Count ? _page.LogicalChildren[currentItem] as ContentPage : null;
+ _page.CurrentPage = currentItem >= 0 && currentItem < ElementController.LogicalChildren.Count ? ElementController.LogicalChildren[currentItem] as ContentPage : null;
}
public override void DestroyItem(ViewGroup p0, int p1, Object p2)
@@ -117,7 +119,7 @@ namespace Xamarin.Forms.Platform.Android
{
if (disposing && _page != null)
{
- foreach (Element element in _page.LogicalChildren)
+ foreach (Element element in ElementController.LogicalChildren)
{
var childPage = element as VisualElement;
diff --git a/Xamarin.Forms.Platform.Android/Renderers/CarouselPageRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/CarouselPageRenderer.cs
index 859e78d2..3774da03 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/CarouselPageRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/CarouselPageRenderer.cs
@@ -13,6 +13,8 @@ namespace Xamarin.Forms.Platform.Android
AutoPackage = false;
}
+ IPageController PageController => Element as IPageController;
+
protected override void Dispose(bool disposing)
{
if (disposing && _viewPager != null)
@@ -34,13 +36,13 @@ namespace Xamarin.Forms.Platform.Android
adapter.UpdateCurrentItem();
- Element.SendAppearing();
+ PageController.SendAppearing();
}
protected override void OnDetachedFromWindow()
{
base.OnDetachedFromWindow();
- Element.SendDisappearing();
+ PageController.SendDisappearing();
}
protected override void OnElementChanged(ElementChangedEventArgs<CarouselPage> e)
@@ -91,7 +93,7 @@ namespace Xamarin.Forms.Platform.Android
void UpdateCurrentItem()
{
int index = CarouselPage.GetIndex(Element.CurrentPage);
- if (index < 0 || index >= Element.LogicalChildren.Count)
+ if (index < 0 || index >= ((IElementController)Element).LogicalChildren.Count)
return;
_viewPager.CurrentItem = index;
diff --git a/Xamarin.Forms.Platform.Android/Renderers/ImageRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/ImageRenderer.cs
index fb51f158..1f8a7763 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/ImageRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/ImageRenderer.cs
@@ -11,6 +11,8 @@ namespace Xamarin.Forms.Platform.Android
{
bool _isDisposed;
+ IElementController ElementController => Element as IElementController;
+
public ImageRenderer()
{
AutoPackage = false;
@@ -98,8 +100,7 @@ namespace Xamarin.Forms.Platform.Android
if (!_isDisposed)
{
Control.SetImageBitmap(bitmap);
- if (bitmap != null)
- bitmap.Dispose();
+ bitmap?.Dispose();
((IImageController)Element).SetIsLoading(false);
((IVisualElementController)Element).NativeSizeChanged();
diff --git a/Xamarin.Forms.Platform.Android/Renderers/MasterDetailRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/MasterDetailRenderer.cs
index 09c0c7c7..ec9c620e 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/MasterDetailRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/MasterDetailRenderer.cs
@@ -44,6 +44,10 @@ namespace Xamarin.Forms.Platform.Android
}
}
+ IPageController MasterPageController => _page.Master as IPageController;
+ IPageController DetailPageController => _page.Detail as IPageController;
+ IPageController PageController => Element as IPageController;
+
public void OnDrawerClosed(AView drawerView)
{
}
@@ -184,13 +188,13 @@ namespace Xamarin.Forms.Platform.Android
protected override void OnAttachedToWindow()
{
base.OnAttachedToWindow();
- ((Page)Element).SendAppearing();
+ PageController.SendAppearing();
}
protected override void OnDetachedFromWindow()
{
base.OnDetachedFromWindow();
- ((Page)Element).SendDisappearing();
+ PageController.SendDisappearing();
}
protected virtual void OnElementChanged(VisualElement oldElement, VisualElement newElement)
@@ -256,20 +260,14 @@ namespace Xamarin.Forms.Platform.Android
void MasterDetailPageAppearing(object sender, EventArgs e)
{
- if (_page.Master != null)
- _page.Master.SendAppearing();
-
- if (_page.Detail != null)
- _page.Detail.SendAppearing();
+ MasterPageController?.SendAppearing();
+ DetailPageController?.SendAppearing();
}
void MasterDetailPageDisappearing(object sender, EventArgs e)
{
- if (_page.Master != null)
- _page.Master.SendDisappearing();
-
- if (_page.Detail != null)
- _page.Detail.SendDisappearing();
+ MasterPageController?.SendDisappearing();
+ DetailPageController?.SendDisappearing();
}
void OnBackButtonPressed(object sender, BackButtonPressedEventArgs backButtonPressedEventArgs)
diff --git a/Xamarin.Forms.Platform.Android/Renderers/NavigationRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/NavigationRenderer.cs
index dc9a8fe1..f326cb3c 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/NavigationRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/NavigationRenderer.cs
@@ -35,11 +35,13 @@ namespace Xamarin.Forms.Platform.Android
return OnPushAsync(page, animated);
}
+ IPageController PageController => Element as IPageController;
+
protected override void Dispose(bool disposing)
{
if (disposing)
{
- foreach (VisualElement child in Element.InternalChildren)
+ foreach (VisualElement child in PageController.InternalChildren)
{
IVisualElementRenderer renderer = Platform.GetRenderer(child);
if (renderer != null)
@@ -64,13 +66,13 @@ namespace Xamarin.Forms.Platform.Android
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<NavigationPage> e)
@@ -132,7 +134,7 @@ namespace Xamarin.Forms.Platform.Android
void InsertPageBefore(Page page, Page before)
{
- int index = Element.InternalChildren.IndexOf(before);
+ int index = ((IPageController)Element).InternalChildren.IndexOf(before);
if (index == -1)
throw new InvalidOperationException("This should never happen, please file a bug");
@@ -220,9 +222,9 @@ namespace Xamarin.Forms.Platform.Android
{
// animate out
if (containerToAdd.Parent != this)
- AddView(containerToAdd, Element.LogicalChildren.IndexOf(rendererToAdd.Element));
+ AddView(containerToAdd, ((IElementController)Element).LogicalChildren.IndexOf(rendererToAdd.Element));
else
- ((Page)rendererToAdd.Element).SendAppearing();
+ ((IPageController)rendererToAdd.Element).SendAppearing();
containerToAdd.Visibility = ViewStates.Visible;
if (containerToRemove != null)
@@ -260,7 +262,7 @@ namespace Xamarin.Forms.Platform.Android
if (!containerAlreadyAdded)
AddView(containerToAdd);
else
- ((Page)rendererToAdd.Element).SendAppearing();
+ ((IPageController)rendererToAdd.Element).SendAppearing();
if (existing)
Element.ForceLayout();
@@ -273,8 +275,7 @@ namespace Xamarin.Forms.Platform.Android
if (containerToRemove != null && containerToRemove.Handle != IntPtr.Zero)
{
containerToRemove.Visibility = ViewStates.Gone;
- if (pageToRemove != null)
- pageToRemove.SendDisappearing();
+ ((IPageController)pageToRemove)?.SendDisappearing();
}
s_currentAnimation = null;
tcs.TrySetResult(true);
@@ -296,10 +297,10 @@ namespace Xamarin.Forms.Platform.Android
if (containerToAdd.Parent != this)
AddView(containerToAdd);
else
- ((Page)rendererToAdd.Element).SendAppearing();
+ ((IPageController)rendererToAdd.Element).SendAppearing();
if (containerToRemove != null && !removed)
- pageToRemove.SendDisappearing();
+ ((IPageController)pageToRemove).SendDisappearing();
if (existing)
Element.ForceLayout();
diff --git a/Xamarin.Forms.Platform.Android/Renderers/PageRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/PageRenderer.cs
index 24d85aa8..7db4a4ad 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/PageRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/PageRenderer.cs
@@ -12,9 +12,11 @@ namespace Xamarin.Forms.Platform.Android
return true;
}
+ IPageController PageController => Element as IPageController;
+
protected override void Dispose(bool disposing)
{
- Element?.SendDisappearing();
+ PageController?.SendDisappearing();
base.Dispose(disposing);
}
@@ -24,7 +26,7 @@ namespace Xamarin.Forms.Platform.Android
var pageContainer = Parent as PageContainer;
if (pageContainer != null && pageContainer.IsInFragment)
return;
- Element.SendAppearing();
+ PageController.SendAppearing();
}
protected override void OnDetachedFromWindow()
@@ -33,7 +35,7 @@ namespace Xamarin.Forms.Platform.Android
var pageContainer = Parent as PageContainer;
if (pageContainer != null && pageContainer.IsInFragment)
return;
- Element.SendDisappearing();
+ PageController.SendDisappearing();
}
protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
diff --git a/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs
index e9cc3942..57d93b8f 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs
@@ -23,6 +23,8 @@ namespace Xamarin.Forms.Platform.Android
AutoPackage = false;
}
+ IElementController ElementController => Element as IElementController;
+
protected override void Dispose(bool disposing)
{
if (disposing && !_isDisposed)
@@ -77,7 +79,7 @@ namespace Xamarin.Forms.Platform.Android
else if (_dialog != null)
{
_dialog.Hide();
- ((IElementController)Element).SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
+ ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
Control.ClearFocus();
_dialog = null;
}
@@ -101,14 +103,14 @@ namespace Xamarin.Forms.Platform.Android
var layout = new LinearLayout(Context) { Orientation = Orientation.Vertical };
layout.AddView(picker);
- ((IElementController)Element).SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, true);
+ ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, true);
var builder = new AlertDialog.Builder(Context);
builder.SetView(layout);
builder.SetTitle(model.Title ?? "");
builder.SetNegativeButton(global::Android.Resource.String.Cancel, (s, a) =>
{
- ((IElementController)Element).SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
+ ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
// It is possible for the Content of the Page to be changed when Focus is changed.
// In this case, we'll lose our Control.
Control?.ClearFocus();
@@ -116,14 +118,14 @@ namespace Xamarin.Forms.Platform.Android
});
builder.SetPositiveButton(global::Android.Resource.String.Ok, (s, a) =>
{
- ((IElementController)Element).SetValueFromRenderer(Picker.SelectedIndexProperty, picker.Value);
+ ElementController.SetValueFromRenderer(Picker.SelectedIndexProperty, picker.Value);
// It is possible for the Content of the Page to be changed on SelectedIndexChanged.
// In this case, the Element & Control will no longer exist.
if (Element != null)
{
if (model.Items.Count > 0 && Element.SelectedIndex >= 0)
Control.Text = model.Items[Element.SelectedIndex];
- ((IElementController)Element).SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
+ ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
// It is also possible for the Content of the Page to be changed when Focus is changed.
// In this case, we'll lose our Control.
Control?.ClearFocus();
diff --git a/Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs
index 35404a64..f2878a80 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/TabbedRenderer.cs
@@ -11,6 +11,8 @@ namespace Xamarin.Forms.Platform.Android
AutoPackage = false;
}
+ IPageController PageController => Element as IPageController;
+
protected override void Dispose(bool disposing)
{
if (disposing && Element != null && Element.Children.Count > 0)
@@ -31,13 +33,13 @@ namespace Xamarin.Forms.Platform.Android
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<TabbedPage> e)
diff --git a/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs
index 010eda72..4cb5d2d4 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs
@@ -19,11 +19,13 @@ namespace Xamarin.Forms.Platform.Android
AutoPackage = false;
}
+ IElementController ElementController => Element as IElementController;
+
void TimePickerDialog.IOnTimeSetListener.OnTimeSet(ATimePicker view, int hourOfDay, int minute)
{
- ((IElementController)Element).SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
+ ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
- ((IElementController)Element).SetValueFromRenderer(TimePicker.TimeProperty, new TimeSpan(hourOfDay, minute, 0));
+ ElementController.SetValueFromRenderer(TimePicker.TimeProperty, new TimeSpan(hourOfDay, minute, 0));
Control.ClearFocus();
_dialog = null;
}
@@ -66,7 +68,7 @@ namespace Xamarin.Forms.Platform.Android
else if (_dialog != null)
{
_dialog.Hide();
- ((IElementController)Element).SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
+ ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
Control.ClearFocus();
_dialog = null;
}
@@ -75,7 +77,7 @@ namespace Xamarin.Forms.Platform.Android
void OnClick()
{
TimePicker view = Element;
- ((IElementController)Element).SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, true);
+ ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, true);
_dialog = new TimePickerDialog(Context, this, view.Time.Hours, view.Time.Minutes, false);
_dialog.Show();
diff --git a/Xamarin.Forms.Platform.Android/VisualElementPackager.cs b/Xamarin.Forms.Platform.Android/VisualElementPackager.cs
index e7e6ab6f..e6db1c6a 100644
--- a/Xamarin.Forms.Platform.Android/VisualElementPackager.cs
+++ b/Xamarin.Forms.Platform.Android/VisualElementPackager.cs
@@ -29,6 +29,8 @@ namespace Xamarin.Forms.Platform.Android
_renderer.ElementChanged += (sender, args) => SetElement(args.OldElement, args.NewElement);
}
+ IElementController ElementController => _renderer.Element as IElementController;
+
public void Dispose()
{
if (_disposed)
@@ -96,9 +98,9 @@ namespace Xamarin.Forms.Platform.Android
void EnsureChildOrder()
{
- for (var i = 0; i < _renderer.Element.LogicalChildren.Count; i++)
+ for (var i = 0; i < ElementController.LogicalChildren.Count; i++)
{
- Element child = _renderer.Element.LogicalChildren[i];
+ Element child = ElementController.LogicalChildren[i];
var element = (VisualElement)child;
if (element != null)
{
@@ -113,7 +115,8 @@ namespace Xamarin.Forms.Platform.Android
var view = e.Element as VisualElement;
if (view != null)
AddChild(view);
- if (_renderer.Element.LogicalChildren[_renderer.Element.LogicalChildren.Count - 1] != view)
+
+ if (ElementController.LogicalChildren[ElementController.LogicalChildren.Count - 1] != view)
EnsureChildOrder();
}
@@ -155,8 +158,8 @@ namespace Xamarin.Forms.Platform.Android
{
sameChildrenTypes = true;
- oldChildren = oldElement.LogicalChildren;
- newChildren = newElement.LogicalChildren;
+ oldChildren = ((IElementController)oldElement).LogicalChildren;
+ newChildren = ((IElementController)newElement).LogicalChildren;
if (oldChildren.Count == newChildren.Count)
{
for (var i = 0; i < oldChildren.Count; i++)
@@ -193,7 +196,7 @@ namespace Xamarin.Forms.Platform.Android
newElement.ChildrenReordered += _childReorderedHandler;
- newChildren = newChildren ?? newElement.LogicalChildren;
+ newChildren = newChildren ?? ((IElementController)newElement).LogicalChildren;
for (var i = 0; i < newChildren.Count; i++)
{
diff --git a/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs b/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs
index 893adcaa..5274f897 100644
--- a/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs
@@ -306,7 +306,7 @@ namespace Xamarin.Forms.Platform.Android
if (Element == null)
return;
- ReadOnlyCollection<Element> children = Element.LogicalChildren;
+ ReadOnlyCollection<Element> children = ((IElementController)Element).LogicalChildren;
for (var i = 0; i < children.Count; i++)
{
var visualElement = children[i] as VisualElement;