diff --git a/src/Essentials/src/AppInfo/AppInfo.android.cs b/src/Essentials/src/AppInfo/AppInfo.android.cs index 759918af81e5..6521624bc594 100644 --- a/src/Essentials/src/AppInfo/AppInfo.android.cs +++ b/src/Essentials/src/AppInfo/AppInfo.android.cs @@ -11,51 +11,21 @@ namespace Microsoft.Maui.ApplicationModel { class AppInfoImplementation : IAppInfo { - public string PackageName => Application.Context.PackageName; + static readonly Lazy _name = new Lazy(() => Application.Context.ApplicationInfo.LoadLabel(Application.Context.PackageManager)); + static readonly Lazy _packageName = new Lazy(() => Application.Context.PackageName); + static readonly Lazy _packageInfo = new Lazy(() => Application.Context.PackageManager.GetPackageInfo(_packageName.Value, PackageInfoFlags.MetaData)); + static readonly Lazy _requestedTheme = new Lazy(GetRequestedTheme); + static readonly Lazy _layoutDirection = new Lazy(GetLayoutDirection); - public string Name - { - get - { - var applicationInfo = Application.Context.ApplicationInfo; - var packageManager = Application.Context.PackageManager; - return applicationInfo.LoadLabel(packageManager); - } - } + public string PackageName => _packageName.Value; + + public string Name => _name.Value; public System.Version Version => Utils.ParseVersion(VersionString); - public string VersionString - { - get - { - var pm = Application.Context.PackageManager; - var packageName = Application.Context.PackageName; - using (var info = pm.GetPackageInfo(packageName, PackageInfoFlags.MetaData)) - { - return info.VersionName; - } - } - } + public string VersionString => _packageInfo.Value.VersionName; - public string BuildString - { - get - { - var pm = Application.Context.PackageManager; - var packageName = Application.Context.PackageName; - using (var info = pm.GetPackageInfo(packageName, PackageInfoFlags.MetaData)) - { -#if __ANDROID_28__ - return PackageInfoCompat.GetLongVersionCode(info).ToString(CultureInfo.InvariantCulture); -#else -#pragma warning disable CS0618 // Type or member is obsolete - return info.VersionCode.ToString(CultureInfo.InvariantCulture); -#pragma warning restore CS0618 // Type or member is obsolete -#endif - } - } - } + public string BuildString => PackageInfoCompat.GetLongVersionCode(_packageInfo.Value).ToString(CultureInfo.InvariantCulture); public void ShowSettingsUI() { @@ -67,40 +37,34 @@ public void ShowSettingsUI() settingsIntent.SetData(global::Android.Net.Uri.Parse("package:" + PackageName)); var flags = ActivityFlags.NewTask | ActivityFlags.NoHistory | ActivityFlags.ExcludeFromRecents; - -#if __ANDROID_24__ if (OperatingSystem.IsAndroidVersionAtLeast(24)) flags |= ActivityFlags.LaunchAdjacent; -#endif settingsIntent.SetFlags(flags); context.StartActivity(settingsIntent); } - public AppTheme RequestedTheme - => (Application.Context.Resources.Configuration.UiMode & UiMode.NightMask) switch - { - UiMode.NightYes => AppTheme.Dark, - UiMode.NightNo => AppTheme.Light, - _ => AppTheme.Unspecified - }; + static AppTheme GetRequestedTheme() => (Application.Context.Resources.Configuration.UiMode & UiMode.NightMask) switch + { + UiMode.NightYes => AppTheme.Dark, + UiMode.NightNo => AppTheme.Light, + _ => AppTheme.Unspecified + }; + + public AppTheme RequestedTheme => _requestedTheme.Value; public AppPackagingModel PackagingModel => AppPackagingModel.Packaged; - public LayoutDirection RequestedLayoutDirection + static LayoutDirection GetLayoutDirection() { - get - { - if (!OperatingSystem.IsAndroidVersionAtLeast(17)) - return LayoutDirection.LeftToRight; - - var config = Application.Context.Resources?.Configuration; - if (config == null) - return LayoutDirection.Unknown; - - return (config.LayoutDirection == Android.Views.LayoutDirection.Rtl) ? LayoutDirection.RightToLeft : - LayoutDirection.LeftToRight; - } + var config = Application.Context.Resources?.Configuration; + if (config == null) + return LayoutDirection.Unknown; + + return (config.LayoutDirection == Android.Views.LayoutDirection.Rtl) ? LayoutDirection.RightToLeft : + LayoutDirection.LeftToRight; } + + public LayoutDirection RequestedLayoutDirection => _layoutDirection.Value; } }