[Settings] Announces open/close navigation pane (#12648)

* [Settings] Announces open/close navigation pane

* Add localization support
This commit is contained in:
Jaime Bernardo 2021-08-10 15:03:04 +01:00 committed by GitHub
parent f6645b04ed
commit 7278d62307
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 71 additions and 3 deletions

View file

@ -249,6 +249,14 @@ Disabling this module or closing PowerToys will unmute the microphone and camera
<value>Keyboard Manager</value>
<comment>Product name: Navigation view item name for Keyboard Manager</comment>
</data>
<data name="Shell_NavigationMenu_Announce_Collapse" xml:space="preserve">
<value>Navigation closed</value>
<comment>Accessibility announcement when the navigation pane collapses</comment>
</data>
<data name="Shell_NavigationMenu_Announce_Open" xml:space="preserve">
<value>Navigation opened</value>
<comment>Accessibility announcement when the navigation pane opens</comment>
</data>
<data name="KeyboardManager_ConfigHeader.Text" xml:space="preserve">
<value>Current configuration</value>
<comment>Keyboard Manager current configuration header</comment>
@ -1376,14 +1384,14 @@ From there, simply click on a Markdown file or SVG icon in the File Explorer and
<data name="Delete_Dialog_Description" xml:space="preserve">
<value>Are you sure you want to delete this item?</value>
</data>
<data name="Yes" xml:space="preserve">
<data name="Yes" xml:space="preserve">
<value>Yes</value>
<comment>Label of a confirmation button</comment>
</data>
</data>
<data name="Learn_More_Description.AutomationProperties.Name" xml:space="preserve">
<value>Learn more</value>
</data>
<data name="ColorPicker_ColorFormat_ToggleSwitch.AutomationProperties.Name" xml:space="preserve">
<data name="ColorPicker_ColorFormat_ToggleSwitch.AutomationProperties.Name" xml:space="preserve">
<value>Show format in editor</value>
</data>
</root>

View file

@ -28,6 +28,8 @@
OpenPaneLength="296"
CompactModeThresholdWidth="0"
Background="{ThemeResource SystemControlBackgroundAltHighBrush}"
PaneOpened="NavigationView_PaneOpened"
PaneClosed="NavigationView_PaneClosed"
SelectionChanged="NavigationView_SelectionChanged">
<winui:NavigationView.MenuItems>
<winui:NavigationViewItem x:Uid="Shell_General" helpers:NavHelper.NavigateTo="views:GeneralPage">

View file

@ -7,7 +7,9 @@ using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Microsoft.PowerToys.Settings.UI.Services;
using Microsoft.PowerToys.Settings.UI.ViewModels;
using Windows.ApplicationModel.Resources;
using Windows.Data.Json;
using Windows.UI.Xaml.Automation.Peers;
using Windows.UI.Xaml.Controls;
namespace Microsoft.PowerToys.Settings.UI.Views
@ -161,5 +163,61 @@ namespace Microsoft.PowerToys.Settings.UI.Views
{
scrollViewer.ChangeView(null, 0, null, true);
}
private bool navigationViewInitialStateProcessed; // avoid announcing initial state of the navigation pane.
[SuppressMessage("Usage", "CA1801:Review unused parameters", Justification = "Params are required for event handler signature requirements.")]
#pragma warning disable CA1822 // Mark members as static
private void NavigationView_PaneOpened(Microsoft.UI.Xaml.Controls.NavigationView sender, object args)
{
if (!navigationViewInitialStateProcessed)
{
navigationViewInitialStateProcessed = true;
return;
}
var peer = FrameworkElementAutomationPeer.FromElement(sender);
if (peer == null)
{
peer = FrameworkElementAutomationPeer.CreatePeerForElement(sender);
}
if (AutomationPeer.ListenerExists(AutomationEvents.MenuOpened))
{
var loader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
peer.RaiseNotificationEvent(
AutomationNotificationKind.ActionCompleted,
AutomationNotificationProcessing.ImportantMostRecent,
loader.GetString("Shell_NavigationMenu_Announce_Open"),
"navigationMenuPaneOpened");
}
}
[SuppressMessage("Usage", "CA1801:Review unused parameters", Justification = "Params are required for event handler signature requirements.")]
private void NavigationView_PaneClosed(Microsoft.UI.Xaml.Controls.NavigationView sender, object args)
{
if (!navigationViewInitialStateProcessed)
{
navigationViewInitialStateProcessed = true;
return;
}
var peer = FrameworkElementAutomationPeer.FromElement(sender);
if (peer == null)
{
peer = FrameworkElementAutomationPeer.CreatePeerForElement(sender);
}
if (AutomationPeer.ListenerExists(AutomationEvents.MenuClosed))
{
var loader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
peer.RaiseNotificationEvent(
AutomationNotificationKind.ActionCompleted,
AutomationNotificationProcessing.ImportantMostRecent,
loader.GetString("Shell_NavigationMenu_Announce_Collapse"),
"navigationMenuPaneClosed");
}
}
#pragma warning restore CA1822 // Mark members as static
}
}