Convert NarratorNotifier to C#

This commit is contained in:
Matt Cooley 2022-10-02 16:33:03 -07:00
commit 313aecde55
16 changed files with 64 additions and 141 deletions

View file

@ -301,7 +301,6 @@
<ClInclude Include="ApplicationViewModel.h" />
<ClInclude Include="Common\AppResourceProvider.h" />
<ClInclude Include="Common\Automation\NarratorAnnouncement.h" />
<ClInclude Include="Common\Automation\NarratorNotifier.h" />
<ClInclude Include="Common\BitLength.h" />
<ClInclude Include="Common\CalculatorButtonPressedEventArgs.h" />
<ClInclude Include="Common\CalculatorButtonUser.h" />
@ -346,7 +345,6 @@
<ClCompile Include="ApplicationViewModel.cpp" />
<ClCompile Include="Common\AppResourceProvider.cpp" />
<ClCompile Include="Common\Automation\NarratorAnnouncement.cpp" />
<ClCompile Include="Common\Automation\NarratorNotifier.cpp" />
<ClCompile Include="Common\CalculatorButtonPressedEventArgs.cpp" />
<ClCompile Include="Common\CalculatorDisplay.cpp" />
<ClCompile Include="Common\CopyPasteManager.cpp" />

View file

@ -61,9 +61,6 @@
<ClCompile Include="Common\Automation\NarratorAnnouncement.cpp">
<Filter>Common\Automation</Filter>
</ClCompile>
<ClCompile Include="Common\Automation\NarratorNotifier.cpp">
<Filter>Common\Automation</Filter>
</ClCompile>
<ClCompile Include="DataLoaders\CurrencyDataLoader.cpp">
<Filter>DataLoaders</Filter>
</ClCompile>
@ -161,9 +158,6 @@
<ClInclude Include="Common\Automation\NarratorAnnouncement.h">
<Filter>Common\Automation</Filter>
</ClInclude>
<ClInclude Include="Common\Automation\NarratorNotifier.h">
<Filter>Common\Automation</Filter>
</ClInclude>
<ClInclude Include="DataLoaders\CurrencyDataLoader.h">
<Filter>DataLoaders</Filter>
</ClInclude>
@ -209,4 +203,7 @@
<Filter>DataLoaders</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="CalcViewModel.rc" />
</ItemGroup>
</Project>

View file

@ -1,56 +0,0 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Implementation of the NarratorNotifier class.
#include "pch.h"
#include "NarratorNotifier.h"
using namespace CalculatorApp::ViewModelNative::Common::Automation;
using namespace Platform;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Automation;
using namespace Windows::UI::Xaml::Automation::Peers;
DependencyProperty ^ NarratorNotifier::s_announcementProperty;
NarratorNotifier::NarratorNotifier()
{
}
void NarratorNotifier::Announce(NarratorAnnouncement ^ announcement)
{
if (NarratorAnnouncement::IsValid(announcement))
{
if (m_announcementElement == nullptr)
{
m_announcementElement = ref new Windows::UI::Xaml::Controls::TextBlock();
}
auto peer = FrameworkElementAutomationPeer::FromElement(m_announcementElement);
if (peer != nullptr)
{
peer->RaiseNotificationEvent(announcement->Kind, announcement->Processing, announcement->Announcement, announcement->ActivityId);
}
}
}
void NarratorNotifier::RegisterDependencyProperties()
{
s_announcementProperty = DependencyProperty::Register(
L"Announcement", // The name of the dependency property.
NarratorAnnouncement::typeid, // The type of the dependency property.
NarratorNotifier::typeid, // The owner of the dependency property.
ref new PropertyMetadata(
nullptr, // Default value of the dependency property.
ref new PropertyChangedCallback(OnAnnouncementChanged)));
}
void NarratorNotifier::OnAnnouncementChanged(_In_ DependencyObject ^ dependencyObject, _In_ DependencyPropertyChangedEventArgs ^ e)
{
auto instance = safe_cast<NarratorNotifier ^>(dependencyObject);
if (instance != nullptr)
{
instance->Announce(safe_cast<NarratorAnnouncement ^>(e->NewValue));
}
}

View file

