From 7c22975802c8d64a109b0b6882654db17c89d5b9 Mon Sep 17 00:00:00 2001 From: Nick Randolph Date: Tue, 16 Jan 2024 20:04:00 +1100 Subject: [PATCH 1/2] chore: Updated analysers to v8 and fixed all errors (from new analyzers) --- samples/Directory.Packages.props | 2 +- .../Uno.Toolkit.Samples.Shared/App.xaml.cs | 2 +- src/Directory.Packages.props | 2 +- .../Behaviors/TabBarSelectorBehavior.Properties.cs | 5 +++++ .../Behaviors/VisualStateManagerExtensions.cs | 6 ++++-- .../ExtendedSplashScreen.Windows.NetStandard.cs | 6 +++--- .../NavigationBar/NativeFramePresenter.Android.cs | 8 ++++++-- .../Controls/TabBar/TabBarListPanel.cs | 8 ++++---- src/Uno.Toolkit.UI/Helpers/ImageHelper.iOS.cs | 6 ++++-- src/Uno.Toolkit.UI/Helpers/VisualTreeHelperEx.cs | 13 +++++++------ .../Converters/InflateDimensionConverter.cs | 2 +- .../Styles/Controls/BottomTabBar.xaml | 5 +++-- .../Styles/Controls/SegmentedControl.xaml | 5 +++-- 13 files changed, 43 insertions(+), 27 deletions(-) diff --git a/samples/Directory.Packages.props b/samples/Directory.Packages.props index ba0413bd0..01c6a08c9 100644 --- a/samples/Directory.Packages.props +++ b/samples/Directory.Packages.props @@ -3,7 +3,7 @@ true - + diff --git a/samples/Uno.Toolkit.Samples/Uno.Toolkit.Samples.Shared/App.xaml.cs b/samples/Uno.Toolkit.Samples/Uno.Toolkit.Samples.Shared/App.xaml.cs index 80a00535d..cec0255d7 100644 --- a/samples/Uno.Toolkit.Samples/Uno.Toolkit.Samples.Shared/App.xaml.cs +++ b/samples/Uno.Toolkit.Samples/Uno.Toolkit.Samples.Shared/App.xaml.cs @@ -84,7 +84,7 @@ public App() /// Details about the launch request and process. protected override async void OnLaunched(XamlLaunchActivatedEventArgs e) { -#if __IOS__ && USE_UITESTS +#if __IOS__ && USE_UITESTS && !MACCATALYST Xamarin.Calabash.Start(); #endif diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index a8e107bea..b259e5a5e 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -38,6 +38,6 @@ - + diff --git a/src/Uno.Toolkit.UI/Behaviors/TabBarSelectorBehavior.Properties.cs b/src/Uno.Toolkit.UI/Behaviors/TabBarSelectorBehavior.Properties.cs index e453cd48d..300a350b1 100644 --- a/src/Uno.Toolkit.UI/Behaviors/TabBarSelectorBehavior.Properties.cs +++ b/src/Uno.Toolkit.UI/Behaviors/TabBarSelectorBehavior.Properties.cs @@ -41,13 +41,18 @@ public static void SetSelector(DependencyObject obj, Selector? value) #region State Attached Property (private) [DynamicDependency(nameof(SetState))] +// TODO: Review whether DependencyObject can be changed to TabBar +#pragma warning disable CA1859 // Use concrete types when possible for improved performance private static TabBarSelectorBehaviorState? GetState(DependencyObject obj) { return (TabBarSelectorBehaviorState)obj.GetValue(StateProperty); } [DynamicDependency(nameof(GetState))] + // TODO: Review whether DependencyObject can be changed to TabBar +#pragma warning disable CA1859 // Use concrete types when possible for improved performance private static void SetState(DependencyObject obj, TabBarSelectorBehaviorState? value) +#pragma warning restore CA1859 // Use concrete types when possible for improved performance { obj.SetValue(StateProperty, value); } diff --git a/src/Uno.Toolkit.UI/Behaviors/VisualStateManagerExtensions.cs b/src/Uno.Toolkit.UI/Behaviors/VisualStateManagerExtensions.cs index 946d14da2..795a3cca1 100644 --- a/src/Uno.Toolkit.UI/Behaviors/VisualStateManagerExtensions.cs +++ b/src/Uno.Toolkit.UI/Behaviors/VisualStateManagerExtensions.cs @@ -46,6 +46,8 @@ public static class VisualStateManagerExtensions typeof(VisualStateManagerExtensions), new PropertyMetadata(default(string), OnStatesChanged)); + private static readonly char[] separator = new char[] { ',', ';', ' ' }; + /// /// Sets the visual states of the control. /// @@ -72,7 +74,7 @@ private static void OnStatesChanged(DependencyObject sender, DependencyPropertyC { if (sender is Control control && e.NewValue is string { Length: >0 } value) { - var states = value.Split(new char[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries) + var states = value.Split(separator, StringSplitOptions.RemoveEmptyEntries) .Where(x => !string.IsNullOrEmpty(x)) .Select(x => x.Trim()) .ToArray(); @@ -89,7 +91,7 @@ private static void OnStatesChanged(DependencyObject sender, DependencyPropertyC anySuccessed |= success; } - if (states.Any() && !anySuccessed) + if (states.Length != 0 && !anySuccessed) { WarnForMisplacedVisualStateGroups(control); } diff --git a/src/Uno.Toolkit.UI/Controls/ExtendedSplashScreen/ExtendedSplashScreen.Windows.NetStandard.cs b/src/Uno.Toolkit.UI/Controls/ExtendedSplashScreen/ExtendedSplashScreen.Windows.NetStandard.cs index 03b4b8f4c..6ddd159e4 100644 --- a/src/Uno.Toolkit.UI/Controls/ExtendedSplashScreen/ExtendedSplashScreen.Windows.NetStandard.cs +++ b/src/Uno.Toolkit.UI/Controls/ExtendedSplashScreen/ExtendedSplashScreen.Windows.NetStandard.cs @@ -108,7 +108,7 @@ public partial class ExtendedSplashScreen catch { var entry = Assembly.GetEntryAssembly(); - var res = entry?.GetManifestResourceNames()?.FirstOrDefault(x => x.ToLower().Contains(WasmAppManifestFilename)); + var res = entry?.GetManifestResourceNames()?.FirstOrDefault(x => x.ToLower().Contains(WasmAppManifestFilename, StringComparison.InvariantCultureIgnoreCase)); if (string.IsNullOrWhiteSpace(res)) { return null; @@ -125,8 +125,8 @@ public partial class ExtendedSplashScreen { return null; } - var startIdx = manifestString.IndexOf("{") + 1; - var endIdx = manifestString.LastIndexOf("}") - 1; + var startIdx = manifestString.IndexOf('{') + 1; + var endIdx = manifestString.LastIndexOf('}') - 1; manifestString = manifestString.Substring(startIdx, endIdx - startIdx); // Trim "var UnoAppManifest = " from the start of the file so we're left with just the JSON var pairs = (from pair in manifestString.Trim().Split(',') let bits = pair.Split(':') diff --git a/src/Uno.Toolkit.UI/Controls/NavigationBar/NativeFramePresenter.Android.cs b/src/Uno.Toolkit.UI/Controls/NavigationBar/NativeFramePresenter.Android.cs index ea9d362d6..20d5a793e 100644 --- a/src/Uno.Toolkit.UI/Controls/NavigationBar/NativeFramePresenter.Android.cs +++ b/src/Uno.Toolkit.UI/Controls/NavigationBar/NativeFramePresenter.Android.cs @@ -108,7 +108,7 @@ private async Task InvalidateStack() _isUpdatingStack = true; - while (_stackUpdates.Any()) + while (_stackUpdates.Count != 0) { var navigation = _stackUpdates.Dequeue(); await UpdateStack(navigation.pageEntry, navigation.args); @@ -187,7 +187,7 @@ private async Task UpdateStack(PageStackEntry? entry, NavigationEventArgs e) _pageStack.Children.Insert(0, newPage); } } - break; + break; } _currentEntry = newEntry; @@ -199,7 +199,9 @@ private static bool GetIsAnimated(PageStackEntry? entry) return !(entry?.NavigationTransitionInfo is SuppressNavigationTransitionInfo); } +#pragma warning disable CA1859 // Use concrete types when possible for improved performance - Returning Android.Views.Animations.AnimationSet only applicable on Android private static Animation GetEnterAnimation() +#pragma warning restore CA1859 // Use concrete types when possible for improved performance { // Source: // https://android.googlesource.com/platform/frameworks/base/+/android-cts-7.1_r5/core/res/res/anim/activity_open_enter.xml @@ -236,7 +238,9 @@ private static Animation GetEnterAnimation() return enterAnimation; } +#pragma warning disable CA1859 // Use concrete types when possible for improved performance - Returning Android.Views.Animations.AnimationSet only applicable on Android private static Animation GetExitAnimation() +#pragma warning restore CA1859 // Use concrete types when possible for improved performance { // Source: // https://android.googlesource.com/platform/frameworks/base/+/android-cts-7.1_r5/core/res/res/anim/activity_close_exit.xml diff --git a/src/Uno.Toolkit.UI/Controls/TabBar/TabBarListPanel.cs b/src/Uno.Toolkit.UI/Controls/TabBar/TabBarListPanel.cs index 5f430b043..b75aaf065 100644 --- a/src/Uno.Toolkit.UI/Controls/TabBar/TabBarListPanel.cs +++ b/src/Uno.Toolkit.UI/Controls/TabBar/TabBarListPanel.cs @@ -43,9 +43,9 @@ protected override Size MeasureOverride(Size availableSize) var widthOfWidest = 0d; var heightOfTallest = 0d; - var visibleChildren = Children.Where(IsVisible); + var visibleChildren = Children.Where(IsVisible).ToArray(); - var count = visibleChildren.Count(); + var count = visibleChildren.Length; if (count < 1) { return availableSize.FiniteOrDefault(default); @@ -95,8 +95,8 @@ protected override Size MeasureOverride(Size availableSize) protected override Size ArrangeOverride(Size finalSize) { - var visibleChildren = Children.Where(IsVisible); - var count = visibleChildren.Count(); + var visibleChildren = Children.Where(IsVisible).ToArray(); + var count = visibleChildren.Length; if (count < 1) { return finalSize; diff --git a/src/Uno.Toolkit.UI/Helpers/ImageHelper.iOS.cs b/src/Uno.Toolkit.UI/Helpers/ImageHelper.iOS.cs index 777b997d1..043f78c5b 100644 --- a/src/Uno.Toolkit.UI/Helpers/ImageHelper.iOS.cs +++ b/src/Uno.Toolkit.UI/Helpers/ImageHelper.iOS.cs @@ -11,6 +11,8 @@ namespace Uno.Toolkit.UI { internal static class ImageHelper { + private static readonly char[] trimChars = new[] { '/' }; + public static UIImage? FromUri(Uri? uri) { if (uri == null) @@ -19,11 +21,11 @@ internal static class ImageHelper } var bundleName = Path.GetFileName(uri.AbsolutePath); - var bundlePath = uri.PathAndQuery.TrimStart(new[] { '/' }); + var bundlePath = uri.PathAndQuery.TrimStart(trimChars); var image = UIImage.FromFile(bundleName) ?? UIImage.FromFile(bundlePath); return image; } } } -#endif \ No newline at end of file +#endif diff --git a/src/Uno.Toolkit.UI/Helpers/VisualTreeHelperEx.cs b/src/Uno.Toolkit.UI/Helpers/VisualTreeHelperEx.cs index 3937776c6..846758e24 100644 --- a/src/Uno.Toolkit.UI/Helpers/VisualTreeHelperEx.cs +++ b/src/Uno.Toolkit.UI/Helpers/VisualTreeHelperEx.cs @@ -53,7 +53,7 @@ internal static partial class VisualTreeHelperEx /// /// Any node of the visual tree public static string TreeGraph(this DependencyObject reference) => TreeGraph(reference, DebugVTNode); - + /// /// Produces a text representation of the visual tree, using the provided method of description. /// @@ -112,7 +112,7 @@ void Print(object o, int depth) public static T? GetFirstAncestor(this DependencyObject reference, Func predicate) => GetAncestors(reference) .OfType() .FirstOrDefault(predicate); - + /// /// Returns the first ancestor of a specified type that satisfies the . /// @@ -374,21 +374,22 @@ public static IEnumerable<_View> GetDescendants(_View reference, Func<_View, boo } #if __IOS__ - private static IEnumerable<_View> GetChildren(_View reference) + private static _View[] GetChildren(_View reference) { return reference.Subviews; } #elif __ANDROID__ - private static IEnumerable<_View> GetChildren(_View reference) + private static _View[] GetChildren(_View reference) { if (reference is Android.Views.ViewGroup vg) { return Enumerable .Range(0, vg.ChildCount) - .Select(vg.GetChildAt)!; + .Select(idx => vg.GetChildAt(idx)!) + .ToArray(); } - return Enumerable.Empty<_View>(); + return Array.Empty<_View>(); } #endif } diff --git a/src/library/Uno.Toolkit.Cupertino/Converters/InflateDimensionConverter.cs b/src/library/Uno.Toolkit.Cupertino/Converters/InflateDimensionConverter.cs index 0e4835c67..a2273271b 100644 --- a/src/library/Uno.Toolkit.Cupertino/Converters/InflateDimensionConverter.cs +++ b/src/library/Uno.Toolkit.Cupertino/Converters/InflateDimensionConverter.cs @@ -15,7 +15,7 @@ namespace Uno.Toolkit.UI { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "Converters")] - internal class InflateDimensionConverter : IValueConverter + internal sealed class InflateDimensionConverter : IValueConverter { public double Inflation { get; set; } public double DefaultValue { get; set; } diff --git a/src/library/Uno.Toolkit.Cupertino/Styles/Controls/BottomTabBar.xaml b/src/library/Uno.Toolkit.Cupertino/Styles/Controls/BottomTabBar.xaml index 7b3262608..209d6073c 100644 --- a/src/library/Uno.Toolkit.Cupertino/Styles/Controls/BottomTabBar.xaml +++ b/src/library/Uno.Toolkit.Cupertino/Styles/Controls/BottomTabBar.xaml @@ -37,11 +37,12 @@ 0,0,0,12 12,0 + - + - + + 12 SF Pro From dac385035004c0438e839dec1ad445f28a15ee39 Mon Sep 17 00:00:00 2001 From: Nick Randolph Date: Wed, 17 Jan 2024 02:22:48 +1100 Subject: [PATCH 2/2] chore: Removing duplicate resources --- .../Styles/Controls/BottomTabBar.xaml | 8 ++------ .../Styles/Controls/SegmentedControl.xaml | 4 ---- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/library/Uno.Toolkit.Cupertino/Styles/Controls/BottomTabBar.xaml b/src/library/Uno.Toolkit.Cupertino/Styles/Controls/BottomTabBar.xaml index 209d6073c..09061cf2b 100644 --- a/src/library/Uno.Toolkit.Cupertino/Styles/Controls/BottomTabBar.xaml +++ b/src/library/Uno.Toolkit.Cupertino/Styles/Controls/BottomTabBar.xaml @@ -37,13 +37,9 @@ 0,0,0,12 12,0 - - - - - diff --git a/src/library/Uno.Toolkit.Cupertino/Styles/Controls/SegmentedControl.xaml b/src/library/Uno.Toolkit.Cupertino/Styles/Controls/SegmentedControl.xaml index bc8a81cc3..f366c1766 100644 --- a/src/library/Uno.Toolkit.Cupertino/Styles/Controls/SegmentedControl.xaml +++ b/src/library/Uno.Toolkit.Cupertino/Styles/Controls/SegmentedControl.xaml @@ -44,10 +44,6 @@ - - - 12 SF Pro 28