From a41d0158acf2c2b9dee107b22bf71e97c8629176 Mon Sep 17 00:00:00 2001 From: Eric Langlois Date: Tue, 31 May 2022 18:37:12 -0700 Subject: [PATCH 1/2] Packaged version of the Cpp app --- .../CppPackagedAppNotifications.sln | 57 +++++ ...PackagedAppNotifications (Package).wapproj | 74 ++++++ .../Images/LockScreenLogo.scale-200.png | Bin 0 -> 432 bytes .../Images/SplashScreen.scale-200.png | Bin 0 -> 5372 bytes .../Images/Square150x150Logo.scale-200.png | Bin 0 -> 1755 bytes .../Images/Square44x44Logo.scale-200.png | Bin 0 -> 637 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 283 bytes .../Images/StoreLogo.png | Bin 0 -> 456 bytes .../Images/Wide310x150Logo.scale-200.png | Bin 0 -> 2097 bytes .../Package.appxmanifest | 75 ++++++ .../CppPackagedAppNotifications/App.xaml | 20 ++ .../CppPackagedAppNotifications/App.xaml.cpp | 101 ++++++++ .../CppPackagedAppNotifications/App.xaml.h | 23 ++ .../Assets/SplashScreen.png | Bin 0 -> 78102 bytes .../Assets/Square150x150Logo.png | Bin 0 -> 10887 bytes .../Assets/Square44x44Logo.png | Bin 0 -> 2793 bytes .../Assets/Wide310x150Logo.png | Bin 0 -> 11204 bytes .../Assets/logo.png | Bin 0 -> 3138 bytes .../Assets/windows-sdk.ico | Bin 0 -> 2150 bytes .../CppPackagedAppNotifications.vcxproj | 235 ++++++++++++++++++ ...ppPackagedAppNotifications.vcxproj.filters | 84 +++++++ .../CppPackagedAppNotifications/MainPage.xaml | 46 ++++ .../MainPage.xaml.cpp | 185 ++++++++++++++ .../MainPage.xaml.h | 38 +++ .../MainWindow.xaml | 13 + .../MainWindow.xaml.cpp | 90 +++++++ .../MainWindow.xaml.h | 29 +++ .../Notifications/Common.cpp | 41 +++ .../Notifications/Common.h | 13 + .../Notifications/NotificationManager.cpp | 86 +++++++ .../Notifications/NotificationManager.h | 20 ++ .../Notifications/ToastWithAvatar.cpp | 54 ++++ .../Notifications/ToastWithAvatar.h | 16 ++ .../Notifications/ToastWithTextBox.cpp | 70 ++++++ .../Notifications/ToastWithTextBox.h | 16 ++ .../NotifyUser.cpp | 35 +++ .../CppPackagedAppNotifications/NotifyUser.h | 10 + .../CppPackagedAppNotifications/Project.idl | 58 +++++ .../SampleConfiguration.cpp | 27 ++ .../SampleConfiguration.h | 15 ++ .../Scenario1_ToastWithAvatar.xaml | 32 +++ .../Scenario1_ToastWithAvatar.xaml.cpp | 41 +++ .../Scenario1_ToastWithAvatar.xaml.h | 27 ++ .../Scenario2_ToastWithTextBox.xaml | 32 +++ .../Scenario2_ToastWithTextBox.xaml.cpp | 41 +++ .../Scenario2_ToastWithTextBox.xaml.h | 26 ++ .../SettingsPage.xaml | 40 +++ .../SettingsPage.xaml.cpp | 51 ++++ .../SettingsPage.xaml.h | 23 ++ .../CppPackagedAppNotifications/Styles.xaml | 136 ++++++++++ .../CppPackagedAppNotifications/app.manifest | 15 ++ .../packages.config | 7 + .../CppPackagedAppNotifications/pch.cpp | 4 + .../CppPackagedAppNotifications/pch.h | 32 +++ 54 files changed, 2038 insertions(+) create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications.sln create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/CppPackagedAppNotifications (Package).wapproj create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/LockScreenLogo.scale-200.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/SplashScreen.scale-200.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/Square150x150Logo.scale-200.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/Square44x44Logo.scale-200.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/StoreLogo.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/Wide310x150Logo.scale-200.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Package.appxmanifest create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/SplashScreen.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/Square150x150Logo.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/Square44x44Logo.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/Wide310x150Logo.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/logo.png create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/windows-sdk.ico create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications.vcxproj create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications.vcxproj.filters create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/Common.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/Common.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/NotificationManager.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/NotificationManager.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithAvatar.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithAvatar.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithTextBox.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithTextBox.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/NotifyUser.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/NotifyUser.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Project.idl create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SampleConfiguration.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SampleConfiguration.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Scenario1_ToastWithAvatar.xaml create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Scenario1_ToastWithAvatar.xaml.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Scenario1_ToastWithAvatar.xaml.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Scenario2_ToastWithTextBox.xaml create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Scenario2_ToastWithTextBox.xaml.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Scenario2_ToastWithTextBox.xaml.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SettingsPage.xaml create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SettingsPage.xaml.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SettingsPage.xaml.h create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Styles.xaml create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/app.manifest create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/packages.config create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/pch.cpp create mode 100644 Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/pch.h diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications.sln b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications.sln new file mode 100644 index 000000000..e17ab380e --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications.sln @@ -0,0 +1,57 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32505.173 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "CppPackagedAppNotifications (Package)", "CppPackagedAppNotifications\CppPackagedAppNotifications (Package)\CppPackagedAppNotifications (Package).wapproj", "{DD0A6C40-D9D2-419C-85E1-D491A835DBB4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CppPackagedAppNotifications", "CppPackagedAppNotifications\CppPackagedAppNotifications\CppPackagedAppNotifications.vcxproj", "{8388B1E5-C891-4AF3-9380-4F89C7EB9690}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|arm64 = Debug|arm64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|arm64 = Release|arm64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Debug|arm64.ActiveCfg = Debug|arm64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Debug|arm64.Build.0 = Debug|arm64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Debug|arm64.Deploy.0 = Debug|arm64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Debug|x64.ActiveCfg = Debug|x64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Debug|x64.Build.0 = Debug|x64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Debug|x64.Deploy.0 = Debug|x64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Debug|x86.ActiveCfg = Debug|x86 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Debug|x86.Build.0 = Debug|x86 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Debug|x86.Deploy.0 = Debug|x86 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Release|arm64.ActiveCfg = Release|arm64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Release|arm64.Build.0 = Release|arm64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Release|arm64.Deploy.0 = Release|arm64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Release|x64.ActiveCfg = Release|x64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Release|x64.Build.0 = Release|x64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Release|x64.Deploy.0 = Release|x64 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Release|x86.ActiveCfg = Release|x86 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Release|x86.Build.0 = Release|x86 + {DD0A6C40-D9D2-419C-85E1-D491A835DBB4}.Release|x86.Deploy.0 = Release|x86 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Debug|arm64.ActiveCfg = Debug|arm64 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Debug|arm64.Build.0 = Debug|arm64 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Debug|x64.ActiveCfg = Debug|x64 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Debug|x64.Build.0 = Debug|x64 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Debug|x86.ActiveCfg = Debug|Win32 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Debug|x86.Build.0 = Debug|Win32 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Release|arm64.ActiveCfg = Release|arm64 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Release|arm64.Build.0 = Release|arm64 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Release|x64.ActiveCfg = Release|x64 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Release|x64.Build.0 = Release|x64 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Release|x86.ActiveCfg = Release|Win32 + {8388B1E5-C891-4AF3-9380-4F89C7EB9690}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D03F5394-3C2A-41D0-8FF2-E1797073B319} + EndGlobalSection +EndGlobal diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/CppPackagedAppNotifications (Package).wapproj b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/CppPackagedAppNotifications (Package).wapproj new file mode 100644 index 000000000..d479c04b7 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/CppPackagedAppNotifications (Package).wapproj @@ -0,0 +1,74 @@ + + + + 15.0 + + + + Debug + x86 + + + Release + x86 + + + Debug + x64 + + + Release + x64 + + + Debug + arm64 + + + Release + arm64 + + + + $(MSBuildExtensionsPath)\Microsoft\DesktopBridge\ + NativeOnly + NativeOnly + + + + dd0a6c40-d9d2-419c-85e1-d491a835dbb4 + 10.0.22000.0 + 10.0.17763.0 + en-US + True + ..\CppPackagedAppNotifications\CppPackagedAppNotifications.vcxproj + ACA086B7A353F6C7E2CB72FEFC1DD02AD0048727 + CppPackagedAppNotifications %28Package%29_TemporaryKey.pfx + + + + Designer + + + + + + + + + + + + + + + True + + + + + + + + + \ No newline at end of file diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/LockScreenLogo.scale-200.png b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..7440f0d4bf7c7e26e4e36328738c68e624ee851e GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(FqV6|IEGZ*x-#9g>~Mkr+x6^F zy~CDX2QIMs&Gcs3RnRBoxBA!*(Mfw0KTCYuYk0WlEIV>qBmPl! zq4ukrvfADX@#p8fbLY(H47N+k`FZ(FZh?cDro7>{8mkBO3>^oaIx`3!Jl)Qq)HI!+ z(S=1{o~eT)&W^=Ea8C`-17(Jv5(nHFJ{dOjGdxLVkY_y6&S1whfuFI4MM0kF0f&cO zPDVpV%nz;Id$>+0Ga5e9625-JcI)oq=#Pa3p^>8BB}21BUw@eN!-6@w%X+^`+Vn?! zryu|3T>kVWNBYyBc=7Y6H#s1Ah!OI_nezW zXTqOdkv2Az6KKBV=$yHdF^R3Fqw(TZEoNSZX>reXJ#bwX42%f|Pgg&ebxsLQ010xn AssI20 literal 0 HcmV?d00001 diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/SplashScreen.scale-200.png b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..32f486a86792a5e34cd9a8261b394c49b48f86be GIT binary patch literal 5372 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 literal 0 HcmV?d00001 diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/Square44x44Logo.scale-200.png b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..f713bba67f551ef91020b75716a4dc8ebd744b1c GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL1|$oo8kjIJFu8cTIEGZ*dUI*J;2{SImxtDO zm%3!R$UazoY}x{$j0P5ABYXWr(l=jxJ6ps1W{tV=^>{Dl><3nv3A}sm=EZ)#l3`NR zpZda3^rNox*D1%NC98Z~L*6zipLw~Gxn&(Y-;KmJ+aR6eLabU-L#y8HW%7P-E_-VlLqIabbHPHKT*)fT@9iWJ7iWgOT9%0}Lrj>lztPxWq6sPw3pi z#-<=#$jjrP_DD*i!RLsn0mIA=>4~N)IMYWIf=j%-zuKCdMG%tHYot70D1| zvWa0wMhauW#S>1CnI_;>!1Q3zMA17@DOVq{MQ+{U7^a&yA+%dMCG;WNPV0i;w$tu; zX^b}UKziPM)(<;)ruW;-`)bBN+rQNM*Zs_>?n$|FVFo-e*PZb*@U7VAd+tHb4e?=Blc~}S6K)wL}r*Gf`BM#QB z+y>N$mCswb4d{^{S9v_!eQj4fTRMOwOCi?lSk9%<=vAz}jM-*PQtH@Odn1LZcd^j#o> hW$4xn+CT+ep9lJ{OAO?njobhL002ovPDHLkV1nYebbkN< literal 0 HcmV?d00001 diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/StoreLogo.png b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Images/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..a4586f26bdf7841cad10f39cdffe2aca3af252c1 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fF!p=8IEGZ*dUM0H=rDtTTVkd2 z(%lbKn@VS_lUaADVB&;Z6F#LM+mPsa?e>FnHo;HND^!P`-lX%BH~FOg%y&x+t*x!? zg$#_1A1kgsSvO(fw`bOmo;lrJX8byO1j^gf7qohR%mmt z@L)WX;>gqgK|tWJvQ5j;4;=gt4HXVKSMYRv5RhY5vS~TqfK_NAP*r{h!!g^BZ;w4r z7CGdsai)y;fJQc`7{Zc2b==h%o`Op$|bg6a&nL{*m7-=0>k4M4-PXlU;G-?%*(*g>iFt^ U$m#7DfHB12>FVdQ&MBb@0G`#n8vpc0sq%A~kJcD9FY~qQRMt?ZR3YyDZt}Od;|mgpc{2dv9AHF){kXU%k({ z=Y8JidEayHTkG@twPZ|U3_^%3ct-OgLSiFAqDN!|tbCX@c@?4P`2x*TMK!+Q4b?k0 ziW7!!KF6dPWcF<%I|iznM~`QJ_V7sHGV_D`dhgpA9Vd@&X}ErK+j~_rdv;Bp?OA@a zFXOk7eWOJe5NcK;6h$FaM&7JxNc#-@QTwzW6x#d_zmQNkz5) zPI;kh;3d;5UCJU+9a(cOxX(|edWoOiAEdGU#kPJ&xnc2||3vDbuhBCkj-pb0as$Zl z5;}4n=**n6(1g`JEtSy;SG6X;#-F~Oz3lESG2b5`j@wAwY4Yp<=4Xeb>iH=6aicF?DxD&q{`!&}ct zBI)aycwuobQAf&678Uf+Mmh-@9RUhyH~>?w0dixO0#jZjEc9R^=5NZw=|a(kcB?9^ zfnTiEFXp-q#B;Tn>(O%$A*ud^Rg&eVH6Y_5Y%!E39RR&s?XpG`gKwU!6FE1 z7X)DC7)*(5g}lh`4`{i~DZcWupZI`K)_4P)VE{@gc7@Xsd^86zl~_mOYH?I4!aGeX z^E(_=L6?PgveDQ+r%P@UISEXrkn`LHJZ##+!-anV>6h)IkKp;E@p8+3&(5%kS2)ld*J*rJccZM0iyaAx7+F~GW1UWFK&3X$PE1^}NH zgAG9ck5K!{07OwU@j@Do>TbH=CDEo#4m0cEyAuXy_<&jlzJVcKweSJ5 z&=q~iIn18$w8yb=rmEmHxVEUA^?RwnB?6Qlp1os8@*dWTGL2bhzZ!s*xqScR?EPL` zo(JwNdKUUYy7GtvZ3asXm)cgFvCx9EmAi;|w=a0iGiv%%VYKh`P0Wma4y`Xyx|T~( zAmfGbgbEEC7)j8b@WA@+5W3a61HJXC1dX@6_T|Czk0I0zBk%tnW~()VWITGI!`$c< gARL?UBrYYkwoDw4eo*CrzXGTrZ@;GF>596)00d&n@&Et; literal 0 HcmV?d00001 diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Package.appxmanifest b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Package.appxmanifest new file mode 100644 index 000000000..2368b3c71 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications (Package)/Package.appxmanifest @@ -0,0 +1,75 @@ + + + + + + + + CppPackagedAppNotifications (Package) + erlangl + Images\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml new file mode 100644 index 000000000..c20f037c2 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml @@ -0,0 +1,20 @@ + + + + + + + + + + + + diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml.cpp b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml.cpp new file mode 100644 index 000000000..973d1246e --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml.cpp @@ -0,0 +1,101 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#include "pch.h" +#include "App.xaml.h" +#include "MainWindow.xaml.h" +#include "Notifications\NotificationManager.h" +#include +#include +#include +#include + +namespace winrt +{ + using namespace Windows::Foundation; + using namespace Microsoft::UI::Xaml; + using namespace winrt::Microsoft::Windows::AppLifecycle; + using namespace winrt::Microsoft::Windows::AppNotifications; +} + +// NotificationManager is responsible for registering and unregistering the Sample for App Notifications as well as +// dispatching actioned notifications to the appropriate scenario. +// Registration will happen when Init() is called and Unregistration will happen when this +// instance variable goes out of scope, i.e.: when the App is terminated. +static NotificationManager g_notificationManager; + +namespace winrt::CppPackagedAppNotifications::implementation +{ + static App* app{ nullptr }; + + App::App() + { + InitializeComponent(); + app = this; + +#if defined _DEBUG && !defined DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION + UnhandledException([](winrt::IInspectable const&, winrt::UnhandledExceptionEventArgs const& e) + { + if (IsDebuggerPresent()) + { + auto errorMessage = e.Message(); + __debugbreak(); + } + }); +#endif + } + + void App::ToForeground() + { + assert(app != nullptr); + + HWND hwnd; + auto windowNative{ app->window.as() }; + if (windowNative && SUCCEEDED(windowNative->get_WindowHandle(&hwnd))) + { + SwitchToThisWindow(hwnd, TRUE); + } + } + + std::wstring App::GetFullPathToExe() + { + TCHAR buffer[MAX_PATH] = { 0 }; + GetModuleFileName(NULL, buffer, MAX_PATH); + std::wstring::size_type pos = std::wstring(buffer).find_last_of(L"\\/"); + return std::wstring(buffer).substr(0, pos); + } + + std::wstring App::GetFullPathToAsset(std::wstring const& assetName) + { + return GetFullPathToExe() + L"\\Assets\\" + assetName; + } + + void App::OnLaunched(winrt::Microsoft::UI::Xaml::LaunchActivatedEventArgs const& /*args*/) + { + window = make(); + + g_notificationManager.Init(); + + // NOTE: AppInstance is ambiguous between + // Microsoft.Windows.AppLifecycle.AppInstance and + // Windows.ApplicationModel.AppInstance + auto currentInstance{ winrt::AppInstance::GetCurrent() }; + if (currentInstance) + { + // AppInstance.GetActivatedEventArgs will report the correct ActivationKind, + // even in WinUI's OnLaunched. + winrt::AppActivationArguments activationArgs{ currentInstance.GetActivatedEventArgs() }; + if (activationArgs) + { + winrt::ExtendedActivationKind extendedKind{ activationArgs.Kind() }; + if (extendedKind == winrt::Microsoft::Windows::AppLifecycle::ExtendedActivationKind::AppNotification) + { + winrt::AppNotificationActivatedEventArgs notificationActivatedEventArgs{ activationArgs.Data().as() }; + g_notificationManager.ProcessLaunchActivationArgs(notificationActivatedEventArgs); + } + } + } + + window.Activate(); + } +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml.h b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml.h new file mode 100644 index 000000000..e63693907 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/App.xaml.h @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#pragma once +#include "App.xaml.g.h" +#include "pch.h" + +namespace winrt::CppPackagedAppNotifications::implementation +{ + struct App : AppT + { + App(); + + static std::wstring GetFullPathToExe(); + static std::wstring GetFullPathToAsset(std::wstring const& assetName); + static void ToForeground(); + + void OnLaunched(Microsoft::UI::Xaml::LaunchActivatedEventArgs const&); + + private: + Microsoft::UI::Xaml::Window window{ nullptr }; + }; +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/SplashScreen.png b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/SplashScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..18482131803409efae8c534cb796c1760d49091a GIT binary patch literal 78102 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 literal 0 HcmV?d00001 diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/Square44x44Logo.png b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..844b60c201cf8c1eb46866ac5bee1def5e5e6a24 GIT binary patch literal 2793 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 bR~Z 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 WwDLL`=mUcOt0oOr5U&t32>3tVaPEr$ literal 0 HcmV?d00001 diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/logo.png b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fd2293e7bd8621a23122c5d65ddcba9ed2dd8f45 GIT binary patch literal 3138 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 Z7r%3*fy_O`MXDNeo#;(s(E^)w`~)@M5;Fh* literal 0 HcmV?d00001 diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications.vcxproj b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications.vcxproj new file mode 100644 index 000000000..66d093339 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications.vcxproj @@ -0,0 +1,235 @@ + + + + + + + true + true + true + {8388b1e5-c891-4af3-9380-4f89c7eb9690} + CppPackagedAppNotifications + CppPackagedAppNotifications + + $(RootNamespace) + en-US + 16.0 + false + false + Windows Store + 10.0 + 10.0 + 10.0.17763.0 + true + true + + + + + Debug + Win32 + + + Debug + x64 + + + Debug + arm64 + + + Release + Win32 + + + Release + x64 + + + Release + arm64 + + + + Application + v142 + Unicode + true + + + true + true + + + false + true + false + + + + + + + + + + + Use + pch.h + $(IntDir)pch.pch + Level4 + %(AdditionalOptions) /bigobj + + + + + _DEBUG;%(PreprocessorDefinitions) + + + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + + + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + + + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + + + + + NDEBUG;%(PreprocessorDefinitions) + + + true + true + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + onecore.lib;onecoreuap.lib;%(AdditionalDependencies) + + + + + + + + MainPage.xaml + Code + + + + + + + + + App.xaml + + + MainWindow.xaml + + + + Scenario1_ToastWithAvatar.xaml + Code + + + Scenario2_ToastWithTextBox.xaml + Code + + + SettingsPage.xaml + Code + + + + + + Designer + + + + Designer + + + Designer + + + Designer + + + Designer + + + + + MainPage.xaml + Code + + + + + + + + Create + + + App.xaml + + + MainWindow.xaml + + + + + Scenario1_ToastWithAvatar.xaml + Code + + + Scenario2_ToastWithTextBox.xaml + Code + + + SettingsPage.xaml + Code + + + + + Code + + + + + + + + + + + + + + + + + + + + + + + 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/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications.vcxproj.filters b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications.vcxproj.filters new file mode 100644 index 000000000..b7cb4a87d --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications.vcxproj.filters @@ -0,0 +1,84 @@ + + + + + + Notifications + + + Notifications + + + Notifications + + + Notifications + + + + + + + + {e48dc53e-40b1-40cb-970a-f89935452892} + + + {88af0e69-0f57-40f4-b16f-039a285b63b3} + + + + + + + + + + + Notifications + + + Notifications + + + Notifications + + + Notifications + + + + + + + + + + + + + + + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + + + + \ No newline at end of file diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml new file mode 100644 index 000000000..8a69235b9 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + Received Notifications + + + + + + + + + + + + + diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml.cpp b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml.cpp new file mode 100644 index 000000000..d6d96bdb7 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml.cpp @@ -0,0 +1,185 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#include "pch.h" +#include "MainPage.xaml.h" +#if __has_include("MainPage.g.cpp") +#include "MainPage.g.cpp" +#endif + +namespace winrt +{ + using namespace winrt::Windows::Foundation; + using namespace Microsoft::UI::Xaml; + using namespace Microsoft::UI::Xaml::Controls; + using namespace Microsoft::UI::Xaml::Media; + using namespace Microsoft::UI::Xaml::Media::Animation; + using namespace Microsoft::UI::Xaml::Navigation; + using namespace Windows::UI::Xaml::Interop; +} + +namespace winrt::CppPackagedAppNotifications::implementation +{ + CppPackagedAppNotifications::MainPage MainPage::current{ nullptr }; + + MainPage::MainPage() + { + messages = winrt::single_threaded_observable_vector(); + + InitializeComponent(); + MainPage::current = *this; + this->notificationBox().ItemsSource(messages); + } + + void MainPage::NotificationReceived(Notification const& notification) + { + std::wstring text{ notification.Originator }; + + text.append(L"\t- Action: " + notification.Action); + + if (notification.HasInput) + { + if (notification.Input.empty()) + { + text.append(L"\t- No input received"); + } + else + { + text.append(L"\t- Input received: " + notification.Input); + } + } + messages.InsertAt(0, PropertyValue::CreateString(text)); + } + + void MainPage::NotifyUser(hstring const& strMessage, InfoBarSeverity const& severity) + { + // If called from the UI thread, then update immediately. + // Otherwise, schedule a task on the UI thread to perform the update. + if (this->DispatcherQueue().HasThreadAccess()) + { + UpdateStatus(strMessage, severity); + } + else + { + DispatcherQueue().TryEnqueue([strongThis = get_strong(), this, strMessage, severity] + { UpdateStatus(strMessage, severity); }); + } + } + + void MainPage::UpdateStatus(hstring const& strMessage, InfoBarSeverity severity) + { + infoBar().Message(strMessage); + infoBar().IsOpen(!strMessage.empty()); + infoBar().Severity(severity); + } + + void MainPage::NavView_Loaded(IInspectable const&, RoutedEventArgs const&) + { + for (auto&& s : Scenarios()) + { + FontIcon fontIcon{}; + fontIcon.FontFamily(winrt::FontFamily(L"Segoe MDL2 Assets")); + fontIcon.Glyph(L"\uE82D"); + + NavigationViewItem navViewItem{}; + navViewItem.Content(box_value(s.Title)); + navViewItem.Tag(box_value(s.ClassName)); + navViewItem.Icon(fontIcon); + NavView().MenuItems().Append(navViewItem); + } + + // NavView doesn't load any page by default, so load home page. + NavView().SelectedItem(NavView().MenuItems().GetAt(0)); + + // If navigation occurs on SelectionChanged, this isn't needed. + // Because we use ItemInvoked to navigate, we need to call Navigate + // here to load the home page. + if (Scenarios().Size() > 0) + { + NavView_Navigate(Scenarios().GetAt(0).ClassName, nullptr); + } + } + + + void MainPage::NavView_ItemInvoked(NavigationView const&, NavigationViewItemInvokedEventArgs const& args) + { + if (args.IsSettingsInvoked() == true) + { + hstring xamltypename = winrt::xaml_typename().Name; + NavView_Navigate(xamltypename, args.RecommendedNavigationTransitionInfo()); + } + else if (args.InvokedItemContainer() != nullptr) + { + auto navItemTag = winrt::unbox_value(args.InvokedItemContainer().Tag()); + if (navItemTag != L"") + { + NavView_Navigate(navItemTag, args.RecommendedNavigationTransitionInfo()); + } + } + } + + void MainPage::NavView_Navigate(hstring navItemTag, NavigationTransitionInfo const&) + { + TypeName pageType; + + if (navItemTag == winrt::xaml_typename().Name) + { + pageType = winrt::xaml_typename(); + } + else + { + pageType.Name = navItemTag; + pageType.Kind = TypeKind::Metadata; + } + + NavView_NavigateToPage(pageType); + } + + void MainPage::NavView_NavigateToPage(TypeName const& pageType) + { + // Get the page type before navigation so you can prevent duplicate + // entries in the backstack. + TypeName prePageType = ContentFrame().CurrentSourcePageType(); + + // Only navigate if the selected page isn't currently loaded. + if (prePageType.Name != pageType.Name) + { + DrillInNavigationTransitionInfo drillIn; + ContentFrame().Navigate(pageType, nullptr, drillIn); + } + } + + void MainPage::NavView_BackRequested(NavigationView const&, NavigationViewBackRequestedEventArgs const&) + { + if (ContentFrame().CanGoBack()) + { + ContentFrame().GoBack(); + } + } + + void MainPage::ContentFrame_Navigated(IInspectable const&, NavigationEventArgs const& e) + { + NavView().IsBackEnabled(ContentFrame().CanGoBack()); + + if (ContentFrame().SourcePageType().Name == winrt::xaml_typename().Name) + { + // SettingsItem is not part of NavView.MenuItems, and doesn't have a Tag. + NavView().SelectedItem((NavView().SettingsItem().as())); + NavView().Header(winrt::box_value(L"Settings")); + } + else + { + for (auto&& item : NavView().MenuItems()) + { + auto navViewItem = item.try_as(); + if (navViewItem != nullptr && + winrt::unbox_value(navViewItem.Tag()) == e.SourcePageType().Name) + { + NavView().SelectedItem(navViewItem); + NavView().Header(navViewItem.Content()); + break; + } + } + } + } +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml.h b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml.h new file mode 100644 index 000000000..d9c99931f --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainPage.xaml.h @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#pragma once +#include "MainPage.g.h" + +namespace winrt::CppPackagedAppNotifications::implementation +{ + struct MainPage : MainPageT + { + MainPage(); + static CppPackagedAppNotifications::MainPage Current() { return current; } + static Windows::Foundation::Collections::IVector Scenarios() { return scenariosInner; } + void NotificationReceived(Notification const& notification); + void NotifyUser(hstring const& strMessage, Microsoft::UI::Xaml::Controls::InfoBarSeverity const& severity); + void UpdateStatus(hstring const& strMessage, Microsoft::UI::Xaml::Controls::InfoBarSeverity severity); + void NavView_Loaded(Windows::Foundation::IInspectable const& sender, Microsoft::UI::Xaml::RoutedEventArgs const& e); + void NavView_ItemInvoked(Microsoft::UI::Xaml::Controls::NavigationView const& sender, Microsoft::UI::Xaml::Controls::NavigationViewItemInvokedEventArgs const& args); + void NavView_Navigate(hstring navItemTag, Microsoft::UI::Xaml::Media::Animation::NavigationTransitionInfo const& transitionInfo); + void NavView_BackRequested(Microsoft::UI::Xaml::Controls::NavigationView const& sender, Microsoft::UI::Xaml::Controls::NavigationViewBackRequestedEventArgs const& args); + void ContentFrame_Navigated(Windows::Foundation::IInspectable const& sender, Microsoft::UI::Xaml::Navigation::NavigationEventArgs const& e); + + private: + static Windows::Foundation::Collections::IVector scenariosInner; + static CppPackagedAppNotifications::MainPage current; + + void NavView_NavigateToPage(winrt::Windows::UI::Xaml::Interop::TypeName const& pageType); + + Windows::Foundation::Collections::IVector messages; + }; +} + +namespace winrt::CppPackagedAppNotifications::factory_implementation +{ + struct MainPage : MainPageT + { + }; +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml new file mode 100644 index 000000000..88d5f98ce --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml @@ -0,0 +1,13 @@ + + + + + diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml.cpp b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml.cpp new file mode 100644 index 000000000..234740d9c --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml.cpp @@ -0,0 +1,90 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#include "pch.h" +#include "MainWindow.xaml.h" +#include +#if __has_include("MainWindow.g.cpp") +#include "MainWindow.g.cpp" + +#include "microsoft.ui.xaml.window.h" +#include "SampleConfiguration.h" +#endif + +namespace winrt +{ + using namespace Microsoft::UI::Xaml; +} + +namespace winrt::CppPackagedAppNotifications::implementation +{ + MainWindow::MainWindow() + { + InitializeComponent(); + + Title(winrt::CppPackagedAppNotifications::SampleConfig::FeatureName); + + HWND hwnd = GetWindowHandle(); + LoadIcon(hwnd, L"Assets/windows-sdk.ico"); + SetWindowSize(hwnd, 1050, 800); + PlacementCenterWindowInMonitorWin32(hwnd); + } + + HWND MainWindow::GetWindowHandle() + { + if (_hwnd == nullptr) + { + Window window = *this; + window.as()->get_WindowHandle(&_hwnd); + } + return _hwnd; + } + + void MainWindow::LoadIcon(HWND hwnd, wchar_t const* iconPath) + { + HANDLE hSmallIcon = LoadImageW(nullptr, iconPath, IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), + LR_LOADFROMFILE | LR_SHARED); + SendMessageW(hwnd, WM_SETICON, ICON_SMALL, reinterpret_cast(hSmallIcon)); + + HANDLE hBigIcon = LoadImageW(nullptr, iconPath, IMAGE_ICON, + GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), + LR_LOADFROMFILE | LR_SHARED); + SendMessageW(hwnd, WM_SETICON, ICON_BIG, reinterpret_cast(hBigIcon)); + } + + void MainWindow::SetWindowSize(HWND hwnd, int width, int height) + { + // Win32 uses pixels and WinUI 3 uses effective pixels, so you should apply the DPI scale factor + const UINT dpi = GetDpiForWindow(hwnd); + const float scalingFactor = static_cast(dpi) / 96; + const int widthScaled = static_cast(width * scalingFactor); + const int heightScaled = static_cast(height * scalingFactor); + + SetWindowPos(hwnd, nullptr, 0, 0, widthScaled, heightScaled, SWP_NOMOVE | SWP_NOZORDER); + } + + void MainWindow::PlacementCenterWindowInMonitorWin32(HWND hwnd) + { + RECT windowMontiorRectToAdjust; + GetWindowRect(hwnd, &windowMontiorRectToAdjust); + ClipOrCenterRectToMonitorWin32(windowMontiorRectToAdjust); + SetWindowPos(hwnd, nullptr, windowMontiorRectToAdjust.left, + windowMontiorRectToAdjust.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); + } + + void MainWindow::ClipOrCenterRectToMonitorWin32(RECT& adjustedWindowRect) + { + MONITORINFO mi{ sizeof(mi) }; + GetMonitorInfoW(MonitorFromRect(&adjustedWindowRect, MONITOR_DEFAULTTONEAREST), &mi); + + const auto& rcWork = mi.rcWork; + const int w = adjustedWindowRect.right - adjustedWindowRect.left; + const int h = adjustedWindowRect.bottom - adjustedWindowRect.top; + + adjustedWindowRect.left = rcWork.left + (rcWork.right - rcWork.left - w) / 2; + adjustedWindowRect.top = rcWork.top + (rcWork.bottom - rcWork.top - h) / 2; + adjustedWindowRect.right = adjustedWindowRect.left + w; + adjustedWindowRect.bottom = adjustedWindowRect.top + h; + } +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml.h b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml.h new file mode 100644 index 000000000..967fcbf11 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/MainWindow.xaml.h @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#pragma once +#include "MainWindow.g.h" +#include "pch.h" + +namespace winrt::CppPackagedAppNotifications::implementation +{ + struct MainWindow : MainWindowT + { + MainWindow(); + + private: + HWND _hwnd{ nullptr }; + void SetWindowSize(HWND hwnd, const int width, const int height); + HWND GetWindowHandle(); + void LoadIcon(HWND hwnd, wchar_t const* iconName); + void ClipOrCenterRectToMonitorWin32(RECT& rc); + void PlacementCenterWindowInMonitorWin32(HWND hwnd); + }; +} + +namespace winrt::CppPackagedAppNotifications::factory_implementation +{ + struct MainWindow : MainWindowT + { + }; +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/Common.cpp b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/Common.cpp new file mode 100644 index 000000000..11bda104f --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/Common.cpp @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#include "pch.h" +#include "Common.h" + +static auto scenarioTag{ L"scenarioId" }; + +std::optional Common::ExtractParamFromArgs(std::wstring const& args, std::wstring const& paramName) +{ + auto tag{ paramName }; + tag.append(L"="); + + auto tagStart{ args.find(tag) }; + if (tagStart == std::wstring::npos) + { + return std::nullopt; + } + + auto paramStart{ tagStart + tag.length() }; + auto paramEnd{ args.find(L"&", paramStart) }; + + return args.substr(paramStart, paramEnd - paramStart); +} + +std::wstring Common::MakeScenarioIdToken(unsigned id) +{ + return std::wstring(scenarioTag) + L"=" + std::to_wstring(id); +} + +std::optional Common::ExtractScenarioIdFromArgs(std::wstring const& args) +{ + auto scenarioId{ ExtractParamFromArgs(args, scenarioTag) }; + + if (!scenarioId.has_value()) + { + return std::nullopt; + } + + return std::stoul(scenarioId.value()); +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/Common.h b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/Common.h new file mode 100644 index 000000000..84c9ec436 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/Common.h @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#pragma once +struct Common +{ +public: + static std::optional ExtractParamFromArgs(std::wstring const& args, std::wstring const& paramName); + + static std::wstring MakeScenarioIdToken(unsigned Id); + static std::optional ExtractScenarioIdFromArgs(std::wstring const& args); +}; + diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/NotificationManager.cpp b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/NotificationManager.cpp new file mode 100644 index 000000000..2ffbbddba --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/NotificationManager.cpp @@ -0,0 +1,86 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#include "pch.h" +#include "NotificationManager.h" +#include "App.xaml.h" +#include "MainPage.xaml.h" +#include +#include "ToastWithAvatar.h" +#include "ToastWithTextBox.h" +#include "Common.h" +#include "NotifyUser.h" +#include +#include + +namespace winrt +{ + using namespace Microsoft::UI::Xaml::Controls; + using namespace Microsoft::Windows::AppNotifications; + using namespace CppPackagedAppNotifications::implementation; +} + +static const std::map> c_notificationHandlers +{ + // When adding new a scenario, be sure to add its notification handler here. + { ToastWithAvatar::ScenarioId, ToastWithAvatar::NotificationReceived }, + { ToastWithTextBox::ScenarioId, ToastWithTextBox::NotificationReceived } +}; + +NotificationManager::NotificationManager():m_isRegistered(false){} + +NotificationManager::~NotificationManager() +{ + if (m_isRegistered) + { + winrt::AppNotificationManager::Default().Unregister(); + } +} + +void NotificationManager::Init() +{ + auto notificationManager{ winrt::AppNotificationManager::Default() }; + + // To ensure all Notification handling happens in this process instance, register for + // NotificationInvoked before calling Register(). Without this a new process will + // be launched to handle the notification. + const auto token{ notificationManager.NotificationInvoked([&](const auto&, winrt::AppNotificationActivatedEventArgs const& notificationActivatedEventArgs) + { + NotifyUser::NotificationReceived(); + + if (!DispatchNotification(notificationActivatedEventArgs)) + { + NotifyUser::UnrecognizedToastOriginator(); + } + }) }; + + winrt::AppNotificationManager::Default().Register(); + m_isRegistered = true; +} + +void NotificationManager::ProcessLaunchActivationArgs(winrt::AppNotificationActivatedEventArgs const& notificationActivatedEventArgs) +{ + DispatchNotification(notificationActivatedEventArgs); + NotifyUser::AppLaunchedFromNotification(); +} + +bool NotificationManager::DispatchNotification(winrt::AppNotificationActivatedEventArgs const& notificationActivatedEventArgs) +{ + auto scenarioId{ Common::ExtractScenarioIdFromArgs(notificationActivatedEventArgs.Argument().c_str())}; + if (scenarioId.has_value()) + { + try + { + c_notificationHandlers.at(scenarioId.value())(notificationActivatedEventArgs); // Will throw if out of range + return true; + } + catch (...) + { + return false; // Couldn't find a NotificationHandler for scenarioId. + } + } + else + { + return false; // No scenario specified in the notification + } +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/NotificationManager.h b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/NotificationManager.h new file mode 100644 index 000000000..f0ea77b74 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/NotificationManager.h @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#pragma once +#include + +class NotificationManager +{ +public: + NotificationManager(); + ~NotificationManager(); + + void Init(); + void ProcessLaunchActivationArgs(winrt::Microsoft::Windows::AppNotifications::AppNotificationActivatedEventArgs const& notificationActivatedEventArgs); + + private: + bool DispatchNotification(winrt::Microsoft::Windows::AppNotifications::AppNotificationActivatedEventArgs const& notificationActivatedEventArgs); + + bool m_isRegistered; +}; diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithAvatar.cpp b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithAvatar.cpp new file mode 100644 index 000000000..8e022b4b3 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithAvatar.cpp @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#include "pch.h" +#include "ToastWithAvatar.h" +#include "Common.h" +#include +#include "App.xaml.h" +#include "MainPage.xaml.h" + +namespace winrt +{ + using namespace Microsoft::Windows::AppNotifications; + using namespace CppPackagedAppNotifications::implementation; +} + +const wchar_t* ToastWithAvatar::ScenarioName{ L"Local Toast with Avatar Image" }; + +bool ToastWithAvatar::SendToast() +{ + // The ScenarioIdToken uniquely identify a scenario and is used to route the response received when the user clicks on a toast to the correct scenario. + auto ScenarioIdToken{ Common::MakeScenarioIdToken(ToastWithAvatar::ScenarioId) }; + + winrt::hstring xmlPayload{ + L"\ + \ + \ + \ + " + ScenarioName + L"\ + This is an example message using XML\ + \ + \ + \ + \ + \ + " }; + + auto toast{ winrt::AppNotification(xmlPayload) }; + winrt::AppNotificationManager::Default().Show(toast); + + return toast.Id() != 0; // return true (indicating success) if the toast was sent (if it has an Id) +} + +void ToastWithAvatar::NotificationReceived(winrt::Microsoft::Windows::AppNotifications::AppNotificationActivatedEventArgs const& notificationActivatedEventArgs) +{ + winrt::CppPackagedAppNotifications::Notification notification{}; + notification.Originator = ScenarioName; + auto action{ Common::ExtractParamFromArgs(notificationActivatedEventArgs.Argument().c_str(), L"action") }; + notification.Action = action.has_value() ? action.value() : L""; + winrt::MainPage::Current().NotificationReceived(notification); + winrt::App::ToForeground(); +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithAvatar.h b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithAvatar.h new file mode 100644 index 000000000..c5e8b52d8 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithAvatar.h @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#pragma once +#include + +struct ToastWithAvatar +{ +public: + static const unsigned ScenarioId{ 1 }; + static const wchar_t* ScenarioName; + + static bool SendToast(); + static void NotificationReceived(winrt::Microsoft::Windows::AppNotifications::AppNotificationActivatedEventArgs const& notificationActivatedEventArgs); +}; + diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithTextBox.cpp b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithTextBox.cpp new file mode 100644 index 000000000..28a9cf404 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithTextBox.cpp @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#include "pch.h" +#include "ToastWithTextBox.h" +#include "Common.h" +#include +#include "App.xaml.h" +#include "MainPage.xaml.h" + +namespace winrt +{ + using namespace Microsoft::Windows::AppNotifications; + using namespace CppPackagedAppNotifications::implementation; +} + +const wchar_t* ToastWithTextBox::ScenarioName{ L"Local Toast with Avatar and Text Box" }; +auto textboxReplyId{ L"textboxReply" }; + +bool ToastWithTextBox::SendToast() +{ + // The ScenarioIdToken uniquely identify a scenario and is used to route the response received when the user clicks on a toast to the correct scenario. + auto ScenarioIdToken{ Common::MakeScenarioIdToken(ToastWithTextBox::ScenarioId) }; + + winrt::hstring xmlPayload{ + L"\ + \ + \ + \ + " + ScenarioName + L"\ + This is an example message using XML\ + \ + \ + \ + \ + \ + \ + " }; + + auto toast{ winrt::AppNotification(xmlPayload) }; + winrt::AppNotificationManager::Default().Show(toast); + + return toast.Id() != 0; // return true (indicating success) if the toast was sent (if it has an Id) +} + +void ToastWithTextBox::NotificationReceived(winrt::Microsoft::Windows::AppNotifications::AppNotificationActivatedEventArgs const& notificationActivatedEventArgs) +{ + // In a real-life scenario, this type of action would usually be processed in the background. Your App would process the payload in + // the background (sending the payload back to your App Server) without ever showing the App's UI. + // This is not something that can easily be demonstrated in a sample such as this one, as we need to show the UI to demonstrate how + // the payload is routed internally + + auto input{ notificationActivatedEventArgs.UserInput() }; + auto text{ input.Lookup(textboxReplyId) }; + + winrt::CppPackagedAppNotifications::Notification notification{}; + notification.Originator = ScenarioName; + auto action{ Common::ExtractParamFromArgs(notificationActivatedEventArgs.Argument().c_str(), L"action") }; + notification.Action = action.has_value() ? action.value() : L""; + notification.HasInput = true; + notification.Input = text; + winrt::MainPage::Current().NotificationReceived(notification); + winrt::App::ToForeground(); +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithTextBox.h b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithTextBox.h new file mode 100644 index 000000000..1012466d2 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Notifications/ToastWithTextBox.h @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#pragma once +#include + +struct ToastWithTextBox +{ +public: + static const unsigned ScenarioId{ 2 }; + static const wchar_t* ScenarioName; + + static bool SendToast(); + static void NotificationReceived(winrt::Microsoft::Windows::AppNotifications::AppNotificationActivatedEventArgs const& notificationActivatedEventArgs); +}; + diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/NotifyUser.cpp b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/NotifyUser.cpp new file mode 100644 index 000000000..3c589bc80 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/NotifyUser.cpp @@ -0,0 +1,35 @@ +#include "pch.h" +#include "NotifyUser.h" +#include "MainPage.xaml.h" +#include + +namespace winrt +{ + using namespace Microsoft::UI::Xaml::Controls; + using namespace winrt::CppPackagedAppNotifications::implementation; +} + +void NotifyUser::CouldNotSendToast() +{ + winrt::MainPage::Current().NotifyUser(L"Could not send toast", winrt::InfoBarSeverity::Error); +} + +void NotifyUser::ToastSentSuccessfully() +{ + winrt::MainPage::Current().NotifyUser(L"Toast sent successfully!", winrt::InfoBarSeverity::Success); +} + +void NotifyUser::AppLaunchedFromNotification() +{ + winrt::MainPage::Current().NotifyUser(L"App launched from notifications", winrt::InfoBarSeverity::Informational); +} + +void NotifyUser::NotificationReceived() +{ + winrt::MainPage::Current().NotifyUser(L"Notification received", winrt::InfoBarSeverity::Informational); +} + +void NotifyUser::UnrecognizedToastOriginator() +{ + winrt::MainPage::Current().NotifyUser(L"Unrecognized Toast Originator", winrt::InfoBarSeverity::Error); +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/NotifyUser.h b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/NotifyUser.h new file mode 100644 index 000000000..27e843672 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/NotifyUser.h @@ -0,0 +1,10 @@ +#pragma once +struct NotifyUser +{ + static void CouldNotSendToast(); + static void ToastSentSuccessfully(); + static void AppLaunchedFromNotification(); + static void NotificationReceived(); + static void UnrecognizedToastOriginator(); +}; + diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Project.idl b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Project.idl new file mode 100644 index 000000000..f49469e0d --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Project.idl @@ -0,0 +1,58 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +namespace CppPackagedAppNotifications +{ + /* The following code is scenario/feature-specific IDL. + Samples authors should modify these runtime classes as appropriate. */ + + struct Notification + { + String Originator; + String Action; + Boolean HasInput; + String Input; + }; + + [default_interface] + runtimeclass Scenario1_ToastWithAvatar : Microsoft.UI.Xaml.Controls.Page + { + Scenario1_ToastWithAvatar(); + } + + [default_interface] + runtimeclass Scenario2_ToastWithTextBox : Microsoft.UI.Xaml.Controls.Page + { + Scenario2_ToastWithTextBox(); + } + + /* The following code is template-specific IDL. + These runtime classes are the same across all C++/WinRT WinUI samples. */ + + runtimeclass MainPage : Microsoft.UI.Xaml.Controls.Page + { + MainPage(); + static MainPage Current(); + void NotifyUser(String strMessage, Microsoft.UI.Xaml.Controls.InfoBarSeverity severity); + void NotificationReceived(Notification notification); + } + + // To use Scenario in a winrt::Windows::Foundation::Collections::IVector, Scenario should be a WinRT type + struct Scenario + { + String Title; + String ClassName; + }; + + [default_interface] + runtimeclass MainWindow : Microsoft.UI.Xaml.Window + { + MainWindow(); + } + + [default_interface] + runtimeclass SettingsPage : Microsoft.UI.Xaml.Controls.Page + { + SettingsPage(); + } +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SampleConfiguration.cpp b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SampleConfiguration.cpp new file mode 100644 index 000000000..cf626e336 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SampleConfiguration.cpp @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#pragma once +#include "pch.h" +#include "SampleConfiguration.h" +#include "MainPage.xaml.h" +#include "Notifications\ToastWithAvatar.h" +#include "Notifications\ToastWithTextBox.h" + +namespace winrt +{ + using namespace Microsoft::UI::Xaml; + using namespace Windows::Foundation::Collections; +} + +namespace winrt::CppPackagedAppNotifications +{ + IVector implementation::MainPage::scenariosInner = single_threaded_observable_vector( + { + Scenario{ ToastWithAvatar::ScenarioName, hstring(name_of())}, + Scenario{ ToastWithTextBox::ScenarioName, hstring(name_of())} + }); + + hstring SampleConfig::FeatureName{ L"CppPackagedAppNotifications" }; + ElementTheme SampleConfig::CurrentTheme{ ElementTheme::Default }; +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SampleConfiguration.h b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SampleConfiguration.h new file mode 100644 index 000000000..69daad73f --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/SampleConfiguration.h @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#pragma once +#include "pch.h" + +namespace winrt::CppPackagedAppNotifications +{ + struct SampleConfig + { + public: + static hstring FeatureName; + static Microsoft::UI::Xaml::ElementTheme CurrentTheme; + }; +} diff --git a/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Scenario1_ToastWithAvatar.xaml b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Scenario1_ToastWithAvatar.xaml new file mode 100644 index 000000000..a2e198ca3 --- /dev/null +++ b/Samples/Notifications/App/CppPackagedAppNotifications/CppPackagedAppNotifications/CppPackagedAppNotifications/Scenario1_ToastWithAvatar.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + This example demonstrates using a raw XML payload to produce a local toast notification with an avatar image and activation. + + +