From 8950bcb099196c88b86d2602e6d79e70e16dfe1e Mon Sep 17 00:00:00 2001 From: Bhavanesh N Date: Tue, 15 Apr 2025 00:01:45 +0530 Subject: [PATCH 1/9] Map visibility explicitly --- .../ActivityIndicatorHandler.cs | 2 +- .../iOS/ActivityIndicatorExtensions.cs | 18 ++++++++++++++++-- .../src/Platform/iOS/MauiActivityIndicator.cs | 8 ++++---- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/Core/src/Handlers/ActivityIndicator/ActivityIndicatorHandler.cs b/src/Core/src/Handlers/ActivityIndicator/ActivityIndicatorHandler.cs index 57033052b059..f63af2abf6af 100644 --- a/src/Core/src/Handlers/ActivityIndicator/ActivityIndicatorHandler.cs +++ b/src/Core/src/Handlers/ActivityIndicator/ActivityIndicatorHandler.cs @@ -22,7 +22,7 @@ public partial class ActivityIndicatorHandler : IActivityIndicatorHandler { [nameof(IActivityIndicator.Color)] = MapColor, [nameof(IActivityIndicator.IsRunning)] = MapIsRunning, -#if __ANDROID__ +#if __ANDROID__ || IOS || MACCATALYST // Android does not have the concept of IsRunning, so we are leveraging the Visibility [nameof(IActivityIndicator.Visibility)] = MapIsRunning, #endif diff --git a/src/Core/src/Platform/iOS/ActivityIndicatorExtensions.cs b/src/Core/src/Platform/iOS/ActivityIndicatorExtensions.cs index 9e8936dad16d..16ec47a048cd 100644 --- a/src/Core/src/Platform/iOS/ActivityIndicatorExtensions.cs +++ b/src/Core/src/Platform/iOS/ActivityIndicatorExtensions.cs @@ -6,12 +6,26 @@ public static class ActivityIndicatorExtensions { public static void UpdateIsRunning(this UIActivityIndicatorView activityIndicatorView, IActivityIndicator activityIndicator) { - if (activityIndicator.IsRunning) + activityIndicatorView.Hidden = GetActivityIndicatorVisibility(activityIndicator); + + if (activityIndicator.IsRunning && !activityIndicatorView.Hidden) activityIndicatorView.StartAnimating(); - else + else if(activityIndicatorView.IsAnimating) activityIndicatorView.StopAnimating(); } + private static bool GetActivityIndicatorVisibility(IActivityIndicator activityIndicator) + { + if (activityIndicator.Visibility == Visibility.Visible) + { + return !activityIndicator.IsRunning; + } + else + { + return true; + } + } + public static void UpdateColor(this UIActivityIndicatorView activityIndicatorView, IActivityIndicator activityIndicator) => activityIndicatorView.Color = activityIndicator.Color?.ToPlatform(); } diff --git a/src/Core/src/Platform/iOS/MauiActivityIndicator.cs b/src/Core/src/Platform/iOS/MauiActivityIndicator.cs index 7fc1d8cd1c0c..7c3b349e4a81 100644 --- a/src/Core/src/Platform/iOS/MauiActivityIndicator.cs +++ b/src/Core/src/Platform/iOS/MauiActivityIndicator.cs @@ -22,9 +22,9 @@ public override void Draw(CGRect rect) { base.Draw(rect); - if (IsRunning) + if (IsRunning && !Hidden) StartAnimating(); - else + else if(IsAnimating) StopAnimating(); } @@ -32,9 +32,9 @@ public override void LayoutSubviews() { base.LayoutSubviews(); - if (IsRunning) + if (IsRunning && !Hidden) StartAnimating(); - else + else if(IsAnimating) StopAnimating(); } From af3fee0c340a53e6778d4a749e87594b54616392 Mon Sep 17 00:00:00 2001 From: Bhavanesh N Date: Tue, 15 Apr 2025 00:05:45 +0530 Subject: [PATCH 2/9] Add UI test --- .../TestCases.HostApp/Issues/Issue28968.xaml | 12 ++++++++++ .../Issues/Issue28968.xaml.cs | 15 ++++++++++++ .../Tests/Issues/Issue28968.cs | 23 +++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue28968.xaml create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue28968.xaml.cs create mode 100644 src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue28968.cs diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue28968.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue28968.xaml new file mode 100644 index 000000000000..3e342020f1f6 --- /dev/null +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue28968.xaml @@ -0,0 +1,12 @@ + + + + +