diff --git a/.gitignore b/.gitignore index fb14950..58a0265 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,15 @@ java/build java/captures java/.externalNativeBuild java/.cxx + + +# C# / UWP Files / VS Specifiq files +.vs/ +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +[Oo]bj/ +[Bb]in/ diff --git a/cs/00_hello_world/00_hello_world.csproj b/cs/00_hello_world/00_hello_world.csproj new file mode 100644 index 0000000..8cda2ce --- /dev/null +++ b/cs/00_hello_world/00_hello_world.csproj @@ -0,0 +1,171 @@ + + + + + Debug + x86 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98} + AppContainerExe + Properties + _00_hello_world + 00_hello_world + en-US + UAP + 10.0.18362.0 + 10.0.10240.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + false + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\ARM64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM64 + false + prompt + true + true + + + bin\ARM64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM64 + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + App.xaml + + + MainPage.xaml + + + + + + Designer + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + 4.5.0-alpha.172 + + + 6.2.11 + + + + 14.0 + + + + \ No newline at end of file diff --git a/cs/00_hello_world/00_hello_world.sln b/cs/00_hello_world/00_hello_world.sln new file mode 100644 index 0000000..6d6f483 --- /dev/null +++ b/cs/00_hello_world/00_hello_world.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30804.86 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "00_hello_world", "00_hello_world.csproj", "{E275B25F-D5C2-495C-9B6E-9B90C3617E98}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|ARM.ActiveCfg = Debug|ARM + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|ARM.Build.0 = Debug|ARM + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|ARM.Deploy.0 = Debug|ARM + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|ARM64.Build.0 = Debug|ARM64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|x64.ActiveCfg = Debug|x64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|x64.Build.0 = Debug|x64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|x64.Deploy.0 = Debug|x64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|x86.ActiveCfg = Debug|x86 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|x86.Build.0 = Debug|x86 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Debug|x86.Deploy.0 = Debug|x86 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|ARM.ActiveCfg = Release|ARM + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|ARM.Build.0 = Release|ARM + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|ARM.Deploy.0 = Release|ARM + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|ARM64.ActiveCfg = Release|ARM64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|ARM64.Build.0 = Release|ARM64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|ARM64.Deploy.0 = Release|ARM64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|x64.ActiveCfg = Release|x64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|x64.Build.0 = Release|x64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|x64.Deploy.0 = Release|x64 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|x86.ActiveCfg = Release|x86 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|x86.Build.0 = Release|x86 + {E275B25F-D5C2-495C-9B6E-9B90C3617E98}.Release|x86.Deploy.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8DD112E1-466B-4282-B9CE-E247D96F82EE} + EndGlobalSection +EndGlobal diff --git a/cs/00_hello_world/App.xaml b/cs/00_hello_world/App.xaml new file mode 100644 index 0000000..6c8f7fe --- /dev/null +++ b/cs/00_hello_world/App.xaml @@ -0,0 +1,7 @@ + + + diff --git a/cs/00_hello_world/App.xaml.cs b/cs/00_hello_world/App.xaml.cs new file mode 100644 index 0000000..50171eb --- /dev/null +++ b/cs/00_hello_world/App.xaml.cs @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of mediastreamer2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +using System; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Navigation; + +namespace _00_hello_world +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + sealed partial class App : Application + { + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + this.Suspending += OnSuspending; + } + + /// + /// Invoked when the application is launched normally by the end user. Other entry points + /// will be used such as when the application is launched to open a specific file. + /// + /// Details about the launch request and process. + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + Frame rootFrame = Window.Current.Content as Frame; + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == null) + { + // Create a Frame to act as the navigation context and navigate to the first page + rootFrame = new Frame(); + + rootFrame.NavigationFailed += OnNavigationFailed; + + if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) + { + //TODO: Load state from previously suspended application + } + + // Place the frame in the current Window + Window.Current.Content = rootFrame; + } + + if (e.PrelaunchActivated == false) + { + if (rootFrame.Content == null) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + rootFrame.Navigate(typeof(MainPage), e.Arguments); + } + // Ensure the current window is active + Window.Current.Activate(); + } + } + + /// + /// Invoked when Navigation to a certain page fails + /// + /// The Frame which failed navigation + /// Details about the navigation failure + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); + } + + /// + /// Invoked when application execution is being suspended. Application state is saved + /// without knowing whether the application will be terminated or resumed with the contents + /// of memory still intact. + /// + /// The source of the suspend request. + /// Details about the suspend request. + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + //TODO: Save application state and stop any background activity + deferral.Complete(); + } + } +} diff --git a/cs/00_hello_world/Assets/LockScreenLogo.scale-200.png b/cs/00_hello_world/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000..735f57a Binary files /dev/null and b/cs/00_hello_world/Assets/LockScreenLogo.scale-200.png differ diff --git a/cs/00_hello_world/Assets/SplashScreen.scale-200.png b/cs/00_hello_world/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000..023e7f1 Binary files /dev/null and b/cs/00_hello_world/Assets/SplashScreen.scale-200.png differ diff --git a/cs/00_hello_world/Assets/Square150x150Logo.scale-200.png b/cs/00_hello_world/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000..af49fec Binary files /dev/null and b/cs/00_hello_world/Assets/Square150x150Logo.scale-200.png differ diff --git a/cs/00_hello_world/Assets/Square44x44Logo.scale-200.png b/cs/00_hello_world/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000..ce342a2 Binary files /dev/null and b/cs/00_hello_world/Assets/Square44x44Logo.scale-200.png differ diff --git a/cs/00_hello_world/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/cs/00_hello_world/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000..f6c02ce Binary files /dev/null and b/cs/00_hello_world/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ diff --git a/cs/00_hello_world/Assets/StoreLogo.png b/cs/00_hello_world/Assets/StoreLogo.png new file mode 100644 index 0000000..7385b56 Binary files /dev/null and b/cs/00_hello_world/Assets/StoreLogo.png differ diff --git a/cs/00_hello_world/Assets/Wide310x150Logo.scale-200.png b/cs/00_hello_world/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000..288995b Binary files /dev/null and b/cs/00_hello_world/Assets/Wide310x150Logo.scale-200.png differ diff --git a/cs/00_hello_world/MainPage.xaml b/cs/00_hello_world/MainPage.xaml new file mode 100644 index 0000000..b67932c --- /dev/null +++ b/cs/00_hello_world/MainPage.xaml @@ -0,0 +1,14 @@ + + + + + + diff --git a/cs/00_hello_world/MainPage.xaml.cs b/cs/00_hello_world/MainPage.xaml.cs new file mode 100644 index 0000000..84d36fa --- /dev/null +++ b/cs/00_hello_world/MainPage.xaml.cs @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2010-2020 Belledonne Communications SARL. + * + * This file is part of mediastreamer2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +using Linphone; +using System; +using System.IO; +using Windows.UI.Xaml.Controls; + + +namespace _00_hello_world +{ + /// + /// A really simple page to do a "HelloWorld" with LinphoneSDK x UWP + /// + public sealed partial class MainPage : Page + { + + private Core storedCore; + + public string HelloText { get; set; } = "Hello world, Linphone core version is "; + + public MainPage() + { + this.InitializeComponent(); + + // Core is the main object of the SDK. You can't do much without it + // Some configuration can be done before the Core is created, for example enable debug logs. + Linphone.LoggingService.Instance.LogLevel = Linphone.LogLevel.Debug; + + // To create a Core, we need the instance of the Factory. + Factory factory = Factory.Instance; + + // Some configuration can be done on the factory before the Core is created, for example enable setting resources Path. This + // one can be mandatory + factory.TopResourcesDir = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, "Assets"); + + // Your Core can use up to 2 configuration files, but that isn't mandatory. + // The third parameter is the application context, he isn't madatory when working + // with UWP, he is mandatory in an Android context for example. + // You can now create your Core object : + Core core = factory.CreateCore("", "", IntPtr.Zero); + + // Once you got your core you can start to do a lot of things. + HelloText += Core.Version; + + // You should store the Core to keep a reference on it at all times while your app is alive. + // A good solution for that is either subclass the Application object or create a Service. + storedCore = core; + } + } +} diff --git a/cs/00_hello_world/Package.appxmanifest b/cs/00_hello_world/Package.appxmanifest new file mode 100644 index 0000000..4fce119 --- /dev/null +++ b/cs/00_hello_world/Package.appxmanifest @@ -0,0 +1,49 @@ + + + + + + + + + + 00_hello_world + Anthony + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cs/00_hello_world/Properties/AssemblyInfo.cs b/cs/00_hello_world/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4378630 --- /dev/null +++ b/cs/00_hello_world/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("00_hello_world")] +[assembly: AssemblyDescription("Hello world C# tutorial with LinphoneSDK")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Belledonne Communications")] +[assembly: AssemblyProduct("Linphone")] +[assembly: AssemblyCopyright("Copyright © 2020 Belledonne Communications")] +[assembly: AssemblyTrademark("Linphone")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/cs/00_hello_world/Properties/Default.rd.xml b/cs/00_hello_world/Properties/Default.rd.xml new file mode 100644 index 0000000..74b03e3 --- /dev/null +++ b/cs/00_hello_world/Properties/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file