diff options
author | Piotr Bereza <p.bereza@samsung.com> | 2016-11-28 15:52:25 +0100 |
---|---|---|
committer | Piotr Bereza <p.bereza@samsung.com> | 2016-11-29 11:29:55 +0100 |
commit | 1c56bd04ee25d08e47849751511fe4628ce1612c (patch) | |
tree | bba1ae6f4bc4a7ab5b021145ebd8ef52956861ef | |
parent | 82c4d45b5478dcae70b51e2f73160204aad50f0f (diff) | |
download | xamarin-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.cs | 48 |
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; }); } |