From 4c22e8278f9c939ee00d74bd6f4b332f814d77de Mon Sep 17 00:00:00 2001 From: VIPPotato <82239340+VIPPotato@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:17:26 +0100 Subject: [PATCH 1/2] a11y: improve screenreader labels and add xaml accessibility tests --- .../AccessibilityXamlTests.cs | 155 ++++++++++++++++++ src/UniGetUI/Controls/DialogCloseButton.xaml | 1 + .../Controls/DialogCloseButton.xaml.cs | 2 + .../OperationWidgets/OperationControl.cs | 1 + src/UniGetUI/Controls/PackageWrapper.cs | 2 + src/UniGetUI/Controls/SourceManager.xaml | 104 ++++++------ src/UniGetUI/Controls/SourceManager.xaml.cs | 2 + .../Pages/AboutPages/Contributors.xaml | 74 +++++---- src/UniGetUI/Pages/AboutPages/SupportMe.xaml | 5 +- .../Pages/AboutPages/SupportMe.xaml.cs | 3 + .../Pages/AboutPages/ThirdPartyLicenses.xaml | 56 ++++--- .../Pages/AboutPages/Translators.xaml | 86 +++++----- .../Pages/DialogPages/DesktopShortcuts.xaml | 5 +- .../DialogPages/DesktopShortcuts.xaml.cs | 6 + .../Pages/DialogPages/IgnoredUpdates.xaml | 3 +- .../Pages/DialogPages/IgnoredUpdates.xaml.cs | 1 + .../InstallOptions_Manager.xaml.cs | 22 ++- .../DialogPages/InstallOptions_Package.xaml | 4 +- .../Pages/DialogPages/PackageDetailsPage.xaml | 2 + .../DialogPages/PackageDetailsPage.xaml.cs | 1 + src/UniGetUI/Pages/HelpPage.xaml | 4 + src/UniGetUI/Pages/HelpPage.xaml.cs | 4 + src/UniGetUI/Pages/MainView.xaml | 5 + src/UniGetUI/Pages/MainView.xaml.cs | 3 + .../SettingsPages/GeneralPages/Backup.xaml | 10 +- .../SettingsPages/GeneralPages/Backup.xaml.cs | 3 + .../Pages/SettingsPages/SettingsBasePage.xaml | 1 + .../SettingsPages/SettingsBasePage.xaml.cs | 2 + .../SoftwarePages/AbstractPackagesPage.xaml | 26 ++- .../AbstractPackagesPage.xaml.cs | 18 ++ 30 files changed, 441 insertions(+), 170 deletions(-) create mode 100644 src/UniGetUI.Core.Tools.Tests/AccessibilityXamlTests.cs diff --git a/src/UniGetUI.Core.Tools.Tests/AccessibilityXamlTests.cs b/src/UniGetUI.Core.Tools.Tests/AccessibilityXamlTests.cs new file mode 100644 index 0000000000..7db98b8ea2 --- /dev/null +++ b/src/UniGetUI.Core.Tools.Tests/AccessibilityXamlTests.cs @@ -0,0 +1,155 @@ +using System.Text.RegularExpressions; + +namespace UniGetUI.Core.Tools.Tests; + +public class AccessibilityXamlTests +{ + private static readonly string RepoRoot = + Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, @"..\..\..\..\..\..\..")); + + private static string ReadFile(string relativePath) + { + string path = Path.Combine(RepoRoot, relativePath.Replace('/', Path.DirectorySeparatorChar)); + return File.ReadAllText(path); + } + + [Fact] + public void IconOnlyControlsHaveAutomationNames() + { + Dictionary requiredSnippets = new() + { + ["src/UniGetUI/Controls/DialogCloseButton.xaml"] = + [ + "AutomationProperties.Name=\"{x:Bind CloseAutomationName, Mode=OneWay}\"" + ], + ["src/UniGetUI/Controls/SourceManager.xaml"] = + [ + "AutomationProperties.Name=\"{x:Bind RemoveSourceAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind ReloadSourcesAutomationName, Mode=OneWay}\"" + ], + ["src/UniGetUI/Pages/HelpPage.xaml"] = + [ + "AutomationProperties.Name=\"{x:Bind HelpBackAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind HelpForwardAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind HelpHomeAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind HelpReloadAutomationName, Mode=OneWay}\"" + ], + ["src/UniGetUI/Pages/MainView.xaml"] = + [ + "AutomationProperties.Name=\"{x:Bind OperationOptionsAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind OperationsListActionsAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind ExpandCollapseOperationsAutomationName, Mode=OneWay}\"" + ], + ["src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml"] = + [ + "AutomationProperties.Name=\"{x:Bind BackAutomationName, Mode=OneWay}\"" + ], + ["src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml"] = + [ + "AutomationProperties.Name=\"{x:Bind DeleteShortcutAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind OpenShortcutLocationAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind RemoveShortcutFromListAutomationName, Mode=OneWay}\"" + ], + ["src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml"] = + [ + "AutomationProperties.Name=\"{x:Bind StopIgnoringUpdatesAutomationName, Mode=OneWay}\"" + ], + ["src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml"] = + [ + "AutomationProperties.Name=\"{x:Bind MorePackageActionsAutomationName, Mode=OneWay}\"" + ], + ["src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml"] = + [ + "AutomationProperties.Name=\"{x:Bind PackageOptionsAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind ReloadPackagesAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind MoreToolbarActionsAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind SelectPackageAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind OrderByAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind ViewModeAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind SearchPackagesAutomationName, Mode=OneWay}\"" + ], + ["src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml"] = + [ + "AutomationProperties.Name=\"{x:Bind ResetBackupDirectoryAutomationName, Mode=OneWay}\"", + "AutomationProperties.Name=\"{x:Bind OpenBackupDirectoryAutomationName, Mode=OneWay}\"" + ] + }; + + foreach (var (file, snippets) in requiredSnippets) + { + string content = ReadFile(file); + foreach (string snippet in snippets) + { + Assert.Contains(snippet, content); + } + } + } + + [Fact] + public void CriticalListTemplatesHaveAutomationNames() + { + Dictionary requiredSnippets = new() + { + ["src/UniGetUI/Controls/SourceManager.xaml"] = + [ + "" + ], + ["src/UniGetUI/Pages/AboutPages/Contributors.xaml"] = + [ + "" + ], + ["src/UniGetUI/Pages/AboutPages/Translators.xaml"] = + [ + "" + ], + ["src/UniGetUI/Pages/AboutPages/ThirdPartyLicenses.xaml"] = + [ + "" + ], + ["src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml"] = + [ + "" + ], + ["src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml"] = + [ + "" + ] + }; + + foreach (var (file, snippets) in requiredSnippets) + { + string content = ReadFile(file); + foreach (string snippet in snippets) + { + Assert.Contains(snippet, content); + } + } + } + + [Fact] + public void CriticalItemContainersAreNamed() + { + string[] files = + [ + "src/UniGetUI/Controls/SourceManager.xaml", + "src/UniGetUI/Pages/AboutPages/Contributors.xaml", + "src/UniGetUI/Pages/AboutPages/Translators.xaml", + "src/UniGetUI/Pages/AboutPages/ThirdPartyLicenses.xaml", + "src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml", + "src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml", + "src/UniGetUI/Pages/MainView.xaml" + ]; + + foreach (string file in files) + { + string content = ReadFile(file); + MatchCollection matches = Regex.Matches(content, "]*>", RegexOptions.Singleline); + Assert.NotEmpty(matches); + + foreach (Match match in matches) + { + Assert.Contains("AutomationProperties.Name", match.Value); + } + } + } +} diff --git a/src/UniGetUI/Controls/DialogCloseButton.xaml b/src/UniGetUI/Controls/DialogCloseButton.xaml index 63a2c58994..38fd473933 100644 --- a/src/UniGetUI/Controls/DialogCloseButton.xaml +++ b/src/UniGetUI/Controls/DialogCloseButton.xaml @@ -18,6 +18,7 @@ Width="46" Height="31" Padding="0" + AutomationProperties.Name="{x:Bind CloseAutomationName, Mode=OneWay}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Transparent" diff --git a/src/UniGetUI/Controls/DialogCloseButton.xaml.cs b/src/UniGetUI/Controls/DialogCloseButton.xaml.cs index 68f3ce6ee1..0fec8f426b 100644 --- a/src/UniGetUI/Controls/DialogCloseButton.xaml.cs +++ b/src/UniGetUI/Controls/DialogCloseButton.xaml.cs @@ -1,5 +1,6 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; +using UniGetUI.Core.Tools; // To learn more about WinUI, the WinUI project structure, // and more about our project templates, see: http://aka.ms/winui-project-info. @@ -8,6 +9,7 @@ namespace UniGetUI.Interface.Widgets; public sealed partial class DialogCloseButton : UserControl { public event EventHandler? Click; + public string CloseAutomationName => CoreTools.Translate("Close"); public DialogCloseButton() { diff --git a/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs b/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs index 397393388b..88058effb1 100644 --- a/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs +++ b/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs @@ -30,6 +30,7 @@ public partial class OperationControl: INotifyPropertyChanged public AbstractOperation Operation; public BetterMenu OpMenu; public OperationStatus? MenuStateOnLoaded; + public string OperationOptionsAutomationName => CoreTools.Translate("Operation options"); public ObservableCollection Badges = []; private int _errorCount = 0; diff --git a/src/UniGetUI/Controls/PackageWrapper.cs b/src/UniGetUI/Controls/PackageWrapper.cs index ca9edc465b..2f2251bf98 100644 --- a/src/UniGetUI/Controls/PackageWrapper.cs +++ b/src/UniGetUI/Controls/PackageWrapper.cs @@ -59,6 +59,8 @@ public Uri? PackageIcon public int NewVersionLabelWidth { get => Package.IsUpgradable ? 125 : 0; } public int NewVersionIconWidth { get => Package.IsUpgradable ? 24 : 0; } + public string PackageOptionsAutomationName => CoreTools.Translate("Package options"); + public string SelectPackageAutomationName => CoreTools.Translate("Select package {0}", Package.Name); public int Index { get; set; } public event PropertyChangedEventHandler? PropertyChanged; diff --git a/src/UniGetUI/Controls/SourceManager.xaml b/src/UniGetUI/Controls/SourceManager.xaml index 72111d3590..5e5d1a28ef 100644 --- a/src/UniGetUI/Controls/SourceManager.xaml +++ b/src/UniGetUI/Controls/SourceManager.xaml @@ -11,56 +11,59 @@ mc:Ignorable="d"> - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -109,6 +112,7 @@ Height="30" Padding="0,0,0,0" HorizontalAlignment="Right" + AutomationProperties.Name="{x:Bind ReloadSourcesAutomationName, Mode=OneWay}" Click="ReloadButton_Click" CornerRadius="4"> CoreTools.Translate("Remove source"); public SourceItem(SourceManager Parent, IManagerSource Source) { @@ -36,6 +37,7 @@ public void Remove(object sender, RoutedEventArgs e) public sealed partial class SourceManager : UserControl { private IPackageManager Manager { get; set; } + public string ReloadSourcesAutomationName => CoreTools.Translate("Reload sources"); // ReSharper disable once FieldCanBeMadeReadOnly.Local private ObservableCollection Sources = []; diff --git a/src/UniGetUI/Pages/AboutPages/Contributors.xaml b/src/UniGetUI/Pages/AboutPages/Contributors.xaml index d8bf56c2d0..03cb816c40 100644 --- a/src/UniGetUI/Pages/AboutPages/Contributors.xaml +++ b/src/UniGetUI/Pages/AboutPages/Contributors.xaml @@ -26,44 +26,46 @@ - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - + VerticalAlignment="Center" + Text="{x:Bind Name}" /> + + + + + diff --git a/src/UniGetUI/Pages/AboutPages/SupportMe.xaml b/src/UniGetUI/Pages/AboutPages/SupportMe.xaml index b63cfd5048..f2da97953f 100644 --- a/src/UniGetUI/Pages/AboutPages/SupportMe.xaml +++ b/src/UniGetUI/Pages/AboutPages/SupportMe.xaml @@ -28,7 +28,10 @@ - + diff --git a/src/UniGetUI/Pages/AboutPages/SupportMe.xaml.cs b/src/UniGetUI/Pages/AboutPages/SupportMe.xaml.cs index d302702b00..a979e72be8 100644 --- a/src/UniGetUI/Pages/AboutPages/SupportMe.xaml.cs +++ b/src/UniGetUI/Pages/AboutPages/SupportMe.xaml.cs @@ -1,4 +1,5 @@ using Microsoft.UI.Xaml.Controls; +using UniGetUI.Core.Tools; // To learn more about WinUI, the WinUI project structure, // and more about our project templates, see: http://aka.ms/winui-project-info. @@ -10,6 +11,8 @@ namespace UniGetUI.Interface.Pages.AboutPages /// public sealed partial class SupportMe : Page { + public string SupportKofiAutomationName => CoreTools.Translate("Support the developer on Ko-fi"); + public SupportMe() { InitializeComponent(); diff --git a/src/UniGetUI/Pages/AboutPages/ThirdPartyLicenses.xaml b/src/UniGetUI/Pages/AboutPages/ThirdPartyLicenses.xaml index 7cac12be4e..ec6e49d86b 100644 --- a/src/UniGetUI/Pages/AboutPages/ThirdPartyLicenses.xaml +++ b/src/UniGetUI/Pages/AboutPages/ThirdPartyLicenses.xaml @@ -35,33 +35,35 @@ - - - - - - - - - - + + + + + + + + + + + + diff --git a/src/UniGetUI/Pages/AboutPages/Translators.xaml b/src/UniGetUI/Pages/AboutPages/Translators.xaml index 3b3fcbc4f0..921847d984 100644 --- a/src/UniGetUI/Pages/AboutPages/Translators.xaml +++ b/src/UniGetUI/Pages/AboutPages/Translators.xaml @@ -34,50 +34,52 @@ - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - + VerticalAlignment="Center" + Text="{x:Bind Language}" /> + + + + + + diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml index 8ce295f2ee..5dc38397dd 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml @@ -133,7 +133,7 @@ - + @@ -152,6 +152,7 @@ diff --git a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs index 373c9bf633..a85bb68c3d 100644 --- a/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/DesktopShortcuts.xaml.cs @@ -152,6 +152,12 @@ public bool ExistsOnDisk get => File.Exists(Path); } + public string OpenShortcutLocationAutomationName => CoreTools.Translate("Open shortcut location"); + + public string RemoveShortcutFromListAutomationName => CoreTools.Translate("Remove shortcut from this list"); + + public string DeleteShortcutAutomationName => CoreTools.Translate("Delete shortcut {0}", Name); + public ShortcutEntry(string path, bool isDeletable) { Path = path; diff --git a/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml b/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml index 2aae4a6535..546cad9214 100644 --- a/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml +++ b/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml @@ -87,7 +87,7 @@ - + @@ -157,6 +157,7 @@ Width="32" Height="32" Padding="0" + AutomationProperties.Name="{x:Bind StopIgnoringUpdatesAutomationName, Mode=OneWay}" Click="{x:Bind RemoveFromIgnoredUpdates}"> diff --git a/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml.cs b/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml.cs index 65baf27936..7611987de0 100644 --- a/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml.cs @@ -91,6 +91,7 @@ public class IgnoredPackageEntry public string Version { get; } public string NewVersion { get; } public IPackageManager Manager { get; } + public string StopIgnoringUpdatesAutomationName => CoreTools.Translate("Stop ignoring updates for this package"); private ObservableCollection List { get; } public IgnoredPackageEntry(string id, string version, IPackageManager manager, ObservableCollection list) { diff --git a/src/UniGetUI/Pages/DialogPages/InstallOptions_Manager.xaml.cs b/src/UniGetUI/Pages/DialogPages/InstallOptions_Manager.xaml.cs index b662f1138e..b32918f37c 100644 --- a/src/UniGetUI/Pages/DialogPages/InstallOptions_Manager.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/InstallOptions_Manager.xaml.cs @@ -1,4 +1,5 @@ using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Automation; using Microsoft.UI.Xaml.Controls; using UniGetUI.Core.Language; using UniGetUI.Core.SettingsEngine.SecureSettings; @@ -23,11 +24,22 @@ public InstallOptions_Manager(IPackageManager manager) { Manager = manager; InitializeComponent(); - AdminCheckBox.Content = CoreTools.Translate("Run as admin"); - InteractiveCheckBox.Content = CoreTools.Translate("Interactive installation"); - HashCheckBox.Content = CoreTools.Translate("Skip hash check"); - UninstallPreviousVerOnUpdate.Content = CoreTools.Translate("Uninstall previous versions when updated"); - PreReleaseCheckBox.Content = CoreTools.Translate("Allow pre-release versions"); + string runAsAdminText = CoreTools.Translate("Run as admin"); + string interactiveInstallText = CoreTools.Translate("Interactive installation"); + string skipHashText = CoreTools.Translate("Skip hash check"); + string uninstallPreviousText = CoreTools.Translate("Uninstall previous versions when updated"); + string allowPreReleaseText = CoreTools.Translate("Allow pre-release versions"); + + AdminCheckBox.Content = runAsAdminText; + AutomationProperties.SetName(AdminCheckBox, runAsAdminText); + InteractiveCheckBox.Content = interactiveInstallText; + AutomationProperties.SetName(InteractiveCheckBox, interactiveInstallText); + HashCheckBox.Content = skipHashText; + AutomationProperties.SetName(HashCheckBox, skipHashText); + UninstallPreviousVerOnUpdate.Content = uninstallPreviousText; + AutomationProperties.SetName(UninstallPreviousVerOnUpdate, uninstallPreviousText); + PreReleaseCheckBox.Content = allowPreReleaseText; + AutomationProperties.SetName(PreReleaseCheckBox, allowPreReleaseText); ArchLabel.Text = CoreTools.Translate("Architecture to install:"); ScopeLabel.Text = CoreTools.Translate("Installation scope:"); LocationLabel.Text = CoreTools.Translate("Install location:"); diff --git a/src/UniGetUI/Pages/DialogPages/InstallOptions_Package.xaml b/src/UniGetUI/Pages/DialogPages/InstallOptions_Package.xaml index a6387a926e..8b030a655b 100644 --- a/src/UniGetUI/Pages/DialogPages/InstallOptions_Package.xaml +++ b/src/UniGetUI/Pages/DialogPages/InstallOptions_Package.xaml @@ -15,7 +15,9 @@ mc:Ignorable="d"> - + diff --git a/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml b/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml index 74737375fe..4cce00a61e 100644 --- a/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml +++ b/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml @@ -85,6 +85,7 @@ Margin="2" Padding="8,2,8,2" VerticalAlignment="Center" + AutomationProperties.Name="{x:Bind Text}" Background="{ThemeResource AccentAAFillColorDefaultBrush}" CornerRadius="12"> @@ -188,6 +189,7 @@ Height="40" Margin="1,0,0,0" Padding="0,0,2,0" + AutomationProperties.Name="{x:Bind MorePackageActionsAutomationName, Mode=OneWay}" CornerRadius="0,8,8,0" Style="{StaticResource AccentButtonStyle}"> diff --git a/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs b/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs index 73267e0277..aa5d61d8a1 100644 --- a/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs @@ -31,6 +31,7 @@ public sealed partial class PackageDetailsPage : Page public IPackage? AvailablePackage; public IPackage? UpgradablePackage; public IPackage? InstalledPackage; + public string MorePackageActionsAutomationName => CoreTools.Translate("More package actions"); private readonly InstallOptionsPage InstallOptionsPage; public event EventHandler? Close; diff --git a/src/UniGetUI/Pages/HelpPage.xaml b/src/UniGetUI/Pages/HelpPage.xaml index 98894168a2..ca2f63beab 100644 --- a/src/UniGetUI/Pages/HelpPage.xaml +++ b/src/UniGetUI/Pages/HelpPage.xaml @@ -50,6 +50,7 @@ Width="35" Height="35" Padding="5" + AutomationProperties.Name="{x:Bind HelpBackAutomationName, Mode=OneWay}" Click="BackButton_Click" CornerRadius="4,0,0,4"> @@ -60,6 +61,7 @@ Width="35" Height="35" Padding="5" + AutomationProperties.Name="{x:Bind HelpForwardAutomationName, Mode=OneWay}" Click="RightButton_Click" CornerRadius="0"> @@ -70,6 +72,7 @@ Width="35" Height="35" Padding="5" + AutomationProperties.Name="{x:Bind HelpHomeAutomationName, Mode=OneWay}" Click="HomeButton_Click" CornerRadius="0"> @@ -80,6 +83,7 @@ Width="35" Height="35" Padding="5" + AutomationProperties.Name="{x:Bind HelpReloadAutomationName, Mode=OneWay}" Click="ReloadButton_Click" CornerRadius="0,4,4,0"> diff --git a/src/UniGetUI/Pages/HelpPage.xaml.cs b/src/UniGetUI/Pages/HelpPage.xaml.cs index dd05bfe1d7..8b6abd56a2 100644 --- a/src/UniGetUI/Pages/HelpPage.xaml.cs +++ b/src/UniGetUI/Pages/HelpPage.xaml.cs @@ -17,6 +17,10 @@ public sealed partial class HelpPage : Page, IDisposable, IEnterLeaveListener private bool Initialized; private WebView2? webView; private Uri? lastUri; + public string HelpBackAutomationName => CoreTools.Translate("Go back"); + public string HelpForwardAutomationName => CoreTools.Translate("Go forward"); + public string HelpHomeAutomationName => CoreTools.Translate("Go to help home"); + public string HelpReloadAutomationName => CoreTools.Translate("Reload page"); public HelpPage() { diff --git a/src/UniGetUI/Pages/MainView.xaml b/src/UniGetUI/Pages/MainView.xaml index 1e1262898a..12351324a4 100644 --- a/src/UniGetUI/Pages/MainView.xaml +++ b/src/UniGetUI/Pages/MainView.xaml @@ -95,6 +95,7 @@ Height="32" Margin="6,0,0,0" Padding="0" + AutomationProperties.Name="{x:Bind Tooltip, Mode=OneWay}" CornerRadius="6" ToolTipService.ToolTip="{x:Bind Tooltip}"> @@ -224,6 +225,7 @@ Padding="0" HorizontalAlignment="Stretch" VerticalAlignment="Center" + AutomationProperties.Name="{x:Bind OperationOptionsAutomationName, Mode=OneWay}" BorderThickness="0" CornerRadius="0,6,6,0" Flyout="{x:Bind OpMenu}" @@ -387,6 +389,7 @@ Grid.Column="1" Height="12" Padding="12,0,12,0" + AutomationProperties.Name="{x:Bind ExpandCollapseOperationsAutomationName, Mode=OneWay}" Click="ExpandCollapseOpList_Click" CornerRadius="4" Foreground="{ThemeResource ScrollBarButtonPointerOverBackgroundThemeBrush}"> @@ -397,6 +400,7 @@ Grid.Column="2" Height="12" Padding="12,0,12,0" + AutomationProperties.Name="{x:Bind OperationsListActionsAutomationName, Mode=OneWay}" Click="OperationSplitterMenuButton_Click" CornerRadius="4" Foreground="{ThemeResource ScrollBarButtonPointerOverBackgroundThemeBrush}"> @@ -408,6 +412,7 @@ Grid.Row="2" Grid.Column="0" x:FieldModifier="public" + AutomationProperties.Name="{x:Bind OperationsListAutomationName, Mode=OneWay}" ItemTemplate="{StaticResource OperationTemplate}" SelectionMode="None" SizeChanged="OperationScrollView_SizeChanged"> diff --git a/src/UniGetUI/Pages/MainView.xaml.cs b/src/UniGetUI/Pages/MainView.xaml.cs index 4543af9fab..5342e40d4b 100644 --- a/src/UniGetUI/Pages/MainView.xaml.cs +++ b/src/UniGetUI/Pages/MainView.xaml.cs @@ -57,6 +57,9 @@ public sealed partial class MainView : UserControl private PageType OldPage_t = PageType.Null; private PageType CurrentPage_t = PageType.Null; private List NavigationHistory = new(); + public string ExpandCollapseOperationsAutomationName => CoreTools.Translate("Expand or collapse operations list"); + public string OperationsListActionsAutomationName => CoreTools.Translate("Operation list actions"); + public string OperationsListAutomationName => CoreTools.Translate("Operations list"); AutoSuggestBox MainTextBlock; public event EventHandler? CanGoBackChanged; diff --git a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml index 9b4ef9bc6b..8b63c1705e 100644 --- a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml +++ b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml @@ -184,8 +184,14 @@ - - + + diff --git a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml.cs b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml.cs index db306fa41d..b853f1354f 100644 --- a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml.cs @@ -28,6 +28,9 @@ public sealed partial class Backup : Page, ISettingsPage private readonly GitHubBackupService _backupService; private bool _isLoggedIn; private bool _isLoading; + public string ResetBackupDirectoryAutomationName => CoreTools.Translate("Reset backup directory"); + public string OpenBackupDirectoryAutomationName => CoreTools.Translate("Open backup directory"); + public Backup() { this.InitializeComponent(); diff --git a/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml b/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml index 15708e7013..62a4616db4 100644 --- a/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml +++ b/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml @@ -57,6 +57,7 @@ Width="40" Height="40" Padding="6" + AutomationProperties.Name="{x:Bind BackAutomationName, Mode=OneWay}" VerticalAlignment="Center" Background="Transparent" BorderThickness="0"> diff --git a/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml.cs b/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml.cs index c1361c6af5..2cfe5ff5c5 100644 --- a/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml.cs @@ -19,6 +19,8 @@ namespace UniGetUI.Pages.SettingsPages public sealed partial class SettingsBasePage : Page, IEnterLeaveListener, IInnerNavigationPage { bool IsManagers; + public string BackAutomationName => CoreTools.Translate("Back"); + public SettingsBasePage(bool isManagers) { IsManagers = isManagers; diff --git a/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml b/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml index 0a04e5745b..7def65bc25 100644 --- a/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml +++ b/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml @@ -55,6 +55,7 @@ @@ -273,6 +274,7 @@ Grid.Column="2" Margin="1,-4,0,0" HorizontalAlignment="Left" + AutomationProperties.Name="{x:Bind SelectPackageAutomationName, Mode=OneWay}" VerticalAlignment="Top" IsChecked="{x:Bind IsChecked, Mode=TwoWay}" /> @@ -282,6 +284,7 @@ Height="22" Padding="0" VerticalAlignment="Bottom" + AutomationProperties.Name="{x:Bind PackageOptionsAutomationName, Mode=OneWay}" Background="Transparent" BorderThickness="0" Click="{x:Bind RightClick}" @@ -396,6 +399,7 @@ Grid.Row="0" Margin="1,-4,0,0" HorizontalAlignment="Left" + AutomationProperties.Name="{x:Bind SelectPackageAutomationName, Mode=OneWay}" VerticalAlignment="Top" IsChecked="{x:Bind IsChecked, Mode=TwoWay}" /> @@ -1018,6 +1030,7 @@ Grid.ColumnSpan="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" + AutomationProperties.Name="{x:Bind SortByPackageNameAutomationName, Mode=OneWay}" BorderThickness="0" CornerRadius="0" />