using Plugin.BLE.Abstractions.Contracts;
using System;
using System.Threading.Tasks;
namespace TINK.Services.BluetoothLock
{
public static class StateChecker
{
///
/// Get current bluetooth state
///
/// See https://github.com/xabre/xamarin-bluetooth-le/issues/112#issuecomment-380994887.
/// Crossplatform bluetooth implementation object
/// BluetoothState
public static Task GetBluetoothState(this IBluetoothLE ble)
{
var tcs = new TaskCompletionSource();
if (ble.State != BluetoothState.Unknown)
{
// If we can detect state out of box just returning in
tcs.SetResult(ble.State);
}
else
{
// Otherwise let's setup dynamic event handler and wait for first state update
EventHandler handler = null;
handler = (o, e) =>
{
ble.StateChanged -= handler;
// and return it as our state
// we can have an 'Unknown' check here, but in normal situation it should never occur
tcs.SetResult(e.NewState);
};
ble.StateChanged += handler;
}
return tcs.Task;
}
}
}