diff --git a/WindowsAppRuntime.sln b/WindowsAppRuntime.sln index 256c372b50..030712d2d3 100644 --- a/WindowsAppRuntime.sln +++ b/WindowsAppRuntime.sln @@ -249,12 +249,38 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Framework.Widgets", "test\D EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DynamicDependencyLifetimeManagerShadow", "dev\DynamicDependency\DynamicDependencyLifetimeManagerShadow\DynamicDependencyLifetimeManagerShadow.vcxproj", "{6539E9E1-BF36-40E5-86BC-070E99DB7B7B}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ToastNotifications", "dev\ToastNotifications\ToastNotifications.vcxitems", "{53A85993-86AA-4818-AE5C-D5FB6FA71C89}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ToastNotificationTests", "test\ToastNotificationTests\ToastNotificationTests.vcxproj", "{E977B1BD-00DC-4085-A105-E0A18E0183D7}" + ProjectSection(ProjectDependencies) = postProject + {B73AD907-6164-4294-88FB-F3C9C10DA1F1} = {B73AD907-6164-4294-88FB-F3C9C10DA1F1} + {A7391725-4EF5-438F-8DE1-645423E46955} = {A7391725-4EF5-438F-8DE1-645423E46955} + {D6A64926-4988-4C64-A5A8-2C14B1388696} = {D6A64926-4988-4C64-A5A8-2C14B1388696} + {9C1A6C58-52D6-4514-9120-5C339C5DF4BE} = {9C1A6C58-52D6-4514-9120-5C339C5DF4BE} + {F76B776E-86F5-48C5-8FC7-D2795ECC9746} = {F76B776E-86F5-48C5-8FC7-D2795ECC9746} + {4B30C685-8490-440F-9879-A75D45DAA361} = {4B30C685-8490-440F-9879-A75D45DAA361} + {B71E818A-882E-456A-87E5-4DE4A6602B99} = {B71E818A-882E-456A-87E5-4DE4A6602B99} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ToastNotificationsTestApp", "test\TestApps\ToastNotificationsTestApp\ToastNotificationsTestApp.vcxproj", "{4B30C685-8490-440F-9879-A75D45DAA361}" + ProjectSection(ProjectDependencies) = postProject + {B73AD907-6164-4294-88FB-F3C9C10DA1F1} = {B73AD907-6164-4294-88FB-F3C9C10DA1F1} + {A7391725-4EF5-438F-8DE1-645423E46955} = {A7391725-4EF5-438F-8DE1-645423E46955} + {9C1A6C58-52D6-4514-9120-5C339C5DF4BE} = {9C1A6C58-52D6-4514-9120-5C339C5DF4BE} + {F76B776E-86F5-48C5-8FC7-D2795ECC9746} = {F76B776E-86F5-48C5-8FC7-D2795ECC9746} + {B71E818A-882E-456A-87E5-4DE4A6602B99} = {B71E818A-882E-456A-87E5-4DE4A6602B99} + EndProjectSection +EndProject +Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "ToastNotificationsTestAppPackage", "test\TestApps\ToastNotificationsTestAppPackage\ToastNotificationsTestAppPackage.wapproj", "{D6A64926-4988-4C64-A5A8-2C14B1388696}" +EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution test\inc\inc.vcxitems*{0a5fee93-48b7-40ec-bb9a-b27d11060da9}*SharedItemsImports = 4 dev\PushNotifications\PushNotifications.vcxitems*{103c0c23-7ba8-4d44-a63c-83488e2e3a81}*SharedItemsImports = 9 test\inc\inc.vcxitems*{2cd5cd9b-cf45-4fa7-9769-ee4e02426bf0}*SharedItemsImports = 4 dev\EnvironmentManager\API\Microsoft.Process.Environment.vcxitems*{2f3fad1b-d3df-4866-a3a3-c2c777d55638}*SharedItemsImports = 9 + test\inc\inc.vcxitems*{4b30c685-8490-440f-9879-a75d45daa361}*SharedItemsImports = 4 + dev\ToastNotifications\ToastNotifications.vcxitems*{53a85993-86aa-4818-ae5c-d5fb6fa71c89}*SharedItemsImports = 9 dev\UndockedRegFreeWinRT\UndockedRegFreeWinRT.vcxitems*{56371ca6-144b-4989-a4e9-391ad4fa7651}*SharedItemsImports = 9 test\inc\inc.vcxitems*{56a1d696-feda-4333-bf37-772ebececb10}*SharedItemsImports = 4 test\inc\inc.vcxitems*{5b2d17fe-c371-417f-860c-3d32397c2404}*SharedItemsImports = 4 @@ -273,20 +299,25 @@ Global dev\EnvironmentManager\ChangeTracker\ChangeTracker.vcxitems*{e15c3465-9d45-495d-92ce-b91ef45e8623}*SharedItemsImports = 9 dev\AppLifecycle\AppLifecycle.vcxitems*{e3a522a3-6635-4a42-bded-1af46a15f63c}*SharedItemsImports = 9 test\inc\inc.vcxitems*{e5659a29-fe68-417b-9bc5-613073dd54df}*SharedItemsImports = 4 + test\inc\inc.vcxitems*{e977b1bd-00dc-4085-a105-e0a18e0183d7}*SharedItemsImports = 4 dev\Common\Common.vcxitems*{f76b776e-86f5-48c5-8fc7-d2795ecc9746}*SharedItemsImports = 4 EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM Release|ARM64 = Release|ARM64 Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Debug|ARM.ActiveCfg = Debug|ARM + {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Debug|ARM.Build.0 = Debug|ARM {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Debug|ARM64.Build.0 = Debug|ARM64 {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Debug|x64.ActiveCfg = Debug|x64 @@ -294,6 +325,8 @@ Global {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Debug|x86.ActiveCfg = Debug|Win32 {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Debug|x86.Build.0 = Debug|Win32 {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Release|Any CPU.ActiveCfg = Release|Win32 + {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Release|ARM.ActiveCfg = Release|ARM + {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Release|ARM.Build.0 = Release|ARM {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Release|ARM64.ActiveCfg = Release|ARM64 {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Release|ARM64.Build.0 = Release|ARM64 {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Release|x64.ActiveCfg = Release|x64 @@ -301,6 +334,8 @@ Global {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Release|x86.ActiveCfg = Release|Win32 {B73AD907-6164-4294-88FB-F3C9C10DA1F1}.Release|x86.Build.0 = Release|Win32 {7C502995-59C3-483B-86BA-815985353633}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {7C502995-59C3-483B-86BA-815985353633}.Debug|ARM.ActiveCfg = Debug|ARM + {7C502995-59C3-483B-86BA-815985353633}.Debug|ARM.Build.0 = Debug|ARM {7C502995-59C3-483B-86BA-815985353633}.Debug|ARM64.ActiveCfg = Debug|ARM64 {7C502995-59C3-483B-86BA-815985353633}.Debug|ARM64.Build.0 = Debug|ARM64 {7C502995-59C3-483B-86BA-815985353633}.Debug|x64.ActiveCfg = Debug|x64 @@ -308,6 +343,8 @@ Global {7C502995-59C3-483B-86BA-815985353633}.Debug|x86.ActiveCfg = Debug|Win32 {7C502995-59C3-483B-86BA-815985353633}.Debug|x86.Build.0 = Debug|Win32 {7C502995-59C3-483B-86BA-815985353633}.Release|Any CPU.ActiveCfg = Release|Win32 + {7C502995-59C3-483B-86BA-815985353633}.Release|ARM.ActiveCfg = Release|ARM + {7C502995-59C3-483B-86BA-815985353633}.Release|ARM.Build.0 = Release|ARM {7C502995-59C3-483B-86BA-815985353633}.Release|ARM64.ActiveCfg = Release|ARM64 {7C502995-59C3-483B-86BA-815985353633}.Release|ARM64.Build.0 = Release|ARM64 {7C502995-59C3-483B-86BA-815985353633}.Release|x64.ActiveCfg = Release|x64 @@ -315,18 +352,24 @@ Global {7C502995-59C3-483B-86BA-815985353633}.Release|x86.ActiveCfg = Release|Win32 {7C502995-59C3-483B-86BA-815985353633}.Release|x86.Build.0 = Release|Win32 {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Debug|ARM.ActiveCfg = Debug|ARM + {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Debug|ARM.Build.0 = Debug|ARM {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Debug|x64.ActiveCfg = Debug|x64 {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Debug|x64.Build.0 = Debug|x64 {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Debug|x86.ActiveCfg = Debug|Win32 {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Debug|x86.Build.0 = Debug|Win32 {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Release|Any CPU.ActiveCfg = Release|Win32 + {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Release|ARM.ActiveCfg = Release|ARM + {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Release|ARM.Build.0 = Release|ARM {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Release|ARM64.ActiveCfg = Release|ARM64 {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Release|x64.ActiveCfg = Release|x64 {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Release|x64.Build.0 = Release|x64 {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Release|x86.ActiveCfg = Release|Win32 {6BAC3B29-3A6B-4B3F-A9AB-A316AA4E48ED}.Release|x86.Build.0 = Release|Win32 {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Debug|ARM.ActiveCfg = Debug|ARM + {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Debug|ARM.Build.0 = Debug|ARM {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Debug|ARM64.ActiveCfg = Debug|ARM64 {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Debug|ARM64.Build.0 = Debug|ARM64 {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Debug|x64.ActiveCfg = Debug|x64 @@ -334,6 +377,8 @@ Global {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Debug|x86.ActiveCfg = Debug|Win32 {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Debug|x86.Build.0 = Debug|Win32 {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Release|Any CPU.ActiveCfg = Release|Win32 + {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Release|ARM.ActiveCfg = Release|ARM + {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Release|ARM.Build.0 = Release|ARM {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Release|ARM64.ActiveCfg = Release|ARM64 {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Release|ARM64.Build.0 = Release|ARM64 {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Release|x64.ActiveCfg = Release|x64 @@ -341,6 +386,8 @@ Global {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Release|x86.ActiveCfg = Release|Win32 {F76B776E-86F5-48C5-8FC7-D2795ECC9746}.Release|x86.Build.0 = Release|Win32 {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Debug|ARM.ActiveCfg = Debug|ARM + {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Debug|ARM.Build.0 = Debug|ARM {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Debug|ARM64.ActiveCfg = Debug|ARM64 {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Debug|ARM64.Build.0 = Debug|ARM64 {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Debug|x64.ActiveCfg = Debug|x64 @@ -348,6 +395,8 @@ Global {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Debug|x86.ActiveCfg = Debug|Win32 {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Debug|x86.Build.0 = Debug|Win32 {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Release|Any CPU.ActiveCfg = Release|Win32 + {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Release|ARM.ActiveCfg = Release|ARM + {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Release|ARM.Build.0 = Release|ARM {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Release|ARM64.ActiveCfg = Release|ARM64 {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Release|ARM64.Build.0 = Release|ARM64 {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Release|x64.ActiveCfg = Release|x64 @@ -355,6 +404,7 @@ Global {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Release|x86.ActiveCfg = Release|Win32 {D6BC25C5-1AA7-4C4A-A02C-B42DEDBFEA33}.Release|x86.Build.0 = Release|Win32 {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Debug|ARM.ActiveCfg = Debug|Win32 {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Debug|ARM64.ActiveCfg = Debug|ARM64 {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Debug|ARM64.Build.0 = Debug|ARM64 {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Debug|x64.ActiveCfg = Debug|x64 @@ -362,6 +412,7 @@ Global {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Debug|x86.ActiveCfg = Debug|Win32 {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Debug|x86.Build.0 = Debug|Win32 {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Release|Any CPU.ActiveCfg = Release|Win32 + {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Release|ARM.ActiveCfg = Release|Win32 {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Release|ARM64.ActiveCfg = Release|ARM64 {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Release|ARM64.Build.0 = Release|ARM64 {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Release|x64.ActiveCfg = Release|x64 @@ -369,6 +420,7 @@ Global {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Release|x86.ActiveCfg = Release|Win32 {58E95711-A12F-4C0E-A978-C6B4A0842AC8}.Release|x86.Build.0 = Release|Win32 {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Debug|ARM.ActiveCfg = Debug|Win32 {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Debug|ARM64.ActiveCfg = Debug|ARM64 {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Debug|ARM64.Build.0 = Debug|ARM64 {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Debug|x64.ActiveCfg = Debug|x64 @@ -376,6 +428,7 @@ Global {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Debug|x86.ActiveCfg = Debug|Win32 {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Debug|x86.Build.0 = Debug|Win32 {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Release|Any CPU.ActiveCfg = Release|Win32 + {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Release|ARM.ActiveCfg = Release|Win32 {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Release|ARM64.ActiveCfg = Release|ARM64 {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Release|ARM64.Build.0 = Release|ARM64 {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Release|x64.ActiveCfg = Release|x64 @@ -383,18 +436,22 @@ Global {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Release|x86.ActiveCfg = Release|Win32 {66D0D8B1-FAF4-4C6A-8303-07F3BA356FE3}.Release|x86.Build.0 = Release|Win32 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Debug|ARM.ActiveCfg = Debug|Win32 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Debug|ARM64.ActiveCfg = Debug|Win32 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Debug|x64.ActiveCfg = Debug|x64 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Debug|x64.Build.0 = Debug|x64 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Debug|x86.ActiveCfg = Debug|Win32 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Debug|x86.Build.0 = Debug|Win32 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Release|Any CPU.ActiveCfg = Release|Win32 + {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Release|ARM.ActiveCfg = Release|Win32 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Release|ARM64.ActiveCfg = Release|Win32 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Release|x64.ActiveCfg = Release|x64 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Release|x64.Build.0 = Release|x64 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Release|x86.ActiveCfg = Release|Win32 {9C1A6C58-52D6-4514-9120-5C339C5DF4BE}.Release|x86.Build.0 = Release|Win32 {51293DFA-614B-4355-A60D-B30DF3228FD1}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {51293DFA-614B-4355-A60D-B30DF3228FD1}.Debug|ARM.ActiveCfg = Debug|ARM + {51293DFA-614B-4355-A60D-B30DF3228FD1}.Debug|ARM.Build.0 = Debug|ARM {51293DFA-614B-4355-A60D-B30DF3228FD1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {51293DFA-614B-4355-A60D-B30DF3228FD1}.Debug|ARM64.Build.0 = Debug|ARM64 {51293DFA-614B-4355-A60D-B30DF3228FD1}.Debug|x64.ActiveCfg = Debug|x64 @@ -402,6 +459,8 @@ Global {51293DFA-614B-4355-A60D-B30DF3228FD1}.Debug|x86.ActiveCfg = Debug|Win32 {51293DFA-614B-4355-A60D-B30DF3228FD1}.Debug|x86.Build.0 = Debug|Win32 {51293DFA-614B-4355-A60D-B30DF3228FD1}.Release|Any CPU.ActiveCfg = Release|Win32 + {51293DFA-614B-4355-A60D-B30DF3228FD1}.Release|ARM.ActiveCfg = Release|ARM + {51293DFA-614B-4355-A60D-B30DF3228FD1}.Release|ARM.Build.0 = Release|ARM {51293DFA-614B-4355-A60D-B30DF3228FD1}.Release|ARM64.ActiveCfg = Release|ARM64 {51293DFA-614B-4355-A60D-B30DF3228FD1}.Release|ARM64.Build.0 = Release|ARM64 {51293DFA-614B-4355-A60D-B30DF3228FD1}.Release|x64.ActiveCfg = Release|x64 @@ -409,6 +468,8 @@ Global {51293DFA-614B-4355-A60D-B30DF3228FD1}.Release|x86.ActiveCfg = Release|Win32 {51293DFA-614B-4355-A60D-B30DF3228FD1}.Release|x86.Build.0 = Release|Win32 {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Debug|ARM.ActiveCfg = Debug|ARM + {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Debug|ARM.Build.0 = Debug|ARM {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Debug|ARM64.Build.0 = Debug|ARM64 {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Debug|x64.ActiveCfg = Debug|x64 @@ -416,6 +477,8 @@ Global {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Debug|x86.ActiveCfg = Debug|Win32 {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Debug|x86.Build.0 = Debug|Win32 {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Release|Any CPU.ActiveCfg = Release|Win32 + {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Release|ARM.ActiveCfg = Release|ARM + {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Release|ARM.Build.0 = Release|ARM {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Release|ARM64.ActiveCfg = Release|ARM64 {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Release|ARM64.Build.0 = Release|ARM64 {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Release|x64.ActiveCfg = Release|x64 @@ -423,18 +486,22 @@ Global {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Release|x86.ActiveCfg = Release|Win32 {1A41BB90-CC34-4EDD-9A27-50714CDBC169}.Release|x86.Build.0 = Release|Win32 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {B71E818A-882E-456A-87E5-4DE4A6602B99}.Debug|ARM.ActiveCfg = Debug|Win32 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Debug|ARM64.ActiveCfg = Debug|Win32 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Debug|x64.ActiveCfg = Debug|x64 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Debug|x64.Build.0 = Debug|x64 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Debug|x86.ActiveCfg = Debug|Win32 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Debug|x86.Build.0 = Debug|Win32 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Release|Any CPU.ActiveCfg = Release|Win32 + {B71E818A-882E-456A-87E5-4DE4A6602B99}.Release|ARM.ActiveCfg = Release|Win32 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Release|ARM64.ActiveCfg = Release|Win32 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Release|x64.ActiveCfg = Release|x64 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Release|x64.Build.0 = Release|x64 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Release|x86.ActiveCfg = Release|Win32 {B71E818A-882E-456A-87E5-4DE4A6602B99}.Release|x86.Build.0 = Release|Win32 {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Debug|ARM.ActiveCfg = Debug|ARM + {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Debug|ARM.Build.0 = Debug|ARM {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Debug|ARM64.Build.0 = Debug|ARM64 {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Debug|x64.ActiveCfg = Debug|x64 @@ -442,6 +509,8 @@ Global {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Debug|x86.ActiveCfg = Debug|Win32 {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Debug|x86.Build.0 = Debug|Win32 {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Release|Any CPU.ActiveCfg = Release|Win32 + {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Release|ARM.ActiveCfg = Release|ARM + {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Release|ARM.Build.0 = Release|ARM {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Release|ARM64.ActiveCfg = Release|ARM64 {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Release|ARM64.Build.0 = Release|ARM64 {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Release|x64.ActiveCfg = Release|x64 @@ -449,18 +518,22 @@ Global {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Release|x86.ActiveCfg = Release|Win32 {2E5BF0D2-78FA-4B60-A341-F65A0D58BD86}.Release|x86.Build.0 = Release|Win32 {A7391725-4EF5-438F-8DE1-645423E46955}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {A7391725-4EF5-438F-8DE1-645423E46955}.Debug|ARM.ActiveCfg = Debug|Win32 {A7391725-4EF5-438F-8DE1-645423E46955}.Debug|ARM64.ActiveCfg = Debug|Win32 {A7391725-4EF5-438F-8DE1-645423E46955}.Debug|x64.ActiveCfg = Debug|x64 {A7391725-4EF5-438F-8DE1-645423E46955}.Debug|x64.Build.0 = Debug|x64 {A7391725-4EF5-438F-8DE1-645423E46955}.Debug|x86.ActiveCfg = Debug|Win32 {A7391725-4EF5-438F-8DE1-645423E46955}.Debug|x86.Build.0 = Debug|Win32 {A7391725-4EF5-438F-8DE1-645423E46955}.Release|Any CPU.ActiveCfg = Release|Win32 + {A7391725-4EF5-438F-8DE1-645423E46955}.Release|ARM.ActiveCfg = Release|Win32 {A7391725-4EF5-438F-8DE1-645423E46955}.Release|ARM64.ActiveCfg = Release|Win32 {A7391725-4EF5-438F-8DE1-645423E46955}.Release|x64.ActiveCfg = Release|x64 {A7391725-4EF5-438F-8DE1-645423E46955}.Release|x64.Build.0 = Release|x64 {A7391725-4EF5-438F-8DE1-645423E46955}.Release|x86.ActiveCfg = Release|Win32 {A7391725-4EF5-438F-8DE1-645423E46955}.Release|x86.Build.0 = Release|Win32 {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Debug|ARM.ActiveCfg = Debug|ARM + {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Debug|ARM.Build.0 = Debug|ARM {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Debug|ARM64.ActiveCfg = Debug|ARM64 {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Debug|ARM64.Build.0 = Debug|ARM64 {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Debug|x64.ActiveCfg = Debug|x64 @@ -468,6 +541,8 @@ Global {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Debug|x86.ActiveCfg = Debug|Win32 {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Debug|x86.Build.0 = Debug|Win32 {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Release|Any CPU.ActiveCfg = Release|Win32 + {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Release|ARM.ActiveCfg = Release|ARM + {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Release|ARM.Build.0 = Release|ARM {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Release|ARM64.ActiveCfg = Release|ARM64 {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Release|ARM64.Build.0 = Release|ARM64 {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Release|x64.ActiveCfg = Release|x64 @@ -475,6 +550,8 @@ Global {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Release|x86.ActiveCfg = Release|Win32 {8C79C46D-1577-44CA-83DF-88B74C3E4586}.Release|x86.Build.0 = Release|Win32 {CCD23028-B9D3-410B-836E-20B2E7C08451}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {CCD23028-B9D3-410B-836E-20B2E7C08451}.Debug|ARM.ActiveCfg = Debug|ARM + {CCD23028-B9D3-410B-836E-20B2E7C08451}.Debug|ARM.Build.0 = Debug|ARM {CCD23028-B9D3-410B-836E-20B2E7C08451}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CCD23028-B9D3-410B-836E-20B2E7C08451}.Debug|ARM64.Build.0 = Debug|ARM64 {CCD23028-B9D3-410B-836E-20B2E7C08451}.Debug|x64.ActiveCfg = Debug|x64 @@ -482,6 +559,8 @@ Global {CCD23028-B9D3-410B-836E-20B2E7C08451}.Debug|x86.ActiveCfg = Debug|Win32 {CCD23028-B9D3-410B-836E-20B2E7C08451}.Debug|x86.Build.0 = Debug|Win32 {CCD23028-B9D3-410B-836E-20B2E7C08451}.Release|Any CPU.ActiveCfg = Release|Win32 + {CCD23028-B9D3-410B-836E-20B2E7C08451}.Release|ARM.ActiveCfg = Release|ARM + {CCD23028-B9D3-410B-836E-20B2E7C08451}.Release|ARM.Build.0 = Release|ARM {CCD23028-B9D3-410B-836E-20B2E7C08451}.Release|ARM64.ActiveCfg = Release|ARM64 {CCD23028-B9D3-410B-836E-20B2E7C08451}.Release|ARM64.Build.0 = Release|ARM64 {CCD23028-B9D3-410B-836E-20B2E7C08451}.Release|x64.ActiveCfg = Release|x64 @@ -489,18 +568,23 @@ Global {CCD23028-B9D3-410B-836E-20B2E7C08451}.Release|x86.ActiveCfg = Release|Win32 {CCD23028-B9D3-410B-836E-20B2E7C08451}.Release|x86.Build.0 = Release|Win32 {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Debug|ARM.ActiveCfg = Debug|ARM + {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Debug|ARM.Build.0 = Debug|ARM {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Debug|ARM64.ActiveCfg = Debug|ARM64 {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Debug|x64.ActiveCfg = Debug|x64 {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Debug|x64.Build.0 = Debug|x64 {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Debug|x86.ActiveCfg = Debug|Win32 {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Debug|x86.Build.0 = Debug|Win32 {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Release|Any CPU.ActiveCfg = Release|Win32 + {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Release|ARM.ActiveCfg = Release|ARM + {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Release|ARM.Build.0 = Release|ARM {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Release|ARM64.ActiveCfg = Release|ARM64 {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Release|x64.ActiveCfg = Release|x64 {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Release|x64.Build.0 = Release|x64 {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Release|x86.ActiveCfg = Release|Win32 {B2546322-D329-4F6C-9C2E-7EFC3C9ED214}.Release|x86.Build.0 = Release|Win32 {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Debug|ARM.ActiveCfg = Debug|Win32 {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Debug|ARM64.ActiveCfg = Debug|ARM64 {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Debug|ARM64.Build.0 = Debug|ARM64 {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Debug|x64.ActiveCfg = Debug|x64 @@ -508,6 +592,7 @@ Global {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Debug|x86.ActiveCfg = Debug|Win32 {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Debug|x86.Build.0 = Debug|Win32 {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Release|Any CPU.ActiveCfg = Release|Win32 + {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Release|ARM.ActiveCfg = Release|Win32 {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Release|ARM64.ActiveCfg = Release|ARM64 {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Release|ARM64.Build.0 = Release|ARM64 {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Release|x64.ActiveCfg = Release|x64 @@ -515,30 +600,36 @@ Global {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Release|x86.ActiveCfg = Release|Win32 {C62688A1-16A0-4729-B6ED-842F4FAA29F3}.Release|x86.Build.0 = Release|Win32 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Debug|ARM.ActiveCfg = Debug|Win32 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Debug|ARM64.ActiveCfg = Debug|Win32 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Debug|x64.ActiveCfg = Debug|x64 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Debug|x64.Build.0 = Debug|x64 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Debug|x86.ActiveCfg = Debug|Win32 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Debug|x86.Build.0 = Debug|Win32 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Release|ARM.ActiveCfg = Release|Win32 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Release|ARM64.ActiveCfg = Release|Win32 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Release|x64.ActiveCfg = Release|x64 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Release|x64.Build.0 = Release|x64 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Release|x86.ActiveCfg = Release|Win32 {5D97F9A6-AFAD-4B0C-B609-E62DDDE6E4FA}.Release|x86.Build.0 = Release|Win32 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Debug|ARM.ActiveCfg = Debug|Win32 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Debug|ARM64.ActiveCfg = Debug|Win32 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Debug|x64.ActiveCfg = Debug|x64 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Debug|x64.Build.0 = Debug|x64 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Debug|x86.ActiveCfg = Debug|Win32 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Debug|x86.Build.0 = Debug|Win32 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Release|Any CPU.ActiveCfg = Release|Win32 + {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Release|ARM.ActiveCfg = Release|Win32 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Release|ARM64.ActiveCfg = Release|Win32 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Release|x64.ActiveCfg = Release|x64 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Release|x64.Build.0 = Release|x64 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Release|x86.ActiveCfg = Release|Win32 {72F124D1-A1D2-44BC-8941-1B4C452591E5}.Release|x86.Build.0 = Release|Win32 {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Debug|ARM.ActiveCfg = Debug|ARM + {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Debug|ARM.Build.0 = Debug|ARM {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Debug|ARM64.ActiveCfg = Debug|ARM64 {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Debug|ARM64.Build.0 = Debug|ARM64 {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Debug|x64.ActiveCfg = Debug|x64 @@ -546,6 +637,8 @@ Global {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Debug|x86.ActiveCfg = Debug|Win32 {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Debug|x86.Build.0 = Debug|Win32 {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Release|Any CPU.ActiveCfg = Release|Win32 + {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Release|ARM.ActiveCfg = Release|ARM + {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Release|ARM.Build.0 = Release|ARM {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Release|ARM64.ActiveCfg = Release|ARM64 {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Release|ARM64.Build.0 = Release|ARM64 {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Release|x64.ActiveCfg = Release|x64 @@ -553,6 +646,9 @@ Global {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Release|x86.ActiveCfg = Release|Win32 {8E52D7EA-A200-4A6B-BA74-8EFB49468CAF}.Release|x86.Build.0 = Release|Win32 {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Debug|ARM.ActiveCfg = Debug|ARM + {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Debug|ARM.Build.0 = Debug|ARM + {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Debug|ARM.Deploy.0 = Debug|ARM {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Debug|ARM64.Build.0 = Debug|ARM64 {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Debug|ARM64.Deploy.0 = Debug|ARM64 @@ -563,6 +659,9 @@ Global {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Debug|x86.Build.0 = Debug|x86 {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Debug|x86.Deploy.0 = Debug|x86 {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Release|ARM.ActiveCfg = Release|ARM + {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Release|ARM.Build.0 = Release|ARM + {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Release|ARM.Deploy.0 = Release|ARM {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Release|ARM64.ActiveCfg = Release|ARM64 {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Release|ARM64.Build.0 = Release|ARM64 {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Release|ARM64.Deploy.0 = Release|ARM64 @@ -573,6 +672,7 @@ Global {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Release|x86.Build.0 = Release|x86 {A3FBA80D-5B35-471F-9A45-DB4B29E195B9}.Release|x86.Deploy.0 = Release|x86 {5B2D17FE-C371-417F-860C-3D32397C2404}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5B2D17FE-C371-417F-860C-3D32397C2404}.Debug|ARM.ActiveCfg = Debug|Win32 {5B2D17FE-C371-417F-860C-3D32397C2404}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5B2D17FE-C371-417F-860C-3D32397C2404}.Debug|ARM64.Build.0 = Debug|ARM64 {5B2D17FE-C371-417F-860C-3D32397C2404}.Debug|x64.ActiveCfg = Debug|x64 @@ -580,6 +680,7 @@ Global {5B2D17FE-C371-417F-860C-3D32397C2404}.Debug|x86.ActiveCfg = Debug|Win32 {5B2D17FE-C371-417F-860C-3D32397C2404}.Debug|x86.Build.0 = Debug|Win32 {5B2D17FE-C371-417F-860C-3D32397C2404}.Release|Any CPU.ActiveCfg = Release|Win32 + {5B2D17FE-C371-417F-860C-3D32397C2404}.Release|ARM.ActiveCfg = Release|Win32 {5B2D17FE-C371-417F-860C-3D32397C2404}.Release|ARM64.ActiveCfg = Release|ARM64 {5B2D17FE-C371-417F-860C-3D32397C2404}.Release|ARM64.Build.0 = Release|ARM64 {5B2D17FE-C371-417F-860C-3D32397C2404}.Release|x64.ActiveCfg = Release|x64 @@ -587,6 +688,7 @@ Global {5B2D17FE-C371-417F-860C-3D32397C2404}.Release|x86.ActiveCfg = Release|Win32 {5B2D17FE-C371-417F-860C-3D32397C2404}.Release|x86.Build.0 = Release|Win32 {424A6D96-37EE-4456-8347-08AB425C8DBE}.Debug|Any CPU.ActiveCfg = Debug|ARM64 + {424A6D96-37EE-4456-8347-08AB425C8DBE}.Debug|ARM.ActiveCfg = Debug|x86 {424A6D96-37EE-4456-8347-08AB425C8DBE}.Debug|ARM64.ActiveCfg = Debug|ARM64 {424A6D96-37EE-4456-8347-08AB425C8DBE}.Debug|ARM64.Build.0 = Debug|ARM64 {424A6D96-37EE-4456-8347-08AB425C8DBE}.Debug|ARM64.Deploy.0 = Debug|ARM64 @@ -597,6 +699,7 @@ Global {424A6D96-37EE-4456-8347-08AB425C8DBE}.Debug|x86.Build.0 = Debug|x86 {424A6D96-37EE-4456-8347-08AB425C8DBE}.Debug|x86.Deploy.0 = Debug|x86 {424A6D96-37EE-4456-8347-08AB425C8DBE}.Release|Any CPU.ActiveCfg = Release|ARM64 + {424A6D96-37EE-4456-8347-08AB425C8DBE}.Release|ARM.ActiveCfg = Release|x86 {424A6D96-37EE-4456-8347-08AB425C8DBE}.Release|ARM64.ActiveCfg = Release|ARM64 {424A6D96-37EE-4456-8347-08AB425C8DBE}.Release|ARM64.Build.0 = Release|ARM64 {424A6D96-37EE-4456-8347-08AB425C8DBE}.Release|ARM64.Deploy.0 = Release|ARM64 @@ -607,6 +710,7 @@ Global {424A6D96-37EE-4456-8347-08AB425C8DBE}.Release|x86.Build.0 = Release|x86 {424A6D96-37EE-4456-8347-08AB425C8DBE}.Release|x86.Deploy.0 = Release|x86 {56A1D696-FEDA-4333-BF37-772EBECECB10}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {56A1D696-FEDA-4333-BF37-772EBECECB10}.Debug|ARM.ActiveCfg = Debug|Win32 {56A1D696-FEDA-4333-BF37-772EBECECB10}.Debug|ARM64.ActiveCfg = Debug|ARM64 {56A1D696-FEDA-4333-BF37-772EBECECB10}.Debug|ARM64.Build.0 = Debug|ARM64 {56A1D696-FEDA-4333-BF37-772EBECECB10}.Debug|x64.ActiveCfg = Debug|x64 @@ -614,6 +718,7 @@ Global {56A1D696-FEDA-4333-BF37-772EBECECB10}.Debug|x86.ActiveCfg = Debug|Win32 {56A1D696-FEDA-4333-BF37-772EBECECB10}.Debug|x86.Build.0 = Debug|Win32 {56A1D696-FEDA-4333-BF37-772EBECECB10}.Release|Any CPU.ActiveCfg = Release|Win32 + {56A1D696-FEDA-4333-BF37-772EBECECB10}.Release|ARM.ActiveCfg = Release|Win32 {56A1D696-FEDA-4333-BF37-772EBECECB10}.Release|ARM64.ActiveCfg = Release|ARM64 {56A1D696-FEDA-4333-BF37-772EBECECB10}.Release|ARM64.Build.0 = Release|ARM64 {56A1D696-FEDA-4333-BF37-772EBECECB10}.Release|x64.ActiveCfg = Release|x64 @@ -621,6 +726,7 @@ Global {56A1D696-FEDA-4333-BF37-772EBECECB10}.Release|x86.ActiveCfg = Release|Win32 {56A1D696-FEDA-4333-BF37-772EBECECB10}.Release|x86.Build.0 = Release|Win32 {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Debug|Any CPU.ActiveCfg = Debug|ARM64 + {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Debug|ARM.ActiveCfg = Debug|x86 {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Debug|ARM64.ActiveCfg = Debug|ARM64 {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Debug|ARM64.Build.0 = Debug|ARM64 {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Debug|ARM64.Deploy.0 = Debug|ARM64 @@ -631,6 +737,7 @@ Global {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Debug|x86.Build.0 = Debug|x86 {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Debug|x86.Deploy.0 = Debug|x86 {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Release|Any CPU.ActiveCfg = Release|ARM64 + {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Release|ARM.ActiveCfg = Release|x86 {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Release|ARM64.ActiveCfg = Release|ARM64 {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Release|ARM64.Build.0 = Release|ARM64 {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Release|ARM64.Deploy.0 = Release|ARM64 @@ -641,6 +748,7 @@ Global {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Release|x86.Build.0 = Release|x86 {D012E4BB-F16B-472D-A26D-D449CEFA988E}.Release|x86.Deploy.0 = Release|x86 {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Debug|ARM.ActiveCfg = Debug|Win32 {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Debug|ARM64.Build.0 = Debug|ARM64 {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Debug|x64.ActiveCfg = Debug|x64 @@ -648,6 +756,7 @@ Global {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Debug|x86.ActiveCfg = Debug|Win32 {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Debug|x86.Build.0 = Debug|Win32 {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Release|Any CPU.ActiveCfg = Release|Win32 + {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Release|ARM.ActiveCfg = Release|Win32 {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Release|ARM64.ActiveCfg = Release|ARM64 {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Release|ARM64.Build.0 = Release|ARM64 {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Release|x64.ActiveCfg = Release|x64 @@ -655,6 +764,7 @@ Global {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Release|x86.ActiveCfg = Release|Win32 {0A5FEE93-48B7-40EC-BB9A-B27D11060DA9}.Release|x86.Build.0 = Release|Win32 {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Debug|ARM.ActiveCfg = Debug|Win32 {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Debug|ARM64.Build.0 = Debug|ARM64 {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Debug|x64.ActiveCfg = Debug|x64 @@ -662,6 +772,7 @@ Global {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Debug|x86.ActiveCfg = Debug|Win32 {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Debug|x86.Build.0 = Debug|Win32 {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Release|Any CPU.ActiveCfg = Release|Win32 + {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Release|ARM.ActiveCfg = Release|Win32 {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Release|ARM64.ActiveCfg = Release|ARM64 {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Release|ARM64.Build.0 = Release|ARM64 {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Release|x64.ActiveCfg = Release|x64 @@ -669,18 +780,22 @@ Global {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Release|x86.ActiveCfg = Release|Win32 {1307DD1B-BBE8-4CD0-B1A0-0DB6D61EEAA0}.Release|x86.Build.0 = Release|Win32 {C422B090-F501-4204-8068-1084B0799405}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {C422B090-F501-4204-8068-1084B0799405}.Debug|ARM.ActiveCfg = Debug|Win32 {C422B090-F501-4204-8068-1084B0799405}.Debug|ARM64.ActiveCfg = Debug|Win32 {C422B090-F501-4204-8068-1084B0799405}.Debug|x64.ActiveCfg = Debug|x64 {C422B090-F501-4204-8068-1084B0799405}.Debug|x64.Build.0 = Debug|x64 {C422B090-F501-4204-8068-1084B0799405}.Debug|x86.ActiveCfg = Debug|Win32 {C422B090-F501-4204-8068-1084B0799405}.Debug|x86.Build.0 = Debug|Win32 {C422B090-F501-4204-8068-1084B0799405}.Release|Any CPU.ActiveCfg = Release|Win32 + {C422B090-F501-4204-8068-1084B0799405}.Release|ARM.ActiveCfg = Release|Win32 {C422B090-F501-4204-8068-1084B0799405}.Release|ARM64.ActiveCfg = Release|Win32 {C422B090-F501-4204-8068-1084B0799405}.Release|x64.ActiveCfg = Release|x64 {C422B090-F501-4204-8068-1084B0799405}.Release|x64.Build.0 = Release|x64 {C422B090-F501-4204-8068-1084B0799405}.Release|x86.ActiveCfg = Release|Win32 {C422B090-F501-4204-8068-1084B0799405}.Release|x86.Build.0 = Release|Win32 {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Debug|ARM.ActiveCfg = Debug|ARM + {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Debug|ARM.Build.0 = Debug|ARM {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Debug|ARM64.ActiveCfg = Debug|ARM64 {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Debug|ARM64.Build.0 = Debug|ARM64 {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Debug|x64.ActiveCfg = Debug|x64 @@ -688,6 +803,8 @@ Global {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Debug|x86.ActiveCfg = Debug|Win32 {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Debug|x86.Build.0 = Debug|Win32 {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Release|Any CPU.ActiveCfg = Release|Win32 + {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Release|ARM.ActiveCfg = Release|ARM + {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Release|ARM.Build.0 = Release|ARM {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Release|ARM64.ActiveCfg = Release|ARM64 {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Release|ARM64.Build.0 = Release|ARM64 {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Release|x64.ActiveCfg = Release|x64 @@ -695,6 +812,7 @@ Global {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Release|x86.ActiveCfg = Release|Win32 {BF3FCED0-CADB-490A-93A7-4D90E1F45AB0}.Release|x86.Build.0 = Release|Win32 {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Debug|ARM.ActiveCfg = Debug|Win32 {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Debug|ARM64.Build.0 = Debug|ARM64 {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Debug|x64.ActiveCfg = Debug|x64 @@ -702,6 +820,7 @@ Global {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Debug|x86.ActiveCfg = Debug|Win32 {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Debug|x86.Build.0 = Debug|Win32 {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Release|Any CPU.ActiveCfg = Release|Win32 + {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Release|ARM.ActiveCfg = Release|Win32 {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Release|ARM64.ActiveCfg = Release|ARM64 {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Release|ARM64.Build.0 = Release|ARM64 {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Release|x64.ActiveCfg = Release|x64 @@ -709,18 +828,21 @@ Global {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Release|x86.ActiveCfg = Release|Win32 {1DEBBFF6-EE6E-4944-9DE2-35B7A686AF42}.Release|x86.Build.0 = Release|Win32 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Debug|ARM.ActiveCfg = Debug|Win32 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Debug|ARM64.ActiveCfg = Debug|Win32 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Debug|x64.ActiveCfg = Debug|x64 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Debug|x64.Build.0 = Debug|x64 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Debug|x86.ActiveCfg = Debug|Win32 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Debug|x86.Build.0 = Debug|Win32 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Release|Any CPU.ActiveCfg = Release|Win32 + {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Release|ARM.ActiveCfg = Release|Win32 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Release|ARM64.ActiveCfg = Release|Win32 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Release|x64.ActiveCfg = Release|x64 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Release|x64.Build.0 = Release|x64 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Release|x86.ActiveCfg = Release|Win32 {CBD95746-61CE-4F31-B6CC-C5ABF1766180}.Release|x86.Build.0 = Release|Win32 {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Debug|Any CPU.ActiveCfg = Debug|x86 + {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Debug|ARM.ActiveCfg = Debug|x86 {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Debug|ARM64.ActiveCfg = Debug|arm64 {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Debug|ARM64.Build.0 = Debug|arm64 {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Debug|x64.ActiveCfg = Debug|x64 @@ -728,6 +850,7 @@ Global {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Debug|x86.ActiveCfg = Debug|x86 {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Debug|x86.Build.0 = Debug|x86 {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Release|Any CPU.ActiveCfg = Release|x86 + {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Release|ARM.ActiveCfg = Release|x86 {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Release|ARM64.ActiveCfg = Release|arm64 {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Release|ARM64.Build.0 = Release|arm64 {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Release|x64.ActiveCfg = Release|x64 @@ -735,6 +858,7 @@ Global {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Release|x86.ActiveCfg = Release|x86 {47D8D21D-F022-4D58-8DB2-8B467756E08C}.Release|x86.Build.0 = Release|x86 {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Debug|Any CPU.ActiveCfg = Debug|x86 + {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Debug|ARM.ActiveCfg = Debug|x86 {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Debug|ARM64.ActiveCfg = Debug|arm64 {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Debug|ARM64.Build.0 = Debug|arm64 {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Debug|x64.ActiveCfg = Debug|x64 @@ -742,6 +866,7 @@ Global {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Debug|x86.ActiveCfg = Debug|x86 {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Debug|x86.Build.0 = Debug|x86 {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Release|Any CPU.ActiveCfg = Release|x86 + {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Release|ARM.ActiveCfg = Release|x86 {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Release|ARM64.ActiveCfg = Release|arm64 {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Release|ARM64.Build.0 = Release|arm64 {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Release|x64.ActiveCfg = Release|x64 @@ -749,6 +874,7 @@ Global {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Release|x86.ActiveCfg = Release|x86 {4782BB2A-2968-44B4-867C-5FAEB7A51C6B}.Release|x86.Build.0 = Release|x86 {D417EDBE-D783-484F-83F3-710DEC7CB585}.Debug|Any CPU.ActiveCfg = Debug|x86 + {D417EDBE-D783-484F-83F3-710DEC7CB585}.Debug|ARM.ActiveCfg = Debug|x86 {D417EDBE-D783-484F-83F3-710DEC7CB585}.Debug|ARM64.ActiveCfg = Debug|x86 {D417EDBE-D783-484F-83F3-710DEC7CB585}.Debug|ARM64.Build.0 = Debug|x86 {D417EDBE-D783-484F-83F3-710DEC7CB585}.Debug|x64.ActiveCfg = Debug|x64 @@ -756,6 +882,7 @@ Global {D417EDBE-D783-484F-83F3-710DEC7CB585}.Debug|x86.ActiveCfg = Debug|x86 {D417EDBE-D783-484F-83F3-710DEC7CB585}.Debug|x86.Build.0 = Debug|x86 {D417EDBE-D783-484F-83F3-710DEC7CB585}.Release|Any CPU.ActiveCfg = Release|x86 + {D417EDBE-D783-484F-83F3-710DEC7CB585}.Release|ARM.ActiveCfg = Release|x86 {D417EDBE-D783-484F-83F3-710DEC7CB585}.Release|ARM64.ActiveCfg = Release|arm64 {D417EDBE-D783-484F-83F3-710DEC7CB585}.Release|ARM64.Build.0 = Release|arm64 {D417EDBE-D783-484F-83F3-710DEC7CB585}.Release|x64.ActiveCfg = Release|x64 @@ -763,18 +890,21 @@ Global {D417EDBE-D783-484F-83F3-710DEC7CB585}.Release|x86.ActiveCfg = Release|x86 {D417EDBE-D783-484F-83F3-710DEC7CB585}.Release|x86.Build.0 = Release|x86 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Debug|ARM.ActiveCfg = Debug|Win32 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Debug|ARM64.ActiveCfg = Debug|ARM64 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Debug|x64.ActiveCfg = Debug|x64 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Debug|x64.Build.0 = Debug|x64 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Debug|x86.ActiveCfg = Debug|Win32 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Debug|x86.Build.0 = Debug|Win32 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Release|Any CPU.ActiveCfg = Release|Win32 + {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Release|ARM.ActiveCfg = Release|Win32 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Release|ARM64.ActiveCfg = Release|ARM64 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Release|x64.ActiveCfg = Release|x64 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Release|x64.Build.0 = Release|x64 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Release|x86.ActiveCfg = Release|Win32 {8F2C21F1-47AB-428C-A110-EE33FD7D9493}.Release|x86.Build.0 = Release|Win32 {E5659A29-FE68-417B-9BC5-613073DD54DF}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {E5659A29-FE68-417B-9BC5-613073DD54DF}.Debug|ARM.ActiveCfg = Debug|Win32 {E5659A29-FE68-417B-9BC5-613073DD54DF}.Debug|ARM64.ActiveCfg = Debug|ARM64 {E5659A29-FE68-417B-9BC5-613073DD54DF}.Debug|ARM64.Build.0 = Debug|ARM64 {E5659A29-FE68-417B-9BC5-613073DD54DF}.Debug|x64.ActiveCfg = Debug|x64 @@ -782,6 +912,7 @@ Global {E5659A29-FE68-417B-9BC5-613073DD54DF}.Debug|x86.ActiveCfg = Debug|Win32 {E5659A29-FE68-417B-9BC5-613073DD54DF}.Debug|x86.Build.0 = Debug|Win32 {E5659A29-FE68-417B-9BC5-613073DD54DF}.Release|Any CPU.ActiveCfg = Release|Win32 + {E5659A29-FE68-417B-9BC5-613073DD54DF}.Release|ARM.ActiveCfg = Release|Win32 {E5659A29-FE68-417B-9BC5-613073DD54DF}.Release|ARM64.ActiveCfg = Release|ARM64 {E5659A29-FE68-417B-9BC5-613073DD54DF}.Release|ARM64.Build.0 = Release|ARM64 {E5659A29-FE68-417B-9BC5-613073DD54DF}.Release|x64.ActiveCfg = Release|x64 @@ -789,12 +920,14 @@ Global {E5659A29-FE68-417B-9BC5-613073DD54DF}.Release|x86.ActiveCfg = Release|Win32 {E5659A29-FE68-417B-9BC5-613073DD54DF}.Release|x86.Build.0 = Release|Win32 {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Debug|ARM.ActiveCfg = Debug|Win32 {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Debug|ARM64.ActiveCfg = Debug|Win32 {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Debug|x64.ActiveCfg = Debug|x64 {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Debug|x64.Build.0 = Debug|x64 {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Debug|x86.ActiveCfg = Debug|Win32 {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Debug|x86.Build.0 = Debug|Win32 {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Release|Any CPU.ActiveCfg = Release|Win32 + {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Release|ARM.ActiveCfg = Release|Win32 {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Release|ARM64.ActiveCfg = Release|Win32 {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Release|x64.ActiveCfg = Release|x64 {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Release|x64.Build.0 = Release|x64 @@ -802,6 +935,7 @@ Global {2CD5CD9B-CF45-4FA7-9769-EE4E02426BF0}.Release|x86.Build.0 = Release|Win32 {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Debug|Any CPU.ActiveCfg = Debug|x86 {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Debug|Any CPU.Build.0 = Debug|x86 + {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Debug|ARM.ActiveCfg = Debug|x86 {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Debug|ARM64.ActiveCfg = Debug|arm64 {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Debug|ARM64.Build.0 = Debug|arm64 {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Debug|x64.ActiveCfg = Debug|x64 @@ -810,6 +944,7 @@ Global {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Debug|x86.Build.0 = Debug|x86 {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Release|Any CPU.ActiveCfg = Release|Any CPU {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Release|Any CPU.Build.0 = Release|Any CPU + {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Release|ARM.ActiveCfg = Release|Any CPU {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Release|ARM64.ActiveCfg = Release|arm64 {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Release|ARM64.Build.0 = Release|arm64 {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Release|x64.ActiveCfg = Release|x64 @@ -817,6 +952,7 @@ Global {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Release|x86.ActiveCfg = Release|x86 {D6574FD6-8D13-4412-9FCB-308D44063CDA}.Release|x86.Build.0 = Release|x86 {63ACBA4F-385A-4D04-98AD-263FED501A19}.Debug|Any CPU.ActiveCfg = Debug|x86 + {63ACBA4F-385A-4D04-98AD-263FED501A19}.Debug|ARM.ActiveCfg = Debug|x86 {63ACBA4F-385A-4D04-98AD-263FED501A19}.Debug|ARM64.ActiveCfg = Debug|arm64 {63ACBA4F-385A-4D04-98AD-263FED501A19}.Debug|ARM64.Build.0 = Debug|arm64 {63ACBA4F-385A-4D04-98AD-263FED501A19}.Debug|x64.ActiveCfg = Debug|x64 @@ -824,6 +960,7 @@ Global {63ACBA4F-385A-4D04-98AD-263FED501A19}.Debug|x86.ActiveCfg = Debug|x86 {63ACBA4F-385A-4D04-98AD-263FED501A19}.Debug|x86.Build.0 = Debug|x86 {63ACBA4F-385A-4D04-98AD-263FED501A19}.Release|Any CPU.ActiveCfg = Release|x86 + {63ACBA4F-385A-4D04-98AD-263FED501A19}.Release|ARM.ActiveCfg = Release|x86 {63ACBA4F-385A-4D04-98AD-263FED501A19}.Release|ARM64.ActiveCfg = Release|arm64 {63ACBA4F-385A-4D04-98AD-263FED501A19}.Release|ARM64.Build.0 = Release|arm64 {63ACBA4F-385A-4D04-98AD-263FED501A19}.Release|x64.ActiveCfg = Release|x64 @@ -831,6 +968,7 @@ Global {63ACBA4F-385A-4D04-98AD-263FED501A19}.Release|x86.ActiveCfg = Release|x86 {63ACBA4F-385A-4D04-98AD-263FED501A19}.Release|x86.Build.0 = Release|x86 {85E9BB46-7841-4732-A039-9C902B71DEC3}.Debug|Any CPU.ActiveCfg = Debug|x86 + {85E9BB46-7841-4732-A039-9C902B71DEC3}.Debug|ARM.ActiveCfg = Debug|x86 {85E9BB46-7841-4732-A039-9C902B71DEC3}.Debug|ARM64.ActiveCfg = Debug|arm64 {85E9BB46-7841-4732-A039-9C902B71DEC3}.Debug|ARM64.Build.0 = Debug|arm64 {85E9BB46-7841-4732-A039-9C902B71DEC3}.Debug|x64.ActiveCfg = Debug|x64 @@ -838,6 +976,7 @@ Global {85E9BB46-7841-4732-A039-9C902B71DEC3}.Debug|x86.ActiveCfg = Debug|x86 {85E9BB46-7841-4732-A039-9C902B71DEC3}.Debug|x86.Build.0 = Debug|x86 {85E9BB46-7841-4732-A039-9C902B71DEC3}.Release|Any CPU.ActiveCfg = Release|x86 + {85E9BB46-7841-4732-A039-9C902B71DEC3}.Release|ARM.ActiveCfg = Release|x86 {85E9BB46-7841-4732-A039-9C902B71DEC3}.Release|ARM64.ActiveCfg = Release|arm64 {85E9BB46-7841-4732-A039-9C902B71DEC3}.Release|ARM64.Build.0 = Release|arm64 {85E9BB46-7841-4732-A039-9C902B71DEC3}.Release|x64.ActiveCfg = Release|x64 @@ -845,6 +984,7 @@ Global {85E9BB46-7841-4732-A039-9C902B71DEC3}.Release|x86.ActiveCfg = Release|x86 {85E9BB46-7841-4732-A039-9C902B71DEC3}.Release|x86.Build.0 = Release|x86 {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Debug|Any CPU.ActiveCfg = Debug|x86 + {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Debug|ARM.ActiveCfg = Debug|x86 {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Debug|ARM64.ActiveCfg = Debug|arm64 {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Debug|ARM64.Build.0 = Debug|arm64 {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Debug|x64.ActiveCfg = Debug|x64 @@ -852,6 +992,7 @@ Global {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Debug|x86.ActiveCfg = Debug|x86 {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Debug|x86.Build.0 = Debug|x86 {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Release|Any CPU.ActiveCfg = Release|x86 + {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Release|ARM.ActiveCfg = Release|x86 {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Release|ARM64.ActiveCfg = Release|arm64 {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Release|ARM64.Build.0 = Release|arm64 {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Release|x64.ActiveCfg = Release|x64 @@ -859,18 +1000,21 @@ Global {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Release|x86.ActiveCfg = Release|x86 {F1F2F3A6-A7DE-45D1-9E96-E28171FD3147}.Release|x86.Build.0 = Release|x86 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Debug|ARM.ActiveCfg = Debug|Win32 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Debug|ARM64.ActiveCfg = Debug|Win32 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Debug|x64.ActiveCfg = Debug|x64 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Debug|x64.Build.0 = Debug|x64 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Debug|x86.ActiveCfg = Debug|Win32 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Debug|x86.Build.0 = Debug|Win32 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Release|Any CPU.ActiveCfg = Release|Win32 + {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Release|ARM.ActiveCfg = Release|Win32 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Release|ARM64.ActiveCfg = Release|Win32 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Release|x64.ActiveCfg = Release|x64 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Release|x64.Build.0 = Release|x64 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Release|x86.ActiveCfg = Release|Win32 {5E2CC9D5-7C05-41D9-9DB5-EC5DF64BA1DC}.Release|x86.Build.0 = Release|Win32 {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Debug|ARM.ActiveCfg = Debug|Win32 {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Debug|ARM64.ActiveCfg = Debug|ARM64 {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Debug|ARM64.Build.0 = Debug|ARM64 {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Debug|x64.ActiveCfg = Debug|x64 @@ -878,6 +1022,7 @@ Global {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Debug|x86.ActiveCfg = Debug|Win32 {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Debug|x86.Build.0 = Debug|Win32 {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Release|Any CPU.ActiveCfg = Release|Win32 + {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Release|ARM.ActiveCfg = Release|Win32 {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Release|ARM64.ActiveCfg = Release|ARM64 {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Release|ARM64.Build.0 = Release|ARM64 {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Release|x64.ActiveCfg = Release|x64 @@ -885,6 +1030,7 @@ Global {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Release|x86.ActiveCfg = Release|Win32 {34519337-9249-451E-B5A9-1ECACF9C3DA8}.Release|x86.Build.0 = Release|Win32 {0B01DB78-F115-4C90-B28F-7819071303C6}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {0B01DB78-F115-4C90-B28F-7819071303C6}.Debug|ARM.ActiveCfg = Debug|Win32 {0B01DB78-F115-4C90-B28F-7819071303C6}.Debug|ARM64.ActiveCfg = Debug|ARM64 {0B01DB78-F115-4C90-B28F-7819071303C6}.Debug|ARM64.Build.0 = Debug|ARM64 {0B01DB78-F115-4C90-B28F-7819071303C6}.Debug|x64.ActiveCfg = Debug|x64 @@ -892,6 +1038,7 @@ Global {0B01DB78-F115-4C90-B28F-7819071303C6}.Debug|x86.ActiveCfg = Debug|Win32 {0B01DB78-F115-4C90-B28F-7819071303C6}.Debug|x86.Build.0 = Debug|Win32 {0B01DB78-F115-4C90-B28F-7819071303C6}.Release|Any CPU.ActiveCfg = Release|Win32 + {0B01DB78-F115-4C90-B28F-7819071303C6}.Release|ARM.ActiveCfg = Release|Win32 {0B01DB78-F115-4C90-B28F-7819071303C6}.Release|ARM64.ActiveCfg = Release|ARM64 {0B01DB78-F115-4C90-B28F-7819071303C6}.Release|ARM64.Build.0 = Release|ARM64 {0B01DB78-F115-4C90-B28F-7819071303C6}.Release|x64.ActiveCfg = Release|x64 @@ -899,6 +1046,7 @@ Global {0B01DB78-F115-4C90-B28F-7819071303C6}.Release|x86.ActiveCfg = Release|Win32 {0B01DB78-F115-4C90-B28F-7819071303C6}.Release|x86.Build.0 = Release|Win32 {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|ARM.ActiveCfg = Debug|Win32 {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|ARM64.ActiveCfg = Debug|ARM64 {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|ARM64.Build.0 = Debug|ARM64 {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|x64.ActiveCfg = Debug|x64 @@ -906,6 +1054,7 @@ Global {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|x86.ActiveCfg = Debug|Win32 {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Debug|x86.Build.0 = Debug|Win32 {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|Any CPU.ActiveCfg = Release|Win32 + {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|ARM.ActiveCfg = Release|Win32 {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|ARM64.ActiveCfg = Release|ARM64 {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|ARM64.Build.0 = Release|ARM64 {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|x64.ActiveCfg = Release|x64 @@ -913,6 +1062,7 @@ Global {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|x86.ActiveCfg = Release|Win32 {D45D4170-E055-4926-8B03-04DAA5F02C6C}.Release|x86.Build.0 = Release|Win32 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {09DDAE21-397F-4263-8561-7F2FF28127CF}.Debug|ARM.ActiveCfg = Debug|Win32 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Debug|ARM64.ActiveCfg = Debug|ARM64 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Debug|ARM64.Build.0 = Debug|ARM64 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Debug|x64.ActiveCfg = Debug|x64 @@ -920,6 +1070,7 @@ Global {09DDAE21-397F-4263-8561-7F2FF28127CF}.Debug|x86.ActiveCfg = Debug|Win32 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Debug|x86.Build.0 = Debug|Win32 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Release|Any CPU.ActiveCfg = Release|Win32 + {09DDAE21-397F-4263-8561-7F2FF28127CF}.Release|ARM.ActiveCfg = Release|Win32 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Release|ARM64.ActiveCfg = Release|ARM64 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Release|ARM64.Build.0 = Release|ARM64 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Release|x64.ActiveCfg = Release|x64 @@ -927,6 +1078,7 @@ Global {09DDAE21-397F-4263-8561-7F2FF28127CF}.Release|x86.ActiveCfg = Release|Win32 {09DDAE21-397F-4263-8561-7F2FF28127CF}.Release|x86.Build.0 = Release|Win32 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Debug|ARM.ActiveCfg = Debug|Win32 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Debug|ARM64.Build.0 = Debug|ARM64 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Debug|x64.ActiveCfg = Debug|x64 @@ -934,12 +1086,71 @@ Global {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Debug|x86.ActiveCfg = Debug|Win32 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Debug|x86.Build.0 = Debug|Win32 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Release|Any CPU.ActiveCfg = Release|Win32 + {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Release|ARM.ActiveCfg = Release|Win32 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Release|ARM64.ActiveCfg = Release|ARM64 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Release|ARM64.Build.0 = Release|ARM64 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Release|x64.ActiveCfg = Release|x64 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Release|x64.Build.0 = Release|x64 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Release|x86.ActiveCfg = Release|Win32 {6539E9E1-BF36-40E5-86BC-070E99DB7B7B}.Release|x86.Build.0 = Release|Win32 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Debug|ARM.ActiveCfg = Debug|Win32 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Debug|ARM64.Build.0 = Debug|ARM64 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Debug|x64.ActiveCfg = Debug|x64 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Debug|x64.Build.0 = Debug|x64 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Debug|x86.ActiveCfg = Debug|Win32 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Debug|x86.Build.0 = Debug|Win32 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Release|Any CPU.ActiveCfg = Release|Win32 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Release|ARM.ActiveCfg = Release|Win32 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Release|ARM64.ActiveCfg = Release|ARM64 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Release|ARM64.Build.0 = Release|ARM64 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Release|x64.ActiveCfg = Release|x64 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Release|x64.Build.0 = Release|x64 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Release|x86.ActiveCfg = Release|Win32 + {E977B1BD-00DC-4085-A105-E0A18E0183D7}.Release|x86.Build.0 = Release|Win32 + {4B30C685-8490-440F-9879-A75D45DAA361}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {4B30C685-8490-440F-9879-A75D45DAA361}.Debug|ARM.ActiveCfg = Debug|Win32 + {4B30C685-8490-440F-9879-A75D45DAA361}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {4B30C685-8490-440F-9879-A75D45DAA361}.Debug|ARM64.Build.0 = Debug|ARM64 + {4B30C685-8490-440F-9879-A75D45DAA361}.Debug|x64.ActiveCfg = Debug|x64 + {4B30C685-8490-440F-9879-A75D45DAA361}.Debug|x64.Build.0 = Debug|x64 + {4B30C685-8490-440F-9879-A75D45DAA361}.Debug|x86.ActiveCfg = Debug|Win32 + {4B30C685-8490-440F-9879-A75D45DAA361}.Debug|x86.Build.0 = Debug|Win32 + {4B30C685-8490-440F-9879-A75D45DAA361}.Release|Any CPU.ActiveCfg = Release|Win32 + {4B30C685-8490-440F-9879-A75D45DAA361}.Release|ARM.ActiveCfg = Release|Win32 + {4B30C685-8490-440F-9879-A75D45DAA361}.Release|ARM64.ActiveCfg = Release|ARM64 + {4B30C685-8490-440F-9879-A75D45DAA361}.Release|ARM64.Build.0 = Release|ARM64 + {4B30C685-8490-440F-9879-A75D45DAA361}.Release|x64.ActiveCfg = Release|x64 + {4B30C685-8490-440F-9879-A75D45DAA361}.Release|x64.Build.0 = Release|x64 + {4B30C685-8490-440F-9879-A75D45DAA361}.Release|x86.ActiveCfg = Release|Win32 + {4B30C685-8490-440F-9879-A75D45DAA361}.Release|x86.Build.0 = Release|Win32 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|ARM.ActiveCfg = Debug|ARM + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|ARM64.Build.0 = Debug|ARM64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|x64.ActiveCfg = Debug|x64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|x64.Build.0 = Debug|x64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|x64.Deploy.0 = Debug|x64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|x86.ActiveCfg = Debug|x86 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|x86.Build.0 = Debug|x86 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Debug|x86.Deploy.0 = Debug|x86 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|Any CPU.Build.0 = Release|Any CPU + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|ARM.ActiveCfg = Release|ARM + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|ARM64.ActiveCfg = Release|ARM64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|ARM64.Build.0 = Release|ARM64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|ARM64.Deploy.0 = Release|ARM64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|x64.ActiveCfg = Release|x64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|x64.Build.0 = Release|x64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|x64.Deploy.0 = Release|x64 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|x86.ActiveCfg = Release|x86 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|x86.Build.0 = Release|x86 + {D6A64926-4988-4C64-A5A8-2C14B1388696}.Release|x86.Deploy.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1023,6 +1234,10 @@ Global {D45D4170-E055-4926-8B03-04DAA5F02C6C} = {448ED2E5-0B37-4D97-9E6B-8C10A507976A} {09DDAE21-397F-4263-8561-7F2FF28127CF} = {0C534F12-B076-47E5-A05B-2A711233AC6F} {6539E9E1-BF36-40E5-86BC-070E99DB7B7B} = {6CD01EF6-D4A4-4801-ADCF-344CF87FF942} + {53A85993-86AA-4818-AE5C-D5FB6FA71C89} = {448ED2E5-0B37-4D97-9E6B-8C10A507976A} + {E977B1BD-00DC-4085-A105-E0A18E0183D7} = {8630F7AA-2969-4DC9-8700-9B468C1DC21D} + {4B30C685-8490-440F-9879-A75D45DAA361} = {AC5FFC80-92FE-4933-BED2-EC5519AC4440} + {D6A64926-4988-4C64-A5A8-2C14B1388696} = {AC5FFC80-92FE-4933-BED2-EC5519AC4440} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4B3D7591-CFEC-4762-9A07-ABE99938FB77} diff --git a/build/NuSpecs/AppxManifest.xml b/build/NuSpecs/AppxManifest.xml index 12dfcb72b8..4546bfc138 100644 --- a/build/NuSpecs/AppxManifest.xml +++ b/build/NuSpecs/AppxManifest.xml @@ -55,6 +55,11 @@ + + + + + diff --git a/build/ProjectReunion-BuildFoundation.yml b/build/ProjectReunion-BuildFoundation.yml index e8beb5b7b6..50a873c113 100644 --- a/build/ProjectReunion-BuildFoundation.yml +++ b/build/ProjectReunion-BuildFoundation.yml @@ -436,20 +436,18 @@ jobs: prereleaseVersionTag: nightly buildPool: $(ProjectReunionBuildPool) -# Build WinAppSDK -- job: IntegrationBuild +# Build WinAppSDK and Run Integration Test from TestAll.ps1 +- job: WinAppSDKIntegrationBuildAndTest dependsOn: ['CreateNugetPackage'] condition: succeeded() pool: $(ProjectReunionBuildPool) variables: WindowsAppSDKPackageVersion: $[ dependencies.CreateNugetPackage.outputs['SetVersion.packageVersion'] ] steps: - - template: ..\eng\common\AzurePipelinesTemplates\WindowsAppSDK-BuildSetup-Steps.yml - parameters: - ArtifactName: 'FullNuget' - - - template: ..\eng\common\AzurePipelinesTemplates\WindowsAppSDK-Build-Steps.yml + - template: ..\eng\common\AzurePipelinesTemplates\WindowsAppSDK-BuildAndIntegrationTest-Steps.yml parameters: + TestSelection: '*Foundation_*' + TransportPackageArtifactName: 'FullNuget' BuildType: 'stable' TransportPackages: FoundationPackage: @@ -460,7 +458,7 @@ jobs: - job: Publish dependsOn: - CreateNugetPackage - - IntegrationBuild + - WinAppSDKIntegrationBuildAndTest condition: succeeded() pool: $(ProjectReunionBuildPool) variables: @@ -489,4 +487,4 @@ jobs: parameters: AssetNames: 'Microsoft.WindowsAppSDK.Foundation.TransportPackage' AssetVersions: $(WindowsAppSDKPackageVersion) - TriggerSubscription: true \ No newline at end of file + TriggerSubscription: true diff --git a/dev/ToastNotifications/ToastActivatedEventArgs.h b/dev/ToastNotifications/ToastActivatedEventArgs.h new file mode 100644 index 0000000000..ff8c8f869f --- /dev/null +++ b/dev/ToastNotifications/ToastActivatedEventArgs.h @@ -0,0 +1,19 @@ +#pragma once +#include "Microsoft.Windows.ToastNotifications.ToastActivatedEventArgs.g.h" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + struct ToastActivatedEventArgs : ToastActivatedEventArgsT + { + ToastActivatedEventArgs() = default; + + ToastActivatedEventArgs(winrt::hstring const& arguments, winrt::Windows::Foundation::Collections::IMap const& userInput) : m_arguments(arguments), m_userInput(userInput) {}; + + winrt::hstring ActivationArgs() { return m_arguments; }; + winrt::Windows::Foundation::Collections::IMap UserInput() { return m_userInput; }; + + private: + winrt::hstring m_arguments; + winrt::Windows::Foundation::Collections::IMap m_userInput; + }; +} diff --git a/dev/ToastNotifications/ToastActivationCallback.cpp b/dev/ToastNotifications/ToastActivationCallback.cpp new file mode 100644 index 0000000000..6d3f9bf6ca --- /dev/null +++ b/dev/ToastNotifications/ToastActivationCallback.cpp @@ -0,0 +1,51 @@ +#include "pch.h" +#include +#include "ToastActivatedEventArgs.h" +#include "externs.h" +#include +#include +#include +#include +#include + +namespace winrt +{ + using namespace Microsoft::Windows::ToastNotifications; + using namespace Windows::ApplicationModel::Core; + using namespace Windows::Foundation; + using namespace Windows::Foundation::Collections; +} + +HRESULT __stdcall ToastActivationCallback::Activate( + LPCWSTR /* appUserModelId */, + LPCWSTR invokedArgs, + [[maybe_unused]] NOTIFICATION_USER_INPUT_DATA const* data, + [[maybe_unused]] ULONG dataCount) noexcept try +{ + winrt::IMap userInput{ winrt::single_threaded_map() }; + for (unsigned long i = 0; i < dataCount; i++) + { + userInput.Insert(data[i].Key, data[i].Value); + } + + winrt::ToastActivatedEventArgs activatedEventArgs = winrt::make(invokedArgs, userInput); + + + if (GetToastHandlers()) + { + /* As the process is already launched, we invoke the foreground toast event handlers with the activatedEventArgs */ + GetToastHandlers()(*this, activatedEventArgs); + } + else + { + /* Activation results in a process launch, we cache the activatedEventArgs in the COM static store + and fire an event to let the main thread know that it is okay to infer into AppLifeCycle::GetToastActivatedEventArgs(). + */ + auto appProperties = winrt::CoreApplication::Properties(); + appProperties.Insert(ACTIVATED_EVENT_ARGS_KEY, activatedEventArgs); + SetEvent(GetWaitHandleForArgs().get()); + } + + return S_OK; +} +CATCH_RETURN() diff --git a/dev/ToastNotifications/ToastActivationCallback.h b/dev/ToastNotifications/ToastActivationCallback.h new file mode 100644 index 0000000000..257394bb61 --- /dev/null +++ b/dev/ToastNotifications/ToastActivationCallback.h @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#pragma once + +#include "NotificationActivationCallback.h" + +struct ToastActivationCallback : winrt::implements +{ + HRESULT __stdcall Activate( + LPCWSTR appUserModelId, + LPCWSTR invokedArgs, + [[maybe_unused]] NOTIFICATION_USER_INPUT_DATA const* data, + [[maybe_unused]] ULONG dataCount) noexcept; +}; + +struct ToastActivationCallbackFactory : winrt::implements +{ + STDMETHODIMP CreateInstance(_In_opt_ IUnknown* aggregateInterface, _In_ REFIID interfaceId, _Outptr_ VOID** object) noexcept final try + { + RETURN_HR_IF_NULL(CLASS_E_NOAGGREGATION, aggregateInterface); + return winrt::make().as(interfaceId, object); + } + CATCH_RETURN() + + STDMETHODIMP LockServer(BOOL fLock) noexcept final + { + if (fLock) + { + ++winrt::get_module_lock(); + } + else + { + --winrt::get_module_lock(); + } + return S_OK; + } +}; diff --git a/dev/ToastNotifications/ToastActivationInfo.cpp b/dev/ToastNotifications/ToastActivationInfo.cpp new file mode 100644 index 0000000000..7dc27c2a89 --- /dev/null +++ b/dev/ToastNotifications/ToastActivationInfo.cpp @@ -0,0 +1,42 @@ +#include "pch.h" +#include "ToastActivationInfo.h" +#include "Microsoft.Windows.ToastNotifications.ToastActivationInfo.g.cpp" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + winrt::Microsoft::Windows::ToastNotifications::ToastActivationInfo ToastActivationInfo::CreateFromActivationGuid(winrt::guid const& taskClsid) + { + THROW_HR_IF_MSG(E_ILLEGAL_METHOD_CALL, !AppModel::Identity::IsPackagedProcess(), "Not applicable for unpackaged applications"); + + THROW_HR_IF(E_INVALIDARG, (taskClsid == winrt::guid(GUID_NULL))); + + return winrt::make(taskClsid); + } + + winrt::Microsoft::Windows::ToastNotifications::ToastActivationInfo ToastActivationInfo::CreateFromToastAssets(winrt::Microsoft::Windows::ToastNotifications::ToastAssets const& assets) + { + THROW_HR_IF_MSG(E_ILLEGAL_METHOD_CALL, AppModel::Identity::IsPackagedProcess(), "Not applicable for packaged applications"); + + THROW_HR_IF_NULL_MSG(E_POINTER, assets, "Invalid Toast asset parameter"); + + THROW_HR_IF_NULL_MSG(E_POINTER, assets.IconPath(), "Invalid icon URI"); + + THROW_HR_IF_MSG(E_INVALIDARG, (assets.DisplayName().size() == 0), "Display name string is empty"); + + return winrt::make(assets); + } + + winrt::guid ToastActivationInfo::TaskClsid() + { + THROW_HR_IF_MSG(E_ILLEGAL_METHOD_CALL, !AppModel::Identity::IsPackagedProcess(), "Not applicable for unpackaged applications"); + + return m_taskClsid; + } + + winrt::Microsoft::Windows::ToastNotifications::ToastAssets ToastActivationInfo::Assets() + { + THROW_HR_IF_MSG(E_ILLEGAL_METHOD_CALL, AppModel::Identity::IsPackagedProcess(), "Not applicable for packaged applications"); + + return m_assets; + } +} diff --git a/dev/ToastNotifications/ToastActivationInfo.h b/dev/ToastNotifications/ToastActivationInfo.h new file mode 100644 index 0000000000..c062bd0451 --- /dev/null +++ b/dev/ToastNotifications/ToastActivationInfo.h @@ -0,0 +1,27 @@ +#pragma once +#include "Microsoft.Windows.ToastNotifications.ToastActivationInfo.g.h" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + struct ToastActivationInfo : ToastActivationInfoT + { + ToastActivationInfo() = default; + + ToastActivationInfo(winrt::guid const& taskClsid) : m_taskClsid(taskClsid) {}; + ToastActivationInfo(winrt::Microsoft::Windows::ToastNotifications::ToastAssets const& assets) : m_assets(assets) {}; + static winrt::Microsoft::Windows::ToastNotifications::ToastActivationInfo CreateFromActivationGuid(winrt::guid const& taskClsid); + static winrt::Microsoft::Windows::ToastNotifications::ToastActivationInfo CreateFromToastAssets(winrt::Microsoft::Windows::ToastNotifications::ToastAssets const& assets); + winrt::guid TaskClsid(); + winrt::Microsoft::Windows::ToastNotifications::ToastAssets Assets(); + + private: + const winrt::guid m_taskClsid{ GUID_NULL }; + const winrt::Microsoft::Windows::ToastNotifications::ToastAssets m_assets{ nullptr }; + }; +} +namespace winrt::Microsoft::Windows::ToastNotifications::factory_implementation +{ + struct ToastActivationInfo : ToastActivationInfoT + { + }; +} diff --git a/dev/ToastNotifications/ToastAssets.cpp b/dev/ToastNotifications/ToastAssets.cpp new file mode 100644 index 0000000000..7b0d338056 --- /dev/null +++ b/dev/ToastNotifications/ToastAssets.cpp @@ -0,0 +1,15 @@ +#include "pch.h" +#include "ToastAssets.h" +#include "Microsoft.Windows.ToastNotifications.ToastAssets.g.cpp" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + hstring ToastAssets::DisplayName() + { + return m_displayName; + } + winrt::Windows::Foundation::Uri ToastAssets::IconPath() + { + return m_iconPath; + } +} diff --git a/dev/ToastNotifications/ToastAssets.h b/dev/ToastNotifications/ToastAssets.h new file mode 100644 index 0000000000..163564b3aa --- /dev/null +++ b/dev/ToastNotifications/ToastAssets.h @@ -0,0 +1,24 @@ +#pragma once +#include "Microsoft.Windows.ToastNotifications.ToastAssets.g.h" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + struct ToastAssets : ToastAssetsT + { + ToastAssets() = default; + + ToastAssets(winrt::hstring const& displayName, winrt::Windows::Foundation::Uri const& iconPath) : m_displayName(displayName), m_iconPath(iconPath) {}; + hstring DisplayName(); + winrt::Windows::Foundation::Uri IconPath(); + + private: + const hstring m_displayName; + const winrt::Windows::Foundation::Uri m_iconPath; + }; +} +namespace winrt::Microsoft::Windows::ToastNotifications::factory_implementation +{ + struct ToastAssets : ToastAssetsT + { + }; +} diff --git a/dev/ToastNotifications/ToastNotification.cpp b/dev/ToastNotifications/ToastNotification.cpp new file mode 100644 index 0000000000..b7f86a0710 --- /dev/null +++ b/dev/ToastNotifications/ToastNotification.cpp @@ -0,0 +1,79 @@ +#include "pch.h" +#include "ToastNotification.h" +#include "Microsoft.Windows.ToastNotifications.ToastNotification.g.cpp" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + ToastNotification::ToastNotification(winrt::Windows::Data::Xml::Dom::XmlDocument const& /* payload */) + { + throw hresult_not_implemented(); + } + hstring ToastNotification::Tag() + { + throw hresult_not_implemented(); + } + void ToastNotification::Tag(hstring const& /* value */) + { + throw hresult_not_implemented(); + } + hstring ToastNotification::Group() + { + throw hresult_not_implemented(); + } + void ToastNotification::Group(hstring const& /* value */) + { + throw hresult_not_implemented(); + } + uint32_t ToastNotification::ToastId() + { + throw hresult_not_implemented(); + } + void ToastNotification::ToastId(uint32_t /* value */) + { + throw hresult_not_implemented(); + } + winrt::Windows::Data::Xml::Dom::XmlDocument ToastNotification::Payload() + { + throw hresult_not_implemented(); + } + winrt::Microsoft::Windows::ToastNotifications::ToastProgressData ToastNotification::ProgressData() + { + throw hresult_not_implemented(); + } + void ToastNotification::ProgressData(winrt::Microsoft::Windows::ToastNotifications::ToastProgressData const& /* value */) + { + throw hresult_not_implemented(); + } + winrt::Windows::Foundation::DateTime ToastNotification::ExpirationTime() + { + throw hresult_not_implemented(); + } + void ToastNotification::ExpirationTime(winrt::Windows::Foundation::DateTime const& /* value */) + { + throw hresult_not_implemented(); + } + bool ToastNotification::ExpiresOnReboot() + { + throw hresult_not_implemented(); + } + void ToastNotification::ExpiresOnReboot(bool /* value */) + { + throw hresult_not_implemented(); + } + winrt::Microsoft::Windows::ToastNotifications::ToastPriority ToastNotification::Priority() + { + throw hresult_not_implemented(); + } + void ToastNotification::Priority(winrt::Microsoft::Windows::ToastNotifications::ToastPriority const& /* value */) + { + throw hresult_not_implemented(); + } + bool ToastNotification::SuppressDisplay() + { + throw hresult_not_implemented(); + } + void ToastNotification::SuppressDisplay(bool /* value */) + { + throw hresult_not_implemented(); + } +} diff --git a/dev/ToastNotifications/ToastNotification.h b/dev/ToastNotifications/ToastNotification.h new file mode 100644 index 0000000000..02c94d2922 --- /dev/null +++ b/dev/ToastNotifications/ToastNotification.h @@ -0,0 +1,35 @@ +#pragma once +#include "Microsoft.Windows.ToastNotifications.ToastNotification.g.h" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + struct ToastNotification : ToastNotificationT + { + ToastNotification() = default; + + ToastNotification(winrt::Windows::Data::Xml::Dom::XmlDocument const& payload); + hstring Tag(); + void Tag(hstring const& value); + hstring Group(); + void Group(hstring const& value); + uint32_t ToastId(); + void ToastId(uint32_t value); + winrt::Windows::Data::Xml::Dom::XmlDocument Payload(); + winrt::Microsoft::Windows::ToastNotifications::ToastProgressData ProgressData(); + void ProgressData(winrt::Microsoft::Windows::ToastNotifications::ToastProgressData const& value); + winrt::Windows::Foundation::DateTime ExpirationTime(); + void ExpirationTime(winrt::Windows::Foundation::DateTime const& value); + bool ExpiresOnReboot(); + void ExpiresOnReboot(bool value); + winrt::Microsoft::Windows::ToastNotifications::ToastPriority Priority(); + void Priority(winrt::Microsoft::Windows::ToastNotifications::ToastPriority const& value); + bool SuppressDisplay(); + void SuppressDisplay(bool value); + }; +} +namespace winrt::Microsoft::Windows::ToastNotifications::factory_implementation +{ + struct ToastNotification : ToastNotificationT + { + }; +} diff --git a/dev/ToastNotifications/ToastNotificationHistory.cpp b/dev/ToastNotifications/ToastNotificationHistory.cpp new file mode 100644 index 0000000000..7617c6912a --- /dev/null +++ b/dev/ToastNotifications/ToastNotificationHistory.cpp @@ -0,0 +1,31 @@ +#include "pch.h" +#include "ToastNotificationHistory.h" +#include "Microsoft.Windows.ToastNotifications.ToastNotificationHistory.g.cpp" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + winrt::Windows::Foundation::IAsyncAction ToastNotificationHistory::RemoveWithIdentiferAsync(uint32_t /* toastIdentifier */) + { + throw hresult_not_implemented(); + } + winrt::Windows::Foundation::IAsyncAction ToastNotificationHistory::RemoveWithTagAsync(hstring /* tag */) + { + throw hresult_not_implemented(); + } + winrt::Windows::Foundation::IAsyncAction ToastNotificationHistory::RemoveWithTagGroupAsync(hstring /* tag */, hstring /* group */) + { + throw hresult_not_implemented(); + } + winrt::Windows::Foundation::IAsyncAction ToastNotificationHistory::RemoveGroupAsync(hstring /* group */) + { + throw hresult_not_implemented(); + } + winrt::Windows::Foundation::IAsyncAction ToastNotificationHistory::RemoveAllAsync() + { + throw hresult_not_implemented(); + } + winrt::Windows::Foundation::IAsyncOperation> ToastNotificationHistory::GetAllAsync() + { + throw hresult_not_implemented(); + } +} diff --git a/dev/ToastNotifications/ToastNotificationHistory.h b/dev/ToastNotifications/ToastNotificationHistory.h new file mode 100644 index 0000000000..3c6c739c6e --- /dev/null +++ b/dev/ToastNotifications/ToastNotificationHistory.h @@ -0,0 +1,17 @@ +#pragma once +#include "Microsoft.Windows.ToastNotifications.ToastNotificationHistory.g.h" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + struct ToastNotificationHistory : ToastNotificationHistoryT + { + ToastNotificationHistory() = default; + + winrt::Windows::Foundation::IAsyncAction RemoveWithIdentiferAsync(uint32_t toastIdentifier); + winrt::Windows::Foundation::IAsyncAction RemoveWithTagAsync(hstring tag); + winrt::Windows::Foundation::IAsyncAction RemoveWithTagGroupAsync(hstring tag, hstring group); + winrt::Windows::Foundation::IAsyncAction RemoveGroupAsync(hstring group); + winrt::Windows::Foundation::IAsyncAction RemoveAllAsync(); + winrt::Windows::Foundation::IAsyncOperation> GetAllAsync(); + }; +} diff --git a/dev/ToastNotifications/ToastNotificationManager.cpp b/dev/ToastNotifications/ToastNotificationManager.cpp new file mode 100644 index 0000000000..b6596a75ed --- /dev/null +++ b/dev/ToastNotifications/ToastNotificationManager.cpp @@ -0,0 +1,109 @@ +#include "pch.h" +#include "ToastNotificationManager.h" +#include "Microsoft.Windows.ToastNotifications.ToastNotificationManager.g.cpp" +#include +#include +#include +#include "ToastActivationCallback.h" +#include "externs.h" +#include "ToastNotificationUtility.h" +#include + +static winrt::event> g_toastHandlers; + +winrt::event>& GetToastHandlers() +{ + return g_toastHandlers; +} + +namespace winrt +{ + using namespace winrt::Windows::UI; + using namespace winrt::Windows::Foundation; + using namespace Windows::ApplicationModel::Core; +} + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + static wil::unique_com_class_object_cookie s_toastcomActivatorRegistration; + + winrt::Microsoft::Windows::ToastNotifications::ToastNotificationManager ToastNotificationManager::Default() + { + static auto toastNotificationManager{ winrt::make() }; + return toastNotificationManager; + } + + void ToastNotificationManager::RegisterActivator(winrt::Microsoft::Windows::ToastNotifications::ToastActivationInfo const& details) + { + THROW_HR_IF_MSG(E_INVALIDARG, s_toastcomActivatorRegistration, "Toast activator already registered."); + + THROW_HR_IF_NULL(E_INVALIDARG, details); + + std::wstring storedComActivatorString; + if (!AppModel::Identity::IsPackagedProcess()) + { + storedComActivatorString = RegisterComActivatorGuidAndAssets(details); + // Remove braces around the guid string + storedComActivatorString = storedComActivatorString.substr(1, storedComActivatorString.size() - 2); + } + + THROW_IF_FAILED(::CoRegisterClassObject( + AppModel::Identity::IsPackagedProcess() ? details.TaskClsid() : winrt::guid(storedComActivatorString), + winrt::make().get(), + CLSCTX_LOCAL_SERVER, + REGCLS_MULTIPLEUSE, + &s_toastcomActivatorRegistration)); + + GetWaitHandleForArgs().create(); + } + + void ToastNotificationManager::UnregisterActivator() + { + THROW_HR_IF_MSG(HRESULT_FROM_WIN32(ERROR_NOT_FOUND), !s_toastcomActivatorRegistration, "Toast activator not registered."); + + s_toastcomActivatorRegistration.reset(); + + if (!AppModel::Identity::IsPackagedProcess()) + { + std::wstring storedComActivatorString; + THROW_IF_WIN32_ERROR(GetActivatorGuid(storedComActivatorString)); + + UnRegisterComServer(storedComActivatorString); + UnRegisterAppIdentifierFromRegistry(); + + // TODO: Remove ToastGuid reference from LRP + } + } + winrt::event_token ToastNotificationManager::ToastActivated(winrt::Windows::Foundation::EventHandler const& /* handler */) + { + throw hresult_not_implemented(); + } + void ToastNotificationManager::ToastActivated(winrt::event_token const&/* token */) + { + throw hresult_not_implemented(); + } + void ToastNotificationManager::ShowToast(winrt::Microsoft::Windows::ToastNotifications::ToastNotification const& /* toast */) + { + throw hresult_not_implemented(); + } + winrt::Windows::Foundation::IAsyncOperation ToastNotificationManager::UpdateToastProgressDataAsync(winrt::Microsoft::Windows::ToastNotifications::ToastProgressData /* data */, hstring /* tag */, hstring /* group */) + { + throw hresult_not_implemented(); + } + winrt::Windows::Foundation::IAsyncOperation ToastNotificationManager::UpdateToastProgressDataAsync(winrt::Microsoft::Windows::ToastNotifications::ToastProgressData /* data */, hstring /* tag */) + { + throw hresult_not_implemented(); + } + winrt::Microsoft::Windows::ToastNotifications::ToastNotificationSetting ToastNotificationManager::Setting() + { + throw hresult_not_implemented(); + } + winrt::Microsoft::Windows::ToastNotifications::ToastNotificationHistory ToastNotificationManager::History() + { + throw hresult_not_implemented(); + } + winrt::Windows::Data::Xml::Dom::XmlDocument ToastNotificationManager::GetXmlTemplateContent(winrt::Microsoft::Windows::ToastNotifications::ToastTemplateType const& /* type */) + { + throw hresult_not_implemented(); + } +} diff --git a/dev/ToastNotifications/ToastNotificationManager.h b/dev/ToastNotifications/ToastNotificationManager.h new file mode 100644 index 0000000000..2c20ad1d4a --- /dev/null +++ b/dev/ToastNotifications/ToastNotificationManager.h @@ -0,0 +1,38 @@ +#pragma once +#include "Microsoft.Windows.ToastNotifications.ToastNotificationManager.g.h" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + struct ToastNotificationManager : ToastNotificationManagerT + { + ToastNotificationManager() = default; + + static winrt::Microsoft::Windows::ToastNotifications::ToastNotificationManager Default(); + + void RegisterActivator(winrt::Microsoft::Windows::ToastNotifications::ToastActivationInfo const& details); + + void UnregisterActivator(); + + winrt::event_token ToastActivated(winrt::Windows::Foundation::EventHandler const& handler); + + void ToastActivated(winrt::event_token const& token); + + void ShowToast(winrt::Microsoft::Windows::ToastNotifications::ToastNotification const& toast); + + winrt::Windows::Foundation::IAsyncOperation UpdateToastProgressDataAsync(winrt::Microsoft::Windows::ToastNotifications::ToastProgressData data, hstring tag, hstring group); + + winrt::Windows::Foundation::IAsyncOperation UpdateToastProgressDataAsync(winrt::Microsoft::Windows::ToastNotifications::ToastProgressData data, hstring tag); + + winrt::Microsoft::Windows::ToastNotifications::ToastNotificationSetting Setting(); + + winrt::Microsoft::Windows::ToastNotifications::ToastNotificationHistory History(); + + winrt::Windows::Data::Xml::Dom::XmlDocument GetXmlTemplateContent(winrt::Microsoft::Windows::ToastNotifications::ToastTemplateType const& type); + }; +} +namespace winrt::Microsoft::Windows::ToastNotifications::factory_implementation +{ + struct ToastNotificationManager : ToastNotificationManagerT + { + }; +} diff --git a/dev/ToastNotifications/ToastNotificationUtility.cpp b/dev/ToastNotifications/ToastNotificationUtility.cpp new file mode 100644 index 0000000000..8b46f50cab --- /dev/null +++ b/dev/ToastNotifications/ToastNotificationUtility.cpp @@ -0,0 +1,216 @@ + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#include "pch.h" +#include "ToastNotificationUtility.h" +#include +#include +#include +#include + +namespace winrt +{ + using namespace winrt::Windows::Foundation; + using namespace Windows::ApplicationModel::Core; +} + +std::wstring RetrieveUnpackagedAppId() +{ + wil::unique_cotaskmem_string processName; + THROW_IF_FAILED(GetCurrentProcessPath(processName)); + + std::wstring wideStringProcessName{ processName.get() }; + // subKey: L"Software\\Classes\\AppUserModelId\\{Path to ToastNotificationsTestApp.exe}" + std::wstring subKey{ c_appIdentifierPath + ConvertPathToKey(wideStringProcessName) }; + + wil::unique_hkey hKey; + THROW_IF_FAILED(RegCreateKeyEx( + HKEY_CURRENT_USER, + subKey.c_str(), + 0, + nullptr /* lpClass */, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + nullptr /* lpSecurityAttributes */, + &hKey, + nullptr /* lpdwDisposition */)); + + WCHAR registeredGuidBuffer[GUID_LENGTH]; + DWORD bufferLength = sizeof(registeredGuidBuffer); + HRESULT status = RegGetValueW( + hKey.get(), + nullptr /* lpValue */, + L"ToastGUID", + RRF_RT_REG_SZ, + nullptr /* pdwType */, + ®isteredGuidBuffer, + &bufferLength); + + if (status == ERROR_FILE_NOT_FOUND) + { + GUID newToastGuid; + THROW_IF_FAILED(CoCreateGuid(&newToastGuid)); + + wil::unique_cotaskmem_string newToastGuidString; + THROW_IF_FAILED(StringFromCLSID(newToastGuid, &newToastGuidString)); + + std::wstring guidWideStr{ newToastGuidString.get() }; + RegisterValue(hKey, L"ToastGUID", reinterpret_cast(guidWideStr.c_str()), REG_SZ, guidWideStr.size() * sizeof(wchar_t)); + return guidWideStr; + } + + THROW_HR_IF(status, FAILED_WIN32(status)); + return registeredGuidBuffer; +} + +std::wstring RetrieveAppId() +{ + if (AppModel::Identity::IsPackagedProcess()) + { + wchar_t appUserModelId[APPLICATION_USER_MODEL_ID_MAX_LENGTH] = {}; + UINT32 appUserModelIdSize{ APPLICATION_USER_MODEL_ID_MAX_LENGTH }; + + THROW_IF_FAILED(GetCurrentApplicationUserModelId(&appUserModelIdSize, appUserModelId)); + return appUserModelId; + } + + return RetrieveUnpackagedAppId(); +} + +void RegisterAssets(std::wstring const& appId, winrt::Microsoft::Windows::ToastNotifications::ToastAssets const& activationInfo, wil::unique_cotaskmem_string const& clsid) +{ + wil::unique_hkey hKey; + // subKey: \Software\Classes\AppUserModelId\{AppGUID} + std::wstring subKey{ c_appIdentifierPath + appId }; + + THROW_IF_FAILED(RegCreateKeyEx( + HKEY_CURRENT_USER, + subKey.c_str(), + 0, + nullptr /* lpClass */, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + nullptr /* lpSecurityAttributes */, + &hKey, + nullptr /* lpdwDisposition */)); + + RegisterValue(hKey, L"DisplayName", reinterpret_cast(activationInfo.DisplayName().c_str()), REG_EXPAND_SZ, activationInfo.DisplayName().size() * sizeof(wchar_t)); + RegisterValue(hKey, L"IconUri", reinterpret_cast(activationInfo.IconPath().AbsoluteUri().c_str()), REG_EXPAND_SZ, activationInfo.IconPath().AbsoluteUri().size() * sizeof(wchar_t)); + + std::wstring wideStringClsid{ clsid.get() }; + RegisterValue(hKey, L"CustomActivator", reinterpret_cast(wideStringClsid.c_str()), REG_SZ, wideStringClsid.size() * sizeof(wchar_t)); +} + +void RegisterComServer(wil::unique_cotaskmem_string const& processName, wil::unique_cotaskmem_string const& clsid) +{ + wil::unique_hkey hKey; + //subKey: Software\Classes\CLSID\{comActivatorGuidString}\LocalServer32 + std::wstring subKey{ c_clsIdPath + clsid.get() + LR"(\LocalServer32)" }; + + THROW_IF_FAILED(RegCreateKeyEx( + HKEY_CURRENT_USER, + subKey.c_str(), + 0, + nullptr /* lpClass */, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + nullptr /* lpSecurityAttributes */, + &hKey, + nullptr /* lpdwDisposition */)); + + std::wstring comRegistrationExeString{ c_quote + processName.get() + c_quote + c_toastActivatedArgument }; + + RegisterValue(hKey, nullptr, reinterpret_cast(comRegistrationExeString.c_str()), REG_SZ, (comRegistrationExeString.size() * sizeof(wchar_t))); +} + +void UnRegisterComServer(std::wstring const& clsid) +{ + wil::unique_hkey hKey; + //subKey: Software\Classes\CLSID\{comActivatorGuidString}\LocalServer32 + std::wstring subKey{ c_clsIdPath + clsid + LR"(\LocalServer32)" }; + + THROW_IF_FAILED(RegDeleteKeyEx( + HKEY_CURRENT_USER, + subKey.c_str(), + KEY_WOW64_64KEY, + 0)); +} + +void UnRegisterAppIdentifierFromRegistry() +{ + std::wstring appIdentifier{ RetrieveAppId() }; + + wil::unique_hkey hKey; + //subKey: \Software\Classes\AppUserModelId\{AppGUID} + std::wstring subKey{ c_appIdentifierPath + appIdentifier }; + + THROW_IF_FAILED(RegDeleteKeyEx( + HKEY_CURRENT_USER, + subKey.c_str(), + KEY_WOW64_64KEY, + 0)); +} + +HRESULT GetActivatorGuid(std::wstring& activatorGuid) noexcept try +{ + std::wstring appIdentifier{ RetrieveAppId() }; + // subKey: \Software\Classes\AppUserModelId\{AppGUID} + std::wstring subKey{ c_appIdentifierPath + appIdentifier }; + + wil::unique_hkey hKey; + THROW_IF_FAILED(RegCreateKeyEx( + HKEY_CURRENT_USER, + subKey.c_str(), + 0, + nullptr /* lpClass */, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + nullptr /* lpSecurityAttributes */, + &hKey, + nullptr /* lpdwDisposition */)); + + WCHAR activatorGuidBuffer[GUID_LENGTH]; + DWORD bufferLength = sizeof(activatorGuidBuffer); + HRESULT status = RegGetValueW( + hKey.get(), + nullptr /* lpValue */, + L"CustomActivator", + RRF_RT_REG_SZ, + nullptr /* pdwType */, + &activatorGuidBuffer, + &bufferLength); + + activatorGuid = activatorGuidBuffer; + return status; +} +CATCH_RETURN() + +std::wstring RegisterComActivatorGuidAndAssets(winrt::Microsoft::Windows::ToastNotifications::ToastActivationInfo const& details) +{ + std::wstring appIdentifier{ RetrieveAppId() }; + THROW_IF_FAILED(PushNotifications_RegisterFullTrustApplication(appIdentifier.c_str(), GUID_NULL)); + + std::wstring registeredGuid; + HRESULT status = GetActivatorGuid(registeredGuid); + if (status == ERROR_FILE_NOT_FOUND) + { + wil::unique_cotaskmem_string processName; + THROW_IF_FAILED(GetCurrentProcessPath(processName)); + + GUID comActivatorGuid = GUID_NULL; + THROW_IF_FAILED(CoCreateGuid(&comActivatorGuid)); + + // StringFromCLSID returns GUID String with braces. + wil::unique_cotaskmem_string comActivatorGuidString; + THROW_IF_FAILED(StringFromCLSID(comActivatorGuid, &comActivatorGuidString)); + + RegisterAssets(appIdentifier, details.Assets(), comActivatorGuidString); + RegisterComServer(processName, comActivatorGuidString); + + return comActivatorGuidString.get(); + } + + THROW_IF_WIN32_ERROR(status); + return registeredGuid; +} diff --git a/dev/ToastNotifications/ToastNotificationUtility.h b/dev/ToastNotifications/ToastNotificationUtility.h new file mode 100644 index 0000000000..4e546b343e --- /dev/null +++ b/dev/ToastNotifications/ToastNotificationUtility.h @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#pragma once +#include "pch.h" +#include +#include + +const std::wstring c_appIdentifierPath{ LR"(Software\Classes\AppUserModelId\)" }; +const std::wstring c_clsIdPath{ LR"(Software\Classes\CLSID\)" }; +const std::wstring c_quote{ LR"(")" }; +const std::wstring c_toastActivatedArgument{ L" ----ToastActivated:" }; + +winrt::event>& GetToastHandlers(); + +inline const int GUID_LENGTH = 39; // GUID + '{' + '}' + '/0' + +inline std::wstring ConvertPathToKey(std::wstring path) +{ + for (int i = 0; i < path.length(); i++) + { + if (path[i] == '\\') + { + path[i] = '.'; + } + } + return path; +} + +inline void RegisterValue(wil::unique_hkey const& hKey, PCWSTR const& key, const BYTE* value, DWORD const& valueType, size_t const& size) +{ + THROW_IF_FAILED(RegSetValueExW(hKey.get(), key, 0, valueType, value, (DWORD) size)); +} + +std::wstring RetrieveUnpackagedAppId(); + +std::wstring RetrieveAppId(); + +void RegisterAssets(std::wstring const& appId, winrt::Microsoft::Windows::ToastNotifications::ToastAssets const& activationInfo, wil::unique_cotaskmem_string const& clsid); + +void RegisterComServer(wil::unique_cotaskmem_string const& processName, wil::unique_cotaskmem_string const& clsid); + +void UnRegisterComServer(std::wstring const& clsid); + +void UnRegisterAppIdentifierFromRegistry(); + +HRESULT GetActivatorGuid(std::wstring& activatorGuid) noexcept; + +std::wstring RegisterComActivatorGuidAndAssets(winrt::Microsoft::Windows::ToastNotifications::ToastActivationInfo const& details); diff --git a/dev/ToastNotifications/ToastNotifications.idl b/dev/ToastNotifications/ToastNotifications.idl new file mode 100644 index 0000000000..463b025bde --- /dev/null +++ b/dev/ToastNotifications/ToastNotifications.idl @@ -0,0 +1,211 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace Microsoft.Windows.ToastNotifications +{ + [experimental] + // The Shell asset details for Unpackaged App Registrations + runtimeclass ToastAssets + { + // Initialize using Shell assets like DisplayName and iconPath + ToastAssets(String displayName, Windows.Foundation.Uri iconPath); + + // The App friendly DisplayName for the toast in Action Centre + String DisplayName { get; }; + + // The full file path for the icon image + Windows.Foundation.Uri IconPath { get; }; + }; + + [experimental] + // The Registration Info for Packaged and Unpackaged Toast Activations + runtimeclass ToastActivationInfo + { + // Initialize using a manifest defined COM Activator Id. Only applicable to Packaged Win32 applications + static ToastActivationInfo CreateFromActivationGuid(Guid taskClsid); + + // Initialize using Toast Assets. Only applicable to Unpackaged Win32 applications which need to specify their own assets like DisplayName and Icon. + static ToastActivationInfo CreateFromToastAssets(ToastAssets assets); + + // The CLSID associated with the Client COM server that Windows App SDK will activate + Guid TaskClsid{ get; }; + + // The Shell assets associated with the Unpackaged app + ToastAssets Assets{ get; }; + }; + + [experimental] + // Event args for the Toast Activation + runtimeclass ToastActivatedEventArgs + { + // Arguments from the invoked button. Empty for Default Activation with no launch args specified in payload. + String ActivationArgs{ get; }; + + // The data from the input elements of a toast like a TextBox + Windows.Foundation.Collections.IMap UserInput{ get; }; + }; + + [experimental] + // Toast Progress Data + runtimeclass ToastProgressData + { + // Initializes a new Instance of ToastProgressData + ToastProgressData(); + + // Gets or sets the sequence number of this notification data. + // When multiple ToastProgressData objects are received, the system displays the data with the greatest non-zero number. + UInt32 SequenceNumber; + + // Gets/Sets the value for the title. Binds to {progressTitle} in progress xml tag. + String Title; + + // Gets/Sets the Value for the numerical Progress percentile: a number between 0 and 1. Binds to {progressValue} in progress xml tag. + Double Value; + + // Gets/Sets the Value for the Progress String. Binds to {progressValueString} in progress xml tag + String ValueStringOverride; + + // Gets/Sets the Value for the Status. Binds to {progressStatus} in progress xml tag + String Status; + }; + + [experimental] + // The Toast User Setting or Toast Group Policy Setting + enum ToastNotificationSetting + { + Enabled, // Toast is not blocked by settings or group policy + DisabledForApplication, // Toast is blocked by a user defined App Setting + DisabledForUser, // Toast is blocked by a user defined Global Setting + DisabledByGroupPolicy, // Toast is blocked by Group Policy + DisabledByManifest, // Toast is blocked by a setting in the manifest. Only for packaged applications. + }; + + [experimental] + // Some basic predefined Toast Payload Templates + enum ToastTemplateType + { + BasicToast, + ToastWithTwoButtons, + ToastWithThreeButtons, + ToastWithProgressBar, + ToastWithAvatarAndProgressBar, + ToastWithAvatar, + ToastWithAvatarAndTextBox, + ToastWithAvatarAndDropdown, + ToastWithDropdown, + ToastWithReminder, + ToastWithAlarm, + ToastWithHeroImage, + ToastWithInlineImage, + }; + + [experimental] + // The Result for a Toast Progress related operation + enum ToastProgressResult + { + Succeeded, // The progress operation succeeded + Failed, // The progress operation failed + NotificationNotFound, // The progress operation failed to find a toast to process updates + }; + + [experimental] + enum ToastPriority + { + Default, // The notification should have default behavior in terms of delivery and display priority during connected standby mode. + High, // The notification should be treated as high priority. For desktop PCs, this means during connected standby mode the incoming notification can turn on the screen for Surface-like devices if it doesn't have a closed lid detected. + }; + + [experimental] + // Represent a toast Notification construct + runtimeclass ToastNotification + { + // Initialize a new Toast using an XML Payload. + ToastNotification(Windows.Data.Xml.Dom.XmlDocument payload); + + // Unique identifier used to replace a notification within a group. + String Tag; + + // Unique identifier for a toast group in the app + String Group; + + // A unique identifier for the Toast generated by the platform. + UInt32 ToastId; + + // The notification Xml Payload + Windows.Data.Xml.Dom.XmlDocument Payload{ get; }; + + // Gets or sets additional information about the toast progress. + ToastProgressData ProgressData; + + // Gets or sets the time after which a toast notification should not be displayed. + Windows.Foundation.DateTime ExpirationTime; + + // Indicates whether the toast will remain in the Action Center after a reboot. + Boolean ExpiresOnReboot; + + // Gets or sets the priority for a Toast. + // Hints on how and at what urgency level a notification should be presented to the user (whether to wake up the screen, etc). + ToastPriority Priority; + + // Gets or sets whether a toast's pop-up UI is displayed on the user's screen. + Boolean SuppressDisplay; + }; + + [experimental] + // Supports Toast related operations for all prior displayed Toasts in Action Centre + runtimeclass ToastNotificationHistory + { + // Removes a specific toast with a specific toastIdentifier from Action Centre + Windows.Foundation.IAsyncAction RemoveWithIdentiferAsync(UInt32 toastIdentifier); + + // Removes a toast having a specific tag + Windows.Foundation.IAsyncAction RemoveWithTagAsync(String tag); + + // Removes a toast having a specific tag and group + Windows.Foundation.IAsyncAction RemoveWithTagGroupAsync(String tag, String group); + + // Remove all toasts for a specific group + Windows.Foundation.IAsyncAction RemoveGroupAsync(String group); + + // Removes all the toasts for the App from Action Centre + Windows.Foundation.IAsyncAction RemoveAllAsync(); + + // Gets all the toasts for the App from Action Centre + Windows.Foundation.IAsyncOperation > GetAllAsync(); + }; + + [experimental] + // The manager class which encompasses all Toast API Functionality + runtimeclass ToastNotificationManager + { + // Gets a Default instance of a ToastNotificationManager + static ToastNotificationManager Default{ get; }; + + // Register an activator using an ActivationInfo context and caches the token for unregister + void RegisterActivator(ToastActivationInfo details); + + // Unregisters the activator and removes the cached Registration token. + void UnregisterActivator(); + + // Event handler for Toast Activations + event Windows.Foundation.EventHandler ToastActivated; + + // Displays the Toast in Action Centre + void ShowToast(ToastNotification toast); + + // Updates the Toast for a Progress related operation using Tag and Group + Windows.Foundation.IAsyncOperation UpdateToastProgressDataAsync(ToastProgressData data, String tag, String group); + + // Updates the Toast for a Progress related operation using Tag + Windows.Foundation.IAsyncOperation UpdateToastProgressDataAsync(ToastProgressData data, String tag); + + // Get the Toast Setting status for the app + ToastNotificationSetting Setting{ get; }; + + // Gets an instance of ToastHistory + ToastNotificationHistory History{ get; }; + + // Gets an Xml Payload based ona predefined Toast Template + Windows.Data.Xml.Dom.XmlDocument GetXmlTemplateContent(ToastTemplateType type); + }; +} diff --git a/dev/ToastNotifications/ToastNotifications.vcxitems b/dev/ToastNotifications/ToastNotifications.vcxitems new file mode 100644 index 0000000000..6e3db62100 --- /dev/null +++ b/dev/ToastNotifications/ToastNotifications.vcxitems @@ -0,0 +1,40 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + {53a85993-86aa-4818-ae5c-d5fb6fa71c89} + + + + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dev/ToastNotifications/ToastProgressData.cpp b/dev/ToastNotifications/ToastProgressData.cpp new file mode 100644 index 0000000000..e97a8f53ed --- /dev/null +++ b/dev/ToastNotifications/ToastProgressData.cpp @@ -0,0 +1,47 @@ +#include "pch.h" +#include "ToastProgressData.h" +#include "Microsoft.Windows.ToastNotifications.ToastProgressData.g.cpp" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + uint32_t ToastProgressData::SequenceNumber() + { + throw hresult_not_implemented(); + } + void ToastProgressData::SequenceNumber(uint32_t /* value */) + { + throw hresult_not_implemented(); + } + hstring ToastProgressData::Title() + { + throw hresult_not_implemented(); + } + void ToastProgressData::Title(hstring const& /* value */) + { + throw hresult_not_implemented(); + } + double ToastProgressData::Value() + { + throw hresult_not_implemented(); + } + void ToastProgressData::Value(double /* value */) + { + throw hresult_not_implemented(); + } + hstring ToastProgressData::ValueStringOverride() + { + throw hresult_not_implemented(); + } + void ToastProgressData::ValueStringOverride(hstring const& /* value */) + { + throw hresult_not_implemented(); + } + hstring ToastProgressData::Status() + { + throw hresult_not_implemented(); + } + void ToastProgressData::Status(hstring const& /* value */) + { + throw hresult_not_implemented(); + } +} diff --git a/dev/ToastNotifications/ToastProgressData.h b/dev/ToastNotifications/ToastProgressData.h new file mode 100644 index 0000000000..c02a8da163 --- /dev/null +++ b/dev/ToastNotifications/ToastProgressData.h @@ -0,0 +1,27 @@ +#pragma once +#include "Microsoft.Windows.ToastNotifications.ToastProgressData.g.h" + +namespace winrt::Microsoft::Windows::ToastNotifications::implementation +{ + struct ToastProgressData : ToastProgressDataT + { + ToastProgressData() = default; + + uint32_t SequenceNumber(); + void SequenceNumber(uint32_t value); + hstring Title(); + void Title(hstring const& value); + double Value(); + void Value(double value); + hstring ValueStringOverride(); + void ValueStringOverride(hstring const& value); + hstring Status(); + void Status(hstring const& value); + }; +} +namespace winrt::Microsoft::Windows::ToastNotifications::factory_implementation +{ + struct ToastProgressData : ToastProgressDataT + { + }; +} diff --git a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapAutoInitializer.cpp b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapAutoInitializer.cpp index b9719aae31..305f31b2e1 100644 --- a/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapAutoInitializer.cpp +++ b/dev/WindowsAppRuntime_BootstrapDLL/MddBootstrapAutoInitializer.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include diff --git a/dev/WindowsAppRuntime_DLL/WindowsAppRuntime_DLL.vcxproj b/dev/WindowsAppRuntime_DLL/WindowsAppRuntime_DLL.vcxproj index e500db1986..f8f5dd1211 100644 --- a/dev/WindowsAppRuntime_DLL/WindowsAppRuntime_DLL.vcxproj +++ b/dev/WindowsAppRuntime_DLL/WindowsAppRuntime_DLL.vcxproj @@ -110,6 +110,7 @@ + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 871f21e079..95ef71e2a7 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,25 +3,29 @@ https://github.com/microsoft/CsWinRT - + + https://github.com/microsoft/CsWinRT - + + https://github.com/microsoft/CsWinRT - + + https://github.com/microsoft/CsWinRT - + + - + https://dev.azure.com/microsoft/ProjectReunion/_git/ProjectReunionInternal - c29bc59c779108f3818a0efb0e467c2b4bb6cb47 + bc05e6cd828aed47148cb75597685d8cd59ae39d diff --git a/eng/Versions.props b/eng/Versions.props index df8e55f120..f766242b10 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -8,4 +8,4 @@ $(CsWinRTDependencyDotNetCoreSdkPackageVersion) - \ No newline at end of file + diff --git a/eng/common/AzurePipelinesTemplates/WindowsAppSDK-Build-Steps.yml b/eng/common/AzurePipelinesTemplates/WindowsAppSDK-Build-Steps.yml index c456bb28b4..4e2c9e0e41 100644 --- a/eng/common/AzurePipelinesTemplates/WindowsAppSDK-Build-Steps.yml +++ b/eng/common/AzurePipelinesTemplates/WindowsAppSDK-Build-Steps.yml @@ -11,6 +11,8 @@ # # The template eng\common\AzurePipelinesTemplates\WindowsAppSDK-BuildSetup-Steps.yml # will facilitate setting up the requirements to sucessfully run this template. +# In most cases, WindowsAppSDK-BuildSetup-Steps.yml should be called first, +# then WindowsAppSDK-Build-Steps.yml. # # The intended use of this yml template is for the feeder repos' pipeline to build the WinAppSDK package # with the latest versions from ProjectReunionInternal with the latest version of the transport package it @@ -18,6 +20,9 @@ # # The WindowsAppSDK Nuget package produced will be published to WindowsAppSDKNugetPackage build artifacts parameters: + - name: TransportPackageArtifactName + type: string + default: '' - name: BuildType displayName: "Build Type" type: string @@ -34,6 +39,14 @@ parameters: version: 1.0.0-stable steps: + - ${{ if ne(parameters.TransportPackageArtifactName, '') }}: + - task: DownloadBuildArtifacts@0 + inputs: + artifactName: ${{ parameters.TransportPackageArtifactName }} + downloadPath: '$(Build.SourcesDirectory)\build\packages' + itemPattern: | + **/*.nupkg + # Replace the versions in version.details.xml in the ProjectReunionInternal repo # Please note, the UpdateVersionDetailsConfig.ps1 that is used is one from the ProjectReunionInternal repo - ${{ each package in parameters.TransportPackages }}: @@ -47,7 +60,13 @@ steps: displayName: BuildAll inputs: filePath: 'BuildAll.ps1' - arguments: -WindowsAppSDKPackageVersion "" -BuildType ${{ parameters.BuildType }} -Checkpoint "none" -Platform "x86,x64,arm64" -Configuration "release,debug" + arguments: > + -WindowsAppSDKPackageVersion "" + -BuildType ${{ parameters.BuildType }} + -Checkpoint "none" + -Platform "x86,x64,arm64" + -Configuration "release,debug" + -YamlStep "none" - task: PublishBuildArtifacts@1 displayName: 'Publish Windows App SDK Packages' diff --git a/eng/common/AzurePipelinesTemplates/WindowsAppSDK-BuildAndIntegrationTest-Steps.yml b/eng/common/AzurePipelinesTemplates/WindowsAppSDK-BuildAndIntegrationTest-Steps.yml new file mode 100644 index 0000000000..6a70f87461 --- /dev/null +++ b/eng/common/AzurePipelinesTemplates/WindowsAppSDK-BuildAndIntegrationTest-Steps.yml @@ -0,0 +1,45 @@ +# This yml template combines WindowsAppSDK-BuildSetup, WindowsAppSDK-Build, +# and WindowsAppSDK-IntegrationTest templatesfor running the testAll script in ProjectReunionInternal +parameters: + - name: TransportPackageArtifactName + type: string + default: '' + - name: AzureSubscriptionServiceConnection + type: string + default: 'ProjectReunion Resource Manager' + - name: NuGetServiceConnectionName + type: string + default: 'ProjectReunionInternal' + - name: BuildType + displayName: "Build Type" + type: string + default: 'stable' + values: + - 'stable' + - 'experimental' + - name: "TransportPackages" + displayName: "TransportPackages to replace (name:version)" + type: object + default: + Foundation: + name: Microsoft.WindowsAppSDK.Foundation.TransportPackage + version: 1.0.0-stable + - name: TestSelection + type: string + default: "*" + +steps: + - template: WindowsAppSDK-BuildSetup-Steps.yml + parameters: + AzureSubscriptionServiceConnection: ${{ parameters.AzureSubscriptionServiceConnection }} + NuGetServiceConnectionName: ${{ parameters.NuGetServiceConnectionName }} + + - template: WindowsAppSDK-Build-Steps.yml + parameters: + TransportPackageArtifactName: ${{ parameters.TransportPackageArtifactName }} + BuildType: ${{ parameters.BuildType }} + TransportPackages: ${{ parameters.TransportPackages }} + + - template: WindowsAppSDK-IntegrationTest-Steps.yml + parameters: + TestSelection: ${{ parameters.TestSelection }} diff --git a/eng/common/AzurePipelinesTemplates/WindowsAppSDK-BuildSetup-Steps.yml b/eng/common/AzurePipelinesTemplates/WindowsAppSDK-BuildSetup-Steps.yml index afbcfe18b5..05947ebde6 100644 --- a/eng/common/AzurePipelinesTemplates/WindowsAppSDK-BuildSetup-Steps.yml +++ b/eng/common/AzurePipelinesTemplates/WindowsAppSDK-BuildSetup-Steps.yml @@ -13,25 +13,16 @@ # NuGetServiceConnectionName # Service connection name to ProjectReunion Internal feed # This is used to download other transport packages -# -# RefBranch -# The branch of the ProjectReunionInternal repository parameters: - - name: ArtifactName - type: string - default: '' - name: AzureSubscriptionServiceConnection type: string default: 'ProjectReunion Resource Manager' - name: NuGetServiceConnectionName type: string default: 'ProjectReunionInternal' - - name: RefBranch - type: string - default: 'main' steps: - - checkout: git://ProjectReunion/ProjectReunionInternal@${{ parameters.RefBranch }} + - checkout: git://ProjectReunion/ProjectReunionInternal - task: AzureKeyVault@1 inputs: @@ -40,13 +31,6 @@ steps: SecretsFilter: 'TestMSCert' RunAsPreJob: false - - task: DownloadBuildArtifacts@0 - inputs: - artifactName: ${{ parameters.ArtifactName }} - downloadPath: '$(Build.SourcesDirectory)\build\packages' - itemPattern: | - **/*.nupkg - # Setup for MyCert.pfx - task: PowerShell@2 name: CreateCert diff --git a/eng/common/AzurePipelinesTemplates/WindowsAppSDK-IntegrationTest-Steps.yml b/eng/common/AzurePipelinesTemplates/WindowsAppSDK-IntegrationTest-Steps.yml new file mode 100644 index 0000000000..328c9b4b03 --- /dev/null +++ b/eng/common/AzurePipelinesTemplates/WindowsAppSDK-IntegrationTest-Steps.yml @@ -0,0 +1,88 @@ +# This yml template is for running the testAll script in ProjectReunionInternal +# It downloads the WindowsAppSDK NuGetPackage from WindowsAppSDKNugetPackage (by default) +# +# Requirements: +# - This yml template can only be called from a pipeline in the "microsoft" AzureDevOps +# - Only the ProjectReunionInternal repository is checkout in the job +# +# The template eng\common\AzurePipelinesTemplates\WindowsAppSDK-BuildSetup-Steps.yml +# will facilitate setting up the requirements to sucessfully run this template. +# eng\common\AzurePipelinesTemplates\WindowsAppSDK-Build-Steps.yml will build the +# WindowsAppSDK Nuget Package for this template to use. +# +# In most cases, WindowsAppSDK-BuildSetup-Steps.yml should be called first, +# then WindowsAppSDK-Build-Steps.yml, and finally WindowsAppSDK-IntegrationTest-Steps.yml +# +# Parameters: +# WinAppSDkPackageArtifactName +# Name of the Artifact where the WindowsAppSDK NuGetPackage for the build lives + +parameters: + - name: WinAppSDkPackageArtifactName + type: string + default: "WindowsAppSDKNugetPackage" + - name: TestSelection + type: string + default: "*" + +steps: + - task: DownloadBuildArtifacts@0 + inputs: + artifactName: ${{ parameters.WinAppSDkPackageArtifactName }} + downloadPath: '$(Build.SourcesDirectory)\temp' + itemPattern: | + **/Microsoft.WindowsAppSDK.*.nupkg + + - task: PowerShell@2 + displayName: Extract WindowsAppSDKVersion + inputs: + targetType: 'inline' + script: | + Copy-Item -Path "$(Build.SourcesDirectory)\temp" -Destination "$(Build.SourcesDirectory)\PackLocation" -Recurse + + $files = Get-ChildItem $(Build.SourcesDirectory)\temp + foreach ($file in $files) # Iterate through each package we restored in the directory + { + Write-Host "file:" $file.FullName + $nupkgPaths = Get-ChildItem $file.FullName -Filter "*.nupkg" + + # Extract nupkg to access the nuspec + # The files in this directory does not contain the nuspec by default + foreach ($nupkgPath in $nupkgPaths) + { + Write-Host "nupkgPath:" $nupkgPath.FullName + $rename = $nupkgPath.Name + ".zip" + Rename-Item $nupkgPath.FullName $rename + $renamedFilePath = $nupkgPath.FullName + ".zip" + $dest = $file.FullName + "/contents" + Expand-Archive $renamedFilePath -Destination $dest + } + + $nuspecPaths = Get-ChildItem $file.FullName -Recurse -Filter "*.nuspec" + foreach ($nuspecPath in $nuspecPaths) + { + Write-Host "Found Nuspecs" + [xml]$nuspec = Get-Content -Path $nuspecPath.FullName + if ($nuspec.package.metadata.id -eq 'Microsoft.WindowsAppSDK') + { + $version = $nuspec.package.metadata.version + Write-Host "Found " $version + Write-Host "##vso[task.setvariable variable=WindowsAppSDKPackageVersion;]$version" + Exit 0 + } + } + } + Exit 1 + + - task: PowerShell@2 + name: TestAll + displayName: TestAll + inputs: + filePath: 'TestAll.ps1' + arguments: > + -WindowsAppSDKPackageVersion "$(WindowsAppSDKPackageVersion)" + -Checkpoint "none" -Platform "x64" + -Configuration "release" + -YamlStep "none" + -RunTestMachineSetup + -Name "${{ parameters.TestSelection }}" diff --git a/global.json b/global.json index c7d7c2c082..a5b3bee768 100644 --- a/global.json +++ b/global.json @@ -1,8 +1,8 @@ { "tools": { - "dotnet": "6.0.100" + "dotnet": "6.0.101" }, "msbuild-sdks": { - "Microsoft.WinAppSDK.EngCommon": "1.0.0-20211213.0-CI" + "Microsoft.WinAppSDK.EngCommon": "1.0.0-20220110.0-CI" } } diff --git a/test/Deployment/data/WindowsAppRuntime.Test.Framework/appxmanifest.xml b/test/Deployment/data/WindowsAppRuntime.Test.Framework/appxmanifest.xml index e2ae934691..72cfee27b9 100644 --- a/test/Deployment/data/WindowsAppRuntime.Test.Framework/appxmanifest.xml +++ b/test/Deployment/data/WindowsAppRuntime.Test.Framework/appxmanifest.xml @@ -71,6 +71,14 @@ + + + Microsoft.WindowsAppRuntime.dll + + + + + Microsoft.WindowsAppRuntime.dll diff --git a/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/appxmanifest.xml b/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/appxmanifest.xml index a765555b58..384cc4a402 100644 --- a/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/appxmanifest.xml +++ b/test/DynamicDependency/data/Microsoft.WindowsAppRuntime.Framework/appxmanifest.xml @@ -71,6 +71,14 @@ + + + Microsoft.WindowsAppRuntime.dll + + + + + Microsoft.WindowsAppRuntime.dll diff --git a/test/TestApps/PushNotificationsDemoApp/PushNotificationsDemoApp.vcxproj b/test/TestApps/PushNotificationsDemoApp/PushNotificationsDemoApp.vcxproj index 5b627f6a43..bbb1ce14c9 100644 --- a/test/TestApps/PushNotificationsDemoApp/PushNotificationsDemoApp.vcxproj +++ b/test/TestApps/PushNotificationsDemoApp/PushNotificationsDemoApp.vcxproj @@ -250,6 +250,11 @@ true $(OutDir)\..\WindowsAppRuntime_DLL\Microsoft.WindowsAppRuntime.dll + + $(OutDir)\..\WindowsAppRuntime_DLL\Microsoft.Windows.ToastNotifications.winmd + true + $(OutDir)\..\WindowsAppRuntime_DLL\Microsoft.WindowsAppRuntime.dll + diff --git a/test/TestApps/PushNotificationsDemoApp/main.cpp b/test/TestApps/PushNotificationsDemoApp/main.cpp index 8d82381432..a3fa9523ba 100644 --- a/test/TestApps/PushNotificationsDemoApp/main.cpp +++ b/test/TestApps/PushNotificationsDemoApp/main.cpp @@ -9,6 +9,7 @@ using namespace winrt::Microsoft::Windows::AppLifecycle; using namespace winrt::Microsoft::Windows::PushNotifications; +using namespace winrt::Microsoft::Windows::ToastNotifications; using namespace winrt::Windows::ApplicationModel::Activation; using namespace winrt::Windows::ApplicationModel::Background; // BackgroundTask APIs using namespace winrt::Windows::Foundation; @@ -99,6 +100,10 @@ int main() RETURN_IF_FAILED(MddBootstrapInitialize(c_Version_MajorMinor, nullptr, minVersion)); } + ToastAssets assets(L"ToastNotificationApp", winrt::Windows::Foundation::Uri{ LR"(C:\Windows\System32\WindowsSecurityIcon.png)" }); + auto activationInfo = ToastActivationInfo::CreateFromToastAssets(assets); + ToastNotificationManager::Default().RegisterActivator(activationInfo); + if (PushNotificationManager::IsActivatorSupported(PushNotificationRegistrationActivators::ComActivator)) { PushNotificationActivationInfo info( @@ -153,6 +158,7 @@ int main() PushNotificationManager::UnregisterActivator(PushNotificationRegistrationActivators::ComActivator); } + ToastNotificationManager::Default().UnregisterActivator(); if (!Test::AppModel::IsPackagedProcess()) { MddBootstrapShutdown(); diff --git a/test/TestApps/PushNotificationsDemoApp/pch.h b/test/TestApps/PushNotificationsDemoApp/pch.h index f5e2c8d252..4dde0809ff 100644 --- a/test/TestApps/PushNotificationsDemoApp/pch.h +++ b/test/TestApps/PushNotificationsDemoApp/pch.h @@ -17,3 +17,4 @@ #include #include #include +#include diff --git a/test/TestApps/ToastNotificationsTestApp/ToastNotificationsTestApp.vcxproj b/test/TestApps/ToastNotificationsTestApp/ToastNotificationsTestApp.vcxproj new file mode 100644 index 0000000000..42ab12c8ba --- /dev/null +++ b/test/TestApps/ToastNotificationsTestApp/ToastNotificationsTestApp.vcxproj @@ -0,0 +1,283 @@ + + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + Debug + ARM64 + + + Release + ARM64 + + + + + + Create + + + + + + + + + + + $(OutDir)\..\WindowsAppRuntime_DLL\Microsoft.Windows.AppLifecycle.winmd + true + $(OutDir)\..\WindowsAppRuntime_DLL\Microsoft.WindowsAppRuntime.dll + + + $(OutDir)\..\WindowsAppRuntime_DLL\Microsoft.Windows.ToastNotifications.winmd + true + $(OutDir)\..\WindowsAppRuntime_DLL\Microsoft.WindowsAppRuntime.dll + + + + + {f76b776e-86f5-48c5-8fc7-d2795ecc9746} + + + + 16.0 + Win32Proj + {4b30c685-8490-440f-9879-a75d45daa361} + ToastNotificationsTestApp + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + false + + + Application + false + v142 + true + Unicode + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + true + + + false + + + + Use + Level3 + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;..\..\inc + WIN32;_DEBUG;%(PreprocessorDefinitions) + pch.h + stdcpp17 + + + Console + %(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;%(AdditionalDependencies) + Microsoft.WindowsAppRuntime.Bootstrap.dll;%(DelayLoadDLLs) + + + + + Use + Level3 + true + true + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;..\..\inc + WIN32;NDEBUG;%(PreprocessorDefinitions) + pch.h + stdcpp17 + + + Console + true + true + %(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;%(AdditionalDependencies) + Microsoft.WindowsAppRuntime.Bootstrap.dll;%(DelayLoadDLLs) + + + + + Use + Level3 + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;..\..\inc + _DEBUG;%(PreprocessorDefinitions) + pch.h + stdcpp17 + + + Console + %(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;%(AdditionalDependencies) + Microsoft.WindowsAppRuntime.Bootstrap.dll + + + + + Use + Level3 + true + true + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;..\..\inc + NDEBUG;%(PreprocessorDefinitions) + pch.h + stdcpp17 + + + Console + true + true + %(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;%(AdditionalDependencies) + Microsoft.WindowsAppRuntime.Bootstrap.dll;%(DelayLoadDLLs) + + + + + Use + Level3 + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;..\..\inc + _DEBUG;%(PreprocessorDefinitions) + pch.h + stdcpp17 + + + Console + %(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;%(AdditionalDependencies) + Microsoft.WindowsAppRuntime.Bootstrap.dll;%(DelayLoadDLLs) + + + + + Use + Level3 + true + true + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL;..\..\inc + NDEBUG;%(PreprocessorDefinitions) + pch.h + stdcpp17 + + + Console + true + true + %(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;%(AdditionalDependencies) + Microsoft.WindowsAppRuntime.Bootstrap.dll;%(DelayLoadDLLs) + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + + diff --git a/test/TestApps/ToastNotificationsTestApp/ToastNotificationsTestApp.vcxproj.filters b/test/TestApps/ToastNotificationsTestApp/ToastNotificationsTestApp.vcxproj.filters new file mode 100644 index 0000000000..5f5111d685 --- /dev/null +++ b/test/TestApps/ToastNotificationsTestApp/ToastNotificationsTestApp.vcxproj.filters @@ -0,0 +1,30 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Header Files + + + + + + \ No newline at end of file diff --git a/test/TestApps/ToastNotificationsTestApp/main.cpp b/test/TestApps/ToastNotificationsTestApp/main.cpp new file mode 100644 index 0000000000..dcfabe0358 --- /dev/null +++ b/test/TestApps/ToastNotificationsTestApp/main.cpp @@ -0,0 +1,258 @@ +#include "pch.h" +#include +#include +#include +#include "WindowsAppRuntime.Test.AppModel.h" + +namespace winrt +{ + using namespace winrt::Microsoft::Windows::AppLifecycle; + using namespace winrt::Windows::ApplicationModel::Activation; + using namespace winrt::Windows::Foundation; + using namespace winrt::Microsoft::Windows::ToastNotifications; +} + +bool VerifyFailedRegisterActivatorUsingNullClsid() +{ + try + { + auto activationInfo = winrt::ToastActivationInfo::CreateFromActivationGuid(winrt::guid(GUID_NULL)); + + winrt::ToastNotificationManager::Default().RegisterActivator(activationInfo); + } + catch (...) + { + return winrt::to_hresult() == E_INVALIDARG; + } + + return false; +} + +bool VerifyFailedRegisterActivatorUsingNullClsid_Unpackaged() +{ + try + { + auto activationInfo = winrt::ToastActivationInfo::CreateFromActivationGuid(winrt::guid(GUID_NULL)); + + winrt::ToastNotificationManager::Default().RegisterActivator(activationInfo); + } + catch (...) + { + return winrt::to_hresult() == E_ILLEGAL_METHOD_CALL; + } + + return false; +} + +bool VerifyFailedRegisterActivatorUsingNullAssets() +{ + try + { + auto activationInfo = winrt::ToastActivationInfo::CreateFromToastAssets(nullptr); + + winrt::ToastNotificationManager::Default().RegisterActivator(activationInfo); + } + catch (...) + { + return winrt::to_hresult() == E_ILLEGAL_METHOD_CALL; + } + + return false; +} + +bool VerifyFailedRegisterActivatorUsingNullAssets_Unpackaged() +{ + try + { + auto activationInfo = winrt::ToastActivationInfo::CreateFromToastAssets(nullptr); + + winrt::ToastNotificationManager::Default().RegisterActivator(activationInfo); + } + catch (...) + { + return winrt::to_hresult() == E_POINTER; + } + + return false; +} + +bool VerifyRegisterActivatorandUnRegisterActivatorUsingClsid() +{ + auto activationInfo = winrt::ToastActivationInfo::CreateFromActivationGuid(winrt::guid("1940DBA9-0F64-4F0D-8A4B-5D207B812E61")); + + winrt::ToastNotificationManager::Default().RegisterActivator(activationInfo); + + winrt::ToastNotificationManager::Default().UnregisterActivator(); + + return true; +} + +bool VerifyRegisterActivatorandUnRegisterActivatorUsingAssets_Unpackaged() +{ + winrt::ToastAssets assets(L"ToastNotificationApp", winrt::Uri{ LR"(C:\Windows\System32\WindowsSecurityIcon.png)" }); + + auto activationInfo = winrt::ToastActivationInfo::CreateFromToastAssets(assets); + + winrt::ToastNotificationManager::Default().RegisterActivator(activationInfo); + + winrt::ToastNotificationManager::Default().UnregisterActivator(); + + return true; +} + +bool VerifyFailedMultipleRegisterActivatorUsingSameClsid() +{ + try + { + auto activationInfo = winrt::ToastActivationInfo::CreateFromActivationGuid(winrt::guid("1940DBA9-0F64-4F0D-8A4B-5D207B812E61")); + + winrt::ToastNotificationManager::Default().RegisterActivator(activationInfo); + + winrt::ToastNotificationManager::Default().RegisterActivator(activationInfo); + } + catch (...) + { + return winrt::to_hresult() == E_INVALIDARG; + } + + return false; +} + +bool VerifyFailedMultipleRegisterActivatorUsingSameAssets_Unpackaged() +{ + try + { + winrt::ToastAssets assets(L"ToastNotificationApp", winrt::Uri{ LR"(C:\Windows\System32\WindowsSecurityIcon.png)" }); + + auto activationInfo = winrt::ToastActivationInfo::CreateFromToastAssets(assets); + + winrt::ToastNotificationManager::Default().RegisterActivator(activationInfo); + + winrt::ToastNotificationManager::Default().RegisterActivator(activationInfo); + } + catch (...) + { + return winrt::to_hresult() == E_INVALIDARG; + } + + return false; +} + +bool VerifyFailedToastAssetsWithEmptyDisplayName_Unpackaged() +{ + try + { + winrt::ToastAssets assets(L"", winrt::Uri{LR"(C:\Windows\System32\WindowsSecurityIcon.png)"}); + + auto activationInfo = winrt::ToastActivationInfo::CreateFromToastAssets(assets); + } + catch (...) + { + return winrt::to_hresult() == E_INVALIDARG; + } + + return false; +} + +bool VerifyFailedToastAssetsWithEmptyIconPath_Unpackaged() +{ + try + { + winrt::ToastAssets assets(L"ToastNotificationApp", winrt::Uri{ L""}); + + auto activationInfo = winrt::ToastActivationInfo::CreateFromToastAssets(assets); + } + catch (...) + { + return winrt::to_hresult() == E_POINTER; + } + + return false; +} + +bool VerifyFailedToastAssetsWithNullIconPath_Unpackaged() +{ + try + { + winrt::ToastAssets assets(L"ToastNotificationApp", nullptr); + + auto activationInfo = winrt::ToastActivationInfo::CreateFromToastAssets(assets); + } + catch (...) + { + return winrt::to_hresult() == E_POINTER; + } + + return false; +} + +std::string unitTestNameFromLaunchArguments(const winrt::ILaunchActivatedEventArgs& launchArgs) +{ + std::string unitTestName = to_string(launchArgs.Arguments()); + auto argStart = unitTestName.rfind(" "); + if (argStart != std::wstring::npos) + { + unitTestName = unitTestName.substr(argStart + 1); + } + + return unitTestName; +} + +std::map const& GetSwitchMapping() +{ + static std::map switchMapping = { + { "VerifyFailedRegisterActivatorUsingNullClsid", &VerifyFailedRegisterActivatorUsingNullClsid }, + { "VerifyFailedRegisterActivatorUsingNullClsid_Unpackaged", &VerifyFailedRegisterActivatorUsingNullClsid_Unpackaged}, + { "VerifyFailedRegisterActivatorUsingNullAssets", &VerifyFailedRegisterActivatorUsingNullAssets }, + { "VerifyRegisterActivatorandUnRegisterActivatorUsingClsid", &VerifyRegisterActivatorandUnRegisterActivatorUsingClsid }, + { "VerifyRegisterActivatorandUnRegisterActivatorUsingAssets_Unpackaged", &VerifyRegisterActivatorandUnRegisterActivatorUsingAssets_Unpackaged }, + { "VerifyFailedMultipleRegisterActivatorUsingSameClsid", &VerifyFailedMultipleRegisterActivatorUsingSameClsid }, + { "VerifyFailedMultipleRegisterActivatorUsingSameAssets_Unpackaged", &VerifyFailedMultipleRegisterActivatorUsingSameAssets_Unpackaged }, + { "VerifyFailedToastAssetsWithEmptyDisplayName_Unpackaged", &VerifyFailedToastAssetsWithEmptyDisplayName_Unpackaged }, + { "VerifyFailedToastAssetsWithEmptyIconPath_Unpackaged", &VerifyFailedToastAssetsWithEmptyIconPath_Unpackaged }, + { "VerifyFailedToastAssetsWithNullIconPath_Unpackaged", &VerifyFailedToastAssetsWithNullIconPath_Unpackaged }, + }; + return switchMapping; +} + +bool runUnitTest(std::string unitTest) +{ + auto const& switchMapping = GetSwitchMapping(); + auto it = switchMapping.find(unitTest); + if (it == switchMapping.end()) + { + return false; + } + + return it->second(); +} + + +int main() try +{ + bool testResult = false; + auto scope_exit = wil::scope_exit([&] { + ::Test::Bootstrap::CleanupBootstrap(); + }); + + ::Test::Bootstrap::SetupBootstrap(); + + auto args = winrt::AppInstance::GetCurrent().GetActivatedEventArgs(); + auto kind = args.Kind(); + + if (kind == winrt::ExtendedActivationKind::Launch) + { + auto unitTest = unitTestNameFromLaunchArguments(args.Data().as()); + std::cout << unitTest << std::endl; + + testResult = runUnitTest(unitTest); + } + + return testResult ? 0 : 1; // We want 0 to be success and 1 failure +} +catch (...) +{ + std::cout << winrt::to_string(winrt::to_message()) << std::endl; + + return 1; // in the event of unhandled test crash +} diff --git a/test/TestApps/ToastNotificationsTestApp/packages.config b/test/TestApps/ToastNotificationsTestApp/packages.config new file mode 100644 index 0000000000..3aaafdd08f --- /dev/null +++ b/test/TestApps/ToastNotificationsTestApp/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/test/TestApps/ToastNotificationsTestApp/pch.cpp b/test/TestApps/ToastNotificationsTestApp/pch.cpp new file mode 100644 index 0000000000..8c646996e9 --- /dev/null +++ b/test/TestApps/ToastNotificationsTestApp/pch.cpp @@ -0,0 +1,3 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +#include "pch.h" diff --git a/test/TestApps/ToastNotificationsTestApp/pch.h b/test/TestApps/ToastNotificationsTestApp/pch.h new file mode 100644 index 0000000000..90a39c2919 --- /dev/null +++ b/test/TestApps/ToastNotificationsTestApp/pch.h @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include diff --git a/test/TestApps/ToastNotificationsTestAppPackage/Images/LockScreenLogo.scale-200.png b/test/TestApps/ToastNotificationsTestAppPackage/Images/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000..735f57adb5 Binary files /dev/null and b/test/TestApps/ToastNotificationsTestAppPackage/Images/LockScreenLogo.scale-200.png differ diff --git a/test/TestApps/ToastNotificationsTestAppPackage/Images/SplashScreen.scale-200.png b/test/TestApps/ToastNotificationsTestAppPackage/Images/SplashScreen.scale-200.png new file mode 100644 index 0000000000..023e7f1fed Binary files /dev/null and b/test/TestApps/ToastNotificationsTestAppPackage/Images/SplashScreen.scale-200.png differ diff --git a/test/TestApps/ToastNotificationsTestAppPackage/Images/Square150x150Logo.scale-200.png b/test/TestApps/ToastNotificationsTestAppPackage/Images/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000..af49fec1a5 Binary files /dev/null and b/test/TestApps/ToastNotificationsTestAppPackage/Images/Square150x150Logo.scale-200.png differ diff --git a/test/TestApps/ToastNotificationsTestAppPackage/Images/Square44x44Logo.scale-200.png b/test/TestApps/ToastNotificationsTestAppPackage/Images/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000..ce342a2ec8 Binary files /dev/null and b/test/TestApps/ToastNotificationsTestAppPackage/Images/Square44x44Logo.scale-200.png differ diff --git a/test/TestApps/ToastNotificationsTestAppPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png b/test/TestApps/ToastNotificationsTestAppPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000..f6c02ce97e Binary files /dev/null and b/test/TestApps/ToastNotificationsTestAppPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png differ diff --git a/test/TestApps/ToastNotificationsTestAppPackage/Images/StoreLogo.png b/test/TestApps/ToastNotificationsTestAppPackage/Images/StoreLogo.png new file mode 100644 index 0000000000..7385b56c0e Binary files /dev/null and b/test/TestApps/ToastNotificationsTestAppPackage/Images/StoreLogo.png differ diff --git a/test/TestApps/ToastNotificationsTestAppPackage/Images/Wide310x150Logo.scale-200.png b/test/TestApps/ToastNotificationsTestAppPackage/Images/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000..288995b397 Binary files /dev/null and b/test/TestApps/ToastNotificationsTestAppPackage/Images/Wide310x150Logo.scale-200.png differ diff --git a/test/TestApps/ToastNotificationsTestAppPackage/Package.appxmanifest b/test/TestApps/ToastNotificationsTestAppPackage/Package.appxmanifest new file mode 100644 index 0000000000..82398d33c4 --- /dev/null +++ b/test/TestApps/ToastNotificationsTestAppPackage/Package.appxmanifest @@ -0,0 +1,65 @@ + + + + + + + + ToastNotificationsTestAppPackage + Microsoft Corporation + Images\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + Windows App Runtime TestProtocol + + + + + + + + + + + + + + + + + + diff --git a/test/TestApps/ToastNotificationsTestAppPackage/ToastNotificationsTestAppPackage.wapproj b/test/TestApps/ToastNotificationsTestAppPackage/ToastNotificationsTestAppPackage.wapproj new file mode 100644 index 0000000000..7ce834d72f --- /dev/null +++ b/test/TestApps/ToastNotificationsTestAppPackage/ToastNotificationsTestAppPackage.wapproj @@ -0,0 +1,86 @@ + + + + 15.0 + + + + Debug + x86 + + + Release + x86 + + + Debug + x64 + + + Release + x64 + + + Debug + ARM + + + Release + ARM + + + Debug + ARM64 + + + Release + ARM64 + + + Debug + AnyCPU + + + Release + AnyCPU + + + + $(MSBuildExtensionsPath)\Microsoft\DesktopBridge\ + + + + d6a64926-4988-4c64-a5a8-2c14b1388696 + 10.0.19041.0 + 10.0.17763.0 + en-US + true + ..\ToastNotificationsTestApp\ToastNotificationsTestApp.vcxproj + true + False + $(SolutionDir)temp\MSTest.pfx + SHA256 + True + True + $(Platform) + 0 + + + + Designer + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/ToastNotificationTests/APITests.cpp b/test/ToastNotificationTests/APITests.cpp new file mode 100644 index 0000000000..f1e9a9ed52 --- /dev/null +++ b/test/ToastNotificationTests/APITests.cpp @@ -0,0 +1,216 @@ +#include "pch.h" +#include + +using namespace WEX::Common; +using namespace WEX::Logging; +using namespace WEX::TestExecution; + +using namespace winrt::Windows::ApplicationModel::Activation; +using namespace winrt::Windows::ApplicationModel::Background; +using namespace winrt::Windows::Foundation; +using namespace winrt::Windows::Foundation::Collections; +using namespace winrt::Windows::Management::Deployment; +using namespace winrt::Windows::Storage; +using namespace winrt::Windows::System; + +namespace Test::ToastNotifications +{ + class APITests + { + private: + wil::unique_event m_failed; + wil::unique_process_handle m_processHandle; + winrt::com_ptr m_testAppLauncher; + + public: + BEGIN_TEST_CLASS(APITests) + TEST_CLASS_PROPERTY(L"Description", L"Windows App SDK Toast Notifications test") + TEST_CLASS_PROPERTY(L"ThreadingModel", L"MTA") + TEST_CLASS_PROPERTY(L"RunAs:Class", L"RestrictedUser") + END_TEST_CLASS() + + static const int testWaitTime() + { + return 3000; + } + + static PCWSTR GetTestPackageFile() + { + return L"ToastNotificationsTestAppPackage"; + } + + static PCWSTR GetTestPackageFullName() + { + return L"ToastNotificationsTestAppPackage_1.0.0.0_" WINDOWSAPPRUNTIME_TEST_PACKAGE_DDLM_ARCHITECTURE L"__8wekyb3d8bbwe"; + } + + TEST_CLASS_SETUP(ClassInit) + { + try + { + // Cleanup previous installations. Need this to remove any manual installations outside of running this tests. + TP::RemovePackage(GetTestPackageFullName()); + TP::RemovePackage_DynamicDependencyLifetimeManager(); + TP::RemovePackage_DynamicDependencyDataStore(); + TP::RemovePackage_WindowsAppRuntimeFramework(); + + TP::AddPackage_WindowsAppRuntimeFramework(); // Installs WARfwk + TP::AddPackage_DynamicDependencyDataStore(); // Installs WARmain + TP::AddPackage_DynamicDependencyLifetimeManager(); // Installs WARddlm + TP::WapProj::AddPackage(TAEF::GetDeploymentDir(), GetTestPackageFile(), L".msix"); // Installs ToastNotificationsTestApp.msix + } + catch (...) + { + return false; + } + + m_testAppLauncher = winrt::create_instance(CLSID_ApplicationActivationManager, CLSCTX_ALL); + + return true; + } + + TEST_CLASS_CLEANUP(ClassUninit) + { + try + { + // Remove in reverse order to avoid conflicts between inter-dependent packages. + TP::RemovePackage(GetTestPackageFullName()); + TP::RemovePackage_DynamicDependencyLifetimeManager(); + TP::RemovePackage_DynamicDependencyDataStore(); + TP::RemovePackage_WindowsAppRuntimeFramework(); + } + catch (...) + { + return false; + } + return true; + } + + TEST_METHOD_SETUP(MethodInit) + { + VERIFY_IS_TRUE(TP::IsPackageRegistered_WindowsAppRuntimeFramework()); + VERIFY_IS_TRUE(TP::IsPackageRegistered_DynamicDependencyDataStore()); + VERIFY_IS_TRUE(TP::IsPackageRegistered_DynamicDependencyLifetimeManager()); + return true; + } + + TEST_METHOD_CLEANUP(MethodUninit) + { + VERIFY_IS_TRUE(TP::IsPackageRegistered_WindowsAppRuntimeFramework()); + VERIFY_IS_TRUE(TP::IsPackageRegistered_DynamicDependencyDataStore()); + VERIFY_IS_TRUE(TP::IsPackageRegistered_DynamicDependencyLifetimeManager()); + + m_processHandle.reset(); + return true; + } + + void RunTest(const PCWSTR& testName, const int& waitTime) + { + DWORD processId{}; + VERIFY_SUCCEEDED(m_testAppLauncher->ActivateApplication(L"ToastNotificationsTestAppPackage_8wekyb3d8bbwe!App", testName, AO_NONE, &processId)); + + m_processHandle.reset(OpenProcess(SYNCHRONIZE | PROCESS_QUERY_LIMITED_INFORMATION, FALSE, processId)); + VERIFY_IS_TRUE(m_processHandle.is_valid()); + + VERIFY_IS_TRUE(wil::handle_wait(m_processHandle.get(), waitTime)); + + DWORD exitCode{}; + VERIFY_WIN32_BOOL_SUCCEEDED(GetExitCodeProcess(m_processHandle.get(), &exitCode)); + VERIFY_ARE_EQUAL(exitCode, 0); + } + + wil::unique_handle RunUnpackaged(const std::wstring& command, const std::wstring& args, const std::wstring& directory) + { + SHELLEXECUTEINFO ei{}; + ei.cbSize = sizeof(SHELLEXECUTEINFO); + ei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_DOENVSUBST; + ei.lpFile = command.c_str(); + ei.lpParameters = args.c_str(); + ei.lpDirectory = directory.c_str(); + ei.nShow = SW_NORMAL; + + if (!ShellExecuteEx(&ei)) + { + auto lastError = GetLastError(); + VERIFY_WIN32_SUCCEEDED(lastError); + } + + wil::unique_handle process{ ei.hProcess }; + return process; + } + + const std::wstring GetDeploymentDir() + { + WEX::Common::String deploymentDir; + WEX::TestExecution::RuntimeParameters::TryGetValue(L"TestDeploymentDir", deploymentDir); + return reinterpret_cast(deploymentDir.GetBuffer()); + } + + void RunTestUnpackaged(const PCWSTR& testName, const int& waitTime) + { + auto processHandle = RunUnpackaged(L"ToastNotificationsTestApp.exe", testName, GetDeploymentDir()); + VERIFY_IS_TRUE(processHandle.is_valid()); + + VERIFY_IS_TRUE(wil::handle_wait(processHandle.get(), testWaitTime())); + + DWORD exitCode{}; + VERIFY_WIN32_BOOL_SUCCEEDED(GetExitCodeProcess(processHandle.get(), &exitCode)); + VERIFY_ARE_EQUAL(exitCode, 0); + } + + TEST_METHOD(VerifyFailedRegisterActivatorUsingNullClsid) + { + RunTest(L"VerifyFailedRegisterActivatorUsingNullClsid", testWaitTime()); + } + + TEST_METHOD(VerifyFailedRegisterActivatorUsingNullClsid_Unpackaged) + { + RunTestUnpackaged(L"VerifyFailedRegisterActivatorUsingNullClsid_Unpackaged", testWaitTime()); + } + + TEST_METHOD(VerifyFailedRegisterActivatorUsingNullAssets) + { + RunTest(L"VerifyFailedRegisterActivatorUsingNullAssets", testWaitTime()); + } + + TEST_METHOD(VerifyFailedRegisterActivatorUsingNullAssets_Unpackaged) + { + RunTestUnpackaged(L"VerifyFailedRegisterActivatorUsingNullAssets_Unpackaged", testWaitTime()); + } + + TEST_METHOD(VerifyRegisterActivatorandUnRegisterActivatorUsingClsid) + { + RunTest(L"VerifyRegisterActivatorandUnRegisterActivatorUsingClsid", testWaitTime()); + } + + TEST_METHOD(VerifyFailedMultipleRegisterActivatorUsingSameClsid) + { + RunTest(L"VerifyFailedMultipleRegisterActivatorUsingSameClsid", testWaitTime()); + } + + TEST_METHOD(VerifyRegisterActivatorandUnRegisterActivatorUsingAssets_Unpackaged) + { + RunTestUnpackaged(L"VerifyRegisterActivatorandUnRegisterActivatorUsingAssets_Unpackaged", testWaitTime()); + } + + TEST_METHOD(VerifyFailedMultipleRegisterActivatorUsingSameAssets_Unpackaged) + { + RunTestUnpackaged(L"VerifyFailedMultipleRegisterActivatorUsingSameAssets_Unpackaged", testWaitTime()); + } + + TEST_METHOD(VerifyFailedToastAssetsWithEmptyDisplayName_Unpackaged) + { + RunTestUnpackaged(L"VerifyFailedToastAssetsWithEmptyDisplayName_Unpackaged", testWaitTime()); + } + + TEST_METHOD(VerifyFailedToastAssetsWithEmptyIconPath_Unpackaged) + { + RunTestUnpackaged(L"VerifyFailedToastAssetsWithEmptyIconPath_Unpackaged", testWaitTime()); + } + + TEST_METHOD(VerifyFailedToastAssetsWithNullIconPath_Unpackaged) + { + RunTestUnpackaged(L"VerifyFailedToastAssetsWithEmptyIconPath_Unpackaged", testWaitTime()); + } + }; +} diff --git a/test/ToastNotificationTests/ToastNotificationTests.vcxproj b/test/ToastNotificationTests/ToastNotificationTests.vcxproj new file mode 100644 index 0000000000..e7a48afeea --- /dev/null +++ b/test/ToastNotificationTests/ToastNotificationTests.vcxproj @@ -0,0 +1,296 @@ + + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + Debug + ARM64 + + + Release + ARM64 + + + + 16.0 + Win32Proj + {e977b1bd-00dc-4085-a105-e0a18e0183d7} + ToastNotificationTests + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + false + + + DynamicLibrary + false + v142 + true + Unicode + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + true + + + + Level3 + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;..\inc;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL + WIN32;_DEBUG;TOASTNOTIFICATIONTESTS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;wex.common.lib;wex.logger.lib;te.common.lib;%(AdditionalDependencies) + false + + + + + Level3 + true + true + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;..\inc;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL + WIN32;NDEBUG;TOASTNOTIFICATIONTESTS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + true + Use + pch.h + + + Windows + true + true + true + $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;wex.common.lib;wex.logger.lib;te.common.lib;%(AdditionalDependencies) + false + + + + + Level3 + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;..\inc;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL + _DEBUG;TOASTNOTIFICATIONTESTS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + true + Use + pch.h + + + Windows + true + $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;wex.common.lib;wex.logger.lib;te.common.lib;%(AdditionalDependencies) + false + + + + + Level3 + true + true + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;..\inc;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL + NDEBUG;TOASTNOTIFICATIONTESTS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;wex.common.lib;wex.logger.lib;te.common.lib;%(AdditionalDependencies) + false + + + + + Use + Level3 + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;..\inc;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL + _DEBUG;%(PreprocessorDefinitions);;INLINE_TEST_METHOD_MARKUP + true + pch.h + + + Windows + $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;wex.common.lib;wex.logger.lib;te.common.lib;%(AdditionalDependencies) + + + + + Use + Level3 + true + true + true + %(AdditionalIncludeDirectories);$(OutDir)\..\WindowsAppRuntime_DLL;..\inc;$(OutDir)\..\WindowsAppRuntime_BootstrapDLL + NDEBUG;%(PreprocessorDefinitions);;INLINE_TEST_METHOD_MARKUP + true + pch.h + + + Windows + true + true + $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories);$(OutDir)\..\WindowsAppRuntime_DLL + onecore.lib;onecoreuap.lib;Microsoft.WindowsAppRuntime.lib;wex.common.lib;wex.logger.lib;te.common.lib;%(AdditionalDependencies) + + + + + + + + + Create + Create + Create + Create + Create + Create + Create + Create + + + + + + + .Debug + _Debug + $(AppxPackageDir)\ToastNotificationsTestAppPackage_1.0.0.0_$(PlatformTarget)$(TestPkgDebugConfigName)_Test + $(TestPkgOutputPath)\ToastNotificationsTestAppPackage_1.0.0.0_$(PlatformTarget)$(TestPkgDebugConfigName).msix + + + + + + + + + $(OutDir)\..\WindowsAppRuntime_DLL\Microsoft.Windows.ToastNotifications.winmd + true + + + + + {f76b776e-86f5-48c5-8fc7-d2795ecc9746} + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + + \ No newline at end of file diff --git a/test/ToastNotificationTests/ToastNotificationTests.vcxproj.filters b/test/ToastNotificationTests/ToastNotificationTests.vcxproj.filters new file mode 100644 index 0000000000..be13053b6d --- /dev/null +++ b/test/ToastNotificationTests/ToastNotificationTests.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + + + Source Files + + + Source Files + + + + + + \ No newline at end of file diff --git a/test/ToastNotificationTests/packages.config b/test/ToastNotificationTests/packages.config new file mode 100644 index 0000000000..3aaafdd08f --- /dev/null +++ b/test/ToastNotificationTests/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/test/ToastNotificationTests/pch.cpp b/test/ToastNotificationTests/pch.cpp new file mode 100644 index 0000000000..64b7eef6d6 --- /dev/null +++ b/test/ToastNotificationTests/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/test/ToastNotificationTests/pch.h b/test/ToastNotificationTests/pch.h new file mode 100644 index 0000000000..fd8a9b5103 --- /dev/null +++ b/test/ToastNotificationTests/pch.h @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#ifndef PCH_H +#define PCH_H + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace TP = ::Test::Packages; +namespace TAEF = ::Test::TAEF; +#endif //PCH_H