From b5308d6a2212fbcb304e0ae75634b49bf89cbccb Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 16 Mar 2020 22:42:55 +0100 Subject: [PATCH 1/3] change system information to instance class --- Microsoft.Toolkit.Uwp.SampleApp/App.xaml.cs | 2 + .../SystemInformationCode.bind | 3 + .../SystemInformationPage.xaml.cs | 42 ++++----- .../Extensions/Markup/OnDevice.cs | 21 ++--- .../Helpers/SystemInformation.cs | 91 +++++++++---------- 5 files changed, 78 insertions(+), 81 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/App.xaml.cs b/Microsoft.Toolkit.Uwp.SampleApp/App.xaml.cs index 69d8bcea8bb..3ba8ca5215b 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/App.xaml.cs +++ b/Microsoft.Toolkit.Uwp.SampleApp/App.xaml.cs @@ -22,6 +22,8 @@ namespace Microsoft.Toolkit.Uwp.SampleApp /// public sealed partial class App : Application { + public static SystemInformation SystemInformation { get; } = new SystemInformation(); + /// /// Initializes a new instance of the class. /// Initializes the singleton application object. This is the first line of authored code diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationCode.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationCode.bind index f90f32577ef..6b9c670b2ca 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationCode.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationCode.bind @@ -1,3 +1,6 @@ + // To get the system information instance + public static SystemInformation SystemInformation { get; } = new SystemInformation(); + // To get application's name: public string ApplicationName => SystemInformation.ApplicationName; diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationPage.xaml.cs b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationPage.xaml.cs index 59d86463202..5c0c37ffcfc 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationPage.xaml.cs +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationPage.xaml.cs @@ -19,52 +19,52 @@ namespace Microsoft.Toolkit.Uwp.SampleApp.SamplePages public sealed partial class SystemInformationPage : Page { // To get application's name: - public string ApplicationName => SystemInformation.ApplicationName; + public string ApplicationName => App.SystemInformation.ApplicationName; // To get application's version: - public string ApplicationVersion => SystemInformation.ApplicationVersion.ToFormattedString(); + public string ApplicationVersion => App.SystemInformation.ApplicationVersion.ToFormattedString(); // To get the most preferred language by the user: - public CultureInfo Culture => SystemInformation.Culture; + public CultureInfo Culture => App.SystemInformation.Culture; // To get operating syste, - public string OperatingSystem => SystemInformation.OperatingSystem; + public string OperatingSystem => App.SystemInformation.OperatingSystem; // To get used processor architecture - public ProcessorArchitecture OperatingSystemArchitecture => SystemInformation.OperatingSystemArchitecture; + public ProcessorArchitecture OperatingSystemArchitecture => App.SystemInformation.OperatingSystemArchitecture; // To get operating system version - public OSVersion OperatingSystemVersion => SystemInformation.OperatingSystemVersion; + public OSVersion OperatingSystemVersion => App.SystemInformation.OperatingSystemVersion; // To get device family - public string DeviceFamily => SystemInformation.DeviceFamily; + public string DeviceFamily => App.SystemInformation.DeviceFamily; // To get device model - public string DeviceModel => SystemInformation.DeviceModel; + public string DeviceModel => App.SystemInformation.DeviceModel; // To get device manufacturer - public string DeviceManufacturer => SystemInformation.DeviceManufacturer; + public string DeviceManufacturer => App.SystemInformation.DeviceManufacturer; // To get available memory in MB - public float AvailableMemory => SystemInformation.AvailableMemory; + public float AvailableMemory => App.SystemInformation.AvailableMemory; // To get if the app is being used for the first time since it was installed. - public string IsFirstUse => SystemInformation.IsFirstRun.ToString(); + public string IsFirstUse => App.SystemInformation.IsFirstRun.ToString(); // To get if the app is being used for the first time since being upgraded from an older version. - public string IsAppUpdated => SystemInformation.IsAppUpdated.ToString(); + public string IsAppUpdated => App.SystemInformation.IsAppUpdated.ToString(); // To get the first version installed - public string FirstVersionInstalled => SystemInformation.FirstVersionInstalled.ToFormattedString(); + public string FirstVersionInstalled => App.SystemInformation.FirstVersionInstalled.ToFormattedString(); // To get the first time the app was launched - public string FirstUseTime => SystemInformation.FirstUseTime.ToString(Culture.DateTimeFormat); + public string FirstUseTime => App.SystemInformation.FirstUseTime.ToString(Culture.DateTimeFormat); // To get the time the app was launched - public string LaunchTime => SystemInformation.LaunchTime.ToString(Culture.DateTimeFormat); + public string LaunchTime => App.SystemInformation.LaunchTime.ToString(Culture.DateTimeFormat); // To get the time the app was previously launched, not including this instance - public string LastLaunchTime => SystemInformation.LastLaunchTime.ToString(Culture.DateTimeFormat); + public string LastLaunchTime => App.SystemInformation.LastLaunchTime.ToString(Culture.DateTimeFormat); // To get the time the launch count was reset, not including this instance public string LastResetTime @@ -87,10 +87,10 @@ public long LaunchCount DependencyProperty.Register(nameof(LaunchCount), typeof(long), typeof(SystemInformationPage), new PropertyMetadata(0)); // To get the number of times the app has been launched. - public long TotalLaunchCount => SystemInformation.TotalLaunchCount; + public long TotalLaunchCount => App.SystemInformation.TotalLaunchCount; // To get how long the app has been running - public string AppUptime => SystemInformation.AppUptime.ToString(); + public string AppUptime => App.SystemInformation.AppUptime.ToString(); public SystemInformationPage() { @@ -100,15 +100,15 @@ public SystemInformationPage() SampleController.Current.RegisterNewCommand("Reset launch count", (sender, args) => { - SystemInformation.ResetLaunchCount(); + App.SystemInformation.ResetLaunchCount(); RefreshProperties(); }); } private void RefreshProperties() { - LaunchCount = SystemInformation.LaunchCount; - LastResetTime = SystemInformation.LastResetTime.ToString(Culture.DateTimeFormat); + LaunchCount = App.SystemInformation.LaunchCount; + LastResetTime = App.SystemInformation.LastResetTime.ToString(Culture.DateTimeFormat); } } } \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.UI/Extensions/Markup/OnDevice.cs b/Microsoft.Toolkit.Uwp.UI/Extensions/Markup/OnDevice.cs index 21fdf480344..6cf96c4a532 100644 --- a/Microsoft.Toolkit.Uwp.UI/Extensions/Markup/OnDevice.cs +++ b/Microsoft.Toolkit.Uwp.UI/Extensions/Markup/OnDevice.cs @@ -2,8 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System; -using Windows.ApplicationModel; +using Windows.System.Profile; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Markup; @@ -22,6 +21,11 @@ namespace Microsoft.Toolkit.Uwp.UI.Extensions.Markup [Bindable] public class OnDevice : MarkupExtension { + /// + /// Gets the current device family. + /// + private string DeviceFamily { get; } = AnalyticsInfo.VersionInfo.DeviceFamily; + /// /// Gets or sets the default value for this property /// @@ -58,18 +62,7 @@ public class OnDevice : MarkupExtension /// The object value to set on the property where the extension is applied. protected override object ProvideValue() { - string deviceFamily = null; - if (DesignMode.DesignMode2Enabled) - { - // TODO: detect DeviceFamily in XAML Designer (device dropdown) - // deviceFamily = ??? - } - else - { - deviceFamily = Uwp.Helpers.SystemInformation.DeviceFamily; - } - - switch (deviceFamily) + switch (DeviceFamily) { case "Windows.Desktop": return this.Desktop ?? this.Default; diff --git a/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs b/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs index dd9399b1465..a7bc3c823c9 100644 --- a/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs +++ b/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs @@ -18,25 +18,35 @@ namespace Microsoft.Toolkit.Uwp.Helpers /// /// This class provides info about the app and the system. /// - public static class SystemInformation + public class SystemInformation { - private static readonly LocalObjectStorageHelper _localObjectStorageHelper = new LocalObjectStorageHelper(); - private static DateTime _sessionStart; + private readonly LocalObjectStorageHelper _localObjectStorageHelper = new LocalObjectStorageHelper(); + private DateTime _sessionStart; + + /// + /// Launches the store app so the user can leave a review. + /// + /// A representing the asynchronous operation. + /// This method needs to be called from your UI thread. + public static async Task LaunchStoreForReviewAsync() + { + await Launcher.LaunchUriAsync(new Uri(string.Format("ms-windows-store://review/?PFN={0}", Package.Current.Id.FamilyName))); + } /// /// Gets the application's name. /// - public static string ApplicationName { get; } + public string ApplicationName { get; } /// /// Gets the application's version. /// - public static PackageVersion ApplicationVersion { get; } + public PackageVersion ApplicationVersion { get; } /// /// Gets the user's most preferred culture. /// - public static CultureInfo Culture { get; } + public CultureInfo Culture { get; } /// /// Gets the device's family. @@ -53,98 +63,98 @@ public static class SystemInformation /// /// Prepare your code for other values. /// - public static string DeviceFamily { get; } + public string DeviceFamily { get; } /// /// Gets the operating system's name. /// - public static string OperatingSystem { get; } + public string OperatingSystem { get; } /// /// Gets the operating system's version. /// - public static OSVersion OperatingSystemVersion { get; } + public OSVersion OperatingSystemVersion { get; } /// /// Gets the processor architecture. /// - public static ProcessorArchitecture OperatingSystemArchitecture { get; } + public ProcessorArchitecture OperatingSystemArchitecture { get; } /// /// Gets the available memory. /// - public static float AvailableMemory => (float)MemoryManager.AppMemoryUsageLimit / 1024 / 1024; + public float AvailableMemory => (float)MemoryManager.AppMemoryUsageLimit / 1024 / 1024; /// /// Gets the device's model. /// Will be empty if the model couldn't be determined (For example: when running in a virtual machine). /// - public static string DeviceModel { get; } + public string DeviceModel { get; } /// /// Gets the device's manufacturer. /// Will be empty if the manufacturer couldn't be determined (For example: when running in a virtual machine). /// - public static string DeviceManufacturer { get; } + public string DeviceManufacturer { get; } /// /// Gets a value indicating whether the app is being used for the first time since it was installed. /// Use this to tell if you should do or display something different for the app's first use. /// - public static bool IsFirstRun { get; } + public bool IsFirstRun { get; } /// /// Gets a value indicating whether the app is being used for the first time since being upgraded from an older version. /// Use this to tell if you should display details about what has changed. /// - public static bool IsAppUpdated { get; } + public bool IsAppUpdated { get; } /// /// Gets the first version of the app that was installed. /// This will be the current version if a previous verison of the app was installed before accessing this property. /// - public static PackageVersion FirstVersionInstalled { get; } + public PackageVersion FirstVersionInstalled { get; } /// /// Gets the DateTime (in UTC) when the app was launched for the first time. /// - public static DateTime FirstUseTime { get; } + public DateTime FirstUseTime { get; } /// /// Gets the DateTime (in UTC) when the app was last launched, not including this instance. /// Will be if has not been called yet. /// - public static DateTime LastLaunchTime { get; private set; } + public DateTime LastLaunchTime { get; private set; } /// /// Gets the number of times the app has been launched. /// Will be 0 if has not been called yet. /// - public static long LaunchCount { get; private set; } + public long LaunchCount { get; private set; } /// /// Gets the number of times the app has been launched. /// Will be 0 if has not been called yet. /// - public static long TotalLaunchCount { get; private set; } + public long TotalLaunchCount { get; private set; } /// /// Gets the DateTime (in UTC) that this instance of the app was launched. /// Will be if has not been called yet. /// - public static DateTime LaunchTime { get; private set; } + public DateTime LaunchTime { get; private set; } /// /// Gets the DateTime (in UTC) when the launch count was last reset. /// Will be if has not been called yet. /// - public static DateTime LastResetTime { get; private set; } + public DateTime LastResetTime { get; private set; } /// /// Gets the length of time this instance of the app has been running. /// Will be if has not been called yet. /// - public static TimeSpan AppUptime + public TimeSpan AppUptime { get { @@ -156,10 +166,8 @@ public static TimeSpan AppUptime return new TimeSpan(uptimeSoFar + subsessionLength); } - else - { - return TimeSpan.MinValue; - } + + return TimeSpan.MinValue; } } @@ -167,7 +175,7 @@ public static TimeSpan AppUptime /// Tracks information about the app's launch. /// /// Details about the launch request and process. - public static void TrackAppUse(LaunchActivatedEventArgs args) + public void TrackAppUse(LaunchActivatedEventArgs args) { if (args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser || args.PreviousExecutionState == ApplicationExecutionState.NotRunning) @@ -220,22 +228,12 @@ void App_VisibilityChanged(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.Vi Windows.UI.Core.CoreWindow.GetForCurrentThread().VisibilityChanged += App_VisibilityChanged; } - /// - /// Launches the store app so the user can leave a review. - /// - /// A representing the asynchronous operation. - /// This method needs to be called from your UI thread. - public static async Task LaunchStoreForReviewAsync() - { - await Launcher.LaunchUriAsync(new Uri(string.Format("ms-windows-store://review/?PFN={0}", Package.Current.Id.FamilyName))); - } - /// /// Adds to the record of how long the app has been running. /// Use this to optionally include time spent in background tasks or extended execution. /// /// The amount to time to add - public static void AddToAppUptime(TimeSpan duration) + public void AddToAppUptime(TimeSpan duration) { var uptimeSoFar = _localObjectStorageHelper.Read(nameof(AppUptime)); _localObjectStorageHelper.Save(nameof(AppUptime), uptimeSoFar + duration.Ticks); @@ -244,7 +242,7 @@ public static void AddToAppUptime(TimeSpan duration) /// /// Resets the launch count. /// - public static void ResetLaunchCount() + public void ResetLaunchCount() { LastResetTime = DateTime.UtcNow; LaunchCount = 0; @@ -254,9 +252,10 @@ public static void ResetLaunchCount() } /// + /// Initializes a new instance of the class. /// Initializes static members of the class. /// - static SystemInformation() + public SystemInformation() { ApplicationName = Package.Current.DisplayName; ApplicationVersion = Package.Current.Id.Version; @@ -290,7 +289,7 @@ static SystemInformation() InitializeValuesSetWithTrackAppUse(); } - private static bool DetectIfFirstUse() + private bool DetectIfFirstUse() { if (_localObjectStorageHelper.KeyExists(nameof(IsFirstRun))) { @@ -303,7 +302,7 @@ private static bool DetectIfFirstUse() } } - private static bool DetectIfAppUpdated() + private bool DetectIfAppUpdated() { var currentVersion = ApplicationVersion.ToFormattedString(); @@ -324,7 +323,7 @@ private static bool DetectIfAppUpdated() return false; } - private static DateTime DetectFirstUseTime() + private DateTime DetectFirstUseTime() { DateTime result; @@ -342,7 +341,7 @@ private static DateTime DetectFirstUseTime() return result; } - private static PackageVersion DetectFirstVersionInstalled() + private PackageVersion DetectFirstVersionInstalled() { PackageVersion result; @@ -359,7 +358,7 @@ private static PackageVersion DetectFirstVersionInstalled() return result; } - private static void InitializeValuesSetWithTrackAppUse() + private void InitializeValuesSetWithTrackAppUse() { LaunchTime = DateTime.MinValue; LaunchCount = 0; From 35c617dee840a844cddbee5b1bfd7f72995f207a Mon Sep 17 00:00:00 2001 From: Ze Groumf Date: Tue, 17 Mar 2020 23:18:07 +0100 Subject: [PATCH 2/3] add singleton property --- Microsoft.Toolkit.Uwp.SampleApp/App.xaml.cs | 4 +- .../SystemInformationCode.bind | 45 +++++++++--------- .../SystemInformationPage.xaml.cs | 47 +++++++++---------- .../Helpers/SystemInformation.cs | 8 +++- 4 files changed, 50 insertions(+), 54 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/App.xaml.cs b/Microsoft.Toolkit.Uwp.SampleApp/App.xaml.cs index 3ba8ca5215b..ff8bb4709d2 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/App.xaml.cs +++ b/Microsoft.Toolkit.Uwp.SampleApp/App.xaml.cs @@ -22,8 +22,6 @@ namespace Microsoft.Toolkit.Uwp.SampleApp /// public sealed partial class App : Application { - public static SystemInformation SystemInformation { get; } = new SystemInformation(); - /// /// Initializes a new instance of the class. /// Initializes the singleton application object. This is the first line of authored code @@ -78,7 +76,7 @@ protected override async void OnLaunched(LaunchActivatedEventArgs e) await RunAppInitialization(e?.Arguments); } - SystemInformation.TrackAppUse(e); + SystemInformation.Instance.TrackAppUse(e); } /// diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationCode.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationCode.bind index 6b9c670b2ca..7fc9a563dcb 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationCode.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationCode.bind @@ -1,62 +1,59 @@ - // To get the system information instance - public static SystemInformation SystemInformation { get; } = new SystemInformation(); - // To get application's name: - public string ApplicationName => SystemInformation.ApplicationName; + public string ApplicationName => SystemInformation.Instance.ApplicationName; // To get application's version: - public string ApplicationVersion => $"{SystemInformation.ApplicationVersion.Major}.{SystemInformation.ApplicationVersion.Minor}.{SystemInformation.ApplicationVersion.Build}.{SystemInformation.ApplicationVersion.Revision}"; + public string ApplicationVersion => $"{SystemInformation.Instance.ApplicationVersion.Major}.{SystemInformation.Instance.ApplicationVersion.Minor}.{SystemInformation.Instance.ApplicationVersion.Build}.{SystemInformation.Instance.ApplicationVersion.Revision}"; // To get the most preferred language by the user: - public CultureInfo Culture => SystemInformation.Culture; + public CultureInfo Culture => SystemInformation.Instance.Culture; - // To get operating syste, - public string OperatingSystem => SystemInformation.OperatingSystem; + // To get operating system + public string OperatingSystem => SystemInformation.Instance.OperatingSystem; // To get used processor architecture - public ProcessorArchitecture OperatingSystemArchitecture => SystemInformation.OperatingSystemArchitecture; + public ProcessorArchitecture OperatingSystemArchitecture => SystemInformation.Instance.OperatingSystemArchitecture; // To get operating system version - public OSVersion OperatingSystemVersion => SystemInformation.OperatingSystemVersion; + public OSVersion OperatingSystemVersion => SystemInformation.Instance.OperatingSystemVersion; // To get device family - public string DeviceFamily => SystemInformation.DeviceFamily; + public string DeviceFamily => SystemInformation.Instance.DeviceFamily; // To get device model - public string DeviceModel => SystemInformation.DeviceModel; + public string DeviceModel => SystemInformation.Instance.DeviceModel; // To get device manufacturer - public string DeviceManufacturer => SystemInformation.DeviceManufacturer; + public string DeviceManufacturer => SystemInformation.Instance.DeviceManufacturer; // To get available memory in MB - public float AvailableMemory => SystemInformation.AvailableMemory; + public float AvailableMemory => SystemInformation.Instance.AvailableMemory; // To get if the app is being used for the first time since it was installed. - public bool IsFirstUse => SystemInformation.IsFirstRun; + public bool IsFirstUse => SystemInformation.Instance.IsFirstRun; // To get if the app is being used for the first time since being upgraded from an older version. - public bool IsAppUpdated => SystemInformation.IsAppUpdated; + public bool IsAppUpdated => SystemInformation.Instance.IsAppUpdated; // To get the first version installed - public PackageVersion FirstVersionInstalled => SystemInformation.FirstVersionInstalled; + public PackageVersion FirstVersionInstalled => SystemInformation.Instance.FirstVersionInstalled; // To get the first time the app was launched - public DateTime FirstUseTime => SystemInformation.FirstUseTime; + public DateTime FirstUseTime => SystemInformation.Instance.FirstUseTime; // To get the time the app was launched. - public DateTime LaunchTime => SystemInformation.LaunchTime; + public DateTime LaunchTime => SystemInformation.Instance.LaunchTime; // To get the time the app was previously launched, not including this instance. - public DateTime LastLaunchTime => SystemInformation.LastLaunchTime; + public DateTime LastLaunchTime => SystemInformation.Instance.LastLaunchTime; // To get the time the launch count was reset, not including this instance - public string LastResetTime => SystemInformation.LastResetTime.ToString(Culture.DateTimeFormat); + public string LastResetTime => SystemInformation.Instance.LastResetTime.ToString(Culture.DateTimeFormat); // To get the number of times the app has been launched sicne the last reset. - public long LaunchCount => SystemInformation.LaunchCount; + public long LaunchCount => SystemInformation.Instance.LaunchCount; // To get the number of times the app has been launched. - public long TotalLaunchCount => SystemInformation.TotalLaunchCount; + public long TotalLaunchCount => SystemInformation.Instance.TotalLaunchCount; // To get how long the app has been running - public TimeSpan AppUptime => SystemInformation.AppUptime; + public TimeSpan AppUptime => SystemInformation.Instance.AppUptime; diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationPage.xaml.cs b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationPage.xaml.cs index 5c0c37ffcfc..f6c68407e71 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationPage.xaml.cs +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/SystemInformation/SystemInformationPage.xaml.cs @@ -2,14 +2,11 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System.ComponentModel; using System.Globalization; -using System.Runtime.CompilerServices; using Microsoft.Toolkit.Uwp.Helpers; using Windows.System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Navigation; namespace Microsoft.Toolkit.Uwp.SampleApp.SamplePages { @@ -19,52 +16,52 @@ namespace Microsoft.Toolkit.Uwp.SampleApp.SamplePages public sealed partial class SystemInformationPage : Page { // To get application's name: - public string ApplicationName => App.SystemInformation.ApplicationName; + public string ApplicationName => SystemInformation.Instance.ApplicationName; // To get application's version: - public string ApplicationVersion => App.SystemInformation.ApplicationVersion.ToFormattedString(); + public string ApplicationVersion => SystemInformation.Instance.ApplicationVersion.ToFormattedString(); // To get the most preferred language by the user: - public CultureInfo Culture => App.SystemInformation.Culture; + public CultureInfo Culture => SystemInformation.Instance.Culture; - // To get operating syste, - public string OperatingSystem => App.SystemInformation.OperatingSystem; + // To get operating system + public string OperatingSystem => SystemInformation.Instance.OperatingSystem; // To get used processor architecture - public ProcessorArchitecture OperatingSystemArchitecture => App.SystemInformation.OperatingSystemArchitecture; + public ProcessorArchitecture OperatingSystemArchitecture => SystemInformation.Instance.OperatingSystemArchitecture; // To get operating system version - public OSVersion OperatingSystemVersion => App.SystemInformation.OperatingSystemVersion; + public OSVersion OperatingSystemVersion => SystemInformation.Instance.OperatingSystemVersion; // To get device family - public string DeviceFamily => App.SystemInformation.DeviceFamily; + public string DeviceFamily => SystemInformation.Instance.DeviceFamily; // To get device model - public string DeviceModel => App.SystemInformation.DeviceModel; + public string DeviceModel => SystemInformation.Instance.DeviceModel; // To get device manufacturer - public string DeviceManufacturer => App.SystemInformation.DeviceManufacturer; + public string DeviceManufacturer => SystemInformation.Instance.DeviceManufacturer; // To get available memory in MB - public float AvailableMemory => App.SystemInformation.AvailableMemory; + public float AvailableMemory => SystemInformation.Instance.AvailableMemory; // To get if the app is being used for the first time since it was installed. - public string IsFirstUse => App.SystemInformation.IsFirstRun.ToString(); + public string IsFirstUse => SystemInformation.Instance.IsFirstRun.ToString(); // To get if the app is being used for the first time since being upgraded from an older version. - public string IsAppUpdated => App.SystemInformation.IsAppUpdated.ToString(); + public string IsAppUpdated => SystemInformation.Instance.IsAppUpdated.ToString(); // To get the first version installed - public string FirstVersionInstalled => App.SystemInformation.FirstVersionInstalled.ToFormattedString(); + public string FirstVersionInstalled => SystemInformation.Instance.FirstVersionInstalled.ToFormattedString(); // To get the first time the app was launched - public string FirstUseTime => App.SystemInformation.FirstUseTime.ToString(Culture.DateTimeFormat); + public string FirstUseTime => SystemInformation.Instance.FirstUseTime.ToString(Culture.DateTimeFormat); // To get the time the app was launched - public string LaunchTime => App.SystemInformation.LaunchTime.ToString(Culture.DateTimeFormat); + public string LaunchTime => SystemInformation.Instance.LaunchTime.ToString(Culture.DateTimeFormat); // To get the time the app was previously launched, not including this instance - public string LastLaunchTime => App.SystemInformation.LastLaunchTime.ToString(Culture.DateTimeFormat); + public string LastLaunchTime => SystemInformation.Instance.LastLaunchTime.ToString(Culture.DateTimeFormat); // To get the time the launch count was reset, not including this instance public string LastResetTime @@ -87,10 +84,10 @@ public long LaunchCount DependencyProperty.Register(nameof(LaunchCount), typeof(long), typeof(SystemInformationPage), new PropertyMetadata(0)); // To get the number of times the app has been launched. - public long TotalLaunchCount => App.SystemInformation.TotalLaunchCount; + public long TotalLaunchCount => SystemInformation.Instance.TotalLaunchCount; // To get how long the app has been running - public string AppUptime => App.SystemInformation.AppUptime.ToString(); + public string AppUptime => SystemInformation.Instance.AppUptime.ToString(); public SystemInformationPage() { @@ -100,15 +97,15 @@ public SystemInformationPage() SampleController.Current.RegisterNewCommand("Reset launch count", (sender, args) => { - App.SystemInformation.ResetLaunchCount(); + SystemInformation.Instance.ResetLaunchCount(); RefreshProperties(); }); } private void RefreshProperties() { - LaunchCount = App.SystemInformation.LaunchCount; - LastResetTime = App.SystemInformation.LastResetTime.ToString(Culture.DateTimeFormat); + LaunchCount = SystemInformation.Instance.LaunchCount; + LastResetTime = SystemInformation.Instance.LastResetTime.ToString(Culture.DateTimeFormat); } } } \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs b/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs index a7bc3c823c9..cf3d926f057 100644 --- a/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs +++ b/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs @@ -33,6 +33,11 @@ public static async Task LaunchStoreForReviewAsync() await Launcher.LaunchUriAsync(new Uri(string.Format("ms-windows-store://review/?PFN={0}", Package.Current.Id.FamilyName))); } + /// + /// Gets the unique instance of . + /// + public static SystemInformation Instance { get; } = new SystemInformation(); + /// /// Gets the application's name. /// @@ -253,9 +258,8 @@ public void ResetLaunchCount() /// /// Initializes a new instance of the class. - /// Initializes static members of the class. /// - public SystemInformation() + private SystemInformation() { ApplicationName = Package.Current.DisplayName; ApplicationVersion = Package.Current.Id.Version; From 6f04f1ce62ffbcf7cada255c2c75b473634421f0 Mon Sep 17 00:00:00 2001 From: Vincent Date: Fri, 20 Mar 2020 10:02:21 +0100 Subject: [PATCH 3/3] seal class --- Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs b/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs index cf3d926f057..978aa9a3ef1 100644 --- a/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs +++ b/Microsoft.Toolkit.Uwp/Helpers/SystemInformation.cs @@ -18,7 +18,7 @@ namespace Microsoft.Toolkit.Uwp.Helpers /// /// This class provides info about the app and the system. /// - public class SystemInformation + public sealed class SystemInformation { private readonly LocalObjectStorageHelper _localObjectStorageHelper = new LocalObjectStorageHelper(); private DateTime _sessionStart;