From 836975d3fe098f3c0a8ec9c63805626cef43f6b9 Mon Sep 17 00:00:00 2001 From: devanathan-vaithiyanathan <114395405+devanathan-vaithiyanathan@users.noreply.github.com> Date: Fri, 10 Jan 2025 23:24:41 +0530 Subject: [PATCH] [Windows] Fix FlyoutPage ShouldShowToolbarButton when overridden to return false, still shows button in title bar (#25857) * Fixed-ToolBarVisible-Issue * Added-Platform-Condition * Removed * Modified-TestCases-Added-SnapShot * Added-Windows-SnapShot --------- Co-authored-by: prakashKannanSf3972 <127308739+prakashKannanSf3972@users.noreply.github.com> --- .../Windows/Extensions/ToolbarExtensions.cs | 4 ++ .../VerifyInitialToolbarButtonHidden.png | Bin 0 -> 8422 bytes .../TestCases.HostApp/Issues/Issue24547.cs | 57 ++++++++++++++++++ .../Tests/Issues/Issue24547.cs | 21 +++++++ .../VerifyInitialToolbarButtonHidden.png | Bin 0 -> 6473 bytes .../ios/VerifyInitialToolbarButtonHidden.png | Bin 0 -> 16822 bytes 6 files changed, 82 insertions(+) create mode 100644 src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyInitialToolbarButtonHidden.png create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue24547.cs create mode 100644 src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24547.cs create mode 100644 src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyInitialToolbarButtonHidden.png create mode 100644 src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyInitialToolbarButtonHidden.png diff --git a/src/Controls/src/Core/Platform/Windows/Extensions/ToolbarExtensions.cs b/src/Controls/src/Core/Platform/Windows/Extensions/ToolbarExtensions.cs index 0fb31579521c..1a037424ca29 100644 --- a/src/Controls/src/Core/Platform/Windows/Extensions/ToolbarExtensions.cs +++ b/src/Controls/src/Core/Platform/Windows/Extensions/ToolbarExtensions.cs @@ -35,6 +35,10 @@ public static void UpdateBackButton(this MauiToolbar platformToolbar, Toolbar to platformToolbar.IsBackEnabled = toolbar.BackButtonEnabled && toolbar.BackButtonVisible; + // Adjusts WinUI TogglePaneButton visibility based on DrawerToggleVisible setting. + if (platformToolbar.TogglePaneButton is not null) + platformToolbar.TogglePaneButton.Visibility = toolbar.DrawerToggleVisible ? UI.Xaml.Visibility.Visible : UI.Xaml.Visibility.Collapsed; + platformToolbar .IsBackButtonVisible = (toolbar.BackButtonVisible) ? NavigationViewBackButtonVisible.Visible : NavigationViewBackButtonVisible.Collapsed; diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyInitialToolbarButtonHidden.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyInitialToolbarButtonHidden.png new file mode 100644 index 0000000000000000000000000000000000000000..db98dbb8d1327bfe6e856603fbaf311c91cd81be GIT binary patch literal 8422 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 SHRT2kaOi;7{<5zFF8>qx%gQbQ literal 0 HcmV?d00001 diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue24547.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue24547.cs new file mode 100644 index 000000000000..73c372b067b3 --- /dev/null +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue24547.cs @@ -0,0 +1,57 @@ +namespace Maui.Controls.Sample.Issues +{ + [Issue(IssueTracker.Github, 24547, "[Windows] FlyoutPage ShouldShowToolbarButton when overridden to return false, still shows button in title bar", PlatformAffected.UWP)] + public class Issue24547PopoverPage : FlyoutPage + { + public Issue24547PopoverPage() + { + FlyoutLayoutBehavior = FlyoutLayoutBehavior.Popover; + + Flyout = new ContentPage + { + Title = "Flyout", + BackgroundColor = Colors.Red, + Content = new StackLayout + { + Children = { + new Label { Text = "Flyout" } + } + } + }; + + ContentPage contentPage = new ContentPage + { + BackgroundColor = Colors.Green, + Title = "Detail", + Content = new StackLayout + { + Children = + { + CreateDetailButton() + } + } + }; + + Detail = new NavigationPage(contentPage); + Button button = new Button() { Text = "Menu", AutomationId = "MenuButton" }; + button.Clicked += (s, e) => IsPresented = true; + NavigationPage.SetTitleView(contentPage, button); + } + + private Button CreateDetailButton() + { + Button button = new Button + { + Text = "Detail", + AutomationId = "DetailButton" + }; + + return button; + } + + public override bool ShouldShowToolbarButton() + { + return false; + } + } +} \ No newline at end of file diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24547.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24547.cs new file mode 100644 index 000000000000..98aa1187a784 --- /dev/null +++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24547.cs @@ -0,0 +1,21 @@ +#if !MACCATALYST +using NUnit.Framework; +using UITest.Appium; +using UITest.Core; + +namespace Microsoft.Maui.TestCases.Tests.Issues; +public class Issue24547: _IssuesUITest +{ + public Issue24547(TestDevice device) : base(device) { } + + public override string Issue => "[Windows] FlyoutPage ShouldShowToolbarButton when overridden to return false, still shows button in title bar"; + + [Test] + [Category(UITestCategories.FlyoutPage)] + public void VerifyInitialToolbarButtonHidden() + { + App.WaitForElement("DetailButton"); + VerifyScreenshot(); + } +} +#endif \ No newline at end of file diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyInitialToolbarButtonHidden.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyInitialToolbarButtonHidden.png new file mode 100644 index 0000000000000000000000000000000000000000..50ea184c4a0bd112e8ca0044970c7dc05adecb9e GIT binary patch literal 6473 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 z