Skip to content

Commit

Permalink
[Settings] Announces open/close navigation pane (microsoft#12648)
Browse files Browse the repository at this point in the history
* [Settings] Announces open/close navigation pane

* Add localization support
  • Loading branch information
jaimecbernardo authored Aug 10, 2021
1 parent f6645b0 commit 7278d62
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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>
Original file line number Diff line number Diff line change
Expand Up @@ -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">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
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
Expand Down Expand Up @@ -161,5 +163,61 @@ private void NavigationView_SelectionChanged(Microsoft.UI.Xaml.Controls.Navigati
{
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
}
}

0 comments on commit 7278d62

Please sign in to comment.