From 2a319084c58f3a0b4f4bdb9aee7e511795abf64f Mon Sep 17 00:00:00 2001 From: Gerald Versluis Date: Thu, 20 Jun 2019 04:27:04 +0200 Subject: [PATCH] [Android] Hamburger icon not shown when using FormsAppCompatActivity (#6548) * Update NavigationPageRenderer.cs * Add reproduction for #2577 * Update NavigationPageRenderer.cs * Taking into account MasterDetailPage and GetHasBackButton correctly * Update NavigationPageRenderer.cs fixes #2577 --- .../Issue2577.cs | 53 ++++++++++++++++++++++ .../Xamarin.Forms.Controls.Issues.Shared.projitems | 1 + .../AppCompat/NavigationPageRenderer.cs | 21 +++++---- 3 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2577.cs diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2577.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2577.cs new file mode 100644 index 0000000..4cfc4f6 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2577.cs @@ -0,0 +1,53 @@ +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +#if UITEST +using Xamarin.Forms.Core.UITests; +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls.Issues +{ +#if UITEST + [Category(UITestCategories.ManualReview)] +#endif + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Github, 2577, "Hamburger icon not shown when using FormsAppCompatActivity", PlatformAffected.Android)] + public class Issue2577 : TestMasterDetailPage + { + protected override void Init() + { + Master = new ContentPage { Title = "master page" }; + Detail = new NavigationPage(new DetailPage()); + } + + class DetailPage : ContentPage + { + public NavigationPage ParentPage => Parent as NavigationPage; + + public DetailPage() + { + var button = new Button { Text = "Click me" }; + button.Clicked += async (o, s) => + { + var button2 = new Button { Text = "Toggle back button" }; + + var page = new ContentPage { Content = new StackLayout { Children = { + new Label { Text = "If there is no hamburger button, this test has failed. If you cannot toggle the back arrow, this test has failed." }, + button2 + } } }; + + button2.Clicked += (o2, s2) => + { + NavigationPage.SetHasBackButton(page, !NavigationPage.GetHasBackButton(page)); + }; + + NavigationPage.SetHasBackButton(page, false); + await ParentPage.PushAsync(page); + }; + Content = button; + } + } + } +} \ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index da56010..73c4a29 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -636,6 +636,7 @@ + diff --git a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs index 1803ba4..db1b83b 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs @@ -839,10 +839,10 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (!removed) { UpdateToolbar(); - if (_drawerToggle != null && NavigationPageController.StackDepth == 2) + if (_drawerToggle != null && NavigationPageController.StackDepth == 2 && NavigationPage.GetHasBackButton(page)) AnimateArrowIn(); } - else if (_drawerToggle != null && NavigationPageController.StackDepth == 2) + else if (_drawerToggle != null && NavigationPageController.StackDepth == 2 && NavigationPage.GetHasBackButton(page)) AnimateArrowOut(); AddTransitionTimer(tcs, fragment, FragmentManager, fragmentsToRemove, TransitionDuration, removed); @@ -949,14 +949,14 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (isNavigated) { - if (toggle != null) - { - toggle.DrawerIndicatorEnabled = false; - toggle.SyncState(); - } - if (NavigationPage.GetHasBackButton(currentPage) && !Context.IsDesignerContext()) { + if (toggle != null) + { + toggle.DrawerIndicatorEnabled = false; + toggle.SyncState(); + } + var activity = (global::Android.Support.V7.App.AppCompatActivity)context.GetActivity(); var icon = new DrawerArrowDrawable(activity.SupportActionBar.ThemedContext); icon.Progress = 1; @@ -965,6 +965,11 @@ namespace Xamarin.Forms.Platform.Android.AppCompat var prevPage = Element.Peek(1); _defaultNavigationContentDescription = bar.SetNavigationContentDescription(prevPage, _defaultNavigationContentDescription); } + else if (_masterDetailPage != null) + { + toggle.DrawerIndicatorEnabled = _masterDetailPage.ShouldShowToolbarButton(); + toggle.SyncState(); + } } else { -- 2.7.4