From 867df9b1db6ada078e109dee7c4fd4b6ee239033 Mon Sep 17 00:00:00 2001 From: Pedro Jesus Date: Wed, 4 Aug 2021 00:09:29 -0300 Subject: [PATCH 1/4] Moved and renamed ToolkitPlatform to XCT inside helpers folder --- .../XCT.android.cs} | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) rename src/CommunityToolkit/Xamarin.CommunityToolkit/{Startup/ToolkitPlatform.android.cs => Helpers/XCT.android.cs} (83%) diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Startup/ToolkitPlatform.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Helpers/XCT.android.cs similarity index 83% rename from src/CommunityToolkit/Xamarin.CommunityToolkit/Startup/ToolkitPlatform.android.cs rename to src/CommunityToolkit/Xamarin.CommunityToolkit/Helpers/XCT.android.cs index 0df62f389..1b787a6ed 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Startup/ToolkitPlatform.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Helpers/XCT.android.cs @@ -1,15 +1,12 @@ -using System; +using System; using Android.Content; using Android.OS; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; -namespace Xamarin.CommunityToolkit +namespace Xamarin.CommunityToolkit.Helpers { - /// - /// Platform extension methods. - /// - static class ToolkitPlatform + static class XCT { static Context? context; static int? sdkInt; @@ -33,4 +30,4 @@ internal static Context Context internal static int SdkInt => sdkInt ??= (int)Build.VERSION.SdkInt; } -} \ No newline at end of file +} From 26c5c430eb12d51dadead8ceb15640682fe580e5 Mon Sep 17 00:00:00 2001 From: Pedro Jesus Date: Wed, 4 Aug 2021 00:54:07 -0300 Subject: [PATCH 2/4] replaced all SDK version calls to XCT cached one --- .../Effects/Semantic/SemanticEffectRouter.android.cs | 3 ++- .../Effects/Shadow/PlatformShadowEffect.android.cs | 5 +++-- .../Effects/StatusBar/BarStyle.android.cs | 5 +++-- .../Effects/Touch/PlatformTouchEffect.android.cs | 11 ++++++----- .../Navigation/NavigationExtensions.android.cs | 3 ++- .../Extensions/ViewExtensions.android.cs | 3 ++- .../ObjectModel/Internals/BaseCommand.android.cs | 3 ++- ...ceValidator.android.ios.macos.uwp.wpf.gtk.tizen.cs | 3 ++- .../Views/RangeSlider/ThumbFrame.shared.cs | 3 ++- .../Views/SideMenuView/SideMenuView.shared.cs | 3 ++- .../ViewSwitcher/TextSwitcherRenderer.android.cs | 4 ++-- 11 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Semantic/SemanticEffectRouter.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Semantic/SemanticEffectRouter.android.cs index 484bd0edc..58752dc24 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Semantic/SemanticEffectRouter.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Semantic/SemanticEffectRouter.android.cs @@ -5,6 +5,7 @@ using AndroidX.Core.View.Accessibility; using Xamarin.CommunityToolkit.Effects; using Xamarin.CommunityToolkit.Effects.Semantic; +using Xamarin.CommunityToolkit.Helpers; using Xamarin.Forms; using Effects = Xamarin.CommunityToolkit.Android.Effects; @@ -118,7 +119,7 @@ public override void OnInitializeAccessibilityNodeInfo(global::Android.Views.Vie if (!string.IsNullOrEmpty(hint)) { // info HintText won't read anything back when using TalkBack pre API 26 - if (Build.VERSION.SdkInt >= BuildVersionCodes.O) + if (XCT.SdkInt >= (int)BuildVersionCodes.O) { info.HintText = hint; diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Shadow/PlatformShadowEffect.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Shadow/PlatformShadowEffect.android.cs index a0b32be42..2b2cf6b24 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Shadow/PlatformShadowEffect.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Shadow/PlatformShadowEffect.android.cs @@ -4,6 +4,7 @@ using Android.Views; using Xamarin.CommunityToolkit.Android.Effects; using Xamarin.CommunityToolkit.Effects; +using Xamarin.CommunityToolkit.Helpers; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; using AButton = Android.Widget.Button; @@ -59,7 +60,7 @@ protected override void OnElementPropertyChanged(PropertyChangedEventArgs args) void Update() { - if (View == null || Build.VERSION.SdkInt < BuildVersionCodes.Lollipop) + if (View == null || XCT.SdkInt < (int)BuildVersionCodes.Lollipop) return; var radius = (float)ShadowEffect.GetRadius(Element); @@ -98,7 +99,7 @@ void Update() group.SetClipToPadding(false); #pragma warning disable - if (Build.VERSION.SdkInt < BuildVersionCodes.P) + if (XCT.SdkInt < (int)BuildVersionCodes.P) return; View.SetOutlineAmbientShadowColor(androidColor); diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/StatusBar/BarStyle.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/StatusBar/BarStyle.android.cs index 255918971..713456e51 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/StatusBar/BarStyle.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/StatusBar/BarStyle.android.cs @@ -2,6 +2,7 @@ using Android.App; using Android.OS; using Android.Views; +using Xamarin.CommunityToolkit.Helpers; using Xamarin.Forms.Internals; namespace Xamarin.CommunityToolkit.Effects @@ -10,9 +11,9 @@ static class BarStyle { internal static bool IsSupported() { - if (Build.VERSION.SdkInt < BuildVersionCodes.M) + if (XCT.SdkInt < (int)(int)BuildVersionCodes.M) { - Log.Warning(string.Empty, $"This functionality is not available. Minimum supported API is {BuildVersionCodes.M}"); + Log.Warning(string.Empty, $"This functionality is not available. Minimum supported API is {(int)BuildVersionCodes.M}"); return false; } diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Touch/PlatformTouchEffect.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Touch/PlatformTouchEffect.android.cs index d9acf3038..208b7a7d2 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Touch/PlatformTouchEffect.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/Touch/PlatformTouchEffect.android.cs @@ -11,6 +11,7 @@ using Xamarin.CommunityToolkit.Android.Effects; using Xamarin.CommunityToolkit.Effects; using Xamarin.CommunityToolkit.Extensions; +using Xamarin.CommunityToolkit.Helpers; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; using AView = Android.Views.View; @@ -76,7 +77,7 @@ protected override void OnAttached() accessibilityManager.AddTouchExplorationStateChangeListener(accessibilityListener); } - if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop || !effect.NativeAnimation) + if (XCT.SdkInt < (int)BuildVersionCodes.Lollipop || !effect.NativeAnimation) return; View.Clickable = true; @@ -85,7 +86,7 @@ protected override void OnAttached() if (Group == null) { - if (Build.VERSION.SdkInt >= BuildVersionCodes.M) + if (XCT.SdkInt >= (int)BuildVersionCodes.M) View.Foreground = ripple; return; @@ -126,7 +127,7 @@ protected override void OnDetached() View.Touch -= OnTouch; View.Click -= OnClick; - if (Build.VERSION.SdkInt >= BuildVersionCodes.M && View.Foreground == ripple) + if (XCT.SdkInt >= (int)BuildVersionCodes.M && View.Foreground == ripple) View.Foreground = null; } @@ -354,7 +355,7 @@ void EndRipple() void CreateRipple() { - var drawable = Build.VERSION.SdkInt >= BuildVersionCodes.M && Group == null + var drawable = XCT.SdkInt >= (int)BuildVersionCodes.M && Group == null ? View?.Foreground : View?.Background; @@ -379,7 +380,7 @@ void UpdateRipple() rippleColor = effect.NativeAnimationColor; rippleRadius = effect.NativeAnimationRadius; ripple?.SetColor(GetColorStateList()); - if (Build.VERSION.SdkInt >= BuildVersionCodes.M && ripple != null) + if (XCT.SdkInt >= (int)BuildVersionCodes.M && ripple != null) ripple.Radius = (int)(View.Context?.Resources?.DisplayMetrics?.Density * effect?.NativeAnimationRadius ?? throw new NullReferenceException()); } diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Extensions/Navigation/NavigationExtensions.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Extensions/Navigation/NavigationExtensions.android.cs index 3506d7f8c..d9b5e803a 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Extensions/Navigation/NavigationExtensions.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Extensions/Navigation/NavigationExtensions.android.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using Xamarin.CommunityToolkit.Helpers; using Xamarin.CommunityToolkit.UI.Views; using Xamarin.Forms.Platform.Android; @@ -7,7 +8,7 @@ namespace Xamarin.CommunityToolkit.Extensions public static partial class NavigationExtensions { static void PlatformShowPopup(BasePopup popup) => - Platform.CreateRendererWithContext(popup, ToolkitPlatform.Context); + Platform.CreateRendererWithContext(popup, XCT.Context); static Task PlatformShowPopupAsync(Popup popup) { diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Extensions/ViewExtensions.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Extensions/ViewExtensions.android.cs index 0469defcb..51a99a355 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Extensions/ViewExtensions.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Extensions/ViewExtensions.android.cs @@ -1,4 +1,5 @@ using Android.OS; +using Xamarin.CommunityToolkit.Helpers; using AView = Android.Views.View; namespace Xamarin.CommunityToolkit.Extensions.Internals @@ -8,7 +9,7 @@ public static class ViewExtensions internal static void MaybeRequestLayout(this AView view) { var isInLayout = false; - if ((int)Build.VERSION.SdkInt >= 18) + if (XCT.SdkInt >= 18) isInLayout = view.IsInLayout; if (!isInLayout && !view.IsLayoutRequested) diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/ObjectModel/Internals/BaseCommand.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/ObjectModel/Internals/BaseCommand.android.cs index 8815a0147..d3fbb4017 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/ObjectModel/Internals/BaseCommand.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/ObjectModel/Internals/BaseCommand.android.cs @@ -1,5 +1,6 @@ using System; using Android.OS; +using Xamarin.CommunityToolkit.Helpers; // Inspired by Xamarin.Essentials.MainThread https://github.com/xamarin/Essentials/tree/main/Xamarin.Essentials/MainThread namespace Xamarin.CommunityToolkit.ObjectModel.Internals @@ -12,7 +13,7 @@ static bool IsMainThread { get { - if (Build.VERSION.SdkInt >= BuildVersionCodes.M) + if (XCT.SdkInt >= (int)BuildVersionCodes.M) return Looper.MainLooper?.IsCurrentThread ?? false; return Looper.MyLooper() == Looper.MainLooper; diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/AvatarView/ImageSourceValidator.android.ios.macos.uwp.wpf.gtk.tizen.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/AvatarView/ImageSourceValidator.android.ios.macos.uwp.wpf.gtk.tizen.cs index 834304faa..7482aa115 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/AvatarView/ImageSourceValidator.android.ios.macos.uwp.wpf.gtk.tizen.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/AvatarView/ImageSourceValidator.android.ios.macos.uwp.wpf.gtk.tizen.cs @@ -1,6 +1,7 @@ using System.IO; using System.Threading.Tasks; using Xamarin.Forms; +using Xamarin.CommunityToolkit.Helpers; #if MONOANDROID using Xamarin.Forms.Platform.Android; @@ -40,7 +41,7 @@ public async Task IsImageSourceValidAsync(ImageSource? source) #if TIZEN return await handler.LoadImageAsync(new NImage(XForms.NativeParent), source).ConfigureAwait(false); #elif MONOANDROID - var imageSource = await handler.LoadImageAsync(source, ToolkitPlatform.Context).ConfigureAwait(false); + var imageSource = await handler.LoadImageAsync(source, XCT.Context).ConfigureAwait(false); return imageSource != null; #else var imageSource = await handler.LoadImageAsync(source).ConfigureAwait(false); diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/RangeSlider/ThumbFrame.shared.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/RangeSlider/ThumbFrame.shared.cs index 3b8ede1e3..889060709 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/RangeSlider/ThumbFrame.shared.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/RangeSlider/ThumbFrame.shared.cs @@ -1,4 +1,5 @@ using System; +using Xamarin.CommunityToolkit.Helpers; using Xamarin.Forms; namespace Xamarin.CommunityToolkit.UI.Views @@ -10,7 +11,7 @@ public ThumbFrame() #region Required work-around to prevent linker from removing the platform-specific implementation #if __ANDROID__ if (System.DateTime.Now.Ticks < 0) - _ = new ThumbFrameRenderer(ToolkitPlatform.Context ?? throw new NullReferenceException()); + _ = new ThumbFrameRenderer(XCT.Context ?? throw new NullReferenceException()); #endif #endregion } diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/SideMenuView/SideMenuView.shared.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/SideMenuView/SideMenuView.shared.cs index 845b758f4..d130ed1c2 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/SideMenuView/SideMenuView.shared.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/SideMenuView/SideMenuView.shared.cs @@ -3,6 +3,7 @@ using System.Collections.Specialized; using System.Linq; using System.Threading.Tasks; +using Xamarin.CommunityToolkit.Helpers; using Xamarin.CommunityToolkit.UI.Views.Internals; using Xamarin.Forms; using static System.Math; @@ -94,7 +95,7 @@ public SideMenuView() #region Required work-around to prevent linker from removing the platform-specific implementation #if __ANDROID__ if (System.DateTime.Now.Ticks < 0) - _ = new Xamarin.CommunityToolkit.Android.UI.Views.SideMenuViewRenderer(ToolkitPlatform.Context ?? throw new NullReferenceException()); + _ = new Xamarin.CommunityToolkit.Android.UI.Views.SideMenuViewRenderer(XCT.Context ?? throw new NullReferenceException()); #elif __IOS__ if (System.DateTime.Now.Ticks < 0) _ = new Xamarin.CommunityToolkit.iOS.UI.Views.SideMenuViewRenderer(); diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/ViewSwitcher/TextSwitcherRenderer.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/ViewSwitcher/TextSwitcherRenderer.android.cs index 5892a455b..a07f83888 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/ViewSwitcher/TextSwitcherRenderer.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/ViewSwitcher/TextSwitcherRenderer.android.cs @@ -429,7 +429,7 @@ void UpdateCharacterSpacing() if (Element == null) return; - if (ToolkitPlatform.SdkInt >= 21) + if (XCT.SdkInt >= 21) { // 0.0624 - Coefficient for converting Pt to Em var characterSpacing = (float)(Element.CharacterSpacing * 0.0624); @@ -483,7 +483,7 @@ void UpdateText() switch (Element.TextType) { case TextType.Html: - if (ToolkitPlatform.SdkInt >= 24) + if (XCT.SdkInt >= 24) { nextView.SetText(Html.FromHtml(Element.Text ?? string.Empty, FromHtmlOptions.ModeCompact), BufferType.Spannable); ShowNext(); From 442b13f4195043a5fe19ec437e154234c915139f Mon Sep 17 00:00:00 2001 From: Pedro Jesus Date: Wed, 4 Aug 2021 00:57:46 -0300 Subject: [PATCH 3/4] removed unecessary space --- samples/XCT.Sample.Android/MainActivity.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/XCT.Sample.Android/MainActivity.cs b/samples/XCT.Sample.Android/MainActivity.cs index a062874e0..79a93e859 100644 --- a/samples/XCT.Sample.Android/MainActivity.cs +++ b/samples/XCT.Sample.Android/MainActivity.cs @@ -14,7 +14,7 @@ protected override void OnCreate(Bundle savedInstanceState) ToolbarResource = Resource.Layout.Toolbar; base.OnCreate(savedInstanceState); - + Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); From 2a736ee907d57ee552d4b7216da684f86aee2712 Mon Sep 17 00:00:00 2001 From: Pedro Jesus Date: Thu, 5 Aug 2021 21:07:43 -0300 Subject: [PATCH 4/4] Added a cache to the iOS version --- .../Xamarin.CommunityToolkit/Helpers/XCT.ios.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Helpers/XCT.ios.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Helpers/XCT.ios.cs index 7fd20cf74..786a8deda 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Helpers/XCT.ios.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Helpers/XCT.ios.cs @@ -4,6 +4,8 @@ namespace Xamarin.CommunityToolkit.Helpers { static class XCT { - internal static bool IsiOS13OrNewer => UIDevice.CurrentDevice.CheckSystemVersion(13, 0); + static bool? isiOS13OrNewer; + + internal static bool IsiOS13OrNewer => isiOS13OrNewer ??= UIDevice.CurrentDevice.CheckSystemVersion(13, 0); } } \ No newline at end of file