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