-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
TestActivity.cs
68 lines (60 loc) · 2.29 KB
/
TestActivity.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
using System.Threading.Tasks;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android.UnitTests;
using System.Threading;
#if __ANDROID_29__
using AndroidX.AppCompat.App;
using AToolbar = AndroidX.AppCompat.Widget.Toolbar;
#else
using Android.Support.V7.App;
using AToolbar = Android.Support.V7.Widget.Toolbar;
#endif
[assembly: ExportRenderer(typeof(TestShell), typeof(TestShellRenderer))]
namespace Xamarin.Forms.Platform.Android.UnitTests
{
[Activity(Label = "TestActivity", Icon = "@drawable/icon", Theme = "@style/MyTheme",
MainLauncher = false, HardwareAccelerated = true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.UiMode)]
public class TestActivity : AppCompatActivity
{
public static SemaphoreSlim semaphore = new SemaphoreSlim(1, 1);
public static TaskCompletionSource<TestActivity> Surface { get; set; }
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
var bar = LayoutInflater.Inflate(FormsAppCompatActivity.ToolbarResource, null).JavaCast<AToolbar>();
SetSupportActionBar(bar);
}
protected override void OnResume()
{
base.OnResume();
Surface.SetResult(this);
}
public static async Task<TestActivity> GetTestSurface(Context context, VisualElement visualElement)
{
await semaphore.WaitAsync();
Surface = new TaskCompletionSource<TestActivity>();
Intent intent = new Intent(context, typeof(TestActivity));
context.StartActivity(intent);
var result = await Surface.Task;
if(visualElement != null)
{
var renderer = Platform.CreateRendererWithContext(visualElement, result);
Platform.SetRenderer(visualElement, renderer);
result.SetContentView(renderer.View);
}
return result;
}
protected override void OnDestroy()
{
base.OnDestroy();
semaphore.Release();
}
}
}