Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,6 @@ public override async Task<PermissionStatus> RequestAsync()
if (status == PermissionStatus.Granted || status == PermissionStatus.Disabled)
return status;

EnsureMainThread();

#pragma warning disable CA1416 // https://github.com/xamarin/xamarin-macios/issues/14619
#pragma warning disable CA1422 // Validate platform compatibility
return await RequestLocationAsync(true, lm => lm.RequestWhenInUseAuthorization());
Expand Down
2 changes: 0 additions & 2 deletions src/Essentials/src/Permissions/Permissions.ios.watchos.cs
Original file line number Diff line number Diff line change
Expand Up @@ -264,8 +264,6 @@ public override async Task<PermissionStatus> RequestAsync()
if (status == PermissionStatus.Granted)
return status;

EnsureMainThread();

#pragma warning disable CA1416 // https://github.com/xamarin/xamarin-macios/issues/14619
return await LocationWhenInUse.RequestLocationAsync(false, lm => lm.RequestAlwaysAuthorization());
#pragma warning restore CA1416
Expand Down
48 changes: 44 additions & 4 deletions src/Essentials/test/DeviceTests/Tests/Permissions_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,52 @@ internal async Task Request(string permission, PermissionStatus expectedStatus)

[Fact]
[Trait(Traits.UI, Traits.FeatureSupport.Supported)]
public async Task Request_NotMainThread()
public async Task Request_NotMainThread_LocationWhenInUse()
{
await Task.Run(async () =>
// Location permissions can now be requested from any thread
if (DeviceInfo.Platform == DevicePlatform.iOS || DeviceInfo.Platform == DevicePlatform.MacCatalyst)
{
await Assert.ThrowsAsync<PermissionException>(async () => await Permissions.RequestAsync<Permissions.LocationWhenInUse>()).ConfigureAwait(false);
}).ConfigureAwait(false);
await Task.Run(async () =>
{
// Should not throw an exception
var status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>().ConfigureAwait(false);
// Status could be various things depending on system state, but we should get a result
Assert.NotEqual(PermissionStatus.Unknown, status);
}).ConfigureAwait(false);
}
else
{
// On Android and other platforms, keep original behavior for now
await Task.Run(async () =>
{
await Assert.ThrowsAsync<PermissionException>(async () => await Permissions.RequestAsync<Permissions.LocationWhenInUse>()).ConfigureAwait(false);
}).ConfigureAwait(false);
}
}

[Fact]
[Trait(Traits.UI, Traits.FeatureSupport.Supported)]
public async Task Request_NotMainThread_LocationAlways()
{
// Location permissions can now be requested from any thread
if (DeviceInfo.Platform == DevicePlatform.iOS || DeviceInfo.Platform == DevicePlatform.MacCatalyst)
{
await Task.Run(async () =>
{
// Should not throw an exception
var status = await Permissions.RequestAsync<Permissions.LocationAlways>().ConfigureAwait(false);
// Status could be various things depending on system state, but we should get a result
Assert.NotEqual(PermissionStatus.Unknown, status);
}).ConfigureAwait(false);
}
else
{
// On Android and other platforms, keep original behavior for now
await Task.Run(async () =>
{
await Assert.ThrowsAsync<PermissionException>(async () => await Permissions.RequestAsync<Permissions.LocationAlways>()).ConfigureAwait(false);
}).ConfigureAwait(false);
}
}

[Fact
Expand Down