in src/Covi.iOS/Features/Bluetooth/PlatformInitializer.cs [252:298]
private Task<PermissionStatus> RequestBluetoothAsync()
{
var manager = new CBPeripheralManager();
var tcs = new TaskCompletionSource<PermissionStatus>(manager);
manager.StateUpdated += StatusCollback;
return tcs.Task.ReturnInTimeoutAsync(PermissionStatus.Unknown, PermissionTimeout);
void StatusCollback(object sender, EventArgs e)
{
var state = manager.State;
manager.StateUpdated -= StatusCollback;
var result = PermissionStatus.Unknown;
switch (state)
{
case CBPeripheralManagerState.PoweredOff:
case CBPeripheralManagerState.Unsupported:
result = PermissionStatus.Disabled;
break;
case CBPeripheralManagerState.PoweredOn:
result = PermissionStatus.Granted;
break;
case CBPeripheralManagerState.Unauthorized:
result = PermissionStatus.Denied;
break;
case CBPeripheralManagerState.Resetting:
default:
result = PermissionStatus.Unknown;
break;
}
switch (CBPeripheralManager.AuthorizationStatus)
{
case CBPeripheralManagerAuthorizationStatus.Denied:
case CBPeripheralManagerAuthorizationStatus.NotDetermined:
result = PermissionStatus.Denied;
break;
case CBPeripheralManagerAuthorizationStatus.Restricted:
result = PermissionStatus.Restricted;
break;
}
manager.Dispose();
manager = null;
tcs.SetResult(result);
}
}