-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* ActivityIndicatorHandler * Register IActivityIndicator * Add comments to IActivityIndicator * Fix build error
- Loading branch information
1 parent
e0a563d
commit 205573e
Showing
19 changed files
with
296 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
namespace Microsoft.Maui.Controls | ||
{ | ||
public partial class ActivityIndicator : IActivityIndicator | ||
{ | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
namespace Microsoft.Maui | ||
{ | ||
/// <summary> | ||
/// Represents a View that displays an animation to show that the application is engaged | ||
/// in a lengthy activity. | ||
/// </summary> | ||
public interface IActivityIndicator : IView | ||
{ | ||
/// <summary> | ||
/// Gets a value that indicates whether the ActivityIndicator should be visible and animating, | ||
/// or hidden. | ||
/// </summary> | ||
bool IsRunning { get; } | ||
|
||
/// <summary> | ||
/// Gets a Color value that defines the display color. | ||
/// </summary> | ||
Color Color { get; } | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
src/Core/src/Handlers/ActivityIndicator/ActivityIndicatorHandler.Android.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
using Android.Widget; | ||
|
||
namespace Microsoft.Maui.Handlers | ||
{ | ||
public partial class ActivityIndicatorHandler : AbstractViewHandler<IActivityIndicator, ProgressBar> | ||
{ | ||
protected override ProgressBar CreateNativeView() => new ProgressBar(Context) { Indeterminate = true }; | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
src/Core/src/Handlers/ActivityIndicator/ActivityIndicatorHandler.Standard.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
using System; | ||
|
||
namespace Microsoft.Maui.Handlers | ||
{ | ||
public partial class ActivityIndicatorHandler : AbstractViewHandler<IActivityIndicator, object> | ||
{ | ||
protected override object CreateNativeView() => throw new NotImplementedException(); | ||
} | ||
} |
31 changes: 31 additions & 0 deletions
31
src/Core/src/Handlers/ActivityIndicator/ActivityIndicatorHandler.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
namespace Microsoft.Maui.Handlers | ||
{ | ||
public partial class ActivityIndicatorHandler | ||
{ | ||
public static PropertyMapper<IActivityIndicator, ActivityIndicatorHandler> ActivityIndicatorMapper = new PropertyMapper<IActivityIndicator, ActivityIndicatorHandler>(ViewHandler.ViewMapper) | ||
{ | ||
[nameof(IActivityIndicator.IsRunning)] = MapIsRunning, | ||
[nameof(IActivityIndicator.Color)] = MapColor | ||
}; | ||
|
||
public static void MapIsRunning(ActivityIndicatorHandler handler, IActivityIndicator activityIndicator) | ||
{ | ||
handler.TypedNativeView?.UpdateIsRunning(activityIndicator); | ||
} | ||
|
||
public static void MapColor(ActivityIndicatorHandler handler, IActivityIndicator activityIndicator) | ||
{ | ||
handler.TypedNativeView?.UpdateColor(activityIndicator); | ||
} | ||
|
||
public ActivityIndicatorHandler() : base(ActivityIndicatorMapper) | ||
{ | ||
|
||
} | ||
|
||
public ActivityIndicatorHandler(PropertyMapper mapper) : base(mapper ?? ActivityIndicatorMapper) | ||
{ | ||
|
||
} | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
src/Core/src/Handlers/ActivityIndicator/ActivityIndicatorHandler.iOS.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
using CoreGraphics; | ||
using UIKit; | ||
|
||
namespace Microsoft.Maui.Handlers | ||
{ | ||
public partial class ActivityIndicatorHandler : AbstractViewHandler<IActivityIndicator, NativeActivityIndicator> | ||
{ | ||
protected override NativeActivityIndicator CreateNativeView() => new NativeActivityIndicator(CGRect.Empty, VirtualView) | ||
{ | ||
ActivityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray | ||
}; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
src/Core/src/Platform/Android/ActivityIndicatorExtensions.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
using Android.Views; | ||
using Android.Widget; | ||
|
||
namespace Microsoft.Maui | ||
{ | ||
public static class ActivityIndicatorExtensions | ||
{ | ||
public static void UpdateIsRunning(this ProgressBar progressBar, IActivityIndicator activityIndicator) => | ||
progressBar.Visibility = activityIndicator.IsRunning ? ViewStates.Visible : ViewStates.Invisible; | ||
|
||
public static void UpdateColor(this ProgressBar progressBar, IActivityIndicator activityIndicator) | ||
{ | ||
Color color = activityIndicator.Color; | ||
|
||
if (!color.IsDefault) | ||
progressBar.IndeterminateDrawable?.SetColorFilter(color.ToNative(), FilterMode.SrcIn); | ||
else | ||
progressBar.IndeterminateDrawable?.ClearColorFilter(); | ||
} | ||
} | ||
} |
15 changes: 15 additions & 0 deletions
15
src/Core/src/Platform/Standard/ActivityIndicatorExtensions.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
namespace Microsoft.Maui | ||
{ | ||
public static class ActivityIndicatorExtensions | ||
{ | ||
public static void UpdateIsRunning(this object nothing, IActivityIndicator activityIndicator) | ||
{ | ||
|
||
} | ||
|
||
public static void UpdateColor(this object nothing, IActivityIndicator activityIndicator) | ||
{ | ||
|
||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
namespace Microsoft.Maui | ||
{ | ||
public static class ActivityIndicatorExtensions | ||
{ | ||
public static void UpdateIsRunning(this NativeActivityIndicator activityIndicatorView, IActivityIndicator activityIndicator) | ||
{ | ||
if (activityIndicator.IsRunning) | ||
activityIndicatorView.StartAnimating(); | ||
else | ||
activityIndicatorView.StopAnimating(); | ||
} | ||
|
||
public static void UpdateColor(this NativeActivityIndicator activityIndicatorView, IActivityIndicator activityIndicator) | ||
{ | ||
activityIndicatorView.Color = activityIndicator.Color == Color.Default ? null : activityIndicator.Color.ToNative(); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
using CoreGraphics; | ||
using UIKit; | ||
|
||
namespace Microsoft.Maui | ||
{ | ||
public class NativeActivityIndicator : UIActivityIndicatorView | ||
{ | ||
IActivityIndicator? _virtualView; | ||
|
||
public NativeActivityIndicator(CGRect rect, IActivityIndicator? virtualView) : base(rect) | ||
=> _virtualView = virtualView; | ||
|
||
public override void Draw(CGRect rect) | ||
{ | ||
base.Draw(rect); | ||
|
||
if (_virtualView?.IsRunning == true) | ||
StartAnimating(); | ||
} | ||
|
||
public override void LayoutSubviews() | ||
{ | ||
base.LayoutSubviews(); | ||
|
||
if (_virtualView?.IsRunning == true) | ||
StartAnimating(); | ||
} | ||
|
||
protected override void Dispose(bool disposing) | ||
{ | ||
base.Dispose(disposing); | ||
_virtualView = null; | ||
} | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
...ore/tests/DeviceTests/Handlers/ActivityIndicator/ActivityIndicatorHandlerTests.Android.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
using System; | ||
using System.Threading.Tasks; | ||
using Android.Views; | ||
using Android.Widget; | ||
using Microsoft.Maui.Handlers; | ||
|
||
namespace Microsoft.Maui.DeviceTests | ||
{ | ||
public partial class ActivityIndicatorHandlerTests | ||
{ | ||
ProgressBar GetNativeActivityIndicator(ActivityIndicatorHandler activityIndicatorHandler) => | ||
(ProgressBar)activityIndicatorHandler.View; | ||
|
||
bool GetNativeIsRunning(ActivityIndicatorHandler activityIndicatorHandler) => | ||
GetNativeActivityIndicator(activityIndicatorHandler).Visibility == ViewStates.Visible; | ||
|
||
Task ValidateColor(IActivityIndicator activityIndicator, Color color, Action action = null) => | ||
ValidateHasColor(activityIndicator, color, action); | ||
|
||
Task ValidateHasColor(IActivityIndicator activityIndicator, Color color, Action action = null) | ||
{ | ||
return InvokeOnMainThreadAsync(() => | ||
{ | ||
var nativeActivityIndicator = GetNativeActivityIndicator(CreateHandler(activityIndicator)); | ||
action?.Invoke(); | ||
nativeActivityIndicator.AssertContainsColor(color); | ||
}); | ||
} | ||
} | ||
} |
40 changes: 40 additions & 0 deletions
40
src/Core/tests/DeviceTests/Handlers/ActivityIndicator/ActivityIndicatorHandlerTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
using System.Threading.Tasks; | ||
using Microsoft.Maui.DeviceTests.Stubs; | ||
using Microsoft.Maui.Handlers; | ||
using Xunit; | ||
|
||
namespace Microsoft.Maui.DeviceTests | ||
{ | ||
[Category("ActivityIndicatorHandler")] | ||
public partial class ActivityIndicatorHandlerTests : HandlerTestBase<ActivityIndicatorHandler, ActivityIndicatorStub> | ||
{ | ||
public ActivityIndicatorHandlerTests(HandlerTestFixture fixture) : base(fixture) | ||
{ | ||
} | ||
|
||
[Theory(DisplayName = "IsRunning Initializes Correctly")] | ||
[InlineData(true)] | ||
[InlineData(false)] | ||
public async Task IsRunningInitializesCorrectly(bool isRunning) | ||
{ | ||
var activityIndicator = new ActivityIndicatorStub() | ||
{ | ||
IsRunning = isRunning | ||
}; | ||
|
||
await ValidatePropertyInitValue(activityIndicator, () => activityIndicator.IsRunning, GetNativeIsRunning, activityIndicator.IsRunning); | ||
} | ||
|
||
[Fact(DisplayName = "BackgroundColor Updates Correctly")] | ||
public async Task BackgroundColorUpdatesCorrectly() | ||
{ | ||
var activityIndicator = new ActivityIndicatorStub() | ||
{ | ||
BackgroundColor = Color.Yellow, | ||
IsRunning = true | ||
}; | ||
|
||
await ValidateColor(activityIndicator, Color.Yellow, () => activityIndicator.BackgroundColor = Color.Yellow); | ||
} | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
src/Core/tests/DeviceTests/Handlers/ActivityIndicator/ActivityIndicatorHandlerTests.iOS.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
using System; | ||
using System.Threading.Tasks; | ||
using Microsoft.Maui.Handlers; | ||
using UIKit; | ||
using Xunit; | ||
|
||
namespace Microsoft.Maui.DeviceTests | ||
{ | ||
public partial class ActivityIndicatorHandlerTests | ||
{ | ||
UIActivityIndicatorView GetNativeActivityIndicator(ActivityIndicatorHandler activityIndicatorHandler) => | ||
(UIActivityIndicatorView)activityIndicatorHandler.View; | ||
|
||
bool GetNativeIsRunning(ActivityIndicatorHandler activityIndicatorHandler) => | ||
GetNativeActivityIndicator(activityIndicatorHandler).IsAnimating; | ||
|
||
async Task ValidateColor(IActivityIndicator activityIndicator, Color color, Action action = null) | ||
{ | ||
var expected = await GetValueAsync(activityIndicator, handler => | ||
{ | ||
var native = GetNativeActivityIndicator(handler); | ||
action?.Invoke(); | ||
return native.BackgroundColor.ToColor(); | ||
}); | ||
Assert.Equal(expected, color); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
namespace Microsoft.Maui.DeviceTests.Stubs | ||
{ | ||
public class ActivityIndicatorStub : StubBase, IActivityIndicator | ||
{ | ||
public bool IsRunning { get; set; } | ||
|
||
public Color Color { get; set; } | ||
} | ||
} |