@ -1,52 +0,0 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Declaration of the NarratorNotifier class.
#pragma once
#include "NarratorAnnouncement.h"
namespace CalculatorApp::ViewModelNative::Common::Automation
{
public
ref class NarratorNotifier sealed : public Windows::UI::Xaml::DependencyObject
{
public:
NarratorNotifier();
void Announce(NarratorAnnouncement ^ announcement);
property NarratorAnnouncement^ Announcement
{
NarratorAnnouncement^ get() { return GetAnnouncement(this); }
void set(NarratorAnnouncement^ value)
{
SetAnnouncement(this, value);
}
}
static void RegisterDependencyProperties();
static property Windows::UI::Xaml::DependencyProperty
^ AnnouncementProperty { Windows::UI::Xaml::DependencyProperty ^ get() { return s_announcementProperty; } }
static NarratorAnnouncement
^ GetAnnouncement(
Windows::UI::Xaml::DependencyObject ^ element) { return safe_cast<NarratorAnnouncement ^>(element->GetValue(s_announcementProperty)); }
static void SetAnnouncement(Windows::UI::Xaml::DependencyObject ^ element, NarratorAnnouncement ^ value)
{
element->SetValue(s_announcementProperty, value);
}
private:
static void OnAnnouncementChanged(
_In_ Windows::UI::Xaml::DependencyObject ^ dependencyObject,
_In_ Windows::UI::Xaml::DependencyPropertyChangedEventArgs ^ eventArgs);
static Windows::UI::Xaml::DependencyProperty ^ s_announcementProperty;
private:
Windows::UI::Xaml::UIElement ^ m_announcementElement;
};
}

View file

@ -296,7 +296,6 @@
<ClInclude Include="..\CalcViewModel\Common\AlwaysSelectedCollectionView.h" />
<ClInclude Include="..\CalcViewModel\Common\AppResourceProvider.h" />
<ClInclude Include="..\CalcViewModel\Common\Automation\NarratorAnnouncement.h" />
<ClInclude Include="..\CalcViewModel\Common\Automation\NarratorNotifier.h" />
<ClInclude Include="..\CalcViewModel\Common\BitLength.h" />
<ClInclude Include="..\CalcViewModel\Common\CalculatorButtonPressedEventArgs.h" />
<ClInclude Include="..\CalcViewModel\Common\CalculatorButtonUser.h" />
@ -341,7 +340,6 @@
<ClCompile Include="..\CalcViewModel\ApplicationViewModel.cpp" />
<ClCompile Include="..\CalcViewModel\Common\AppResourceProvider.cpp" />
<ClCompile Include="..\CalcViewModel\Common\Automation\NarratorAnnouncement.cpp" />
<ClCompile Include="..\CalcViewModel\Common\Automation\NarratorNotifier.cpp" />
<ClCompile Include="..\CalcViewModel\Common\CalculatorButtonPressedEventArgs.cpp" />
<ClCompile Include="..\CalcViewModel\Common\CalculatorDisplay.cpp" />
<ClCompile Include="..\CalcViewModel\Common\CopyPasteManager.cpp" />

View file

@ -21,9 +21,6 @@
<ClCompile Include="..\CalcViewModel\Common\Automation\NarratorAnnouncement.cpp">
<Filter>Common\Automation</Filter>
</ClCompile>
<ClCompile Include="..\CalcViewModel\Common\Automation\NarratorNotifier.cpp">
<Filter>Common\Automation</Filter>
</ClCompile>
<ClCompile Include="..\CalcViewModel\ApplicationViewModel.cpp" />
<ClCompile Include="..\CalcViewModel\DateCalculatorViewModel.cpp" />
<ClCompile Include="..\CalcViewModel\HistoryItemViewModel.cpp" />
@ -95,9 +92,6 @@
<ClInclude Include="..\CalcViewModel\Common\Automation\NarratorAnnouncement.h">
<Filter>Common\Automation</Filter>
</ClInclude>
<ClInclude Include="..\CalcViewModel\Common\Automation\NarratorNotifier.h">
<Filter>Common\Automation</Filter>
</ClInclude>
<ClInclude Include="..\CalcViewModel\ApplicationViewModel.h" />
<ClInclude Include="..\CalcViewModel\DateCalculatorViewModel.h" />
<ClInclude Include="..\CalcViewModel\HistoryItemViewModel.h" />

View file

