summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Bereza <p.bereza@samsung.com>2016-11-28 15:52:25 +0100
committerPiotr Bereza <p.bereza@samsung.com>2016-11-29 11:29:55 +0100
commit1c56bd04ee25d08e47849751511fe4628ce1612c (patch)
treebba1ae6f4bc4a7ab5b021145ebd8ef52956861ef
parent82c4d45b5478dcae70b51e2f73160204aad50f0f (diff)
downloadxamarin-forms-1c56bd04ee25d08e47849751511fe4628ce1612c.tar.gz
xamarin-forms-1c56bd04ee25d08e47849751511fe4628ce1612c.tar.bz2
xamarin-forms-1c56bd04ee25d08e47849751511fe4628ce1612c.zip
Optimization of NavigationPageRenderer
The number of calls of UpdateHasBackButton and GetNaviItemForPage methods per navigation action was reduced. The order of NaviItem searching in GetNaviItemForPage was reversed due to the most of searches are for CurrentPage which is on the top of stack. The protection against a null CurrentPage was added. Change-Id: Ic778e4b58b27c7e208b38cf33db4b05b4796c340 Signed-off-by: Piotr Bereza <p.bereza@samsung.com>
-rw-r--r--Xamarin.Forms.Platform.Tizen/Renderers/NavigationPageRenderer.cs48
1 files changed, 26 insertions, 22 deletions
diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/NavigationPageRenderer.cs
index bd241a46..1f58709d 100644
--- a/Xamarin.Forms.Platform.Tizen/Renderers/NavigationPageRenderer.cs
+++ b/Xamarin.Forms.Platform.Tizen/Renderers/NavigationPageRenderer.cs
@@ -81,7 +81,6 @@ namespace Xamarin.Forms.Platform.Tizen
page.PropertyChanged += NavigationBarPropertyChangedHandler;
UpdateHasNavigationBar(page);
- UpdateHasBackButton(page);
}
_toolbarTracker.Target = e.NewElement;
@@ -136,16 +135,16 @@ namespace Xamarin.Forms.Platform.Tizen
{
NaviItem item = GetNaviItemForPage(page);
item.TitleBarVisible = (bool)page.GetValue(NavigationPage.HasNavigationBarProperty);
- UpdateToolbarItem(page);
+ UpdateToolbarItem(page, item);
}
- void UpdateToolbarItem(Page page)
+ void UpdateToolbarItem(Page page, NaviItem item = null)
{
- NaviItem item = GetNaviItemForPage(page);
- if (item != _naviFrame.NavigationStack.Last())
- {
+ if (item == null)
+ item = GetNaviItemForPage(page);
+
+ if (_naviFrame.NavigationStack.Count == 0 || item == null || item != _naviFrame.NavigationStack.Last())
return;
- }
item.SetPartContent(_leftToolbar, null, false);
item.SetPartContent(_rightToolbar, null, false);
@@ -155,18 +154,16 @@ namespace Xamarin.Forms.Platform.Tizen
Native.Button leftButton = GetToolbarButtonIfExists(ToolbarItemOrder.Secondary);
if (leftButton == null)
- {
- UpdateHasBackButton(page);
- }
+ UpdateHasBackButton(page, item);
else
- {
item.SetPartContent(_leftToolbar, leftButton);
- }
}
- void UpdateHasBackButton(Page page)
+ void UpdateHasBackButton(Page page, NaviItem item = null)
{
- NaviItem item = GetNaviItemForPage(page);
+ if (item == null)
+ item = GetNaviItemForPage(page);
+
EButton button = null;
if ((bool)page.GetValue(NavigationPage.HasBackButtonProperty))
@@ -226,15 +223,23 @@ namespace Xamarin.Forms.Platform.Tizen
NaviItem GetNaviItemForPage(Page page)
{
- EvasObject content = Platform.GetRenderer(page).NativeView;
NaviItem item = null;
- for (int i = 0; i < _naviFrame.NavigationStack.Count; ++i)
- if (_naviFrame.NavigationStack[i].Content == content)
+
+ if (page != null)
+ {
+ IVisualElementRenderer renderer = Platform.GetRenderer(page);
+ if (renderer != null)
{
- item = _naviFrame.NavigationStack[i];
- break;
+ EvasObject content = renderer.NativeView;
+
+ for (int i = _naviFrame.NavigationStack.Count - 1; i >= 0; --i)
+ if (_naviFrame.NavigationStack[i].Content == content)
+ {
+ item = _naviFrame.NavigationStack[i];
+ break;
+ }
}
-
+ }
return item;
}
@@ -339,7 +344,6 @@ namespace Xamarin.Forms.Platform.Tizen
_naviFrame.InsertAfter(_naviFrame.NavigationStack.Last(), Platform.GetOrCreateRenderer(nre.Page).NativeView, SpanTitle(nre.Page.Title));
UpdateHasNavigationBar(nre.Page);
- UpdateHasBackButton(nre.Page);
}
void RemovePageRequestedHandler(object sender, NavigationRequestedEventArgs nre)
@@ -363,7 +367,7 @@ namespace Xamarin.Forms.Platform.Tizen
tcs.SetResult(true);
UpdateHasNavigationBar(nre.Page);
- UpdateHasBackButton(nre.Page);
+
return false;
});
}