forked from entdark/JKChat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApplication.cs
120 lines (100 loc) · 3.23 KB
/
Application.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using System;
using System.Text;
using System.Threading.Tasks;
using Android.App;
using Android.OS;
using Android.Runtime;
using JKChat.Android.Views.Main;
using JKChat.Core;
using JKChat.Core.Services;
using Microsoft.AppCenter;
using Microsoft.AppCenter.Crashes;
using MvvmCross;
using MvvmCross.Core;
using MvvmCross.Platforms.Android.Core;
using MvvmCross.Platforms.Android.Views;
using MvvmCross.ViewModels;
namespace JKChat.Android {
[Application(
//AllowBackup = false,
Icon = "@mipmap/ic_launcher",
RoundIcon = "@mipmap/ic_launcher_round",
Label = "@string/app_name",
Theme = "@style/AppThemeMaterial3",
ResizeableActivity = true
)]
public class Application : MvxAndroidApplication<Setup, App> {
public Application() {
}
public Application(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) {
}
public override void OnCreate() {
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
AppCenter.Start(Core.ApiKeys.AppCenter.Android, typeof(Crashes));
base.OnCreate();
Mvx.IoCProvider.Resolve<IAppService>().AppTheme = AppSettings.AppTheme;
RegisterActivityLifecycleCallbacks(new ActivityLifecycleCallbacks(this));
}
private class ActivityLifecycleCallbacks : Java.Lang.Object, IActivityLifecycleCallbacks {
private readonly global::Android.App.Application application;
private bool isResumed;
private Bundle bundle;
public ActivityLifecycleCallbacks(global::Android.App.Application application) {
this.application = application;
}
private Setup setup => MvxAndroidSetupSingleton.EnsureSingletonAvailable(application).PlatformSetup<Setup>();
public void OnActivityPaused(Activity activity) {
if (!IsMainActivity(activity))
return;
isResumed = false;
CancelMonitor();
}
public void OnActivityResumed(Activity activity) {
if (!IsMainActivity(activity))
return;
isResumed = true;
Monitor();
}
public void OnActivityCreated(Activity activity, Bundle savedInstanceState) {
if (!IsMainActivity(activity))
return;
bundle = savedInstanceState;
Monitor();
}
public void OnActivityDestroyed(Activity activity) {
if (!IsMainActivity(activity))
return;
CancelMonitor();
}
public void OnActivitySaveInstanceState(Activity activity, Bundle outState) {}
public void OnActivityStarted(Activity activity) {}
public void OnActivityStopped(Activity activity) {}
public void InitializationComplete() {
if (!isResumed)
return;
if (Mvx.IoCProvider.TryResolve(out IMvxAppStart startup)) {
if (!startup.IsStarted) {
Task.Run(async () => await startup.StartAsync(bundle));
}
}
}
private void Monitor() {
setup.StateChanged -= SetupStateChanged;
if (setup.State == MvxSetupState.Initialized) {
InitializationComplete();
} else {
setup.StateChanged += SetupStateChanged;
}
}
private void CancelMonitor() {
setup.StateChanged -= SetupStateChanged;
}
private void SetupStateChanged(object sender, MvxSetupStateEventArgs ev) {
if (ev.SetupState == MvxSetupState.Initialized) {
InitializationComplete();
}
}
private static bool IsMainActivity(Activity activity) => activity is MainActivity;
}
}
}