@ -7,7 +7,6 @@
//
using CalculatorApp.ViewModelNative.Common;
using CalculatorApp.ViewModelNative.Common.Automation;
using System;
using System.Collections.Generic;
@ -52,8 +51,6 @@ namespace CalculatorApp
m_preLaunched = false;
RegisterDependencyProperties();
// TODO: MSFT 14645325: Set this directly from XAML.
// Currently this is bugged so the property is only respected from code-behind.
HighContrastAdjustment = ApplicationHighContrastAdjustment.None;
@ -360,11 +357,6 @@ namespace CalculatorApp
_ = SetupJumpList();
}
private void RegisterDependencyProperties()
{
NarratorNotifier.RegisterDependencyProperties();
}
private void OnSuspending(object sender, SuspendingEventArgs args)
{
TraceLogger.GetInstance().LogButtonUsage();

View file

@ -1,7 +1,7 @@
<UserControl x:Class="CalculatorApp.Calculator"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:automation="using:CalculatorApp.ViewModelNative.Common.Automation"
xmlns:automation="using:CalculatorApp.ViewModel.Common.Automation"
xmlns:common="using:CalculatorApp.ViewModelNative.Common"
xmlns:contract7Present="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,7)"
xmlns:contract8NotPresent="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,8)"

View file

@ -4,6 +4,7 @@
using Calculator.Utils;
using CalculatorApp.Controls;
using CalculatorApp.ViewModel.Common.Automation;
using CalculatorApp.ViewModelNative;
using CalculatorApp.ViewModelNative.Common;
using CalculatorApp.ViewModelNative.Common.Automation;

View file

@ -4,6 +4,7 @@
using CalculatorApp.Common;
using CalculatorApp.Controls;
using CalculatorApp.Utils;
using CalculatorApp.ViewModel.Common.Automation;
using CalculatorApp.ViewModelNative;
using CalculatorApp.ViewModelNative.Common;
using CalculatorApp.ViewModelNative.Common.Automation;

View file

@ -1,7 +1,7 @@
<UserControl x:Class="CalculatorApp.HistoryList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:automation="using:CalculatorApp.ViewModelNative.Common.Automation"
xmlns:automation="using:CalculatorApp.ViewModel.Common.Automation"
xmlns:converters="using:CalculatorApp.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CalculatorApp"

View file

@ -1,7 +1,7 @@
<Page x:Class="CalculatorApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:automation="using:CalculatorApp.ViewModelNative.Common.Automation"
xmlns:automation="using:CalculatorApp.ViewModel.Common.Automation"
xmlns:converters="using:CalculatorApp.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CalculatorApp"

View file

@ -1,7 +1,7 @@
<UserControl x:Class="CalculatorApp.Settings"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:automation="using:CalculatorApp.ViewModelNative.Common.Automation"
xmlns:automation="using:CalculatorApp.ViewModel.Common.Automation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"

View file

@ -1,7 +1,7 @@
<UserControl x:Class="CalculatorApp.UnitConverter"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:automation="using:CalculatorApp.ViewModelNative.Common.Automation"
xmlns:automation="using:CalculatorApp.ViewModel.Common.Automation"
xmlns:common="using:CalculatorApp.Common"
xmlns:contract7NotPresent="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,7)"
xmlns:contract7Present="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,7)"

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
@ -101,6 +101,7 @@
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
<ItemGroup>
<Compile Include="Common\Automation\NarratorNotifier.cs" />
<Compile Include="Common\Utilities.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Properties\Calculator.ViewModel.rd.xml" />

View file

@ -0,0 +1,49 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using CalculatorApp.ViewModelNative.Common.Automation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Automation.Peers;
using Windows.UI.Xaml.Controls;
namespace CalculatorApp.ViewModel.Common.Automation
{
public class NarratorNotifier : DependencyObject
{
public static readonly DependencyProperty AnnouncementProperty =
DependencyProperty.Register(nameof(Announcement), typeof(NarratorAnnouncement), typeof(NarratorNotifier), new PropertyMetadata(null, (sender, args) =>
{
var self = (NarratorNotifier)sender;
self.Announce((NarratorAnnouncement)args.NewValue);
}));
public NarratorAnnouncement Announcement
{
get => (NarratorAnnouncement)GetValue(AnnouncementProperty);
set => SetValue(AnnouncementProperty, value);
}
public NarratorNotifier()
{
}
public void Announce(NarratorAnnouncement announcement)
{
if (NarratorAnnouncement.IsValid(announcement))
{
if (this.announcementElement == null)
{
this.announcementElement = new TextBlock();
}
var peer = FrameworkElementAutomationPeer.FromElement(this.announcementElement);
if (peer != null)
{
peer.RaiseNotificationEvent(announcement.Kind, announcement.Processing, announcement.Announcement, announcement.ActivityId);
}
}
}
private UIElement announcementElement;
}
}