-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathRemoteConfigRepository.Android.cs
More file actions
114 lines (94 loc) · 3.17 KB
/
Copy pathRemoteConfigRepository.Android.cs
File metadata and controls
114 lines (94 loc) · 3.17 KB
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
#if __ANDROID__
using System;
using System.Reactive.Subjects;
using ApplicationTemplate.DataAccess;
using Firebase.RemoteConfig;
namespace ApplicationTemplate.Views;
/// <summary>
/// RemoteConfigRepository is a repository for Firebase Remote Config.
/// </summary>
public sealed class RemoteConfigRepository : IKillSwitchRepository, IMinimumVersionReposiory, IDisposable
{
private Subject<bool> _killSwitchSubject = new Subject<bool>();
private Subject<Version> _versionSubject = new Subject<Version>();
/// <summary>
/// Initializes a new instance of the <see cref="RemoteConfigRepository"/> class.
/// </summary>
public RemoteConfigRepository()
{
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.Instance;
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
.SetMinimumFetchIntervalInSeconds(3600)
.Build();
mFirebaseRemoteConfig.SetConfigSettingsAsync(configSettings);
FetchRemoteConfig();
ListenForRealTimeChanges();
}
private void FetchRemoteConfig()
{
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.Instance;
mFirebaseRemoteConfig.FetchAndActivate()
.AddOnCompleteListener(new FetchCompleteListener(this));
}
private void ListenForRealTimeChanges()
{
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.Instance;
mFirebaseRemoteConfig.AddOnConfigUpdateListener(new ConfigUpdateListener(this));
}
/// <inheritdoc />
public IObservable<Version> MinimumVersionObservable => _versionSubject;
/// <inheritdoc />
public void CheckMinimumVersion()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public IObservable<bool> ObserveKillSwitchActivation()
{
return _killSwitchSubject;
}
/// <inheritdoc />
public void Dispose()
{
_killSwitchSubject.Dispose();
_versionSubject.Dispose();
}
private sealed class FetchCompleteListener : Java.Lang.Object, Android.Gms.Tasks.IOnCompleteListener
{
private readonly RemoteConfigRepository _repository;
public FetchCompleteListener(RemoteConfigRepository repository)
{
_repository = repository;
}
public void OnComplete(Android.Gms.Tasks.Task task)
{
if (task.IsSuccessful)
{
_repository._killSwitchSubject.OnNext(FirebaseRemoteConfig.Instance.GetBoolean("kill_switch"));
_repository._versionSubject.OnNext(new Version(FirebaseRemoteConfig.Instance.GetString("minimum_version")));
}
}
}
private sealed class ConfigUpdateListener : Java.Lang.Object, IConfigUpdateListener
{
private readonly RemoteConfigRepository _repository;
public ConfigUpdateListener(RemoteConfigRepository repository)
{
_repository = repository;
}
public void OnError(FirebaseRemoteConfigException p0)
{
throw new NotImplementedException();
}
public void OnUpdate(ConfigUpdate p0)
{
var instance = FirebaseRemoteConfig.Instance;
instance.FetchAndActivate();
var isKillSwitchActivated = FirebaseRemoteConfig.Instance.GetBoolean("kill_switch");
var minimumVersion = new Version(FirebaseRemoteConfig.Instance.GetString("minimum_version"));
_repository._killSwitchSubject.OnNext(isKillSwitchActivated);
_repository._versionSubject.OnNext(minimumVersion);
}
}
}
#endif