diff --git a/src/CalcViewModel/CalcViewModel.vcxproj b/src/CalcViewModel/CalcViewModel.vcxproj
index e4677aa..284640c 100644
--- a/src/CalcViewModel/CalcViewModel.vcxproj
+++ b/src/CalcViewModel/CalcViewModel.vcxproj
@@ -315,12 +315,8 @@
-
-
-
-
@@ -363,11 +359,8 @@
-
-
-
diff --git a/src/CalcViewModel/CalcViewModel.vcxproj.filters b/src/CalcViewModel/CalcViewModel.vcxproj.filters
index 6c723f1..625cb91 100644
--- a/src/CalcViewModel/CalcViewModel.vcxproj.filters
+++ b/src/CalcViewModel/CalcViewModel.vcxproj.filters
@@ -69,21 +69,9 @@
Common
-
- Common\Automation
-
-
- Common\Automation
-
-
- Common\Automation
-
Common\Automation
-
- Common\Automation
-
DataLoaders
@@ -93,6 +81,9 @@
DataLoaders
+
+ Common\Automation
+
@@ -177,24 +168,9 @@
Common
-
- Common\Automation
-
-
- Common\Automation
-
-
- Common\Automation
-
-
- Common\Automation
-
Common\Automation
-
- Common\Automation
-
DataLoaders
@@ -216,8 +192,8 @@
DataLoaders
-
- DataLoaders
+
+ Common\Automation
Common
diff --git a/src/CalcViewModel/Common/Automation/INarratorAnnouncementHost.h b/src/CalcViewModel/Common/Automation/INarratorAnnouncementHost.h
deleted file mode 100644
index 9f947f4..0000000
--- a/src/CalcViewModel/Common/Automation/INarratorAnnouncementHost.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-#pragma once
-#include "NarratorAnnouncement.h"
-
-// Declaration of the INarratorAnnouncementHost interface.
-// This interface exists to hide the concrete announcement host
-// being used. Depending on the version of the OS the app is running on,
-// the app may need a host that uses LiveRegionChanged or RaiseNotification.
-
-namespace CalculatorApp::Common::Automation
-{
-public
- interface class INarratorAnnouncementHost
- {
- public:
- // Is the host available on this OS.
- bool IsHostAvailable();
-
- // Make a new instance of a concrete host.
- INarratorAnnouncementHost ^ MakeHost();
-
- // Make an announcement using the concrete host's preferred method.
- void Announce(NarratorAnnouncement ^ announcement);
- };
-}
diff --git a/src/CalcViewModel/Common/Automation/LiveRegionHost.cpp b/src/CalcViewModel/Common/Automation/LiveRegionHost.cpp
deleted file mode 100644
index 0df3a96..0000000
--- a/src/CalcViewModel/Common/Automation/LiveRegionHost.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-#include "pch.h"
-#include "LiveRegionHost.h"
-
-using namespace CalculatorApp::Common::Automation;
-using namespace Windows::UI::Xaml::Automation;
-using namespace Windows::UI::Xaml::Automation::Peers;
-using namespace Windows::UI::Xaml::Controls;
-
-LiveRegionHost::LiveRegionHost()
- : m_host(nullptr)
-{
-}
-
-bool LiveRegionHost::IsHostAvailable()
-{
- // LiveRegion is always available.
- return true;
-}
-
-INarratorAnnouncementHost ^ LiveRegionHost::MakeHost()
-{
- return ref new LiveRegionHost();
-}
-
-void LiveRegionHost::Announce(NarratorAnnouncement ^ announcement)
-{
- if (m_host == nullptr)
- {
- m_host = ref new TextBlock();
- AutomationProperties::SetLiveSetting(m_host, AutomationLiveSetting::Assertive);
- }
-
- AutomationProperties::SetName(m_host, announcement->Announcement);
- AutomationPeer ^ peer = FrameworkElementAutomationPeer::FromElement(m_host);
- if (peer != nullptr)
- {
- peer->RaiseAutomationEvent(AutomationEvents::LiveRegionChanged);
- }
-}
diff --git a/src/CalcViewModel/Common/Automation/LiveRegionHost.h b/src/CalcViewModel/Common/Automation/LiveRegionHost.h
deleted file mode 100644
index fef7c71..0000000
--- a/src/CalcViewModel/Common/Automation/LiveRegionHost.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-#pragma once
-#include "INarratorAnnouncementHost.h"
-
-// Declaration of the LiveRegionHost class.
-// This class announces NarratorAnnouncements using the LiveRegionChanged event.
-// This event is unreliable and should be deprecated in favor of the new
-// RaiseNotification API in RS3.
-
-namespace CalculatorApp::Common::Automation
-{
- // This class exists so that the app can run on RS2 and use LiveRegions
- // to host notifications on those builds.
- // When the app switches to min version RS3, this class can be removed
- // and the app will switch to using the Notification API.
- // TODO - MSFT 12735088
-public
- ref class LiveRegionHost sealed : public INarratorAnnouncementHost
- {
- public:
- LiveRegionHost();
-
- virtual bool IsHostAvailable();
- virtual INarratorAnnouncementHost ^ MakeHost();
-
- virtual void Announce(NarratorAnnouncement ^ announcement);
-
- private:
- Windows::UI::Xaml::UIElement ^ m_host;
- };
-}
diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp
index 5b6d99b..940c88c 100644
--- a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp
+++ b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp
@@ -6,6 +6,7 @@
using namespace CalculatorApp::Common::Automation;
using namespace Platform;
+using namespace Windows::UI::Xaml::Automation::Peers;
namespace CalculatorApp::Common::Automation
{
diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h
index c4c0c52..fef7e26 100644
--- a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h
+++ b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h
@@ -5,32 +5,6 @@
namespace CalculatorApp::Common::Automation
{
- // These enum types are copied from the types available in
- // Windows::UI::Xaml::Automation::Peers in the RS3 SDK.
- // When this app switches to min version RS3, these custom
- // enums should be removed and the Windows types should be used
- // instead.
- // TODO - MSFT 12735088
-public
- enum class AutomationNotificationKind
- {
- ItemAdded = 0,
- ItemRemoved = 1,
- ActionCompleted = 2,
- ActionAborted = 3,
- Other = 4
- };
-
-public
- enum class AutomationNotificationProcessing
- {
- ImportantAll = 0,
- ImportantMostRecent = 1,
- All = 2,
- MostRecent = 3,
- CurrentThenMostRecent = 4
- };
-
public
ref class NarratorAnnouncement sealed
{
@@ -41,14 +15,14 @@ public
property Platform::String
^ ActivityId { Platform::String ^ get(); }
- property AutomationNotificationKind Kind
+ property Windows::UI::Xaml::Automation::Peers::AutomationNotificationKind Kind
{
- AutomationNotificationKind get();
+ Windows::UI::Xaml::Automation::Peers::AutomationNotificationKind get();
}
- property AutomationNotificationProcessing Processing
+ property Windows::UI::Xaml::Automation::Peers::AutomationNotificationProcessing Processing
{
- AutomationNotificationProcessing get();
+ Windows::UI::Xaml::Automation::Peers::AutomationNotificationProcessing get();
}
static bool IsValid(NarratorAnnouncement ^ announcement);
@@ -61,13 +35,13 @@ public
NarratorAnnouncement(
Platform::String ^ announcement,
Platform::String ^ activityId,
- AutomationNotificationKind kind,
- AutomationNotificationProcessing processing);
+ Windows::UI::Xaml::Automation::Peers::AutomationNotificationKind kind,
+ Windows::UI::Xaml::Automation::Peers::AutomationNotificationProcessing processing);
Platform::String ^ m_announcement;
Platform::String ^ m_activityId;
- AutomationNotificationKind m_kind;
- AutomationNotificationProcessing m_processing;
+ Windows::UI::Xaml::Automation::Peers::AutomationNotificationKind m_kind;
+ Windows::UI::Xaml::Automation::Peers::AutomationNotificationProcessing m_processing;
};
// CalculatorAnnouncement is intended to contain only static methods
diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.cpp b/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.cpp
deleted file mode 100644
index a103c7e..0000000
--- a/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-#include "pch.h"
-#include "NarratorAnnouncementHostFactory.h"
-#include "NotificationHost.h"
-#include "LiveRegionHost.h"
-
-using namespace CalculatorApp::Common::Automation;
-using namespace std;
-
-INarratorAnnouncementHost ^ NarratorAnnouncementHostFactory::s_hostProducer;
-vector NarratorAnnouncementHostFactory::s_hosts;
-
-// This static variable is used only to call the initialization function, to initialize the other static variables.
-int NarratorAnnouncementHostFactory::s_init = NarratorAnnouncementHostFactory::Initialize();
-int NarratorAnnouncementHostFactory::Initialize()
-{
- RegisterHosts();
- NarratorAnnouncementHostFactory::s_hostProducer = GetHostProducer();
-
- return 0;
-}
-
-// For now, there are two type of announcement hosts.
-// We'd prefer to use Notification if it's available and fall back to LiveRegion
-// if not. The availability of the host depends on the version of the OS the app is running on.
-// When the app switches to min version RS3, the LiveRegionHost can be removed and we will always
-// use NotificationHost.
-// TODO - MSFT 12735088
-void NarratorAnnouncementHostFactory::RegisterHosts()
-{
- // The host that will be used is the first available host,
- // therefore, order of hosts is important here.
- NarratorAnnouncementHostFactory::s_hosts = { ref new NotificationHost(), ref new LiveRegionHost() };
-}
-
-INarratorAnnouncementHost ^ NarratorAnnouncementHostFactory::GetHostProducer()
-{
- for (INarratorAnnouncementHost ^ host : NarratorAnnouncementHostFactory::s_hosts)
- {
- if (host->IsHostAvailable())
- {
- return host;
- }
- }
-
- assert(false && L"No suitable AnnouncementHost was found.");
- return nullptr;
-}
-
-INarratorAnnouncementHost ^ NarratorAnnouncementHostFactory::MakeHost()
-{
- if (NarratorAnnouncementHostFactory::s_hostProducer == nullptr)
- {
- assert(false && L"No host producer has been assigned.");
- return nullptr;
- }
-
- return NarratorAnnouncementHostFactory::s_hostProducer->MakeHost();
-}
diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.h b/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.h
deleted file mode 100644
index 4b739a7..0000000
--- a/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-#pragma once
-#include "INarratorAnnouncementHost.h"
-
-// Declaration of the NarratorAnnouncementHostFactory class.
-// This class exists to hide the construction of a concrete INarratorAnnouncementHost.
-// Depending on the version of the OS the app is running on, the factory will return
-// an announcement host appropriate for that version.
-
-namespace CalculatorApp::Common::Automation
-{
- class NarratorAnnouncementHostFactory
- {
- public:
- static INarratorAnnouncementHost ^ MakeHost();
-
- private:
- NarratorAnnouncementHostFactory()
- {
- }
-
- static int Initialize();
- static void RegisterHosts();
- static INarratorAnnouncementHost ^ GetHostProducer();
-
- private:
- static int s_init;
- static INarratorAnnouncementHost ^ s_hostProducer;
- static std::vector s_hosts;
- };
-}
diff --git a/src/CalcViewModel/Common/Automation/NarratorNotifier.cpp b/src/CalcViewModel/Common/Automation/NarratorNotifier.cpp
index bc146e6..89fa0c0 100644
--- a/src/CalcViewModel/Common/Automation/NarratorNotifier.cpp
+++ b/src/CalcViewModel/Common/Automation/NarratorNotifier.cpp
@@ -5,7 +5,6 @@
#include "pch.h"
#include "NarratorNotifier.h"
-#include "NarratorAnnouncementHostFactory.h"
using namespace CalculatorApp::Common::Automation;
using namespace Platform;
@@ -17,14 +16,22 @@ DependencyProperty ^ NarratorNotifier::s_announcementProperty;
NarratorNotifier::NarratorNotifier()
{
- m_announcementHost = NarratorAnnouncementHostFactory::MakeHost();
}
void NarratorNotifier::Announce(NarratorAnnouncement ^ announcement)
{
- if (NarratorAnnouncement::IsValid(announcement) && m_announcementHost != nullptr)
+ if (NarratorAnnouncement::IsValid(announcement))
{
- m_announcementHost->Announce(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);
+ }
}
}
diff --git a/src/CalcViewModel/Common/Automation/NarratorNotifier.h b/src/CalcViewModel/Common/Automation/NarratorNotifier.h
index 55bed4e..359bb09 100644
--- a/src/CalcViewModel/Common/Automation/NarratorNotifier.h
+++ b/src/CalcViewModel/Common/Automation/NarratorNotifier.h
@@ -1,10 +1,10 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
+// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Declaration of the NarratorNotifier class.
#pragma once
-#include "INarratorAnnouncementHost.h"
+#include "NarratorAnnouncement.h"
namespace CalculatorApp::Common::Automation
{
@@ -47,6 +47,6 @@ public
static Windows::UI::Xaml::DependencyProperty ^ s_announcementProperty;
private:
- INarratorAnnouncementHost ^ m_announcementHost;
+ Windows::UI::Xaml::UIElement ^ m_announcementElement;
};
}
diff --git a/src/CalcViewModel/Common/Automation/NotificationHost.cpp b/src/CalcViewModel/Common/Automation/NotificationHost.cpp
deleted file mode 100644
index 92bf846..0000000
--- a/src/CalcViewModel/Common/Automation/NotificationHost.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-#include "pch.h"
-#include "NotificationHost.h"
-
-using namespace CalculatorApp::Common::Automation;
-using namespace Windows::Foundation::Metadata;
-using namespace Windows::UI::Xaml::Automation;
-using namespace Windows::UI::Xaml::Automation::Peers;
-using namespace Windows::UI::Xaml::Controls;
-
-NotificationHost::NotificationHost()
- : m_host(nullptr)
-{
-}
-
-bool NotificationHost::IsHostAvailable()
-{
- return ApiInformation::IsMethodPresent(L"Windows.UI.Xaml.Automation.Peers.AutomationPeer", L"RaiseNotificationEvent");
-}
-
-INarratorAnnouncementHost ^ NotificationHost::MakeHost()
-{
- return ref new NotificationHost();
-}
-
-void NotificationHost::Announce(NarratorAnnouncement ^ announcement)
-{
- if (m_host == nullptr)
- {
- m_host = ref new TextBlock();
- }
-
- auto peer = FrameworkElementAutomationPeer::FromElement(m_host);
- if (peer != nullptr)
- {
- peer->RaiseNotificationEvent(
- GetWindowsNotificationKind(announcement->Kind),
- GetWindowsNotificationProcessing(announcement->Processing),
- announcement->Announcement,
- announcement->ActivityId);
- }
-}
-
-StandardPeers::AutomationNotificationKind NotificationHost::GetWindowsNotificationKind(CustomPeers::AutomationNotificationKind customKindType)
-{
- switch (customKindType)
- {
- case CustomPeers::AutomationNotificationKind::ItemAdded:
- return StandardPeers::AutomationNotificationKind::ItemAdded;
-
- case CustomPeers::AutomationNotificationKind::ItemRemoved:
- return StandardPeers::AutomationNotificationKind::ItemRemoved;
-
- case CustomPeers::AutomationNotificationKind::ActionCompleted:
- return StandardPeers::AutomationNotificationKind::ActionCompleted;
-
- case CustomPeers::AutomationNotificationKind::ActionAborted:
- return StandardPeers::AutomationNotificationKind::ActionAborted;
-
- case CustomPeers::AutomationNotificationKind::Other:
- return StandardPeers::AutomationNotificationKind::Other;
-
- default:
- assert(false && L"Unexpected AutomationNotificationKind");
- }
-
- return StandardPeers::AutomationNotificationKind::Other;
-}
-
-StandardPeers::AutomationNotificationProcessing
-NotificationHost::GetWindowsNotificationProcessing(CustomPeers::AutomationNotificationProcessing customProcessingType)
-{
- switch (customProcessingType)
- {
- case CustomPeers::AutomationNotificationProcessing::ImportantAll:
- return StandardPeers::AutomationNotificationProcessing::ImportantAll;
-
- case CustomPeers::AutomationNotificationProcessing::ImportantMostRecent:
- return StandardPeers::AutomationNotificationProcessing::ImportantMostRecent;
-
- case CustomPeers::AutomationNotificationProcessing::All:
- return StandardPeers::AutomationNotificationProcessing::All;
-
- case CustomPeers::AutomationNotificationProcessing::MostRecent:
- return StandardPeers::AutomationNotificationProcessing::MostRecent;
-
- case CustomPeers::AutomationNotificationProcessing::CurrentThenMostRecent:
- return StandardPeers::AutomationNotificationProcessing::CurrentThenMostRecent;
-
- default:
- assert(false && L"Unexpected AutomationNotificationProcessing");
- }
-
- return StandardPeers::AutomationNotificationProcessing::ImportantMostRecent;
-}
diff --git a/src/CalcViewModel/Common/Automation/NotificationHost.h b/src/CalcViewModel/Common/Automation/NotificationHost.h
deleted file mode 100644
index d0a929c..0000000
--- a/src/CalcViewModel/Common/Automation/NotificationHost.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-#pragma once
-#include "INarratorAnnouncementHost.h"
-
-// Declaration of the NotificationHost class.
-// This class announces NarratorAnnouncements using the RaiseNotification API
-// available in RS3.
-
-namespace CalculatorApp::Common::Automation
-{
-public
- ref class NotificationHost sealed : public INarratorAnnouncementHost
- {
- public:
- NotificationHost();
-
- virtual bool IsHostAvailable();
- virtual INarratorAnnouncementHost ^ MakeHost();
-
- virtual void Announce(NarratorAnnouncement ^ announcement);
-
- private:
- static Windows::UI::Xaml::Automation::Peers::AutomationNotificationKind
- GetWindowsNotificationKind(CalculatorApp::Common::Automation::AutomationNotificationKind customKindType);
-
- static Windows::UI::Xaml::Automation::Peers::AutomationNotificationProcessing
- GetWindowsNotificationProcessing(CalculatorApp::Common::Automation::AutomationNotificationProcessing customProcessingType);
-
- private:
- Windows::UI::Xaml::UIElement ^ m_host;
- };
-}
diff --git a/src/Calculator/Converters/BooleanToVisibilityConverter.cpp b/src/Calculator/Converters/BooleanToVisibilityConverter.cpp
index 7746365..ea658d3 100644
--- a/src/Calculator/Converters/BooleanToVisibilityConverter.cpp
+++ b/src/Calculator/Converters/BooleanToVisibilityConverter.cpp
@@ -1,11 +1,9 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
+// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#include "pch.h"
#include "BooleanToVisibilityConverter.h"
-using namespace CalculatorApp::Common;
-
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::UI::Xaml;
diff --git a/src/Calculator/pch.h b/src/Calculator/pch.h
index ff02ef8..add4efd 100644
--- a/src/Calculator/pch.h
+++ b/src/Calculator/pch.h
@@ -39,16 +39,5 @@
#include "winrt/Windows.UI.ViewManagement.h"
#include "winrt/Windows.UI.Xaml.h"
-// The following namespaces exist as a convenience to resolve
-// ambiguity for Windows types in the Windows::UI::Xaml::Automation::Peers
-// namespace that only exist on RS3.
-// Once the app switches to min version RS3, the namespaces can be removed.
-// TODO - MSFT 12735088
-namespace StandardPeers = Windows::UI::Xaml::Automation::Peers;
-namespace CalculatorApp::Common::Automation
-{
-}
-namespace CustomPeers = CalculatorApp::Common::Automation;
-
// Project Headers
#include "App.xaml.h"