-
-
Notifications
You must be signed in to change notification settings - Fork 161
/
MaterialLoadingDialog.xaml.cs
102 lines (84 loc) · 3.5 KB
/
MaterialLoadingDialog.xaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using System.Threading.Tasks;
using Xamarin.Essentials;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using XF.Material.Forms.UI.Dialogs.Configurations;
namespace XF.Material.Forms.UI.Dialogs
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MaterialLoadingDialog : BaseMaterialModalPage
{
internal MaterialLoadingDialog(string message, MaterialLoadingDialogConfiguration configuration)
{
InitializeComponent();
Configure(configuration);
Message.Text = message;
}
internal MaterialLoadingDialog(string message, string lottieAnimation, MaterialLoadingDialogConfiguration configuration)
{
InitializeComponent();
Configure(configuration);
Message.Text = message;
LoadingImage.Animation = lottieAnimation;
}
public override bool Dismissable => false;
public override string MessageText
{
get { return Message.Text; }
set { Message.Text = value; }
}
internal static MaterialLoadingDialogConfiguration GlobalConfiguration { get; set; }
internal static async Task<IMaterialModalPage> Loading(string message, MaterialLoadingDialogConfiguration configuration = null)
{
var dialog = new MaterialLoadingDialog(message, configuration);
await dialog.ShowAsync();
return dialog;
}
internal static async Task<IMaterialModalPage> Loading(string message, string lottieAnimation, MaterialLoadingDialogConfiguration configuration = null)
{
var dialog = new MaterialLoadingDialog(message, lottieAnimation, configuration);
await dialog.ShowAsync();
return dialog;
}
protected override void OnAppearing()
{
base.OnAppearing();
LoadingImage.Play();
ChangeLayout();
}
protected override void OnOrientationChanged(DisplayOrientation orientation)
{
base.OnOrientationChanged(orientation);
ChangeLayout();
}
private void ChangeLayout()
{
switch (DisplayOrientation)
{
case DisplayOrientation.Landscape when Device.Idiom == TargetIdiom.Phone:
Container.WidthRequest = 560;
Container.HorizontalOptions = LayoutOptions.Center;
break;
case DisplayOrientation.Portrait when Device.Idiom == TargetIdiom.Phone:
Container.WidthRequest = -1;
Container.HorizontalOptions = LayoutOptions.FillAndExpand;
break;
}
}
private void Configure(MaterialLoadingDialogConfiguration configuration)
{
var preferredConfig = configuration ?? GlobalConfiguration;
if (preferredConfig == null)
{
return;
}
BackgroundColor = preferredConfig.ScrimColor;
Container.CornerRadius = preferredConfig.CornerRadius;
Container.BackgroundColor = preferredConfig.BackgroundColor;
Message.TextColor = preferredConfig.MessageTextColor;
Message.FontFamily = preferredConfig.MessageFontFamily;
LoadingImage.TintColor = preferredConfig.TintColor;
Container.Margin = preferredConfig.Margin == default ? Material.GetResource<Thickness>("Material.Dialog.Margin") : preferredConfig.Margin;
}
}
}