/
ActivityResultCallbackRegistry.cs
46 lines (37 loc) · 1.19 KB
/
ActivityResultCallbackRegistry.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
using System;
using System.Collections.Concurrent;
using Android.App;
using Android.Content;
namespace Xamarin.Forms.Platform.Android
{
public static class ActivityResultCallbackRegistry
{
static readonly ConcurrentDictionary<int, Action<Result, Intent>> s_activityResultCallbacks =
new ConcurrentDictionary<int, Action<Result, Intent>>();
static int s_nextActivityResultCallbackKey;
public static void InvokeCallback(int requestCode, Result resultCode, Intent data)
{
Action<Result, Intent> callback;
if (s_activityResultCallbacks.TryGetValue(requestCode, out callback))
{
callback(resultCode, data);
}
}
internal static int RegisterActivityResultCallback(Action<Result, Intent> callback)
{
int requestCode = s_nextActivityResultCallbackKey;
while (!s_activityResultCallbacks.TryAdd(requestCode, callback))
{
s_nextActivityResultCallbackKey += 1;
requestCode = s_nextActivityResultCallbackKey;
}
s_nextActivityResultCallbackKey += 1;
return requestCode;
}
internal static void UnregisterActivityResultCallback(int requestCode)
{
Action<Result, Intent> callback;
s_activityResultCallbacks.TryRemove(requestCode, out callback);
}
}
}